diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index c95230249c..672bc8254d 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -22,11 +22,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: '17' - distribution: 'adopt' + java-version: 21 + distribution: temurin - name: Build without tests run: ./gradlew build -x test -x spotlessCheck @@ -52,11 +52,14 @@ jobs: with: submodules: recursive - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: '17' - distribution: 'adopt' + java-version: 21 + distribution: temurin + + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 # The asset URL for the latest release can be found with: # curl -L -H "Accept: application/vnd.github+json" \ @@ -65,21 +68,23 @@ jobs: # https://api.github.com/repos/ConsenSys/corset/releases/latest # | jq '.assets[] | select(.name|endswith("x86_64-unknown-linux-musl.tar.gz")) | .url' - name: Install Corset - run: | - curl -L \ - -H "Accept: application/octet-stream" \ - -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - -o corset.tar.gz \ - https://api.github.com/repos/Consensys/corset/releases/assets/151396061 - tar xzf corset.tar.gz - mv corset $HOME - echo $HOME >> $GITHUB_PATH + run: RUSTFLAGS=-Awarnings cargo install --git ssh://git@github.com/ConsenSys/corset --tag v9.7.11 --locked --force +# run: | +# curl -L \ +# -H "Accept: application/octet-stream" \ +# -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ +# -H "X-GitHub-Api-Version: 2022-11-28" \ +# -o corset.tar.gz \ +# https://api.github.com/repos/Consensys/corset/releases/assets/151396061 +# tar xzf corset.tar.gz +# mv corset $HOME +# echo $HOME >> $GITHUB_PATH - name: Run unit tests run: ./gradlew :arithmetization:test env: JAVA_OPTS: -Dorg.gradle.daemon=false + CORSET_FLAGS: fields,expand,expand,expand - name: Upload test report if: always() @@ -96,7 +101,7 @@ jobs: - name: Set up Java uses: actions/setup-java@v3 with: - distribution: adopt - java-version: 17 + distribution: temurin + java-version: 21 - name: spotless run: ./gradlew --no-daemon --parallel clean spotlessCheck diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ed2d8c8952..3a7cd14aac 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,11 +11,11 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: '17' - distribution: 'adopt' + java-version: 21 + distribution: temurin cache: 'gradle' - name: Grant execute permission for gradlew @@ -65,11 +65,11 @@ jobs: - name: Checkout uses: actions/checkout@v3 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: 17 - distribution: 'adopt' + java-version: 21 + distribution: temurin - name: Publish Java artifacts run: ./gradlew publish diff --git a/CHANGELOG.md b/CHANGELOG.md index 12aba27be3..cfdae3f0f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,23 @@ # Changelog +## 0.2.0-rc1 +* feat: add PRECOMPILE_ECPAIRING_G2_MEMBERSHIP_CALLS in spillings.toml and did some renaming ([#819](https://github.com/Consensys/linea-arithmetization/pull/819)) +* feat: optimise trace generation (except hub) ([#838](https://github.com/Consensys/linea-arithmetization/pull/838)) + +## 0.1.5-rc6 +* Migrating of `TRACES_DIR` env var to +`plugin-linea-conflated-trace-generation-traces-output-path` CLI option that can be included in the toml config files. +The path specified in `plugin-linea-conflated-trace-generation-traces-output-path` will be created automatically if it does not exist. +This time this has nothing to do with the `ContinuousTracingPlugin` [#830](https://github.com/Consensys/linea-arithmetization/pull/830). + +## 0.1.5-rc5 +* Migrating of `TRACES_DIR` env var to `plugin-linea-continuous-tracing-traces-dir` CLI option that can be included in the +toml config files. The path specified in `plugin-linea-continuous-tracing-traces-dir` will be created automatically + if it does not exist [#825](https://github.com/Consensys/linea-arithmetization/pull/825). + ## 0.1.4-test21 -Test pre-release 21 from [temp/issue-248/count-stack-only](https://github. -com/Consensys/linea-arithmetization/tree/temp/issue-248/count-stack-only) -* fix: capture SSTORE-touched storage slots for correct gas computations [#606](https://github. - com/Consensys/linea-arithmetization/pull/606) +Test pre-release 21 from [temp/issue-248/count-stack-only](https://github.com/Consensys/linea-arithmetization/tree/temp/issue-248/count-stack-only) +* fix: capture SSTORE-touched storage slots for correct gas computations [#606](https://github.com/Consensys/linea-arithmetization/pull/606) * build: make the build script portable, explicit dependency on Go & GCC, test libcompress build [#621](https://github.com/Consensys/linea-arithmetization/pull/621) * Update after the refactor of transaction selection service [#626](https://github.com/Consensys/linea-arithmetization/pull/626) * Use the right classloader to load the native library [#628](https://github.com/Consensys/linea-arithmetization/pull/628) diff --git a/README.md b/README.md index 7311ddcfdd..a15b6ac717 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,10 @@ an [existing implementation in Go](https://github.com/Consensys/zk-evm/). ## Development Setup -### Install Java 17 +### Install Java 21 ``` -brew install openjdk@17 +brew install openjdk@21 ``` ### Install the Go toolchain @@ -155,6 +155,19 @@ ______________________________________________________________________ corset check -T -v zkevm-constraints/zkevm.bin ``` +## Disable Corset Expansion + +Corset expansion means that generated traces are checked as accurately +as possible. However, this slows testing down to some extent. It can +be easily disabled in IntelliJ: + + - Go to `Run | Edit Configurations` + + ![idea_disable_corset_expansion.png](images/idea_disable_corset_expansion.png) + + and add `CORSET_FLAGS=` under `Environment Variables`. This turns + off all expansion modes, including field arithmetic. + ## Plugins Plugins are documented [here](PLUGINS.md). diff --git a/arithmetization/build.gradle b/arithmetization/build.gradle index f17fef537e..abbab084db 100644 --- a/arithmetization/build.gradle +++ b/arithmetization/build.gradle @@ -58,7 +58,6 @@ dependencies { implementation 'io.tmio:tuweni-bytes' implementation 'io.tmio:tuweni-units' implementation 'io.tmio:tuweni-toml' - implementation 'org.bouncycastle:bcprov-jdk18on' implementation 'org.hibernate.validator:hibernate-validator' diff --git a/arithmetization/src/main/java/net/consensys/linea/blockcapture/BlockCapturer.java b/arithmetization/src/main/java/net/consensys/linea/blockcapture/BlockCapturer.java index 63b0f4d06a..8f08318dc7 100644 --- a/arithmetization/src/main/java/net/consensys/linea/blockcapture/BlockCapturer.java +++ b/arithmetization/src/main/java/net/consensys/linea/blockcapture/BlockCapturer.java @@ -16,11 +16,13 @@ package net.consensys.linea.blockcapture; import java.util.List; +import java.util.Set; import com.google.gson.Gson; import net.consensys.linea.blockcapture.reapers.Reaper; import net.consensys.linea.zktracer.ConflationAwareOperationTracer; import net.consensys.linea.zktracer.opcode.OpCode; +import net.consensys.linea.zktracer.types.AddressUtils; import org.apache.tuweni.bytes.Bytes; import org.apache.tuweni.units.bigints.UInt256; import org.hyperledger.besu.datatypes.Address; @@ -39,6 +41,7 @@ public class BlockCapturer implements ConflationAwareOperationTracer { * The {@link Reaper} will collect all the data that will need to be mimicked to replay the block. */ private final Reaper reaper = new Reaper(); + /** * This keeps a pointer to the initial state (i.e. ) to be used at the end of tracing to store the * minimal required information to replay the conflation. @@ -78,6 +81,7 @@ public void traceEndTransaction( Bytes output, List logs, long gasUsed, + Set
selfDestructs, long timeNs) { this.reaper.exitTransaction(status); } @@ -128,6 +132,21 @@ public void tracePreExecution(MessageFrame frame) { this.reaper.touchAddress(target); } } + + case BALANCE -> { + if (frame.stackSize() > 0) { + final Address target = Words.toAddress(frame.getStackItem(0)); + this.reaper.touchAddress(target); + } + } + + // Failure condition if created address already exists + case CREATE, CREATE2 -> { + if (frame.stackSize() > 0) { + final Address target = AddressUtils.getDeploymentAddress(frame); + this.reaper.touchAddress(target); + } + } } } diff --git a/arithmetization/src/main/java/net/consensys/linea/blockcapture/reapers/Reaper.java b/arithmetization/src/main/java/net/consensys/linea/blockcapture/reapers/Reaper.java index 14fccd08ee..5ed3750a12 100644 --- a/arithmetization/src/main/java/net/consensys/linea/blockcapture/reapers/Reaper.java +++ b/arithmetization/src/main/java/net/consensys/linea/blockcapture/reapers/Reaper.java @@ -41,8 +41,10 @@ public class Reaper { /** Collect the reads from the state */ private final StorageReaper storage = new StorageReaper(); + /** Collect the addresses read from the state */ private final AddressReaper addresses = new AddressReaper(); + /** Collect the blocks within a conflation */ private final List blocks = new ArrayList<>(); diff --git a/arithmetization/src/main/java/net/consensys/linea/config/LineaProfitabilityCliOptions.java b/arithmetization/src/main/java/net/consensys/linea/config/LineaProfitabilityCliOptions.java deleted file mode 100644 index 14683bb59a..0000000000 --- a/arithmetization/src/main/java/net/consensys/linea/config/LineaProfitabilityCliOptions.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright Consensys Software Inc. - * - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package net.consensys.linea.config; - -import java.math.BigDecimal; - -import com.google.common.base.MoreObjects; -import jakarta.validation.constraints.Positive; -import net.consensys.linea.config.converters.WeiConverter; -import org.hyperledger.besu.datatypes.Wei; -import picocli.CommandLine; - -/** The Linea profitability calculator CLI options. */ -public class LineaProfitabilityCliOptions { - public static final String VERIFICATION_GAS_COST = "--plugin-linea-verification-gas-cost"; - public static final int DEFAULT_VERIFICATION_GAS_COST = 1_200_000; - - public static final String VERIFICATION_CAPACITY = "--plugin-linea-verification-capacity"; - public static final int DEFAULT_VERIFICATION_CAPACITY = 90_000; - - public static final String GAS_PRICE_RATIO = "--plugin-linea-gas-price-ratio"; - public static final int DEFAULT_GAS_PRICE_RATIO = 15; - - public static final String GAS_PRICE_ADJUSTMENT = "--plugin-linea-gas-price-adjustment"; - public static final Wei DEFAULT_GAS_PRICE_ADJUSTMENT = Wei.ZERO; - - public static final String MIN_MARGIN = "--plugin-linea-min-margin"; - public static final BigDecimal DEFAULT_MIN_MARGIN = BigDecimal.ONE; - - public static final String ESTIMATE_GAS_MIN_MARGIN = "--plugin-linea-estimate-gas-min-margin"; - public static final BigDecimal DEFAULT_ESTIMATE_GAS_MIN_MARGIN = BigDecimal.ONE; - - public static final String TX_POOL_MIN_MARGIN = "--plugin-linea-tx-pool-min-margin"; - public static final BigDecimal DEFAULT_TX_POOL_MIN_MARGIN = BigDecimal.valueOf(0.5); - - public static final String TX_POOL_ENABLE_CHECK_API = - "--plugin-linea-tx-pool-profitability-check-api-enabled"; - public static final boolean DEFAULT_TX_POOL_ENABLE_CHECK_API = true; - - public static final String TX_POOL_ENABLE_CHECK_P2P = - "--plugin-linea-tx-pool-profitability-check-p2p-enabled"; - public static final boolean DEFAULT_TX_POOL_ENABLE_CHECK_P2P = false; - - @Positive - @CommandLine.Option( - names = {VERIFICATION_GAS_COST}, - hidden = true, - paramLabel = "", - description = "L1 verification gas cost (default: ${DEFAULT-VALUE})") - private int verificationGasCost = DEFAULT_VERIFICATION_GAS_COST; - - @Positive - @CommandLine.Option( - names = {VERIFICATION_CAPACITY}, - hidden = true, - paramLabel = "", - description = "L1 verification capacity (default: ${DEFAULT-VALUE})") - private int verificationCapacity = DEFAULT_VERIFICATION_CAPACITY; - - @Positive - @CommandLine.Option( - names = {GAS_PRICE_RATIO}, - hidden = true, - paramLabel = "", - description = "L1/L2 gas price ratio (default: ${DEFAULT-VALUE})") - private int gasPriceRatio = DEFAULT_GAS_PRICE_RATIO; - - @CommandLine.Option( - names = {GAS_PRICE_ADJUSTMENT}, - hidden = true, - converter = WeiConverter.class, - paramLabel = "", - description = - "Amount to add to the calculated profitable gas price (default: ${DEFAULT-VALUE})") - private Wei gasPriceAdjustment = DEFAULT_GAS_PRICE_ADJUSTMENT; - - @Positive - @CommandLine.Option( - names = {MIN_MARGIN}, - hidden = true, - paramLabel = "", - description = "Minimum margin of a transaction to be selected (default: ${DEFAULT-VALUE})") - private BigDecimal minMargin = DEFAULT_MIN_MARGIN; - - @Positive - @CommandLine.Option( - names = {ESTIMATE_GAS_MIN_MARGIN}, - hidden = true, - paramLabel = "", - description = - "Recommend a specific gas price when using linea_estimateGas (default: ${DEFAULT-VALUE})") - private BigDecimal estimageGasMinMargin = DEFAULT_ESTIMATE_GAS_MIN_MARGIN; - - @Positive - @CommandLine.Option( - names = {TX_POOL_MIN_MARGIN}, - hidden = true, - paramLabel = "", - description = - "The min margin an incoming tx must have to be accepted in the txpool (default: ${DEFAULT-VALUE})") - private BigDecimal txPoolMinMargin = DEFAULT_TX_POOL_MIN_MARGIN; - - @CommandLine.Option( - names = {TX_POOL_ENABLE_CHECK_API}, - arity = "0..1", - hidden = true, - paramLabel = "", - description = - "Enable the profitability check for txs received via API? (default: ${DEFAULT-VALUE})") - private boolean txPoolCheckApiEnabled = DEFAULT_TX_POOL_ENABLE_CHECK_API; - - @CommandLine.Option( - names = {TX_POOL_ENABLE_CHECK_P2P}, - arity = "0..1", - hidden = true, - paramLabel = "", - description = - "Enable the profitability check for txs received via p2p? (default: ${DEFAULT-VALUE})") - private boolean txPoolCheckP2pEnabled = DEFAULT_TX_POOL_ENABLE_CHECK_P2P; - - private LineaProfitabilityCliOptions() {} - - /** - * Create Linea cli options. - * - * @return the Linea cli options - */ - public static LineaProfitabilityCliOptions create() { - return new LineaProfitabilityCliOptions(); - } - - /** - * Linea cli options from config. - * - * @param config the config - * @return the Linea cli options - */ - public static LineaProfitabilityCliOptions fromConfig( - final LineaProfitabilityConfiguration config) { - final LineaProfitabilityCliOptions options = create(); - options.verificationGasCost = config.verificationGasCost(); - options.verificationCapacity = config.verificationCapacity(); - options.gasPriceRatio = config.gasPriceRatio(); - options.gasPriceAdjustment = config.gasPriceAdjustment(); - options.minMargin = BigDecimal.valueOf(config.minMargin()); - options.estimageGasMinMargin = BigDecimal.valueOf(config.estimateGasMinMargin()); - options.txPoolMinMargin = BigDecimal.valueOf(config.txPoolMinMargin()); - options.txPoolCheckApiEnabled = config.txPoolCheckApiEnabled(); - options.txPoolCheckP2pEnabled = config.txPoolCheckP2pEnabled(); - return options; - } - - /** - * To domain object Linea factory configuration. - * - * @return the Linea factory configuration - */ - public LineaProfitabilityConfiguration toDomainObject() { - return LineaProfitabilityConfiguration.builder() - .verificationGasCost(verificationGasCost) - .verificationCapacity(verificationCapacity) - .gasPriceRatio(gasPriceRatio) - .gasPriceAdjustment(gasPriceAdjustment) - .minMargin(minMargin.doubleValue()) - .estimateGasMinMargin(estimageGasMinMargin.doubleValue()) - .txPoolMinMargin(txPoolMinMargin.doubleValue()) - .txPoolCheckApiEnabled(txPoolCheckApiEnabled) - .txPoolCheckP2pEnabled(txPoolCheckP2pEnabled) - .build(); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add(VERIFICATION_GAS_COST, verificationGasCost) - .add(VERIFICATION_CAPACITY, verificationCapacity) - .add(GAS_PRICE_RATIO, gasPriceRatio) - .add(GAS_PRICE_ADJUSTMENT, gasPriceAdjustment) - .add(MIN_MARGIN, minMargin) - .add(ESTIMATE_GAS_MIN_MARGIN, estimageGasMinMargin) - .add(TX_POOL_MIN_MARGIN, txPoolMinMargin) - .add(TX_POOL_ENABLE_CHECK_API, txPoolCheckApiEnabled) - .add(TX_POOL_ENABLE_CHECK_P2P, txPoolCheckP2pEnabled) - .toString(); - } -} diff --git a/arithmetization/src/main/java/net/consensys/linea/config/LineaProfitabilityConfiguration.java b/arithmetization/src/main/java/net/consensys/linea/config/LineaProfitabilityConfiguration.java deleted file mode 100644 index 514371ebd3..0000000000 --- a/arithmetization/src/main/java/net/consensys/linea/config/LineaProfitabilityConfiguration.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright Consensys Software Inc. - * - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package net.consensys.linea.config; - -import lombok.Builder; -import org.hyperledger.besu.datatypes.Wei; - -/** The Linea profitability calculator configuration. */ -@Builder(toBuilder = true) -public record LineaProfitabilityConfiguration( - int verificationGasCost, - int verificationCapacity, - int gasPriceRatio, - Wei gasPriceAdjustment, - double minMargin, - double estimateGasMinMargin, - double txPoolMinMargin, - boolean txPoolCheckApiEnabled, - boolean txPoolCheckP2pEnabled) {} diff --git a/arithmetization/src/main/java/net/consensys/linea/config/LineaRpcCliOptions.java b/arithmetization/src/main/java/net/consensys/linea/config/LineaRpcCliOptions.java deleted file mode 100644 index 05b1e543fe..0000000000 --- a/arithmetization/src/main/java/net/consensys/linea/config/LineaRpcCliOptions.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright Consensys Software Inc. - * - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package net.consensys.linea.config; - -import com.google.common.base.MoreObjects; -import picocli.CommandLine; - -/** The Linea RPC CLI options. */ -public class LineaRpcCliOptions { - private static final String ESTIMATE_GAS_COMPATIBILITY_MODE_ENABLED = - "--plugin-linea-estimate-gas-compatibility-mode-enabled"; - - @CommandLine.Option( - names = {ESTIMATE_GAS_COMPATIBILITY_MODE_ENABLED}, - paramLabel = "", - description = - "Set to true to return the min mineable gas price, instead of the profitable price (default: ${DEFAULT-VALUE})") - private boolean estimateGasCompatibilityModeEnabled = false; - - private LineaRpcCliOptions() {} - - /** - * Create Linea RPC CLI options. - * - * @return the Linea RPC CLI options - */ - public static LineaRpcCliOptions create() { - return new LineaRpcCliOptions(); - } - - /** - * Linea RPC CLI options from config. - * - * @param config the config - * @return the Linea RPC CLI options - */ - public static LineaRpcCliOptions fromConfig(final LineaRpcConfiguration config) { - final LineaRpcCliOptions options = create(); - options.estimateGasCompatibilityModeEnabled = config.estimateGasCompatibilityModeEnabled(); - return options; - } - - /** - * To domain object Linea factory configuration. - * - * @return the Linea factory configuration - */ - public LineaRpcConfiguration toDomainObject() { - return LineaRpcConfiguration.builder() - .estimateGasCompatibilityModeEnabled(estimateGasCompatibilityModeEnabled) - .build(); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add(ESTIMATE_GAS_COMPATIBILITY_MODE_ENABLED, estimateGasCompatibilityModeEnabled) - .toString(); - } -} diff --git a/arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionSelectorCliOptions.java b/arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionSelectorCliOptions.java deleted file mode 100644 index 9f8f0ba3bd..0000000000 --- a/arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionSelectorCliOptions.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright Consensys Software Inc. - * - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package net.consensys.linea.config; - -import com.google.common.base.MoreObjects; -import jakarta.validation.constraints.Positive; -import picocli.CommandLine; - -/** The Linea Transaction Selector CLI options. */ -public class LineaTransactionSelectorCliOptions { - public static final String MAX_BLOCK_CALLDATA_SIZE = "--plugin-linea-max-block-calldata-size"; - public static final int DEFAULT_MAX_BLOCK_CALLDATA_SIZE = 70_000; - - public static final String MODULE_LIMIT_FILE_PATH = "--plugin-linea-module-limit-file-path"; - public static final String DEFAULT_MODULE_LIMIT_FILE_PATH = "moduleLimitFile.toml"; - - public static final String OVER_LINE_COUNT_LIMIT_CACHE_SIZE = - "--plugin-linea-over-line-count-limit-cache-size"; - public static final int DEFAULT_OVER_LINE_COUNT_LIMIT_CACHE_SIZE = 10_000; - - public static final String MAX_GAS_PER_BLOCK = "--plugin-linea-max-block-gas"; - public static final long DEFAULT_MAX_GAS_PER_BLOCK = 30_000_000L; - - public static final String UNPROFITABLE_CACHE_SIZE = "--plugin-linea-unprofitable-cache-size"; - public static final int DEFAULT_UNPROFITABLE_CACHE_SIZE = 100_000; - - public static final String UNPROFITABLE_RETRY_LIMIT = "--plugin-linea-unprofitable-retry-limit"; - public static final int DEFAULT_UNPROFITABLE_RETRY_LIMIT = 10; - - @Positive - @CommandLine.Option( - names = {MAX_BLOCK_CALLDATA_SIZE}, - hidden = true, - paramLabel = "", - description = "Maximum size for the calldata of a block (default: ${DEFAULT-VALUE})") - private int maxBlockCallDataSize = DEFAULT_MAX_BLOCK_CALLDATA_SIZE; - - @CommandLine.Option( - names = {MODULE_LIMIT_FILE_PATH}, - hidden = true, - paramLabel = "", - description = - "Path to the toml file containing the module limits (default: ${DEFAULT-VALUE})") - private String moduleLimitFilePath = DEFAULT_MODULE_LIMIT_FILE_PATH; - - @Positive - @CommandLine.Option( - names = {OVER_LINE_COUNT_LIMIT_CACHE_SIZE}, - hidden = true, - paramLabel = "", - description = - "Max number of transactions that go over the line count limit we keep track of (default: ${DEFAULT-VALUE})") - private int overLineCountLimitCacheSize = DEFAULT_OVER_LINE_COUNT_LIMIT_CACHE_SIZE; - - @Positive - @CommandLine.Option( - names = {MAX_GAS_PER_BLOCK}, - hidden = true, - paramLabel = "", - description = "Sets max gas per block (default: ${DEFAULT-VALUE})") - private Long maxGasPerBlock = DEFAULT_MAX_GAS_PER_BLOCK; - - @Positive - @CommandLine.Option( - names = {UNPROFITABLE_CACHE_SIZE}, - hidden = true, - paramLabel = "", - description = - "Max number of unprofitable transactions we keep track of (default: ${DEFAULT-VALUE})") - private int unprofitableCacheSize = DEFAULT_UNPROFITABLE_CACHE_SIZE; - - @Positive - @CommandLine.Option( - names = {UNPROFITABLE_RETRY_LIMIT}, - hidden = true, - paramLabel = "", - description = - "Max number of unprofitable transactions we retry on each block creation (default: ${DEFAULT-VALUE})") - private int unprofitableRetryLimit = DEFAULT_UNPROFITABLE_RETRY_LIMIT; - - private LineaTransactionSelectorCliOptions() {} - - /** - * Create Linea cli options. - * - * @return the Linea cli options - */ - public static LineaTransactionSelectorCliOptions create() { - return new LineaTransactionSelectorCliOptions(); - } - - /** - * Linea cli options from config. - * - * @param config the config - * @return the Linea cli options - */ - public static LineaTransactionSelectorCliOptions fromConfig( - final LineaTransactionSelectorConfiguration config) { - final LineaTransactionSelectorCliOptions options = create(); - options.maxBlockCallDataSize = config.maxBlockCallDataSize(); - options.moduleLimitFilePath = config.moduleLimitsFilePath(); - options.overLineCountLimitCacheSize = config.overLinesLimitCacheSize(); - options.maxGasPerBlock = config.maxGasPerBlock(); - options.unprofitableCacheSize = config.unprofitableCacheSize(); - options.unprofitableRetryLimit = config.unprofitableRetryLimit(); - return options; - } - - /** - * To domain object Linea factory configuration. - * - * @return the Linea factory configuration - */ - public LineaTransactionSelectorConfiguration toDomainObject() { - return LineaTransactionSelectorConfiguration.builder() - .maxBlockCallDataSize(maxBlockCallDataSize) - .moduleLimitsFilePath(moduleLimitFilePath) - .overLinesLimitCacheSize(overLineCountLimitCacheSize) - .maxGasPerBlock(maxGasPerBlock) - .unprofitableCacheSize(unprofitableCacheSize) - .unprofitableRetryLimit(unprofitableRetryLimit) - .build(); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add(MAX_BLOCK_CALLDATA_SIZE, maxBlockCallDataSize) - .add(MODULE_LIMIT_FILE_PATH, moduleLimitFilePath) - .add(OVER_LINE_COUNT_LIMIT_CACHE_SIZE, overLineCountLimitCacheSize) - .add(MAX_GAS_PER_BLOCK, maxGasPerBlock) - .add(UNPROFITABLE_CACHE_SIZE, unprofitableCacheSize) - .add(UNPROFITABLE_RETRY_LIMIT, unprofitableRetryLimit) - .toString(); - } -} diff --git a/arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionValidatorCliOptions.java b/arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionValidatorCliOptions.java deleted file mode 100644 index a97b2414ad..0000000000 --- a/arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionValidatorCliOptions.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright Consensys Software Inc. - * - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package net.consensys.linea.config; - -import com.google.common.base.MoreObjects; -import picocli.CommandLine; - -/** The Linea CLI options. */ -public class LineaTransactionValidatorCliOptions { - - public static final String DENY_LIST_PATH = "--plugin-linea-deny-list-path"; - public static final String DEFAULT_DENY_LIST_PATH = "lineaDenyList.txt"; - - public static final String MAX_TX_GAS_LIMIT_OPTION = "--plugin-linea-max-tx-gas-limit"; - public static final int DEFAULT_MAX_TRANSACTION_GAS_LIMIT = 30_000_000; - - public static final String MAX_TX_CALLDATA_SIZE = "--plugin-linea-max-tx-calldata-size"; - public static final int DEFAULT_MAX_TX_CALLDATA_SIZE = 60_000; - - @CommandLine.Option( - names = {DENY_LIST_PATH}, - hidden = true, - paramLabel = "", - description = - "Path to the file containing the deny list (default: " + DEFAULT_DENY_LIST_PATH + ")") - private String denyListPath = DEFAULT_DENY_LIST_PATH; - - @CommandLine.Option( - names = {MAX_TX_GAS_LIMIT_OPTION}, - hidden = true, - paramLabel = "", - description = - "Maximum gas limit for a transaction (default: " - + DEFAULT_MAX_TRANSACTION_GAS_LIMIT - + ")") - private int maxTxGasLimit = DEFAULT_MAX_TRANSACTION_GAS_LIMIT; - - @CommandLine.Option( - names = {MAX_TX_CALLDATA_SIZE}, - hidden = true, - paramLabel = "", - description = - "Maximum size for the calldata of a Transaction (default: " - + DEFAULT_MAX_TX_CALLDATA_SIZE - + ")") - private int maxTxCallDataSize = DEFAULT_MAX_TX_CALLDATA_SIZE; - - private LineaTransactionValidatorCliOptions() {} - - /** - * Create Linea cli options. - * - * @return the Linea cli options - */ - public static LineaTransactionValidatorCliOptions create() { - return new LineaTransactionValidatorCliOptions(); - } - - /** - * Cli options from config. - * - * @param config the config - * @return the cli options - */ - public static LineaTransactionValidatorCliOptions fromConfig( - final LineaTransactionValidatorConfiguration config) { - final LineaTransactionValidatorCliOptions options = create(); - options.denyListPath = config.denyListPath(); - options.maxTxGasLimit = config.maxTxGasLimit(); - options.maxTxCallDataSize = config.maxTxCalldataSize(); - - return options; - } - - /** - * To domain object Linea factory configuration. - * - * @return the Linea factory configuration - */ - public LineaTransactionValidatorConfiguration toDomainObject() { - return new LineaTransactionValidatorConfiguration( - denyListPath, maxTxGasLimit, maxTxCallDataSize); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add(DENY_LIST_PATH, denyListPath) - .add(MAX_TX_GAS_LIMIT_OPTION, maxTxGasLimit) - .add(MAX_TX_CALLDATA_SIZE, maxTxCallDataSize) - .toString(); - } -} diff --git a/arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionValidatorConfiguration.java b/arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionValidatorConfiguration.java deleted file mode 100644 index 61f1ac3c84..0000000000 --- a/arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionValidatorConfiguration.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright Consensys Software Inc. - * - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package net.consensys.linea.config; - -import lombok.Builder; - -/** - * The Linea transaction pool validation configuration. - * - * @param denyListPath the path to the file containing the addresses that are denied. - * @param maxTxGasLimit the maximum gas limit allowed for transactions - * @param maxTxCalldataSize the maximum size of calldata allowed for transactions - */ -@Builder(toBuilder = true) -public record LineaTransactionValidatorConfiguration( - String denyListPath, int maxTxGasLimit, int maxTxCalldataSize) {} diff --git a/arithmetization/src/main/java/net/consensys/linea/corset/CorsetValidator.java b/arithmetization/src/main/java/net/consensys/linea/corset/CorsetValidator.java index 98ace1d3ea..2d56bb824e 100644 --- a/arithmetization/src/main/java/net/consensys/linea/corset/CorsetValidator.java +++ b/arithmetization/src/main/java/net/consensys/linea/corset/CorsetValidator.java @@ -20,46 +20,86 @@ import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; import java.util.concurrent.TimeUnit; +import lombok.Getter; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; +/** + * Responsible for running the command-line corset tool to check that a given trace is + * accepted by the zkevm constraints. The corset tool has variables levels of + * "expansion" which it can apply before performing the check. Greater levels of expansion imply + * more accurate checks (i.e. more realistic compared to the prover). Furthermore, corset + * can be configured to use field arithmetic or simply big integers (with the latter option + * intended to offer faster but much less precise checking). The default configuration is set to + * give good accuracy, but without significant overhead. A greater level can be configured by + * enabling the autoConstraints. + * + *

The configuration can be set using the environment variable CORSET_FLAGS. Example + * values for this environment variable include fields,expand (sets + * fieldArithmetic=true and expansion=0) and fields,expand,expand, + * auto (enables fieldArithmetic and autoConstraints and sets + * expansion=2). Note, it doesn't make sense to have expand without + * fields. Likewise, it doesn't make sense to have auto without expand + * . + */ @Slf4j public class CorsetValidator { public record Result(boolean isValid, File traceFile, String corsetOutput) {} private static final String ZK_EVM_RELATIVE_PATH = "/zkevm-constraints/zkevm.bin"; + /** Specifies the default zkEVM.bin file to use (including its path). */ private String defaultZkEvm = null; + + /** Specifies the Corset binary to use (including its path). */ private String corsetBin; + /** + * Specifies whether field arithmetic should be used. To best reflect the prover, this should be + * enabled. + */ + @Getter @Setter private boolean fieldArithmetic = true; + + /** + * Specifies how much expansion should be applied to constraints (max is 4). For example, + * normalisation expressions are expanded into columns containing the multiplicative inverse, etc. + * To best reflect the prover, this should be enabled. Also, the effect of this option is limited + * unless field arithmetic is also enabled. + */ + @Getter @Setter private int expansion = 4; + + /** + * Specifies whether expansion of "auto constraints" should be performed. This is the final step + * of expansion taking us to the lowest level. To best reflect the prover, this should be enabled. + * However, it is not enabled by default because this imposes a high performance overhead. + */ + @Getter @Setter private boolean autoConstraints = false; + public CorsetValidator() { initCorset(); + configCorset(); initDefaultZkEvm(); } public Result validate(final Path filename) throws RuntimeException { + if (defaultZkEvm == null) { + throw new IllegalArgumentException("Default zkevm.bin not set."); + } return validate(filename, defaultZkEvm); } public Result validate(final Path filename, final String zkEvmBin) throws RuntimeException { final Process corsetValidationProcess; try { + List options = buildOptions(filename, zkEvmBin); corsetValidationProcess = - new ProcessBuilder( - corsetBin, - "check", - "-T", - filename.toAbsolutePath().toString(), - "-q", - "-r", - "-d", - "-s", - "-t", - Optional.ofNullable(System.getenv("CORSET_THREADS")).orElse("2"), - zkEvmBin) + new ProcessBuilder(options) .redirectInput(ProcessBuilder.Redirect.INHERIT) .redirectErrorStream(true) .start(); @@ -135,6 +175,51 @@ private void initCorset() { } } + /** + * Configure corset from the CORSET_FLAGS environment variable (if set). If the + * environment variable is not set, the default configuration is retained. If the environment + * variable is set, but its value is malformed then an exception is raised. + */ + private void configCorset() { + String flags = System.getenv().get("CORSET_FLAGS"); + if (flags != null) { + log.info( + "Configuring corset from CORSET_FLAGS environment variable: \"%s\"".formatted(flags)); + // Reset default configuration + this.fieldArithmetic = false; + this.expansion = 0; + this.autoConstraints = false; + // Check for default case (empty string) + if (!flags.isEmpty()) { + // split flags by separator + String[] splitFlags = flags.split(","); + // Build configuration based on flags + for (String flag : splitFlags) { + switch (flag) { + case "fields": + this.fieldArithmetic = true; + break; + case "expand": + if (expansion >= 4) { + throw new RuntimeException( + ("Malformed Corset configuration flags (expansion " + + "beyond four meaningless): %s") + .formatted(flags)); + } + this.expansion++; + break; + case "auto": + this.autoConstraints = true; + break; + default: + // Error + throw new RuntimeException("Unknown Corset configuration flag: %s".formatted(flag)); + } + } + } + } + } + private void initDefaultZkEvm() { final String currentDir; @@ -159,4 +244,59 @@ private void initDefaultZkEvm() { log.warn("Could not find default path for zkevm.bin"); } + + /** + * Construct the list of options to be used when running Corset. + * + * @return + */ + private List buildOptions(Path filename, String zkEvmBin) { + ArrayList options = new ArrayList<>(); + // Specify corset binary + options.add(corsetBin); + // Specify corset "check" command. + options.add("check"); + // Specify corset trace file to use + options.add("-T"); + options.add(filename.toAbsolutePath().toString()); + // Specify reporting options where: + // + // -q Decrease logging verbosity + // -r detail failing constraint + // -d dim unimportant expressions for failing constraints + // -s display original source along with compiled form + options.add("-qrds"); + // Enable field arithmetic (if applicable) + if (fieldArithmetic) { + options.add("-N"); + } + // Enable expansion (if applicable) + if (expansion != 0) { + String es = "e".repeat(expansion); + options.add("-" + es); + } + // Enable auto constraints (if applicable) + if (autoConstraints) { + options.add("--auto-constraints"); + options.add("nhood,sorts"); + } + // Specify number of threads to use. + options.add("-t"); + options.add(determineNumberOfThreads()); + // Specify the zkevm.bin file. + options.add(zkEvmBin); + log.info("Corset options: " + options); + // Done + return options; + } + + /** + * Determine the number of threads to use when checking constraints. The default is "2", but this + * can be overriden using an environment variable CORSET_THREADS. + * + * @return + */ + private String determineNumberOfThreads() { + return Optional.ofNullable(System.getenv("CORSET_THREADS")).orElse("2"); + } } diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/AbstractLineaRequiredPlugin.java b/arithmetization/src/main/java/net/consensys/linea/plugins/AbstractLineaRequiredPlugin.java new file mode 100644 index 0000000000..4281b8717e --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/AbstractLineaRequiredPlugin.java @@ -0,0 +1,55 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins; + +import lombok.extern.slf4j.Slf4j; +import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.BesuPlugin; + +@Slf4j +public abstract class AbstractLineaRequiredPlugin extends AbstractLineaSharedOptionsPlugin { + + /** + * Linea plugins extending this class will halt startup of Besu in case of exception during + * registration. + * + *

If that's NOT desired, the plugin should implement {@link BesuPlugin} directly. + * + * @param context + */ + @Override + public void register(final BesuContext context) { + super.register(context); + try { + log.info("Registering Linea plugin " + this.getClass().getName()); + + doRegister(context); + + } catch (Exception e) { + log.error("Halting Besu startup: exception in plugin registration: ", e); + e.printStackTrace(); + // System.exit will cause besu to exit + System.exit(1); + } + } + + /** + * Linea plugins need to implement this method. Called by {@link BesuPlugin} register method + * + * @param context + */ + public abstract void doRegister(final BesuContext context); +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/AbstractLineaSharedOptionsPlugin.java b/arithmetization/src/main/java/net/consensys/linea/plugins/AbstractLineaSharedOptionsPlugin.java new file mode 100644 index 0000000000..fb8d044c19 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/AbstractLineaSharedOptionsPlugin.java @@ -0,0 +1,68 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins; + +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.plugins.config.LineaTracerCliOptions; +import net.consensys.linea.plugins.config.LineaTracerConfiguration; +import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.services.PicoCLIOptions; + +@Slf4j +public abstract class AbstractLineaSharedOptionsPlugin implements BesuPlugin { + private static final String CLI_OPTIONS_PREFIX = "linea"; + private static boolean cliOptionsRegistered = false; + private static boolean configured = false; + protected static LineaTracerCliOptions tracerCliOptions; + protected static LineaTracerConfiguration tracerConfiguration; + + @Override + public synchronized void register(final BesuContext context) { + if (!cliOptionsRegistered) { + final PicoCLIOptions cmdlineOptions = + context + .getService(PicoCLIOptions.class) + .orElseThrow( + () -> + new IllegalStateException( + "Failed to obtain PicoCLI options from the BesuContext")); + tracerCliOptions = LineaTracerCliOptions.create(); + + cmdlineOptions.addPicoCLIOptions(CLI_OPTIONS_PREFIX, tracerCliOptions); + cliOptionsRegistered = true; + } + } + + @Override + public void beforeExternalServices() { + if (!configured) { + tracerConfiguration = tracerCliOptions.toDomainObject(); + configured = true; + } + + log.debug("Configured plugin {} with tracer configuration: {}", getName(), tracerConfiguration); + } + + @Override + public void start() {} + + @Override + public void stop() { + cliOptionsRegistered = false; + configured = false; + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/config/LineaL1L2BridgeCliOptions.java b/arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaL1L2BridgeCliOptions.java similarity index 93% rename from arithmetization/src/main/java/net/consensys/linea/config/LineaL1L2BridgeCliOptions.java rename to arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaL1L2BridgeCliOptions.java index cfd6c1db50..1ba8e839cb 100644 --- a/arithmetization/src/main/java/net/consensys/linea/config/LineaL1L2BridgeCliOptions.java +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaL1L2BridgeCliOptions.java @@ -13,11 +13,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -package net.consensys.linea.config; +package net.consensys.linea.plugins.config; import com.google.common.base.MoreObjects; -import net.consensys.linea.config.converters.AddressConverter; -import net.consensys.linea.config.converters.BytesConverter; +import net.consensys.linea.plugins.config.converters.AddressConverter; +import net.consensys.linea.plugins.config.converters.BytesConverter; import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.datatypes.Address; import picocli.CommandLine; diff --git a/arithmetization/src/main/java/net/consensys/linea/config/LineaL1L2BridgeConfiguration.java b/arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaL1L2BridgeConfiguration.java similarity index 96% rename from arithmetization/src/main/java/net/consensys/linea/config/LineaL1L2BridgeConfiguration.java rename to arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaL1L2BridgeConfiguration.java index fb4e74d280..b478dd0153 100644 --- a/arithmetization/src/main/java/net/consensys/linea/config/LineaL1L2BridgeConfiguration.java +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaL1L2BridgeConfiguration.java @@ -13,7 +13,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package net.consensys.linea.config; +package net.consensys.linea.plugins.config; import lombok.Builder; import org.apache.tuweni.bytes.Bytes; diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaTracerCliOptions.java b/arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaTracerCliOptions.java new file mode 100644 index 0000000000..326d4069d4 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaTracerCliOptions.java @@ -0,0 +1,85 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.plugins.config; + +import com.google.common.base.MoreObjects; +import picocli.CommandLine; + +public class LineaTracerCliOptions { + + public static final String MODULE_LIMIT_FILE_PATH = "--plugin-linea-module-limit-file-path"; + public static final String DEFAULT_MODULE_LIMIT_FILE_PATH = "moduleLimitFile.toml"; + public static final String CONFLATED_TRACE_GENERATION_TRACES_OUTPUT_PATH = + "--plugin-linea-conflated-trace-generation-traces-output-path"; + + @CommandLine.Option( + names = {MODULE_LIMIT_FILE_PATH}, + hidden = true, + paramLabel = "", + description = + "Path to the toml file containing the module limits (default: ${DEFAULT-VALUE})") + private String moduleLimitFilePath = DEFAULT_MODULE_LIMIT_FILE_PATH; + + @CommandLine.Option( + names = {CONFLATED_TRACE_GENERATION_TRACES_OUTPUT_PATH}, + hidden = true, + paramLabel = "", + description = "Path to where traces will be written") + private String tracesOutputPath = null; + + private LineaTracerCliOptions() {} + + /** + * Create Linea cli options. + * + * @return the Linea cli options + */ + public static LineaTracerCliOptions create() { + return new LineaTracerCliOptions(); + } + + /** + * Linea cli options from config. + * + * @param config the config + * @return the Linea cli options + */ + public static LineaTracerCliOptions fromConfig(final LineaTracerConfiguration config) { + final LineaTracerCliOptions options = create(); + options.moduleLimitFilePath = config.moduleLimitsFilePath(); + options.tracesOutputPath = config.tracesOutputPath(); + return options; + } + + /** + * To domain object Linea factory configuration. + * + * @return the Linea factory configuration + */ + public LineaTracerConfiguration toDomainObject() { + return LineaTracerConfiguration.builder() + .tracesOutputPath(tracesOutputPath) + .moduleLimitsFilePath(moduleLimitFilePath) + .build(); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add(MODULE_LIMIT_FILE_PATH, moduleLimitFilePath) + .add(CONFLATED_TRACE_GENERATION_TRACES_OUTPUT_PATH, tracesOutputPath) + .toString(); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/config/LineaRpcConfiguration.java b/arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaTracerConfiguration.java similarity index 79% rename from arithmetization/src/main/java/net/consensys/linea/config/LineaRpcConfiguration.java rename to arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaTracerConfiguration.java index 5742ab45ef..d79f960672 100644 --- a/arithmetization/src/main/java/net/consensys/linea/config/LineaRpcConfiguration.java +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/config/LineaTracerConfiguration.java @@ -13,10 +13,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package net.consensys.linea.config; +package net.consensys.linea.plugins.config; import lombok.Builder; -/** The Linea RPC configuration. */ +/** The Linea tracer configuration. */ @Builder(toBuilder = true) -public record LineaRpcConfiguration(boolean estimateGasCompatibilityModeEnabled) {} +public record LineaTracerConfiguration(String moduleLimitsFilePath, String tracesOutputPath) {} diff --git a/arithmetization/src/main/java/net/consensys/linea/config/converters/AddressConverter.java b/arithmetization/src/main/java/net/consensys/linea/plugins/config/converters/AddressConverter.java similarity index 94% rename from arithmetization/src/main/java/net/consensys/linea/config/converters/AddressConverter.java rename to arithmetization/src/main/java/net/consensys/linea/plugins/config/converters/AddressConverter.java index a1c3c457c4..8e2540bc43 100644 --- a/arithmetization/src/main/java/net/consensys/linea/config/converters/AddressConverter.java +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/config/converters/AddressConverter.java @@ -12,7 +12,7 @@ * * SPDX-License-Identifier: Apache-2.0 */ -package net.consensys.linea.config.converters; +package net.consensys.linea.plugins.config.converters; import org.hyperledger.besu.datatypes.Address; import picocli.CommandLine; diff --git a/arithmetization/src/main/java/net/consensys/linea/config/converters/BytesConverter.java b/arithmetization/src/main/java/net/consensys/linea/plugins/config/converters/BytesConverter.java similarity index 94% rename from arithmetization/src/main/java/net/consensys/linea/config/converters/BytesConverter.java rename to arithmetization/src/main/java/net/consensys/linea/plugins/config/converters/BytesConverter.java index 28d73c0122..7915e42de1 100644 --- a/arithmetization/src/main/java/net/consensys/linea/config/converters/BytesConverter.java +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/config/converters/BytesConverter.java @@ -12,7 +12,7 @@ * * SPDX-License-Identifier: Apache-2.0 */ -package net.consensys.linea.config.converters; +package net.consensys.linea.plugins.config.converters; import org.apache.tuweni.bytes.Bytes; import picocli.CommandLine; diff --git a/arithmetization/src/main/java/net/consensys/linea/config/converters/WeiConverter.java b/arithmetization/src/main/java/net/consensys/linea/plugins/config/converters/WeiConverter.java similarity index 94% rename from arithmetization/src/main/java/net/consensys/linea/config/converters/WeiConverter.java rename to arithmetization/src/main/java/net/consensys/linea/plugins/config/converters/WeiConverter.java index 33ea66181b..1487eb0cd9 100644 --- a/arithmetization/src/main/java/net/consensys/linea/config/converters/WeiConverter.java +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/config/converters/WeiConverter.java @@ -12,7 +12,7 @@ * * SPDX-License-Identifier: Apache-2.0 */ -package net.consensys.linea.config.converters; +package net.consensys.linea.plugins.config.converters; import java.math.BigInteger; diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracer.java b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracer.java new file mode 100644 index 0000000000..801652732c --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracer.java @@ -0,0 +1,113 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.plugins.continoustracing; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Optional; + +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.corset.CorsetValidator; +import net.consensys.linea.plugins.exception.InvalidBlockTraceException; +import net.consensys.linea.plugins.exception.TraceOutputException; +import net.consensys.linea.plugins.exception.TraceVerificationException; +import net.consensys.linea.zktracer.ZkTracer; +import org.apache.commons.io.FileUtils; +import org.hyperledger.besu.datatypes.Hash; +import org.hyperledger.besu.plugin.data.BlockTraceResult; +import org.hyperledger.besu.plugin.data.TransactionTraceResult; +import org.hyperledger.besu.plugin.services.TraceService; + +@Slf4j +public class ContinuousTracer { + private final TraceService traceService; + private final CorsetValidator corsetValidator; + private final ContinuousTracingConfiguration continuousTracingConfiguration; + private final Optional tracesOutputPath; + + public ContinuousTracer( + TraceService traceService, + CorsetValidator corsetValidator, + ContinuousTracingConfiguration continuousTracingConfiguration) { + this.traceService = traceService; + this.corsetValidator = corsetValidator; + this.continuousTracingConfiguration = continuousTracingConfiguration; + this.tracesOutputPath = initTracesOutputPath(); + } + + public CorsetValidator.Result verifyTraceOfBlock(final Hash blockHash, final ZkTracer zkTracer) + throws TraceVerificationException, InvalidBlockTraceException { + zkTracer.traceStartConflation(1); + + final BlockTraceResult blockTraceResult; + try { + blockTraceResult = traceService.traceBlock(blockHash, zkTracer); + } catch (final Exception e) { + throw new TraceVerificationException(blockHash, e.getMessage()); + } finally { + zkTracer.traceEndConflation(null); + } + + for (final TransactionTraceResult transactionTraceResult : + blockTraceResult.transactionTraceResults()) { + if (transactionTraceResult.getStatus() != TransactionTraceResult.Status.SUCCESS) { + throw new InvalidBlockTraceException( + transactionTraceResult.getTxHash(), + transactionTraceResult.errorMessage().orElse("Unknown error")); + } + } + + final CorsetValidator.Result result; + try { + result = + corsetValidator.validate( + tracesOutputPath.map(zkTracer::writeToTmpFile).orElseGet(zkTracer::writeToTmpFile), + continuousTracingConfiguration.zkEvmBin()); + + if (!result.isValid()) { + log.error("Trace of block {} is not valid", blockHash.toHexString()); + return result; + } + } catch (RuntimeException e) { + log.error( + "Error while validating trace of block {}: {}", blockHash.toHexString(), e.getMessage()); + throw new TraceVerificationException(blockHash, e.getMessage()); + } + + try { + FileUtils.delete(result.traceFile()); + } catch (IOException e) { + log.warn("Error while deleting trace file {}: {}", result.traceFile(), e.getMessage()); + } + + log.info("Trace of block {} is valid", blockHash.toHexString()); + return result; + } + + private Optional initTracesOutputPath() { + final Optional tracesOutputPath = + Optional.of(Paths.get(continuousTracingConfiguration.tracesDir())); + + try { + Files.createDirectories(tracesOutputPath.get()); + } catch (IOException e) { + throw new TraceOutputException(e.getMessage()); + } + + return tracesOutputPath; + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingBlockAddedListener.java b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingBlockAddedListener.java new file mode 100644 index 0000000000..bb4571b454 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingBlockAddedListener.java @@ -0,0 +1,84 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.plugins.continoustracing; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.corset.CorsetValidator; +import net.consensys.linea.plugins.exception.InvalidBlockTraceException; +import net.consensys.linea.plugins.exception.InvalidTraceHandlerException; +import net.consensys.linea.plugins.exception.TraceVerificationException; +import net.consensys.linea.zktracer.ZkTracer; +import org.hyperledger.besu.datatypes.Hash; +import org.hyperledger.besu.plugin.data.AddedBlockContext; +import org.hyperledger.besu.plugin.data.BlockHeader; +import org.hyperledger.besu.plugin.services.BesuEvents; + +@Slf4j +@RequiredArgsConstructor +public class ContinuousTracingBlockAddedListener implements BesuEvents.BlockAddedListener { + private final ContinuousTracer continuousTracer; + private final TraceFailureHandler traceFailureHandler; + + static final int BLOCK_PARALLELISM = 5; + final ThreadPoolExecutor pool = + new ThreadPoolExecutor( + BLOCK_PARALLELISM, + BLOCK_PARALLELISM, + 0L, + TimeUnit.SECONDS, + new ArrayBlockingQueue<>(BLOCK_PARALLELISM), + new ThreadPoolExecutor.CallerRunsPolicy()); + + @Override + public void onBlockAdded(final AddedBlockContext addedBlockContext) { + pool.submit( + () -> { + final BlockHeader blockHeader = addedBlockContext.getBlockHeader(); + final Hash blockHash = blockHeader.getBlockHash(); + log.info("Tracing block {} ({})", blockHeader.getNumber(), blockHash.toHexString()); + + try { + final CorsetValidator.Result traceResult = + continuousTracer.verifyTraceOfBlock(blockHash, new ZkTracer()); + Files.delete(traceResult.traceFile().toPath()); + + if (!traceResult.isValid()) { + log.error("Corset returned and error for block {}", blockHeader.getNumber()); + traceFailureHandler.handleCorsetFailure(blockHeader, traceResult); + return; + } + log.info("Trace for block {} verified successfully", blockHeader.getNumber()); + } catch (InvalidBlockTraceException e) { + log.error("Error while tracing block {}: {}", blockHeader.getNumber(), e.getMessage()); + traceFailureHandler.handleBlockTraceFailure(blockHeader.getNumber(), e.txHash(), e); + } catch (TraceVerificationException e) { + log.error(e.getMessage()); + } catch (InvalidTraceHandlerException e) { + log.error("Error while handling invalid trace: {}", e.getMessage()); + } catch (IOException e) { + log.error("IO error: {}", e.getMessage()); + } finally { + log.info("End of tracing block {}", blockHeader.getNumber()); + } + }); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingCliOptions.java b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingCliOptions.java new file mode 100644 index 0000000000..afe24004bd --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingCliOptions.java @@ -0,0 +1,68 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.plugins.continoustracing; + +import com.google.common.base.MoreObjects; +import picocli.CommandLine; + +public class ContinuousTracingCliOptions { + public static final String CONTINUOUS_TRACING_ENABLED = + "--plugin-linea-continuous-tracing-enabled"; + public static final String CONTINUOUS_TRACING_ZK_EVM_BIN = + "--plugin-linea-continuous-tracing-zk-evm-bin"; + + public static final String CONTINUOUS_TRACING_TRACES_DIR = + "--plugin-linea-continuous-tracing-traces-output-path"; + + @CommandLine.Option( + names = {CONTINUOUS_TRACING_ENABLED}, + hidden = true, + paramLabel = "", + description = "Enable continuous tracing (default: false)") + private boolean continuousTracingEnabled = false; + + @CommandLine.Option( + names = {CONTINUOUS_TRACING_ZK_EVM_BIN}, + hidden = true, + paramLabel = "", + description = "Path to the ZkEvm binary") + private String zkEvmBin = null; + + @CommandLine.Option( + names = {CONTINUOUS_TRACING_TRACES_DIR}, + hidden = true, + paramLabel = "", + description = "Path to where traces will be written") + private String tracesOutputPath = null; + + private ContinuousTracingCliOptions() {} + + public static ContinuousTracingCliOptions create() { + return new ContinuousTracingCliOptions(); + } + + public ContinuousTracingConfiguration toDomainObject() { + return new ContinuousTracingConfiguration(continuousTracingEnabled, zkEvmBin, tracesOutputPath); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add(CONTINUOUS_TRACING_ENABLED, continuousTracingEnabled) + .add(CONTINUOUS_TRACING_ZK_EVM_BIN, zkEvmBin) + .add(CONTINUOUS_TRACING_TRACES_DIR, tracesOutputPath) + .toString(); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/Chunk.java b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingConfiguration.java similarity index 78% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/Chunk.java rename to arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingConfiguration.java index 41ca7387fc..870a7e46ab 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/Chunk.java +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingConfiguration.java @@ -12,7 +12,7 @@ * * SPDX-License-Identifier: Apache-2.0 */ +package net.consensys.linea.plugins.continoustracing; -package net.consensys.linea.zktracer.module.mxp; - -public record Chunk() {} +public record ContinuousTracingConfiguration( + boolean continuousTracing, String zkEvmBin, String tracesDir) {} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingPlugin.java b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingPlugin.java new file mode 100644 index 0000000000..5d254266c3 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/ContinuousTracingPlugin.java @@ -0,0 +1,107 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.plugins.continoustracing; + +import java.util.Optional; + +import com.google.auto.service.AutoService; +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.corset.CorsetValidator; +import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.services.BesuEvents; +import org.hyperledger.besu.plugin.services.PicoCLIOptions; +import org.hyperledger.besu.plugin.services.TraceService; + +@Slf4j +@AutoService(BesuPlugin.class) +public class ContinuousTracingPlugin implements BesuPlugin { + public static final String NAME = "linea-continuous"; + public static final String ENV_WEBHOOK_URL = "SLACK_SHADOW_NODE_WEBHOOK_URL"; + + private final ContinuousTracingCliOptions options; + private BesuContext context; + + public ContinuousTracingPlugin() { + options = ContinuousTracingCliOptions.create(); + } + + @Override + public Optional getName() { + return Optional.of(NAME); + } + + @Override + public void register(final BesuContext context) { + final PicoCLIOptions cmdlineOptions = + context + .getService(PicoCLIOptions.class) + .orElseThrow( + () -> + new IllegalStateException( + "Expecting a PicoCLI options to register CLI options with, but none found.")); + + cmdlineOptions.addPicoCLIOptions(getName().get(), options); + + this.context = context; + } + + @Override + public void start() { + log.info("Starting {} with configuration: {}", NAME, options); + + final ContinuousTracingConfiguration tracingConfiguration = options.toDomainObject(); + + if (!tracingConfiguration.continuousTracing()) { + return; + } + + // BesuEvents can only be requested after the plugin has been registered. + final BesuEvents besuEvents = + context + .getService(BesuEvents.class) + .orElseThrow( + () -> + new IllegalStateException( + "Expecting a BesuEvents to register events with, but none found.")); + + final TraceService traceService = + context + .getService(TraceService.class) + .orElseThrow( + () -> new IllegalStateException("Expecting a TraceService, but none found.")); + + if (tracingConfiguration.zkEvmBin() == null) { + log.error("zkEvmBin must be specified when continuousTracing is enabled"); + System.exit(1); + } + + final String webHookUrl = System.getenv(ENV_WEBHOOK_URL); + if (webHookUrl == null) { + log.error( + "Webhook URL must be specified as environment variable {} when continuousTracing is enabled", + ENV_WEBHOOK_URL); + System.exit(1); + } + + besuEvents.addBlockAddedListener( + new ContinuousTracingBlockAddedListener( + new ContinuousTracer(traceService, new CorsetValidator(), tracingConfiguration), + new TraceFailureHandler(SlackNotificationService.create(webHookUrl)))); + } + + @Override + public void stop() {} +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/SlackNotificationService.java b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/SlackNotificationService.java new file mode 100644 index 0000000000..300c0caeb3 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/SlackNotificationService.java @@ -0,0 +1,129 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.plugins.continoustracing; + +import static com.slack.api.model.block.Blocks.asBlocks; +import static com.slack.api.model.block.Blocks.divider; +import static com.slack.api.model.block.Blocks.section; +import static com.slack.api.model.block.composition.BlockCompositions.markdownText; + +import java.io.IOException; +import java.util.stream.Collectors; + +import com.slack.api.Slack; +import com.slack.api.webhook.Payload; +import com.slack.api.webhook.WebhookResponse; +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.corset.CorsetValidator; +import org.hyperledger.besu.datatypes.Hash; + +@Slf4j +public class SlackNotificationService { + final Slack slack; + final String webHookUrl; + + protected SlackNotificationService(final Slack slack, final String webHookUrl) { + this.slack = slack; + this.webHookUrl = webHookUrl; + } + + public static SlackNotificationService create(final String webHookUrl) { + return new SlackNotificationService(Slack.getInstance(), webHookUrl); + } + + public void sendCorsetFailureNotification( + final long blockNumber, final String blockHash, final CorsetValidator.Result validationResult) + throws IOException { + final Payload messagePayload = + Payload.builder() + .text("Slack couldn't properly display the message.") + .blocks( + asBlocks( + section( + section -> + section.text( + markdownText( + String.format( + "*Trace verification failure for block %d (%s)", + blockNumber, blockHash)))), + divider(), + section( + section -> + section.text( + markdownText( + "Trace verification failed with the following error:\n\n" + + "```" + + validationResult + .corsetOutput() + // Remove all ANSI escape codes that Slack does not like + .replaceAll("\u001B\\[[;\\d]*m", "") + + "```\n\n" + + "Trace file: " + + validationResult.traceFile()))))) + .build(); + + WebhookResponse response = slack.send(webHookUrl, messagePayload); + checkResponse(response); + } + + public void sendBlockTraceFailureNotification( + final long blockNumber, final Hash txHash, final Throwable throwable) throws IOException { + + log.info("Throwable.getMessage(): {}", throwable.getMessage()); + + final Payload messagePayload = + Payload.builder() + .text("Slack couldn't properly display the message.") + .blocks( + asBlocks( + section( + section -> + section.text( + markdownText( + String.format( + "*Error while tracing transaction %s in block %d*", + txHash.toHexString(), blockNumber)))), + divider(), + section( + section -> + section.text( + markdownText( + "Trace generation failed with the following error:\n\n" + + "```" + // more than 2000 characters will cause a 400 error when + // sending the message + + throwable + .getMessage() + .lines() + .limit(3) + .collect(Collectors.joining("\n")) + .substring(0, 2000) + + "```"))))) + .build(); + + WebhookResponse response = slack.send(webHookUrl, messagePayload); + checkResponse(response); + } + + private void checkResponse(final WebhookResponse response) throws IOException { + if (response.getCode() != 200) { + throw new IOException( + "Error while sending notification: status code: " + + response.getCode() + + ", body: " + + response.getBody()); + } + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/TraceFailureHandler.java b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/TraceFailureHandler.java new file mode 100644 index 0000000000..4a3e63742c --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/continoustracing/TraceFailureHandler.java @@ -0,0 +1,53 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.plugins.continoustracing; + +import java.io.IOException; + +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.corset.CorsetValidator; +import net.consensys.linea.plugins.exception.InvalidTraceHandlerException; +import org.hyperledger.besu.datatypes.Hash; +import org.hyperledger.besu.plugin.data.BlockHeader; + +@Slf4j +public class TraceFailureHandler { + final SlackNotificationService slackNotificationService; + + public TraceFailureHandler(final SlackNotificationService slackNotificationService) { + this.slackNotificationService = slackNotificationService; + } + + public void handleCorsetFailure( + final BlockHeader blockHeader, final CorsetValidator.Result result) + throws InvalidTraceHandlerException { + try { + slackNotificationService.sendCorsetFailureNotification( + blockHeader.getNumber(), blockHeader.getBlockHash().toHexString(), result); + } catch (IOException e) { + log.error("Error while sending slack notification: {}", e.getMessage()); + throw new InvalidTraceHandlerException(e); + } + } + + public void handleBlockTraceFailure( + final long blockNumber, final Hash txHash, final Throwable throwable) { + try { + slackNotificationService.sendBlockTraceFailureNotification(blockNumber, txHash, throwable); + } catch (IOException e) { + log.error("Error while handling block trace failure: {}", e.getMessage()); + } + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionSelectorConfiguration.java b/arithmetization/src/main/java/net/consensys/linea/plugins/exception/InvalidBlockTraceException.java similarity index 62% rename from arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionSelectorConfiguration.java rename to arithmetization/src/main/java/net/consensys/linea/plugins/exception/InvalidBlockTraceException.java index 09afc4f2e7..8495e1b7f4 100644 --- a/arithmetization/src/main/java/net/consensys/linea/config/LineaTransactionSelectorConfiguration.java +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/exception/InvalidBlockTraceException.java @@ -12,17 +12,20 @@ * * SPDX-License-Identifier: Apache-2.0 */ +package net.consensys.linea.plugins.exception; -package net.consensys.linea.config; +import org.hyperledger.besu.datatypes.Hash; -import lombok.Builder; +public class InvalidBlockTraceException extends Throwable { + final Hash txHash; -/** The Linea transaction selectors configuration. */ -@Builder(toBuilder = true) -public record LineaTransactionSelectorConfiguration( - int maxBlockCallDataSize, - String moduleLimitsFilePath, - int overLinesLimitCacheSize, - long maxGasPerBlock, - int unprofitableCacheSize, - int unprofitableRetryLimit) {} + public InvalidBlockTraceException(final Hash txHash, final String message) { + super(message); + + this.txHash = txHash; + } + + public Hash txHash() { + return txHash; + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/exception/InvalidTraceHandlerException.java b/arithmetization/src/main/java/net/consensys/linea/plugins/exception/InvalidTraceHandlerException.java new file mode 100644 index 0000000000..efa3a268bc --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/exception/InvalidTraceHandlerException.java @@ -0,0 +1,21 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.plugins.exception; + +public class InvalidTraceHandlerException extends Throwable { + public InvalidTraceHandlerException(Throwable t) { + super(t); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/exception/TraceOutputException.java b/arithmetization/src/main/java/net/consensys/linea/plugins/exception/TraceOutputException.java new file mode 100644 index 0000000000..cbde89bfb8 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/exception/TraceOutputException.java @@ -0,0 +1,22 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.plugins.exception; + +public class TraceOutputException extends RuntimeException { + public TraceOutputException(final String message) { + super( + "Trace output directory does not exist and cannot be created.\nError message: " + message); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/exception/TraceVerificationException.java b/arithmetization/src/main/java/net/consensys/linea/plugins/exception/TraceVerificationException.java new file mode 100644 index 0000000000..a6926c4794 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/exception/TraceVerificationException.java @@ -0,0 +1,24 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.plugins.exception; + +import org.hyperledger.besu.datatypes.Hash; + +public class TraceVerificationException extends Throwable { + public TraceVerificationException(final Hash blockHash, final String message) { + super( + "Verification of trace of block " + blockHash + " has failed.\nError message: " + message); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/Capture.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/Capture.java new file mode 100644 index 0000000000..12f3ec2294 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/Capture.java @@ -0,0 +1,21 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.capture; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** FileTrace represents an execution trace. */ +public record Capture(@JsonProperty("capture") String capture) {} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/CaptureEndpointServicePlugin.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/CaptureEndpointServicePlugin.java new file mode 100644 index 0000000000..d77574cbc6 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/CaptureEndpointServicePlugin.java @@ -0,0 +1,69 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.capture; + +import java.util.Optional; + +import com.google.auto.service.AutoService; +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.plugins.AbstractLineaRequiredPlugin; +import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.services.RpcEndpointService; + +/** + * Registers RPC endpoints .This class provides an RPC endpoint named + * 'generateConflatedTracesToFileV0' under the 'rollup' namespace. It uses {@link CaptureToFile} to + * generate conflated file traces. This class provides an RPC endpoint named + * 'generateConflatedTracesToFileV0' under the 'rollup' namespace. + */ +@AutoService(BesuPlugin.class) +@Slf4j +public class CaptureEndpointServicePlugin extends AbstractLineaRequiredPlugin { + + /** + * Register the RPC service. + * + * @param context the BesuContext to be used. + */ + @Override + public void doRegister(final BesuContext context) { + CaptureToFile method = new CaptureToFile(context); + + Optional service = context.getService(RpcEndpointService.class); + createAndRegister( + method, + service.orElseThrow( + () -> + new RuntimeException("Failed to obtain RpcEndpointService from the BesuContext."))); + } + + /** + * Create and register the RPC service. + * + * @param method the RollupGenerateConflatedTracesToFileV0 method to be used. + * @param rpcEndpointService the RpcEndpointService to be registered. + */ + private void createAndRegister( + final CaptureToFile method, final RpcEndpointService rpcEndpointService) { + rpcEndpointService.registerRPCEndpoint( + method.getNamespace(), method.getName(), method::execute); + } + + /** Start the RPC service. This method loads the OpCodes. */ + @Override + public void start() {} +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/CaptureParams.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/CaptureParams.java new file mode 100644 index 0000000000..7f5f091d6b --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/CaptureParams.java @@ -0,0 +1,43 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.capture; + +import java.security.InvalidParameterException; + +/** Holds needed parameters for sending an execution trace generation request. */ +@SuppressWarnings("unused") +public record CaptureParams(long fromBlock, long toBlock) { + private static final int EXPECTED_PARAMS_SIZE = 2; + + /** + * Parses a list of params to a {@link CaptureParams} object. + * + * @param params an array of parameters. + * @return a parsed {@link CaptureParams} object.. + */ + public static CaptureParams createTraceParams(final Object[] params) { + // validate params size + if (params.length != EXPECTED_PARAMS_SIZE) { + throw new InvalidParameterException( + String.format("Expected %d parameters but got %d", EXPECTED_PARAMS_SIZE, params.length)); + } + + long fromBlock = Long.parseLong(params[0].toString()); + long toBlock = Long.parseLong(params[1].toString()); + + return new CaptureParams(fromBlock, toBlock); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/CaptureToFile.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/CaptureToFile.java new file mode 100644 index 0000000000..ce1b2bff5f --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/capture/CaptureToFile.java @@ -0,0 +1,86 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.capture; + +import com.google.common.base.Stopwatch; +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.blockcapture.BlockCapturer; +import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.services.TraceService; +import org.hyperledger.besu.plugin.services.rpc.PluginRpcRequest; + +/** + * Sets up an RPC endpoint for generating conflated file trace. This class provides an RPC endpoint + * named 'generateConflatedTracesToFileV0' under the 'rollup' namespace. When this endpoint is + * called, it triggers the execution of the 'execute' method, which generates conflated file traces + * based on the provided request parameters and writes them to a file. + */ +@Slf4j +public class CaptureToFile { + private final BesuContext besuContext; + private TraceService traceService; + + public CaptureToFile(final BesuContext besuContext) { + this.besuContext = besuContext; + } + + public String getNamespace() { + return "linea"; + } + + public String getName() { + return "captureConflation"; + } + + /** + * Handles execution traces generation logic. + * + * @param request holds parameters of the RPC request. + * @return an execution file trace. + */ + public Capture execute(final PluginRpcRequest request) { + if (this.traceService == null) { + this.traceService = getTraceService(); + } + + CaptureParams params = CaptureParams.createTraceParams(request.getParams()); + final long fromBlock = params.fromBlock(); + final long toBlock = params.toBlock(); + final BlockCapturer tracer = new BlockCapturer(); + + Stopwatch sw = Stopwatch.createStarted(); + traceService.trace( + fromBlock, + toBlock, + worldStateBeforeTracing -> { + tracer.setWorld(worldStateBeforeTracing); + tracer.traceStartConflation(toBlock - fromBlock + 1); + }, + tracer::traceEndConflation, + tracer); + log.info("[CAPTURE] capture for {}-{} computed in {}", fromBlock, toBlock, sw); + return new Capture(tracer.toJson()); + } + + private TraceService getTraceService() { + return this.besuContext + .getService(TraceService.class) + .orElseThrow( + () -> + new RuntimeException( + "Unable to find trace service. Please ensure TraceService is registered.")); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/Counters.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/Counters.java new file mode 100644 index 0000000000..f5ee7a0bfb --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/Counters.java @@ -0,0 +1,26 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.counters; + +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** FileTrace represents an execution trace. */ +public record Counters( + @JsonProperty("tracesEngineVersion") String tracesEngineVersion, + @JsonProperty("blockNumber") long blockNumber, + @JsonProperty("tracesCounters") Map traceCountersByModule) {} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/CountersEndpointServicePlugin.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/CountersEndpointServicePlugin.java new file mode 100644 index 0000000000..fbae00f0d9 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/CountersEndpointServicePlugin.java @@ -0,0 +1,76 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.counters; + +import com.google.auto.service.AutoService; +import net.consensys.linea.plugins.AbstractLineaSharedOptionsPlugin; +import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.services.RpcEndpointService; + +/** + * Sets up an RPC endpoint for generating trace counters. + * + *

The CountersEndpointServicePlugin registers an RPC endpoint named + * 'getTracesCountersByBlockNumberV0' under the 'rollup' namespace. When this endpoint is called, + * returns trace counters based on the provided request parameters. See {@link GenerateCountersV2} + */ +@AutoService(BesuPlugin.class) +public class CountersEndpointServicePlugin extends AbstractLineaSharedOptionsPlugin { + private BesuContext besuContext; + private RpcEndpointService rpcEndpointService; + + /** + * Register the RPC service. + * + * @param context the BesuContext to be used. + */ + @Override + public void register(final BesuContext context) { + super.register(context); + besuContext = context; + rpcEndpointService = + context + .getService(RpcEndpointService.class) + .orElseThrow( + () -> + new RuntimeException( + "Failed to obtain RpcEndpointService from the BesuContext.")); + } + + @Override + public void beforeExternalServices() { + super.beforeExternalServices(); + GenerateCountersV2 method = new GenerateCountersV2(besuContext); + createAndRegister(method, rpcEndpointService); + } + + /** + * Create and register the RPC service. + * + * @param method the RollupGenerateCountersV0 method to be used. + * @param rpcEndpointService the RpcEndpointService to be registered. + */ + private void createAndRegister( + final GenerateCountersV2 method, final RpcEndpointService rpcEndpointService) { + rpcEndpointService.registerRPCEndpoint( + method.getNamespace(), method.getName(), method::execute); + } + + /** Start the RPC service. This method loads the OpCodes. */ + @Override + public void start() {} +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/CountersRequestParams.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/CountersRequestParams.java new file mode 100644 index 0000000000..55dfdf959d --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/CountersRequestParams.java @@ -0,0 +1,36 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.counters; + +import java.security.InvalidParameterException; + +import net.consensys.linea.zktracer.ZkTracer; + +/** Holds needed parameters for sending an execution trace generation request. */ +public record CountersRequestParams(long blockNumber, String expectedTracesEngineVersion) { + public void validateTracerVersion() { + if (!expectedTracesEngineVersion.equals(getTracerRuntime())) { + throw new InvalidParameterException( + String.format( + "INVALID_TRACES_VERSION: Runtime version is %s, requesting version %s", + getTracerRuntime(), expectedTracesEngineVersion)); + } + } + + private static String getTracerRuntime() { + return ZkTracer.class.getPackage().getSpecificationVersion(); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/GenerateCountersV2.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/GenerateCountersV2.java new file mode 100644 index 0000000000..178f607471 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/counters/GenerateCountersV2.java @@ -0,0 +1,127 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.counters; + +import java.security.InvalidParameterException; +import java.util.Map; + +import com.google.common.base.Stopwatch; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.zktracer.ZkTracer; +import net.consensys.linea.zktracer.json.JsonConverter; +import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.RpcErrorType; +import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.services.TraceService; +import org.hyperledger.besu.plugin.services.exception.PluginRpcEndpointException; +import org.hyperledger.besu.plugin.services.rpc.PluginRpcRequest; + +/** This class is used to generate trace counters. */ +@Slf4j +@RequiredArgsConstructor +public class GenerateCountersV2 { + private static final JsonConverter CONVERTER = JsonConverter.builder().build(); + private static final int CACHE_SIZE = 10_000; + private static final Cache> CACHE = + CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).build(); + + private final BesuContext besuContext; + private TraceService traceService; + + public String getNamespace() { + return "linea"; + } + + public String getName() { + return "getBlockTracesCountersV2"; + } + + /** + * Executes an RPC request to generate trace counters. + * + * @param request The PluginRpcRequest object encapsulating the parameters of the RPC request. + * @return A Counters object encapsulating the results of the counters generation (Modules Line + * Count). The method uses a caching mechanism to store and retrieve previously computed trace + * counters for specific block numbers + *

If an exception occurs during the execution of the request, it is caught and wrapped in + * a PluginRpcEndpointException and rethrown. + */ + public Counters execute(final PluginRpcRequest request) { + if (traceService == null) { + traceService = initTraceService(); + } + + try { + final Stopwatch sw = Stopwatch.createStarted(); + + final Object[] rawParams = request.getParams(); + + // validate params size + if (rawParams.length != 1) { + throw new InvalidParameterException( + "Expected a single params object in the params array but got %d" + .formatted(rawParams.length)); + } + + final CountersRequestParams params = + CONVERTER.fromJson(CONVERTER.toJson(rawParams[0]), CountersRequestParams.class); + + params.validateTracerVersion(); + + final long requestedBlockNumber = params.blockNumber(); + + final Counters r = + new Counters( + params.expectedTracesEngineVersion(), + requestedBlockNumber, + CACHE + .asMap() + .computeIfAbsent( + requestedBlockNumber, + blockNumber -> { + final ZkTracer tracer = new ZkTracer(); + traceService.trace( + blockNumber, + blockNumber, + worldStateBeforeTracing -> tracer.traceStartConflation(1), + tracer::traceEndConflation, + tracer); + + return tracer.getModulesLineCount(); + })); + log.info("Line count for {} returned in {}", requestedBlockNumber, sw); + return r; + } catch (Exception ex) { + throw new PluginRpcEndpointException(RpcErrorType.PLUGIN_INTERNAL_ERROR, ex.getMessage()); + } + } + + /** + * Initialize the TraceService. + * + * @return the initialized TraceService. + */ + private TraceService initTraceService() { + return besuContext + .getService(TraceService.class) + .orElseThrow( + () -> + new RuntimeException( + "Unable to find trace service. Please ensure TraceService is registered.")); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/GenerateConflatedTracesV2.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/GenerateConflatedTracesV2.java new file mode 100644 index 0000000000..6cd237ec44 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/GenerateConflatedTracesV2.java @@ -0,0 +1,140 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.tracegeneration; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.InvalidParameterException; + +import com.google.common.base.Stopwatch; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.zktracer.ZkTracer; +import net.consensys.linea.zktracer.json.JsonConverter; +import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.RpcErrorType; +import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.services.TraceService; +import org.hyperledger.besu.plugin.services.exception.PluginRpcEndpointException; +import org.hyperledger.besu.plugin.services.rpc.PluginRpcRequest; + +/** + * Sets up an RPC endpoint for generating conflated file trace. This class provides an RPC endpoint + * named 'generateConflatedTracesToFileV0' under the 'rollup' namespace. When this endpoint is + * called, it triggers the execution of the 'execute' method, which generates conflated file traces + * based on the provided request parameters and writes them to a file. + */ +@Slf4j +@RequiredArgsConstructor +public class GenerateConflatedTracesV2 { + private static final JsonConverter CONVERTER = JsonConverter.builder().build(); + + private final BesuContext besuContext; + private final Path tracesOutputPath; + private TraceService traceService; + + public String getNamespace() { + return "linea"; + } + + public String getName() { + return "generateConflatedTracesToFileV2"; + } + + /** + * Handles execution traces generation logic. + * + * @param request holds parameters of the RPC request. + * @return an execution file trace. + */ + public TraceFile execute(final PluginRpcRequest request) { + Stopwatch sw = Stopwatch.createStarted(); + if (this.traceService == null) { + this.traceService = getTraceService(); + } + + final Object[] rawParams = request.getParams(); + + // validate params size + if (rawParams.length != 1) { + throw new InvalidParameterException( + "Expected a single params object in the params array but got %d" + .formatted(rawParams.length)); + } + + try { + TraceRequestParams params = + CONVERTER.fromJson(CONVERTER.toJson(rawParams[0]), TraceRequestParams.class); + + params.validateTracerVersion(); + + final long fromBlock = params.startBlockNumber(); + final long toBlock = params.endBlockNumber(); + final ZkTracer tracer = new ZkTracer(); + traceService.trace( + fromBlock, + toBlock, + worldStateBeforeTracing -> tracer.traceStartConflation(toBlock - fromBlock + 1), + tracer::traceEndConflation, + tracer); + log.info("[TRACING] trace for {}-{} computed in {}", fromBlock, toBlock, sw); + sw.reset().start(); + final String path = writeTraceToFile(tracer, params); + log.info("[TRACING] trace for {}-{} serialized to {} in {}", path, toBlock, fromBlock, sw); + return new TraceFile(params.expectedTracesEngineVersion(), path); + } catch (Exception ex) { + throw new PluginRpcEndpointException(RpcErrorType.PLUGIN_INTERNAL_ERROR, ex.getMessage()); + } + } + + private TraceService getTraceService() { + return this.besuContext + .getService(TraceService.class) + .orElseThrow( + () -> + new RuntimeException( + "Unable to find trace service. Please ensure TraceService is registered.")); + } + + private String writeTraceToFile( + final ZkTracer tracer, final TraceRequestParams traceRequestParams) { + final Path fileName = generateOutputFileName(traceRequestParams); + tracer.writeToFile(fileName); + return fileName.toAbsolutePath().toString(); + } + + private Path generateOutputFileName(final TraceRequestParams traceRequestParams) { + if (!Files.isDirectory(tracesOutputPath) && !tracesOutputPath.toFile().mkdirs()) { + throw new RuntimeException( + String.format( + "Trace directory '%s' does not exist and could not be made.", + tracesOutputPath.toAbsolutePath())); + } + + return tracesOutputPath.resolve( + Paths.get( + String.format( + "%s-%s.conflated.%s.%s", + traceRequestParams.startBlockNumber(), + traceRequestParams.endBlockNumber(), + traceRequestParams.expectedTracesEngineVersion(), + getFileFormat()))); + } + + private String getFileFormat() { + return "lt"; + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TraceFile.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TraceFile.java new file mode 100644 index 0000000000..083983a4be --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TraceFile.java @@ -0,0 +1,23 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.tracegeneration; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** FileTrace represents an execution trace. */ +public record TraceFile( + @JsonProperty("tracesEngineVersion") String tracesEngineVersion, + @JsonProperty("conflatedTracesFileName") String conflatedTracesFileName) {} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TraceRequestParams.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TraceRequestParams.java new file mode 100644 index 0000000000..20d32574cb --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TraceRequestParams.java @@ -0,0 +1,38 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.tracegeneration; + +import java.security.InvalidParameterException; + +import net.consensys.linea.zktracer.ZkTracer; + +/** Holds needed parameters for sending an execution trace generation request. */ +public record TraceRequestParams( + long startBlockNumber, long endBlockNumber, String expectedTracesEngineVersion) { + + public void validateTracerVersion() { + if (!expectedTracesEngineVersion.equals(getTracerRuntime())) { + throw new InvalidParameterException( + String.format( + "INVALID_TRACES_VERSION: Runtime version is %s, requesting version %s", + getTracerRuntime(), expectedTracesEngineVersion)); + } + } + + private static String getTracerRuntime() { + return ZkTracer.class.getPackage().getSpecificationVersion(); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TracesEndpointServicePlugin.java b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TracesEndpointServicePlugin.java new file mode 100644 index 0000000000..957467588f --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TracesEndpointServicePlugin.java @@ -0,0 +1,108 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.plugins.rpc.tracegeneration; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Optional; + +import com.google.auto.service.AutoService; +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.plugins.AbstractLineaSharedOptionsPlugin; +import net.consensys.linea.plugins.config.LineaTracerCliOptions; +import net.consensys.linea.plugins.exception.TraceOutputException; +import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.services.RpcEndpointService; + +/** + * Registers RPC endpoints .This class provides an RPC endpoint named + * 'generateConflatedTracesToFileV0' under the 'rollup' namespace. It uses {@link + * GenerateConflatedTracesV2} to generate conflated file traces. This class provides an RPC endpoint + * named 'generateConflatedTracesToFileV0' under the 'rollup' namespace. + */ +@AutoService(BesuPlugin.class) +@Slf4j +public class TracesEndpointServicePlugin extends AbstractLineaSharedOptionsPlugin { + private BesuContext besuContext; + private RpcEndpointService rpcEndpointService; + + /** + * Register the RPC service. + * + * @param context the BesuContext to be used. + */ + @Override + public void register(final BesuContext context) { + super.register(context); + besuContext = context; + rpcEndpointService = + context + .getService(RpcEndpointService.class) + .orElseThrow( + () -> + new RuntimeException( + "Failed to obtain RpcEndpointService from the BesuContext.")); + } + + @Override + public void beforeExternalServices() { + super.beforeExternalServices(); + + final Optional tracesOutputPath = initTracesOutputPath(); + if (tracesOutputPath.isEmpty()) { + throw new TraceOutputException( + "Traces output path is null, please specify a valid path with %s CLI option or in a toml config file" + .formatted(LineaTracerCliOptions.CONFLATED_TRACE_GENERATION_TRACES_OUTPUT_PATH)); + } + + GenerateConflatedTracesV2 method = + new GenerateConflatedTracesV2(besuContext, tracesOutputPath.get()); + + createAndRegister(method, rpcEndpointService); + } + + private Optional initTracesOutputPath() { + final Optional tracesOutputPath = + Optional.of(Paths.get(tracerConfiguration.tracesOutputPath())); + + try { + Files.createDirectories(tracesOutputPath.get()); + } catch (IOException e) { + throw new TraceOutputException(e.getMessage()); + } + + return tracesOutputPath; + } + + /** + * Create and register the RPC service. + * + * @param method the RollupGenerateConflatedTracesToFileV0 method to be used. + * @param rpcEndpointService the RpcEndpointService to be registered. + */ + private void createAndRegister( + final GenerateConflatedTracesV2 method, final RpcEndpointService rpcEndpointService) { + rpcEndpointService.registerRPCEndpoint( + method.getNamespace(), method.getName(), method::execute); + } + + /** Start the RPC service. This method loads the OpCodes. */ + @Override + public void start() {} +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/CurveOperations.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/CurveOperations.java index cdcfdf9b9c..6efbb06bca 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/CurveOperations.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/CurveOperations.java @@ -43,7 +43,7 @@ public class CurveOperations { public static BigInteger extractParameter(final Bytes input) { if (input.isEmpty()) { - throw new IllegalArgumentException("EC_DATA input can not be empty"); + throw new IllegalArgumentException("EC_DATA input cannot be empty"); } return new BigInteger(1, input.toArray()); } @@ -70,14 +70,8 @@ public static boolean isOnG2(Bytes xBytes) { final Fq2 pX = Fq2.create(pXRe, pXIm); final Fq2 pY = Fq2.create(pYRe, pYIm); - if (!pX.isValid() || !pY.isValid()) { - return false; - } - final AltBn128Fq2Point p2 = new AltBn128Fq2Point(pX, pY); - final AltBn128Fq2Point pPowQ = p2.multiply(Q); - - return pPowQ.isInfinity(); + return p2.isOnCurve() && p2.isInGroup(); } public static boolean ecRecoverSuccessful(final Bytes input) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/ZkTracer.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/ZkTracer.java index 018268180f..4bfaaf29f1 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/ZkTracer.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/ZkTracer.java @@ -30,16 +30,18 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import net.consensys.linea.config.LineaL1L2BridgeConfiguration; +import net.consensys.linea.plugins.config.LineaL1L2BridgeConfiguration; import net.consensys.linea.zktracer.module.Module; import net.consensys.linea.zktracer.module.Pin55; import net.consensys.linea.zktracer.module.hub.Hub; import net.consensys.linea.zktracer.types.Utils; import org.apache.tuweni.bytes.Bytes; +import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.datatypes.Hash; import org.hyperledger.besu.datatypes.PendingTransaction; import org.hyperledger.besu.datatypes.Transaction; @@ -77,6 +79,7 @@ public class ZkTracer implements ConflationAwareOperationTracer { @Getter private final Hub hub; private final Optional pin55; private Hash hashOfLastTransactionTraced = Hash.EMPTY; + /** Accumulate all the exceptions that happened at tracing time. */ @Getter private final List tracingExceptions = new FiniteList<>(50); @@ -224,7 +227,6 @@ public void tracePrepareTransaction(WorldView worldView, Transaction transaction } } - @Override public void traceEndTransaction( WorldView worldView, Transaction tx, @@ -232,6 +234,7 @@ public void traceEndTransaction( Bytes output, List logs, long gasUsed, + Set

selfDestructs, long timeNs) { try { this.pin55.ifPresent(x -> x.traceEndTx(worldView, tx, status, output, logs, gasUsed)); @@ -315,6 +318,7 @@ private void maybeThrowTracingExceptions() { public Map getModulesLineCount() { maybeThrowTracingExceptions(); final HashMap modulesLineCount = new HashMap<>(); + hub.getModulesToCount() .forEach( m -> @@ -328,7 +332,7 @@ public Map getModulesLineCount() { "Module " + m.moduleKey() + " not found in spillings.toml")))); - modulesLineCount.put("BLOCK_TX", hub.cumulatedTxCount()); + modulesLineCount.put("BLOCK_TRANSACTIONS", hub.cumulatedTxCount()); return modulesLineCount; } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/bytestheta/BaseBytes.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/bytestheta/BaseBytes.java index 8d8e4c7674..2bebea5728 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/bytestheta/BaseBytes.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/bytestheta/BaseBytes.java @@ -29,6 +29,7 @@ public class BaseBytes implements HighLowBytes { /** The size in bytes of the high and low sections of the 256-bit block. */ private static final int LOW_HIGH_SIZE = 16; + /** * The mutable `Bytes32` object that stores the 256-bit block of data. Equals and hashCode must * only be computed on the numeric value wrapped by this class, so that sets of operations diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/container/stacked/list/StackedList.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/container/stacked/list/StackedList.java index 4a77b5dbd6..a7a17d2ef9 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/container/stacked/list/StackedList.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/container/stacked/list/StackedList.java @@ -35,6 +35,7 @@ public class StackedList implements List, StackedContainer { private final List> lists = new ArrayList<>(); + /** The cached number of elements in this container */ private int totalSize; @@ -239,8 +240,10 @@ public List subList(int fromIndex, int toIndex) { private static class StackedListIterator implements Iterator, ListIterator { private final StackedList sl; + /** Position of the iterator in the list of lists */ private int head = 0; + /** Position of the iterator within the current list, i.e. this.sl.lists[head] */ private int offset = -1; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/container/stacked/set/StackedSet.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/container/stacked/set/StackedSet.java index 5fb0ea2689..01e72d1bd9 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/container/stacked/set/StackedSet.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/container/stacked/set/StackedSet.java @@ -37,7 +37,7 @@ * @param the type of elements stored in the set */ public class StackedSet implements StackedContainer, java.util.Set { - private final Deque> sets = new ArrayDeque<>(); + public final Deque> sets = new ArrayDeque<>(); private final Map occurrences = new HashMap<>(); @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/json/JsonConverter.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/json/JsonConverter.java index 8804bb31fa..9085ce8c00 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/json/JsonConverter.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/json/JsonConverter.java @@ -16,11 +16,13 @@ package net.consensys.linea.zktracer.json; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import lombok.Getter; +import lombok.SneakyThrows; /** A wrapper class handling Jackson's {@link ObjectMapper} configuration. */ public class JsonConverter { @@ -39,9 +41,9 @@ private JsonConverter(Builder builder) { * * @param object the object to be serialized * @return a JSON string representing the object's data - * @throws JsonProcessingException n case of a serialization failure */ - public String toJson(Object object) throws JsonProcessingException { + @SneakyThrows(JsonProcessingException.class) + public String toJson(Object object) { if (prettyPrintEnabled) { return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object); } @@ -56,12 +58,25 @@ public String toJson(Object object) throws JsonProcessingException { * @param clazz class type of the type for deserialization * @param the deserialization type * @return an instance of the deserialized type - * @throws JsonProcessingException in case of a deserialization failure */ - public T fromJson(String jsonString, Class clazz) throws JsonProcessingException { + @SneakyThrows(JsonProcessingException.class) + public T fromJson(String jsonString, Class clazz) { return objectMapper.readValue(jsonString, clazz); } + /** + * Deserializes a JSON string to a specified type. + * + * @param jsonString JSON string to be deserialized + * @param clazz class type of the type for deserialization + * @param the deserialization type + * @return an instance of the deserialized type + */ + @SneakyThrows(JsonProcessingException.class) + public T fromJson(String jsonString) { + return objectMapper.readValue(jsonString, new TypeReference<>() {}); + } + /** * A factory for the {@link Builder} instance. * diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/add/Add.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/add/Add.java index 66bf1d97a1..bb448aaffe 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/add/Add.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/add/Add.java @@ -15,6 +15,7 @@ package net.consensys.linea.zktracer.module.add; +import java.math.BigInteger; import java.nio.MappedByteBuffer; import java.util.List; @@ -23,6 +24,8 @@ import net.consensys.linea.zktracer.container.stacked.set.StackedSet; import net.consensys.linea.zktracer.module.Module; import net.consensys.linea.zktracer.module.hub.Hub; +import net.consensys.linea.zktracer.opcode.OpCode; +import org.apache.tuweni.bytes.Bytes32; import org.hyperledger.besu.evm.frame.MessageFrame; /** Implementation of a {@link Module} for addition/subtraction. */ @@ -72,4 +75,9 @@ public void commit(List buffers) { public int lineCount() { return this.chunks.lineCount(); } + + public BigInteger callADD(Bytes32 arg1, Bytes32 arg2) { + this.chunks.add(new AddOperation(OpCode.ADD, arg1, arg2)); + return arg1.toUnsignedBigInteger().add(arg2.toUnsignedBigInteger()); + } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/add/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/add/Trace.java index 191bd1c6a0..b1df4b1234 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/add/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/add/Trace.java @@ -52,21 +52,21 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("add.ACC_1", 32, length), - new ColumnHeader("add.ACC_2", 32, length), - new ColumnHeader("add.ARG_1_HI", 32, length), - new ColumnHeader("add.ARG_1_LO", 32, length), - new ColumnHeader("add.ARG_2_HI", 32, length), - new ColumnHeader("add.ARG_2_LO", 32, length), + new ColumnHeader("add.ACC_1", 16, length), + new ColumnHeader("add.ACC_2", 16, length), + new ColumnHeader("add.ARG_1_HI", 16, length), + new ColumnHeader("add.ARG_1_LO", 16, length), + new ColumnHeader("add.ARG_2_HI", 16, length), + new ColumnHeader("add.ARG_2_LO", 16, length), new ColumnHeader("add.BYTE_1", 1, length), new ColumnHeader("add.BYTE_2", 1, length), new ColumnHeader("add.CT", 1, length), new ColumnHeader("add.CT_MAX", 1, length), new ColumnHeader("add.INST", 1, length), new ColumnHeader("add.OVERFLOW", 1, length), - new ColumnHeader("add.RES_HI", 32, length), - new ColumnHeader("add.RES_LO", 32, length), - new ColumnHeader("add.STAMP", 8, length)); + new ColumnHeader("add.RES_HI", 16, length), + new ColumnHeader("add.RES_LO", 16, length), + new ColumnHeader("add.STAMP", 4, length)); } public Trace(List buffers) { @@ -102,11 +102,20 @@ public Trace acc1(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc1.put((byte) 0); } - acc1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc1.put(bs.get(j)); + } return this; } @@ -118,11 +127,20 @@ public Trace acc2(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc2.put((byte) 0); } - acc2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc2.put(bs.get(j)); + } return this; } @@ -134,11 +152,20 @@ public Trace arg1Hi(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg1Hi.put((byte) 0); } - arg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Hi.put(bs.get(j)); + } return this; } @@ -150,11 +177,20 @@ public Trace arg1Lo(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg1Lo.put((byte) 0); } - arg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Lo.put(bs.get(j)); + } return this; } @@ -166,11 +202,20 @@ public Trace arg2Hi(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg2Hi.put((byte) 0); } - arg2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg2Hi.put(bs.get(j)); + } return this; } @@ -182,11 +227,20 @@ public Trace arg2Lo(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg2Lo.put((byte) 0); } - arg2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg2Lo.put(bs.get(j)); + } return this; } @@ -270,11 +324,20 @@ public Trace resHi(final Bytes b) { filled.set(12); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resHi.put((byte) 0); } - resHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resHi.put(bs.get(j)); + } return this; } @@ -286,11 +349,20 @@ public Trace resLo(final Bytes b) { filled.set(13); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resLo.put((byte) 0); } - resLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resLo.put(bs.get(j)); + } return this; } @@ -302,7 +374,13 @@ public Trace stamp(final long b) { filled.set(14); } - stamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 24)); + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); return this; } @@ -376,27 +454,27 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - acc1.position(acc1.position() + 32); + acc1.position(acc1.position() + 16); } if (!filled.get(1)) { - acc2.position(acc2.position() + 32); + acc2.position(acc2.position() + 16); } if (!filled.get(2)) { - arg1Hi.position(arg1Hi.position() + 32); + arg1Hi.position(arg1Hi.position() + 16); } if (!filled.get(3)) { - arg1Lo.position(arg1Lo.position() + 32); + arg1Lo.position(arg1Lo.position() + 16); } if (!filled.get(4)) { - arg2Hi.position(arg2Hi.position() + 32); + arg2Hi.position(arg2Hi.position() + 16); } if (!filled.get(5)) { - arg2Lo.position(arg2Lo.position() + 32); + arg2Lo.position(arg2Lo.position() + 16); } if (!filled.get(6)) { @@ -424,15 +502,15 @@ public Trace fillAndValidateRow() { } if (!filled.get(12)) { - resHi.position(resHi.position() + 32); + resHi.position(resHi.position() + 16); } if (!filled.get(13)) { - resLo.position(resLo.position() + 32); + resLo.position(resLo.position() + 16); } if (!filled.get(14)) { - stamp.position(stamp.position() + 8); + stamp.position(stamp.position() + 4); } filled.clear(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/bin/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/bin/Trace.java index 4a94fa814a..7b2b6d92f9 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/bin/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/bin/Trace.java @@ -74,16 +74,16 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("bin.ACC_1", 32, length), - new ColumnHeader("bin.ACC_2", 32, length), - new ColumnHeader("bin.ACC_3", 32, length), - new ColumnHeader("bin.ACC_4", 32, length), - new ColumnHeader("bin.ACC_5", 32, length), - new ColumnHeader("bin.ACC_6", 32, length), - new ColumnHeader("bin.ARGUMENT_1_HI", 32, length), - new ColumnHeader("bin.ARGUMENT_1_LO", 32, length), - new ColumnHeader("bin.ARGUMENT_2_HI", 32, length), - new ColumnHeader("bin.ARGUMENT_2_LO", 32, length), + new ColumnHeader("bin.ACC_1", 16, length), + new ColumnHeader("bin.ACC_2", 16, length), + new ColumnHeader("bin.ACC_3", 16, length), + new ColumnHeader("bin.ACC_4", 16, length), + new ColumnHeader("bin.ACC_5", 16, length), + new ColumnHeader("bin.ACC_6", 16, length), + new ColumnHeader("bin.ARGUMENT_1_HI", 16, length), + new ColumnHeader("bin.ARGUMENT_1_LO", 16, length), + new ColumnHeader("bin.ARGUMENT_2_HI", 16, length), + new ColumnHeader("bin.ARGUMENT_2_LO", 16, length), new ColumnHeader("bin.BIT_1", 1, length), new ColumnHeader("bin.BIT_B_4", 1, length), new ColumnHeader("bin.BITS", 1, length), @@ -105,10 +105,10 @@ static List headers(int length) { new ColumnHeader("bin.LOW_4", 1, length), new ColumnHeader("bin.NEG", 1, length), new ColumnHeader("bin.PIVOT", 1, length), - new ColumnHeader("bin.RESULT_HI", 32, length), - new ColumnHeader("bin.RESULT_LO", 32, length), + new ColumnHeader("bin.RESULT_HI", 16, length), + new ColumnHeader("bin.RESULT_LO", 16, length), new ColumnHeader("bin.SMALL", 1, length), - new ColumnHeader("bin.STAMP", 8, length), + new ColumnHeader("bin.STAMP", 4, length), new ColumnHeader("bin.XXX_BYTE_HI", 1, length), new ColumnHeader("bin.XXX_BYTE_LO", 1, length)); } @@ -168,11 +168,20 @@ public Trace acc1(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc1.put((byte) 0); } - acc1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc1.put(bs.get(j)); + } return this; } @@ -184,11 +193,20 @@ public Trace acc2(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc2.put((byte) 0); } - acc2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc2.put(bs.get(j)); + } return this; } @@ -200,11 +218,20 @@ public Trace acc3(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc3.put((byte) 0); } - acc3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc3.put(bs.get(j)); + } return this; } @@ -216,11 +243,20 @@ public Trace acc4(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc4.put((byte) 0); } - acc4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc4.put(bs.get(j)); + } return this; } @@ -232,11 +268,20 @@ public Trace acc5(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc5 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc5.put((byte) 0); } - acc5.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc5.put(bs.get(j)); + } return this; } @@ -248,11 +293,20 @@ public Trace acc6(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc6 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc6.put((byte) 0); } - acc6.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc6.put(bs.get(j)); + } return this; } @@ -264,11 +318,21 @@ public Trace argument1Hi(final Bytes b) { filled.set(6); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "argument1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { argument1Hi.put((byte) 0); } - argument1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + argument1Hi.put(bs.get(j)); + } return this; } @@ -280,11 +344,21 @@ public Trace argument1Lo(final Bytes b) { filled.set(7); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "argument1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { argument1Lo.put((byte) 0); } - argument1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + argument1Lo.put(bs.get(j)); + } return this; } @@ -296,11 +370,21 @@ public Trace argument2Hi(final Bytes b) { filled.set(8); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "argument2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { argument2Hi.put((byte) 0); } - argument2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + argument2Hi.put(bs.get(j)); + } return this; } @@ -312,11 +396,21 @@ public Trace argument2Lo(final Bytes b) { filled.set(9); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "argument2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { argument2Lo.put((byte) 0); } - argument2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + argument2Lo.put(bs.get(j)); + } return this; } @@ -580,11 +674,20 @@ public Trace resultHi(final Bytes b) { filled.set(31); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resultHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resultHi.put((byte) 0); } - resultHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resultHi.put(bs.get(j)); + } return this; } @@ -596,11 +699,20 @@ public Trace resultLo(final Bytes b) { filled.set(32); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resultLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resultLo.put((byte) 0); } - resultLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resultLo.put(bs.get(j)); + } return this; } @@ -624,7 +736,13 @@ public Trace stamp(final long b) { filled.set(34); } - stamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 24)); + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); return this; } @@ -810,43 +928,43 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - acc1.position(acc1.position() + 32); + acc1.position(acc1.position() + 16); } if (!filled.get(1)) { - acc2.position(acc2.position() + 32); + acc2.position(acc2.position() + 16); } if (!filled.get(2)) { - acc3.position(acc3.position() + 32); + acc3.position(acc3.position() + 16); } if (!filled.get(3)) { - acc4.position(acc4.position() + 32); + acc4.position(acc4.position() + 16); } if (!filled.get(4)) { - acc5.position(acc5.position() + 32); + acc5.position(acc5.position() + 16); } if (!filled.get(5)) { - acc6.position(acc6.position() + 32); + acc6.position(acc6.position() + 16); } if (!filled.get(6)) { - argument1Hi.position(argument1Hi.position() + 32); + argument1Hi.position(argument1Hi.position() + 16); } if (!filled.get(7)) { - argument1Lo.position(argument1Lo.position() + 32); + argument1Lo.position(argument1Lo.position() + 16); } if (!filled.get(8)) { - argument2Hi.position(argument2Hi.position() + 32); + argument2Hi.position(argument2Hi.position() + 16); } if (!filled.get(9)) { - argument2Lo.position(argument2Lo.position() + 32); + argument2Lo.position(argument2Lo.position() + 16); } if (!filled.get(11)) { @@ -934,11 +1052,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(31)) { - resultHi.position(resultHi.position() + 32); + resultHi.position(resultHi.position() + 16); } if (!filled.get(32)) { - resultLo.position(resultLo.position() + 32); + resultLo.position(resultLo.position() + 16); } if (!filled.get(33)) { @@ -946,7 +1064,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(34)) { - stamp.position(stamp.position() + 8); + stamp.position(stamp.position() + 4); } if (!filled.get(35)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fModexpDataOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fModexpDataOperation.java deleted file mode 100644 index f87c648d99..0000000000 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fModexpDataOperation.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright ConsenSys Inc. - * - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package net.consensys.linea.zktracer.module.blake2fmodexpdata; - -import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_BLAKE_DATA; -import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_BLAKE_PARAMS; -import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_BLAKE_RESULT; -import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_MODEXP_BASE; -import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_MODEXP_EXPONENT; -import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_MODEXP_MODULUS; -import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_MODEXP_RESULT; -import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; -import static net.consensys.linea.zktracer.types.Conversions.bytesToUnsignedBytes; -import static net.consensys.linea.zktracer.types.Utils.leftPadTo; -import static net.consensys.linea.zktracer.types.Utils.rightPadTo; - -import java.math.BigInteger; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import com.google.common.base.Preconditions; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.experimental.Accessors; -import net.consensys.linea.zktracer.container.ModuleOperation; -import net.consensys.linea.zktracer.types.UnsignedByte; -import org.apache.tuweni.bytes.Bytes; -import org.hyperledger.besu.crypto.Hash; - -@EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = false) -@Accessors(fluent = true) -public class Blake2fModexpDataOperation extends ModuleOperation { - private static final int MODEXP_COMPONENT_INT_BYTE_SIZE = 32; - private static final int MODEXP_COMPONENT_SIZE = 512; - private static final int MODEXP_LIMB_INT_BYTE_SIZE = 16; - private static final int BLAKE2f_DATA_SIZE = Trace.INDEX_MAX_BLAKE_DATA + 1; - private static final int BLAKE2f_RESULT_SIZE = Trace.INDEX_MAX_BLAKE_RESULT + 1; - private static final int BLAKE2f_PARAMS_SIZE = Trace.INDEX_MAX_BLAKE_PARAMS + 1; - private static final int BLAKE2f_LIMB_INT_BYTE_SIZE = 16; - private static final int MODEXP_COMPONENTS_LINE_COUNT = 32 * 4; - private static final int BLAKE2f_COMPONENTS_LINE_COUNT = - BLAKE2f_DATA_SIZE + BLAKE2f_RESULT_SIZE + BLAKE2f_PARAMS_SIZE; - - private static final Map PHASE_INFO_MAP = - Map.of( - PHASE_MODEXP_BASE, new PhaseInfo(PHASE_MODEXP_BASE, Trace.INDEX_MAX_MODEXP_BASE), - PHASE_MODEXP_EXPONENT, - new PhaseInfo(PHASE_MODEXP_EXPONENT, Trace.INDEX_MAX_MODEXP_EXPONENT), - PHASE_MODEXP_MODULUS, new PhaseInfo(PHASE_MODEXP_MODULUS, Trace.INDEX_MAX_MODEXP_MODULUS), - PHASE_MODEXP_RESULT, new PhaseInfo(PHASE_MODEXP_RESULT, Trace.INDEX_MAX_MODEXP_RESULT), - PHASE_BLAKE_DATA, new PhaseInfo(PHASE_BLAKE_DATA, Trace.INDEX_MAX_BLAKE_DATA), - PHASE_BLAKE_PARAMS, new PhaseInfo(PHASE_BLAKE_PARAMS, Trace.INDEX_MAX_BLAKE_PARAMS), - PHASE_BLAKE_RESULT, new PhaseInfo(PHASE_BLAKE_RESULT, Trace.INDEX_MAX_BLAKE_RESULT)); - - @EqualsAndHashCode.Include public final long hubStampPlusOne; - @Getter private long prevHubStamp; - - @EqualsAndHashCode.Include public final Optional modexpComponents; - @EqualsAndHashCode.Include public final Optional blake2fComponents; - - public Blake2fModexpDataOperation( - long hubStamp, - long prevHubStamp, - ModexpComponents modexpComponents, - Blake2fComponents blake2fComponents) { - this.hubStampPlusOne = hubStamp + 1; - this.prevHubStamp = prevHubStamp; - this.modexpComponents = Optional.ofNullable(modexpComponents); - this.blake2fComponents = Optional.ofNullable(blake2fComponents); - } - - @Override - protected int computeLineCount() { - return modexpComponents.isPresent() - ? MODEXP_COMPONENTS_LINE_COUNT - : BLAKE2f_COMPONENTS_LINE_COUNT; - } - - void trace(Trace trace, int stamp) { - final UnsignedByte stampByte = UnsignedByte.of(stamp); - - final UnsignedByte[] hubStampDiffBytes = getHubStampDiffBytes(this.hubStampPlusOne); - - final Bytes modexpComponentsLimb = - modexpComponents.map(this::buildModexpComponentsLimb).orElse(Bytes.EMPTY); - - final Bytes blake2fResult = - blake2fComponents.map(c -> computeBlake2fResult(c.rawInput())).orElse(Bytes.EMPTY); - - var tracerBuilder = - Blake2fModexpTraceHelper.builder() - .trace(trace) - .currentHubStamp(this.hubStampPlusOne) - .prevHubStamp(prevHubStamp) - .phaseInfoMap(PHASE_INFO_MAP) - .hubStampDiffBytes(hubStampDiffBytes) - .stampByte(stampByte); - - if (modexpComponents.isPresent()) { - Blake2fModexpTraceHelper modexpTraceHelper = - tracerBuilder - .startPhaseIndex(PHASE_MODEXP_BASE) - .endPhaseIndex(PHASE_MODEXP_RESULT) - .currentRowIndexFunction( - ((phaseInfo, phaseIndex, index) -> - phaseInfo.indexMax() * (phaseIndex - 1) + index)) - .traceLimbConsumer( - (rowIndex, phaseIndex) -> { - if (!modexpComponentsLimb.isEmpty()) { - trace.limb( - modexpComponentsLimb.slice( - MODEXP_LIMB_INT_BYTE_SIZE * rowIndex, MODEXP_LIMB_INT_BYTE_SIZE)); - } - }) - .build(); - - modexpTraceHelper.trace(); - - prevHubStamp = modexpTraceHelper.prevHubStamp(); - } - - if (blake2fComponents.isPresent()) { - Blake2fComponents components = blake2fComponents.get(); - Blake2fModexpTraceHelper blake2fTraceHelper = - tracerBuilder - .startPhaseIndex(PHASE_BLAKE_DATA) - .endPhaseIndex(PHASE_BLAKE_RESULT) - .currentRowIndexFunction(((phaseInfo, phaseIndex, index) -> index)) - .traceLimbConsumer( - (rowIndex, phaseIndex) -> { - if (phaseIndex == PHASE_BLAKE_DATA) { - trace.limb( - components - .data() - .slice( - BLAKE2f_LIMB_INT_BYTE_SIZE * rowIndex, - BLAKE2f_LIMB_INT_BYTE_SIZE)); - } else if (phaseIndex == PHASE_BLAKE_PARAMS) { - if (rowIndex == Trace.INDEX_MAX_BLAKE_PARAMS - 1) { - trace.limb(components.r()); - } else { - trace.limb(components.f()); - } - } else { - trace.limb( - blake2fResult.slice( - BLAKE2f_LIMB_INT_BYTE_SIZE * rowIndex, BLAKE2f_LIMB_INT_BYTE_SIZE)); - } - }) - .build(); - - blake2fTraceHelper.trace(); - - prevHubStamp = blake2fTraceHelper.prevHubStamp(); - } - } - - private Bytes buildModexpComponentsLimb(ModexpComponents components) { - final Bytes result = computeModexpResult(components); - final Bytes basePadded = leftPadTo(components.base(), MODEXP_COMPONENT_SIZE); - final Bytes expPadded = leftPadTo(components.exp(), MODEXP_COMPONENT_SIZE); - final Bytes modPadded = leftPadTo(components.mod(), MODEXP_COMPONENT_SIZE); - final Bytes resultPadded = leftPadTo(result, MODEXP_COMPONENT_SIZE); - - return Bytes.concatenate(basePadded, expPadded, modPadded, resultPadded); - } - - private Bytes computeModexpResult(ModexpComponents modexpComponents) { - final BigInteger baseBigInt = modexpComponents.base().toUnsignedBigInteger(); - final BigInteger expBigInt = modexpComponents.exp().toUnsignedBigInteger(); - final BigInteger modBigInt = modexpComponents.mod().toUnsignedBigInteger(); - - if (List.of(baseBigInt, expBigInt, modBigInt).contains(BigInteger.ZERO)) { - return Bytes.EMPTY; - } - - return bigIntegerToBytes(baseBigInt.modPow(expBigInt, modBigInt)); - } - - private Bytes computeBlake2fResult(Bytes input) { - return Hash.blake2bf(input); - } - - private UnsignedByte[] getHubStampDiffBytes(long currentHubStamp) { - final long hubStampDiff = currentHubStamp - prevHubStamp - 1; - - Preconditions.checkArgument( - hubStampDiff < Math.pow(256, 6), "Hub stamp difference should never exceed 256 ^ 6"); - - return bytesToUnsignedBytes( - rightPadTo(leftPadTo(Bytes.ofUnsignedInt(hubStampDiff), 6), 128).toArray()); - } -} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fModexpTraceHelper.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fModexpTraceHelper.java deleted file mode 100644 index 849dcad3bb..0000000000 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fModexpTraceHelper.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright ConsenSys Inc. - * - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package net.consensys.linea.zktracer.module.blake2fmodexpdata; - -import java.util.Map; -import java.util.function.BiConsumer; - -import lombok.Builder; -import lombok.Getter; -import lombok.experimental.Accessors; -import net.consensys.linea.zktracer.types.UnsignedByte; -import org.apache.commons.lang3.function.TriFunction; - -@Builder -@Accessors(fluent = true) -public class Blake2fModexpTraceHelper { - private final long currentHubStamp; - @Getter private long prevHubStamp; - private final int startPhaseIndex; - private final int endPhaseIndex; - - private final Map phaseInfoMap; - private final Trace trace; - private final UnsignedByte stampByte; - private final BiConsumer traceLimbConsumer; - private final TriFunction currentRowIndexFunction; - private UnsignedByte[] hubStampDiffBytes; - - void trace() { - boolean[] phaseFlags = new boolean[7]; - - for (int phaseIndex = startPhaseIndex; phaseIndex <= endPhaseIndex; phaseIndex++) { - phaseFlags[phaseIndex - 1] = true; - - final PhaseInfo phaseInfo = phaseInfoMap.get(phaseIndex); - - final int indexMax = phaseInfo.indexMax(); - for (int index = 0; index <= indexMax; index++) { - int rowIndex = currentRowIndexFunction.apply(phaseInfo, phaseIndex, index); - - trace - .phase(UnsignedByte.of(phaseInfo.id())) - .deltaByte(hubStampDiffBytes[rowIndex]) - .id(currentHubStamp) - .index(UnsignedByte.of(index)) - .indexMax(UnsignedByte.of(indexMax)) - .stamp(stampByte); - - traceLimbConsumer.accept(rowIndex, phaseIndex); - - trace - .isModexpBase(phaseFlags[0]) - .isModexpExponent(phaseFlags[1]) - .isModexpModulus(phaseFlags[2]) - .isModexpResult(phaseFlags[3]) - .isBlakeData(phaseFlags[4]) - .isBlakeParams(phaseFlags[5]) - .isBlakeResult(phaseFlags[6]) - .validateRow(); - } - - phaseFlags[phaseIndex - 1] = false; - } - - prevHubStamp = currentHubStamp; - } -} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fComponents.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/BlakeComponents.java similarity index 89% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fComponents.java rename to arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/BlakeComponents.java index 81a28e0173..27ca817d90 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fComponents.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/BlakeComponents.java @@ -17,4 +17,4 @@ import org.apache.tuweni.bytes.Bytes; -public record Blake2fComponents(Bytes rawInput, Bytes data, Bytes r, Bytes f) {} +public record BlakeComponents(Bytes data, Bytes r, Bytes f) {} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fModexpData.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/BlakeModexpData.java similarity index 56% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fModexpData.java rename to arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/BlakeModexpData.java index a81b350582..d8f23a268a 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Blake2fModexpData.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/BlakeModexpData.java @@ -23,34 +23,71 @@ import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_MODEXP_RESULT; import java.nio.MappedByteBuffer; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import lombok.RequiredArgsConstructor; import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.container.stacked.set.StackedSet; import net.consensys.linea.zktracer.module.Module; +import net.consensys.linea.zktracer.module.wcp.Wcp; import org.apache.tuweni.bytes.Bytes; +import org.hyperledger.besu.datatypes.Transaction; +import org.hyperledger.besu.evm.log.Log; +import org.hyperledger.besu.evm.worldstate.WorldView; -public class Blake2fModexpData implements Module { - private StackedSet state = new StackedSet<>(); +@RequiredArgsConstructor +public class BlakeModexpData implements Module { + private final Wcp wcp; + private StackedSet operations = new StackedSet<>(); + private List sortedOperations = new ArrayList<>(); + private int numberOfOperationsAtStartTx = 0; @Override public String moduleKey() { - return "BLAKE2f_MODEXP_DATA"; + return "BLAKE_MODEXP_DATA"; } @Override public void enterTransaction() { - this.state.enter(); + this.operations.enter(); + } + + @Override + public void traceEndTx( + WorldView worldView, + Transaction tx, + boolean isSuccessful, + Bytes output, + List logs, + long gasUsed) { + final List newOperations = + new ArrayList<>(this.operations.sets.getLast()) + .stream().sorted(Comparator.comparingLong(BlakeModexpDataOperation::id)).toList(); + + this.sortedOperations.addAll(newOperations); + final int numberOfOperationsAtEndTx = sortedOperations.size(); + for (int i = numberOfOperationsAtStartTx; i < numberOfOperationsAtEndTx; i++) { + final long previousID = i == 0 ? 0 : sortedOperations.get(i - 1).id(); + this.wcp.callLT(previousID, sortedOperations.get(i).id()); + } + } + + @Override + public void traceStartTx(WorldView worldView, Transaction tx) { + this.numberOfOperationsAtStartTx = operations.size(); } @Override public void popTransaction() { - this.state.pop(); + this.sortedOperations.removeAll(this.operations.sets.getLast()); + this.operations.pop(); } @Override public int lineCount() { - return this.state.lineCount(); + return this.operations.lineCount(); } @Override @@ -58,24 +95,22 @@ public List columnsHeaders() { return Trace.headers(this.lineCount()); } - public long call(final Blake2fModexpDataOperation operation) { - this.state.add(operation); - - return operation.prevHubStamp(); + public void call(final BlakeModexpDataOperation operation) { + this.operations.add(operation); } @Override public void commit(List buffers) { Trace trace = new Trace(buffers); int stamp = 0; - for (Blake2fModexpDataOperation o : this.state) { + for (BlakeModexpDataOperation o : this.sortedOperations) { stamp++; o.trace(trace, stamp); } } public Bytes getInputDataByIdAndPhase(final int id, final int phase) { - final Blake2fModexpDataOperation op = getOperationById(id); + final BlakeModexpDataOperation op = getOperationById(id); return switch (phase) { case PHASE_MODEXP_BASE -> op.modexpComponents.get().base(); case PHASE_MODEXP_EXPONENT -> op.modexpComponents.get().exp(); @@ -87,9 +122,9 @@ public Bytes getInputDataByIdAndPhase(final int id, final int phase) { }; } - private Blake2fModexpDataOperation getOperationById(final int id) { - for (Blake2fModexpDataOperation operation : this.state) { - if (id == operation.hubStampPlusOne) { + private BlakeModexpDataOperation getOperationById(final int id) { + for (BlakeModexpDataOperation operation : this.operations) { + if (id == operation.id) { return operation; } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/BlakeModexpDataOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/BlakeModexpDataOperation.java new file mode 100644 index 0000000000..ebd2c9cbff --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/BlakeModexpDataOperation.java @@ -0,0 +1,184 @@ +/* + * Copyright ConsenSys Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.blake2fmodexpdata; + +import static net.consensys.linea.zktracer.module.blake2fmodexpdata.Trace.INDEX_MAX_BLAKE_DATA; +import static net.consensys.linea.zktracer.module.blake2fmodexpdata.Trace.INDEX_MAX_BLAKE_PARAMS; +import static net.consensys.linea.zktracer.module.blake2fmodexpdata.Trace.INDEX_MAX_BLAKE_RESULT; +import static net.consensys.linea.zktracer.module.blake2fmodexpdata.Trace.INDEX_MAX_MODEXP; +import static net.consensys.linea.zktracer.module.blake2fmodexpdata.Trace.INDEX_MAX_MODEXP_BASE; +import static net.consensys.linea.zktracer.module.blake2fmodexpdata.Trace.INDEX_MAX_MODEXP_EXPONENT; +import static net.consensys.linea.zktracer.module.blake2fmodexpdata.Trace.INDEX_MAX_MODEXP_MODULUS; +import static net.consensys.linea.zktracer.module.blake2fmodexpdata.Trace.INDEX_MAX_MODEXP_RESULT; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.LLARGE; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_BLAKE_DATA; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_BLAKE_PARAMS; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_BLAKE_RESULT; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_MODEXP_BASE; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_MODEXP_EXPONENT; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_MODEXP_MODULUS; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_MODEXP_RESULT; +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Utils.leftPadTo; + +import java.math.BigInteger; +import java.util.Optional; + +import lombok.Getter; +import lombok.experimental.Accessors; +import net.consensys.linea.zktracer.container.ModuleOperation; +import net.consensys.linea.zktracer.types.UnsignedByte; +import org.apache.tuweni.bytes.Bytes; +import org.hyperledger.besu.crypto.Hash; + +@Accessors(fluent = true) +public class BlakeModexpDataOperation extends ModuleOperation { + private static final int MODEXP_COMPONENT_BYTE_SIZE = LLARGE * (INDEX_MAX_MODEXP + 1); + private static final int MODEXP_COMPONENTS_LINE_COUNT = + (INDEX_MAX_MODEXP_BASE + 1) + + (INDEX_MAX_MODEXP_EXPONENT + 1) + + (INDEX_MAX_MODEXP_MODULUS + 1) + + (INDEX_MAX_MODEXP_RESULT + 1); + private static final int BLAKE2f_COMPONENTS_LINE_COUNT = + (INDEX_MAX_BLAKE_DATA + 1) + (INDEX_MAX_BLAKE_PARAMS + 1) + (INDEX_MAX_BLAKE_RESULT + 1); + + @Getter public final long id; + + public final Optional modexpComponents; + public final Optional blake2fComponents; + + public BlakeModexpDataOperation( + long hubStamp, ModexpComponents modexpComponents, BlakeComponents blakeComponents) { + this.id = hubStamp + 1; + this.modexpComponents = Optional.ofNullable(modexpComponents); + this.blake2fComponents = Optional.ofNullable(blakeComponents); + } + + @Override + protected int computeLineCount() { + return modexpComponents.isPresent() + ? MODEXP_COMPONENTS_LINE_COUNT + : BLAKE2f_COMPONENTS_LINE_COUNT; + } + + void trace(Trace trace, final int stamp) { + final UnsignedByte stampByte = UnsignedByte.of(stamp); + + if (modexpComponents.isPresent()) { + traceBase(trace, stampByte); + traceExponent(trace, stampByte); + traceModulus(trace, stampByte); + traceModexpResult(trace, stampByte); + return; + } + + if (blake2fComponents.isPresent()) { + traceData(trace, stampByte); + traceParameter(trace, stampByte); + traceBlakeResult(trace, stampByte); + } + } + + private void traceData(Trace trace, UnsignedByte stamp) { + final Bytes input = blake2fComponents.get().data(); + for (int index = 0; index <= INDEX_MAX_BLAKE_DATA; index++) { + commonTrace(trace, stamp, index, input, INDEX_MAX_BLAKE_DATA); + trace.phase(UnsignedByte.of(PHASE_BLAKE_DATA)).isBlakeData(true).fillAndValidateRow(); + } + } + + private void traceParameter(Trace trace, UnsignedByte stamp) { + // r + commonTrace( + trace, stamp, 0, leftPadTo(blake2fComponents.get().r(), LLARGE), INDEX_MAX_BLAKE_PARAMS); + trace.phase(UnsignedByte.of(PHASE_BLAKE_PARAMS)).isBlakeParams(true).fillAndValidateRow(); + + // f + commonTrace( + trace, + stamp, + 1, + leftPadTo(blake2fComponents.get().f(), 2 * LLARGE), + INDEX_MAX_BLAKE_PARAMS); + trace.phase(UnsignedByte.of(PHASE_BLAKE_PARAMS)).isBlakeParams(true).fillAndValidateRow(); + } + + private void traceBlakeResult(Trace trace, UnsignedByte stamp) { + final Bytes input = computeBlake2fResult(); + for (int index = 0; index <= INDEX_MAX_BLAKE_RESULT; index++) { + commonTrace(trace, stamp, index, input, INDEX_MAX_BLAKE_RESULT); + trace.phase(UnsignedByte.of(PHASE_BLAKE_RESULT)).isBlakeResult(true).fillAndValidateRow(); + } + } + + private void traceBase(Trace trace, final UnsignedByte stamp) { + final Bytes input = leftPadTo(modexpComponents.get().base(), MODEXP_COMPONENT_BYTE_SIZE); + for (int index = 0; index <= INDEX_MAX_MODEXP_BASE; index++) { + commonTrace(trace, stamp, index, input, INDEX_MAX_MODEXP_BASE); + trace.phase(UnsignedByte.of(PHASE_MODEXP_BASE)).isModexpBase(true).fillAndValidateRow(); + } + } + + private void traceExponent(Trace trace, final UnsignedByte stamp) { + final Bytes input = leftPadTo(modexpComponents.get().exp(), MODEXP_COMPONENT_BYTE_SIZE); + for (int index = 0; index <= INDEX_MAX_MODEXP_EXPONENT; index++) { + commonTrace(trace, stamp, index, input, INDEX_MAX_MODEXP_EXPONENT); + trace + .phase(UnsignedByte.of(PHASE_MODEXP_EXPONENT)) + .isModexpExponent(true) + .fillAndValidateRow(); + } + } + + private void traceModulus(Trace trace, final UnsignedByte stamp) { + final Bytes input = leftPadTo(modexpComponents.get().mod(), MODEXP_COMPONENT_BYTE_SIZE); + for (int index = 0; index <= INDEX_MAX_MODEXP_MODULUS; index++) { + commonTrace(trace, stamp, index, input, INDEX_MAX_MODEXP_MODULUS); + trace.phase(UnsignedByte.of(PHASE_MODEXP_MODULUS)).isModexpModulus(true).fillAndValidateRow(); + } + } + + private void traceModexpResult(Trace trace, final UnsignedByte stamp) { + final Bytes input = leftPadTo(computeModexpResult(), MODEXP_COMPONENT_BYTE_SIZE); + for (int index = 0; index <= INDEX_MAX_MODEXP_RESULT; index++) { + commonTrace(trace, stamp, index, input, INDEX_MAX_MODEXP_RESULT); + trace.phase(UnsignedByte.of(PHASE_MODEXP_RESULT)).isModexpResult(true).fillAndValidateRow(); + } + } + + private void commonTrace(Trace trace, UnsignedByte stamp, int index, Bytes input, int indexMax) { + trace + .stamp(stamp) + .id(id) + .index(UnsignedByte.of(index)) + .indexMax(UnsignedByte.of(indexMax)) + .limb(input.slice(index * LLARGE, LLARGE)); + } + + private Bytes computeModexpResult() { + final BigInteger baseBigInt = modexpComponents.get().base().toUnsignedBigInteger(); + final BigInteger expBigInt = modexpComponents.get().exp().toUnsignedBigInteger(); + final BigInteger modBigInt = modexpComponents.get().mod().toUnsignedBigInteger(); + + return modBigInt.equals(BigInteger.ZERO) + ? Bytes.of(0) + : bigIntegerToBytes(baseBigInt.modPow(expBigInt, modBigInt)); + } + + private Bytes computeBlake2fResult() { + return Hash.blake2bf(blake2fComponents.get().data()); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Trace.java index 92c8c54e58..56d0f6c493 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/Trace.java @@ -33,6 +33,7 @@ public class Trace { public static final int INDEX_MAX_BLAKE_DATA = 0xc; public static final int INDEX_MAX_BLAKE_PARAMS = 0x1; public static final int INDEX_MAX_BLAKE_RESULT = 0x3; + public static final int INDEX_MAX_MODEXP = 0x1f; public static final int INDEX_MAX_MODEXP_BASE = 0x1f; public static final int INDEX_MAX_MODEXP_EXPONENT = 0x1f; public static final int INDEX_MAX_MODEXP_MODULUS = 0x1f; @@ -41,7 +42,6 @@ public class Trace { private final BitSet filled = new BitSet(); private int currentLine = 0; - private final MappedByteBuffer deltaByte; private final MappedByteBuffer id; private final MappedByteBuffer index; private final MappedByteBuffer indexMax; @@ -58,8 +58,7 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("blake2fmodexpdata.DELTA_BYTE", 1, length), - new ColumnHeader("blake2fmodexpdata.ID", 8, length), + new ColumnHeader("blake2fmodexpdata.ID", 6, length), new ColumnHeader("blake2fmodexpdata.INDEX", 1, length), new ColumnHeader("blake2fmodexpdata.INDEX_MAX", 1, length), new ColumnHeader("blake2fmodexpdata.IS_BLAKE_DATA", 1, length), @@ -69,26 +68,25 @@ static List headers(int length) { new ColumnHeader("blake2fmodexpdata.IS_MODEXP_EXPONENT", 1, length), new ColumnHeader("blake2fmodexpdata.IS_MODEXP_MODULUS", 1, length), new ColumnHeader("blake2fmodexpdata.IS_MODEXP_RESULT", 1, length), - new ColumnHeader("blake2fmodexpdata.LIMB", 32, length), + new ColumnHeader("blake2fmodexpdata.LIMB", 16, length), new ColumnHeader("blake2fmodexpdata.PHASE", 1, length), new ColumnHeader("blake2fmodexpdata.STAMP", 1, length)); } public Trace(List buffers) { - this.deltaByte = buffers.get(0); - this.id = buffers.get(1); - this.index = buffers.get(2); - this.indexMax = buffers.get(3); - this.isBlakeData = buffers.get(4); - this.isBlakeParams = buffers.get(5); - this.isBlakeResult = buffers.get(6); - this.isModexpBase = buffers.get(7); - this.isModexpExponent = buffers.get(8); - this.isModexpModulus = buffers.get(9); - this.isModexpResult = buffers.get(10); - this.limb = buffers.get(11); - this.phase = buffers.get(12); - this.stamp = buffers.get(13); + this.id = buffers.get(0); + this.index = buffers.get(1); + this.indexMax = buffers.get(2); + this.isBlakeData = buffers.get(3); + this.isBlakeParams = buffers.get(4); + this.isBlakeResult = buffers.get(5); + this.isModexpBase = buffers.get(6); + this.isModexpExponent = buffers.get(7); + this.isModexpModulus = buffers.get(8); + this.isModexpResult = buffers.get(9); + this.limb = buffers.get(10); + this.phase = buffers.get(11); + this.stamp = buffers.get(12); } public int size() { @@ -99,35 +97,31 @@ public int size() { return this.currentLine; } - public Trace deltaByte(final UnsignedByte b) { + public Trace id(final long b) { if (filled.get(0)) { - throw new IllegalStateException("blake2fmodexpdata.DELTA_BYTE already set"); + throw new IllegalStateException("blake2fmodexpdata.ID already set"); } else { filled.set(0); } - deltaByte.put(b.toByte()); - - return this; - } - - public Trace id(final long b) { - if (filled.get(1)) { - throw new IllegalStateException("blake2fmodexpdata.ID already set"); - } else { - filled.set(1); + if (b >= 281474976710656L) { + throw new IllegalArgumentException("id has invalid value (" + b + ")"); } - - id.putLong(b); + id.put((byte) (b >> 40)); + id.put((byte) (b >> 32)); + id.put((byte) (b >> 24)); + id.put((byte) (b >> 16)); + id.put((byte) (b >> 8)); + id.put((byte) b); return this; } public Trace index(final UnsignedByte b) { - if (filled.get(2)) { + if (filled.get(1)) { throw new IllegalStateException("blake2fmodexpdata.INDEX already set"); } else { - filled.set(2); + filled.set(1); } index.put(b.toByte()); @@ -136,10 +130,10 @@ public Trace index(final UnsignedByte b) { } public Trace indexMax(final UnsignedByte b) { - if (filled.get(3)) { + if (filled.get(2)) { throw new IllegalStateException("blake2fmodexpdata.INDEX_MAX already set"); } else { - filled.set(3); + filled.set(2); } indexMax.put(b.toByte()); @@ -148,10 +142,10 @@ public Trace indexMax(final UnsignedByte b) { } public Trace isBlakeData(final Boolean b) { - if (filled.get(4)) { + if (filled.get(3)) { throw new IllegalStateException("blake2fmodexpdata.IS_BLAKE_DATA already set"); } else { - filled.set(4); + filled.set(3); } isBlakeData.put((byte) (b ? 1 : 0)); @@ -160,10 +154,10 @@ public Trace isBlakeData(final Boolean b) { } public Trace isBlakeParams(final Boolean b) { - if (filled.get(5)) { + if (filled.get(4)) { throw new IllegalStateException("blake2fmodexpdata.IS_BLAKE_PARAMS already set"); } else { - filled.set(5); + filled.set(4); } isBlakeParams.put((byte) (b ? 1 : 0)); @@ -172,10 +166,10 @@ public Trace isBlakeParams(final Boolean b) { } public Trace isBlakeResult(final Boolean b) { - if (filled.get(6)) { + if (filled.get(5)) { throw new IllegalStateException("blake2fmodexpdata.IS_BLAKE_RESULT already set"); } else { - filled.set(6); + filled.set(5); } isBlakeResult.put((byte) (b ? 1 : 0)); @@ -184,10 +178,10 @@ public Trace isBlakeResult(final Boolean b) { } public Trace isModexpBase(final Boolean b) { - if (filled.get(7)) { + if (filled.get(6)) { throw new IllegalStateException("blake2fmodexpdata.IS_MODEXP_BASE already set"); } else { - filled.set(7); + filled.set(6); } isModexpBase.put((byte) (b ? 1 : 0)); @@ -196,10 +190,10 @@ public Trace isModexpBase(final Boolean b) { } public Trace isModexpExponent(final Boolean b) { - if (filled.get(8)) { + if (filled.get(7)) { throw new IllegalStateException("blake2fmodexpdata.IS_MODEXP_EXPONENT already set"); } else { - filled.set(8); + filled.set(7); } isModexpExponent.put((byte) (b ? 1 : 0)); @@ -208,10 +202,10 @@ public Trace isModexpExponent(final Boolean b) { } public Trace isModexpModulus(final Boolean b) { - if (filled.get(9)) { + if (filled.get(8)) { throw new IllegalStateException("blake2fmodexpdata.IS_MODEXP_MODULUS already set"); } else { - filled.set(9); + filled.set(8); } isModexpModulus.put((byte) (b ? 1 : 0)); @@ -220,10 +214,10 @@ public Trace isModexpModulus(final Boolean b) { } public Trace isModexpResult(final Boolean b) { - if (filled.get(10)) { + if (filled.get(9)) { throw new IllegalStateException("blake2fmodexpdata.IS_MODEXP_RESULT already set"); } else { - filled.set(10); + filled.set(9); } isModexpResult.put((byte) (b ? 1 : 0)); @@ -232,26 +226,35 @@ public Trace isModexpResult(final Boolean b) { } public Trace limb(final Bytes b) { - if (filled.get(11)) { + if (filled.get(10)) { throw new IllegalStateException("blake2fmodexpdata.LIMB already set"); } else { - filled.set(11); + filled.set(10); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("limb has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb.put((byte) 0); } - limb.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb.put(bs.get(j)); + } return this; } public Trace phase(final UnsignedByte b) { - if (filled.get(12)) { + if (filled.get(11)) { throw new IllegalStateException("blake2fmodexpdata.PHASE already set"); } else { - filled.set(12); + filled.set(11); } phase.put(b.toByte()); @@ -260,10 +263,10 @@ public Trace phase(final UnsignedByte b) { } public Trace stamp(final UnsignedByte b) { - if (filled.get(13)) { + if (filled.get(12)) { throw new IllegalStateException("blake2fmodexpdata.STAMP already set"); } else { - filled.set(13); + filled.set(12); } stamp.put(b.toByte()); @@ -273,58 +276,54 @@ public Trace stamp(final UnsignedByte b) { public Trace validateRow() { if (!filled.get(0)) { - throw new IllegalStateException("blake2fmodexpdata.DELTA_BYTE has not been filled"); - } - - if (!filled.get(1)) { throw new IllegalStateException("blake2fmodexpdata.ID has not been filled"); } - if (!filled.get(2)) { + if (!filled.get(1)) { throw new IllegalStateException("blake2fmodexpdata.INDEX has not been filled"); } - if (!filled.get(3)) { + if (!filled.get(2)) { throw new IllegalStateException("blake2fmodexpdata.INDEX_MAX has not been filled"); } - if (!filled.get(4)) { + if (!filled.get(3)) { throw new IllegalStateException("blake2fmodexpdata.IS_BLAKE_DATA has not been filled"); } - if (!filled.get(5)) { + if (!filled.get(4)) { throw new IllegalStateException("blake2fmodexpdata.IS_BLAKE_PARAMS has not been filled"); } - if (!filled.get(6)) { + if (!filled.get(5)) { throw new IllegalStateException("blake2fmodexpdata.IS_BLAKE_RESULT has not been filled"); } - if (!filled.get(7)) { + if (!filled.get(6)) { throw new IllegalStateException("blake2fmodexpdata.IS_MODEXP_BASE has not been filled"); } - if (!filled.get(8)) { + if (!filled.get(7)) { throw new IllegalStateException("blake2fmodexpdata.IS_MODEXP_EXPONENT has not been filled"); } - if (!filled.get(9)) { + if (!filled.get(8)) { throw new IllegalStateException("blake2fmodexpdata.IS_MODEXP_MODULUS has not been filled"); } - if (!filled.get(10)) { + if (!filled.get(9)) { throw new IllegalStateException("blake2fmodexpdata.IS_MODEXP_RESULT has not been filled"); } - if (!filled.get(11)) { + if (!filled.get(10)) { throw new IllegalStateException("blake2fmodexpdata.LIMB has not been filled"); } - if (!filled.get(12)) { + if (!filled.get(11)) { throw new IllegalStateException("blake2fmodexpdata.PHASE has not been filled"); } - if (!filled.get(13)) { + if (!filled.get(12)) { throw new IllegalStateException("blake2fmodexpdata.STAMP has not been filled"); } @@ -336,58 +335,54 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - deltaByte.position(deltaByte.position() + 1); + id.position(id.position() + 6); } if (!filled.get(1)) { - id.position(id.position() + 8); + index.position(index.position() + 1); } if (!filled.get(2)) { - index.position(index.position() + 1); + indexMax.position(indexMax.position() + 1); } if (!filled.get(3)) { - indexMax.position(indexMax.position() + 1); + isBlakeData.position(isBlakeData.position() + 1); } if (!filled.get(4)) { - isBlakeData.position(isBlakeData.position() + 1); + isBlakeParams.position(isBlakeParams.position() + 1); } if (!filled.get(5)) { - isBlakeParams.position(isBlakeParams.position() + 1); + isBlakeResult.position(isBlakeResult.position() + 1); } if (!filled.get(6)) { - isBlakeResult.position(isBlakeResult.position() + 1); + isModexpBase.position(isModexpBase.position() + 1); } if (!filled.get(7)) { - isModexpBase.position(isModexpBase.position() + 1); + isModexpExponent.position(isModexpExponent.position() + 1); } if (!filled.get(8)) { - isModexpExponent.position(isModexpExponent.position() + 1); + isModexpModulus.position(isModexpModulus.position() + 1); } if (!filled.get(9)) { - isModexpModulus.position(isModexpModulus.position() + 1); + isModexpResult.position(isModexpResult.position() + 1); } if (!filled.get(10)) { - isModexpResult.position(isModexpResult.position() + 1); + limb.position(limb.position() + 16); } if (!filled.get(11)) { - limb.position(limb.position() + 32); - } - - if (!filled.get(12)) { phase.position(phase.position() + 1); } - if (!filled.get(13)) { + if (!filled.get(12)) { stamp.position(stamp.position() + 1); } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockdata/Blockdata.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockdata/Blockdata.java index 7d953927c7..c7e0df3150 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockdata/Blockdata.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockdata/Blockdata.java @@ -50,7 +50,7 @@ public Blockdata(Wcp wcp, TxnData txnData, RlpTxn rlpTxn) { @Override public String moduleKey() { - return "BLOCKDATA"; + return "BLOCK_DATA"; } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockdata/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockdata/Trace.java index 25df8d59e3..be4ef37095 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockdata/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockdata/Trace.java @@ -89,8 +89,8 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("blockdata.BASEFEE", 8, length), - new ColumnHeader("blockdata.BLOCK_GAS_LIMIT", 8, length), + new ColumnHeader("blockdata.BASEFEE", 6, length), + new ColumnHeader("blockdata.BLOCK_GAS_LIMIT", 6, length), new ColumnHeader("blockdata.BYTE_HI_0", 1, length), new ColumnHeader("blockdata.BYTE_HI_1", 1, length), new ColumnHeader("blockdata.BYTE_HI_10", 1, length), @@ -123,15 +123,15 @@ static List headers(int length) { new ColumnHeader("blockdata.BYTE_LO_7", 1, length), new ColumnHeader("blockdata.BYTE_LO_8", 1, length), new ColumnHeader("blockdata.BYTE_LO_9", 1, length), - new ColumnHeader("blockdata.COINBASE_HI", 8, length), - new ColumnHeader("blockdata.COINBASE_LO", 32, length), - new ColumnHeader("blockdata.CT", 2, length), - new ColumnHeader("blockdata.DATA_HI", 32, length), - new ColumnHeader("blockdata.DATA_LO", 32, length), - new ColumnHeader("blockdata.FIRST_BLOCK_NUMBER", 8, length), + new ColumnHeader("blockdata.COINBASE_HI", 4, length), + new ColumnHeader("blockdata.COINBASE_LO", 16, length), + new ColumnHeader("blockdata.CT", 1, length), + new ColumnHeader("blockdata.DATA_HI", 16, length), + new ColumnHeader("blockdata.DATA_LO", 16, length), + new ColumnHeader("blockdata.FIRST_BLOCK_NUMBER", 6, length), new ColumnHeader("blockdata.INST", 1, length), - new ColumnHeader("blockdata.REL_BLOCK", 2, length), - new ColumnHeader("blockdata.REL_TX_NUM_MAX", 2, length), + new ColumnHeader("blockdata.REL_BLOCK", 1, length), + new ColumnHeader("blockdata.REL_TX_NUM_MAX", 1, length), new ColumnHeader("blockdata.WCP_FLAG", 1, length)); } @@ -197,7 +197,15 @@ public Trace basefee(final long b) { filled.set(0); } - basefee.putLong(b); + if (b >= 281474976710656L) { + throw new IllegalArgumentException("basefee has invalid value (" + b + ")"); + } + basefee.put((byte) (b >> 40)); + basefee.put((byte) (b >> 32)); + basefee.put((byte) (b >> 24)); + basefee.put((byte) (b >> 16)); + basefee.put((byte) (b >> 8)); + basefee.put((byte) b); return this; } @@ -209,7 +217,15 @@ public Trace blockGasLimit(final long b) { filled.set(1); } - blockGasLimit.putLong(b); + if (b >= 281474976710656L) { + throw new IllegalArgumentException("blockGasLimit has invalid value (" + b + ")"); + } + blockGasLimit.put((byte) (b >> 40)); + blockGasLimit.put((byte) (b >> 32)); + blockGasLimit.put((byte) (b >> 24)); + blockGasLimit.put((byte) (b >> 16)); + blockGasLimit.put((byte) (b >> 8)); + blockGasLimit.put((byte) b); return this; } @@ -605,7 +621,13 @@ public Trace coinbaseHi(final long b) { filled.set(34); } - coinbaseHi.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("coinbaseHi has invalid value (" + b + ")"); + } + coinbaseHi.put((byte) (b >> 24)); + coinbaseHi.put((byte) (b >> 16)); + coinbaseHi.put((byte) (b >> 8)); + coinbaseHi.put((byte) b); return this; } @@ -617,23 +639,36 @@ public Trace coinbaseLo(final Bytes b) { filled.set(35); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "coinbaseLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { coinbaseLo.put((byte) 0); } - coinbaseLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + coinbaseLo.put(bs.get(j)); + } return this; } - public Trace ct(final short b) { + public Trace ct(final long b) { if (filled.get(36)) { throw new IllegalStateException("blockdata.CT already set"); } else { filled.set(36); } - ct.putShort(b); + if (b >= 16L) { + throw new IllegalArgumentException("ct has invalid value (" + b + ")"); + } + ct.put((byte) b); return this; } @@ -645,11 +680,20 @@ public Trace dataHi(final Bytes b) { filled.set(37); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("dataHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { dataHi.put((byte) 0); } - dataHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + dataHi.put(bs.get(j)); + } return this; } @@ -661,11 +705,20 @@ public Trace dataLo(final Bytes b) { filled.set(38); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("dataLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { dataLo.put((byte) 0); } - dataLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + dataLo.put(bs.get(j)); + } return this; } @@ -677,7 +730,15 @@ public Trace firstBlockNumber(final long b) { filled.set(39); } - firstBlockNumber.putLong(b); + if (b >= 281474976710656L) { + throw new IllegalArgumentException("firstBlockNumber has invalid value (" + b + ")"); + } + firstBlockNumber.put((byte) (b >> 40)); + firstBlockNumber.put((byte) (b >> 32)); + firstBlockNumber.put((byte) (b >> 24)); + firstBlockNumber.put((byte) (b >> 16)); + firstBlockNumber.put((byte) (b >> 8)); + firstBlockNumber.put((byte) b); return this; } @@ -694,26 +755,32 @@ public Trace inst(final UnsignedByte b) { return this; } - public Trace relBlock(final short b) { + public Trace relBlock(final long b) { if (filled.get(41)) { throw new IllegalStateException("blockdata.REL_BLOCK already set"); } else { filled.set(41); } - relBlock.putShort(b); + if (b >= 256L) { + throw new IllegalArgumentException("relBlock has invalid value (" + b + ")"); + } + relBlock.put((byte) b); return this; } - public Trace relTxNumMax(final short b) { + public Trace relTxNumMax(final long b) { if (filled.get(42)) { throw new IllegalStateException("blockdata.REL_TX_NUM_MAX already set"); } else { filled.set(42); } - relTxNumMax.putShort(b); + if (b >= 256L) { + throw new IllegalArgumentException("relTxNumMax has invalid value (" + b + ")"); + } + relTxNumMax.put((byte) b); return this; } @@ -915,11 +982,11 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - basefee.position(basefee.position() + 8); + basefee.position(basefee.position() + 6); } if (!filled.get(1)) { - blockGasLimit.position(blockGasLimit.position() + 8); + blockGasLimit.position(blockGasLimit.position() + 6); } if (!filled.get(2)) { @@ -1051,27 +1118,27 @@ public Trace fillAndValidateRow() { } if (!filled.get(34)) { - coinbaseHi.position(coinbaseHi.position() + 8); + coinbaseHi.position(coinbaseHi.position() + 4); } if (!filled.get(35)) { - coinbaseLo.position(coinbaseLo.position() + 32); + coinbaseLo.position(coinbaseLo.position() + 16); } if (!filled.get(36)) { - ct.position(ct.position() + 2); + ct.position(ct.position() + 1); } if (!filled.get(37)) { - dataHi.position(dataHi.position() + 32); + dataHi.position(dataHi.position() + 16); } if (!filled.get(38)) { - dataLo.position(dataLo.position() + 32); + dataLo.position(dataLo.position() + 16); } if (!filled.get(39)) { - firstBlockNumber.position(firstBlockNumber.position() + 8); + firstBlockNumber.position(firstBlockNumber.position() + 6); } if (!filled.get(40)) { @@ -1079,11 +1146,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(41)) { - relBlock.position(relBlock.position() + 2); + relBlock.position(relBlock.position() + 1); } if (!filled.get(42)) { - relTxNumMax.position(relTxNumMax.position() + 2); + relTxNumMax.position(relTxNumMax.position() + 1); } if (!filled.get(43)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockhash/Blockhash.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockhash/Blockhash.java index 3512e73b1a..c1483a9bf7 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockhash/Blockhash.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockhash/Blockhash.java @@ -59,7 +59,7 @@ public Blockhash(Wcp wcp) { @Override public String moduleKey() { - return "BLOCKHASH"; + return "BLOCK_HASH"; } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockhash/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockhash/Trace.java index 1930e5a463..ca008a4cbb 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockhash/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blockhash/Trace.java @@ -81,11 +81,11 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("blockhash.ABS_BLOCK", 8, length), - new ColumnHeader("blockhash.BLOCK_HASH_HI", 32, length), - new ColumnHeader("blockhash.BLOCK_HASH_LO", 32, length), - new ColumnHeader("blockhash.BLOCK_NUMBER_HI", 32, length), - new ColumnHeader("blockhash.BLOCK_NUMBER_LO", 32, length), + new ColumnHeader("blockhash.ABS_BLOCK", 6, length), + new ColumnHeader("blockhash.BLOCK_HASH_HI", 16, length), + new ColumnHeader("blockhash.BLOCK_HASH_LO", 16, length), + new ColumnHeader("blockhash.BLOCK_NUMBER_HI", 16, length), + new ColumnHeader("blockhash.BLOCK_NUMBER_LO", 16, length), new ColumnHeader("blockhash.BYTE_HI_0", 1, length), new ColumnHeader("blockhash.BYTE_HI_1", 1, length), new ColumnHeader("blockhash.BYTE_HI_10", 1, length), @@ -121,9 +121,9 @@ static List headers(int length) { new ColumnHeader("blockhash.IN_RANGE", 1, length), new ColumnHeader("blockhash.IOMF", 1, length), new ColumnHeader("blockhash.LOWER_BOUND_CHECK", 1, length), - new ColumnHeader("blockhash.REL_BLOCK", 2, length), - new ColumnHeader("blockhash.RES_HI", 32, length), - new ColumnHeader("blockhash.RES_LO", 32, length), + new ColumnHeader("blockhash.REL_BLOCK", 1, length), + new ColumnHeader("blockhash.RES_HI", 16, length), + new ColumnHeader("blockhash.RES_LO", 16, length), new ColumnHeader("blockhash.UPPER_BOUND_CHECK", 1, length)); } @@ -189,7 +189,15 @@ public Trace absBlock(final long b) { filled.set(0); } - absBlock.putLong(b); + if (b >= 281474976710656L) { + throw new IllegalArgumentException("absBlock has invalid value (" + b + ")"); + } + absBlock.put((byte) (b >> 40)); + absBlock.put((byte) (b >> 32)); + absBlock.put((byte) (b >> 24)); + absBlock.put((byte) (b >> 16)); + absBlock.put((byte) (b >> 8)); + absBlock.put((byte) b); return this; } @@ -201,11 +209,21 @@ public Trace blockHashHi(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "blockHashHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { blockHashHi.put((byte) 0); } - blockHashHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + blockHashHi.put(bs.get(j)); + } return this; } @@ -217,11 +235,21 @@ public Trace blockHashLo(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "blockHashLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { blockHashLo.put((byte) 0); } - blockHashLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + blockHashLo.put(bs.get(j)); + } return this; } @@ -233,11 +261,21 @@ public Trace blockNumberHi(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "blockNumberHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { blockNumberHi.put((byte) 0); } - blockNumberHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + blockNumberHi.put(bs.get(j)); + } return this; } @@ -249,11 +287,21 @@ public Trace blockNumberLo(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "blockNumberLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { blockNumberLo.put((byte) 0); } - blockNumberLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + blockNumberLo.put(bs.get(j)); + } return this; } @@ -678,14 +726,17 @@ public Trace lowerBoundCheck(final Boolean b) { return this; } - public Trace relBlock(final short b) { + public Trace relBlock(final long b) { if (filled.get(40)) { throw new IllegalStateException("blockhash.REL_BLOCK already set"); } else { filled.set(40); } - relBlock.putShort(b); + if (b >= 256L) { + throw new IllegalArgumentException("relBlock has invalid value (" + b + ")"); + } + relBlock.put((byte) b); return this; } @@ -697,11 +748,20 @@ public Trace resHi(final Bytes b) { filled.set(41); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resHi.put((byte) 0); } - resHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resHi.put(bs.get(j)); + } return this; } @@ -713,11 +773,20 @@ public Trace resLo(final Bytes b) { filled.set(42); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resLo.put((byte) 0); } - resLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resLo.put(bs.get(j)); + } return this; } @@ -919,23 +988,23 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - absBlock.position(absBlock.position() + 8); + absBlock.position(absBlock.position() + 6); } if (!filled.get(1)) { - blockHashHi.position(blockHashHi.position() + 32); + blockHashHi.position(blockHashHi.position() + 16); } if (!filled.get(2)) { - blockHashLo.position(blockHashLo.position() + 32); + blockHashLo.position(blockHashLo.position() + 16); } if (!filled.get(3)) { - blockNumberHi.position(blockNumberHi.position() + 32); + blockNumberHi.position(blockNumberHi.position() + 16); } if (!filled.get(4)) { - blockNumberLo.position(blockNumberLo.position() + 32); + blockNumberLo.position(blockNumberLo.position() + 16); } if (!filled.get(5)) { @@ -1079,15 +1148,15 @@ public Trace fillAndValidateRow() { } if (!filled.get(40)) { - relBlock.position(relBlock.position() + 2); + relBlock.position(relBlock.position() + 1); } if (!filled.get(41)) { - resHi.position(resHi.position() + 32); + resHi.position(resHi.position() + 16); } if (!filled.get(42)) { - resLo.position(resLo.position() + 32); + resLo.position(resLo.position() + 16); } if (!filled.get(43)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/constants/GlobalConstants.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/constants/GlobalConstants.java index 8b56c9680a..32c7e0c6e2 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/constants/GlobalConstants.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/constants/GlobalConstants.java @@ -25,18 +25,19 @@ */ public class GlobalConstants { public static final int BLOCKHASH_MAX_HISTORY = 0x100; + public static final int CREATE2_SHIFT = 0xff; public static final int EIP_3541_MARKER = 0xef; public static final BigInteger EMPTY_KECCAK_HI = - new BigInteger("16434357337474432580558001204043214908"); + new BigInteger("262949717399590921288928019264691438528"); public static final BigInteger EMPTY_KECCAK_LO = - new BigInteger("19024806816994025362060938983270537799"); - public static final int EMPTY_RIPEMD_HI = 0x9c1185a; + new BigInteger("304396909071904405792975023732328604784"); + public static final long EMPTY_RIPEMD_HI = 0x9c1185a5L; public static final BigInteger EMPTY_RIPEMD_LO = - new BigInteger("16442052386882578548602430796343695571"); + new BigInteger("263072838190121256777638892741499129137"); public static final BigInteger EMPTY_SHA2_HI = - new BigInteger("18915786244935348617899154533661473682"); + new BigInteger("302652579918965577886386472538583578916"); public static final BigInteger EMPTY_SHA2_LO = - new BigInteger("3296542996298665609207448061432114053"); + new BigInteger("52744687940778649747319168982913824853"); public static final int EVM_INST_ADD = 0x1; public static final int EVM_INST_ADDMOD = 0x8; public static final int EVM_INST_ADDRESS = 0x30; @@ -239,6 +240,7 @@ public class GlobalConstants { public static final int LLARGE = 0x10; public static final int LLARGEMO = 0xf; public static final int LLARGEPO = 0x11; + public static final int MAX_CODE_SIZE = 0x6000; public static final int MAX_REFUND_QUOTIENT = 0x5; public static final int MISC_WEIGHT_EXP = 0x1; public static final int MISC_WEIGHT_MMU = 0x2; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/EcData.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/EcData.java index 204595374c..7d62464556 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/EcData.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/EcData.java @@ -16,9 +16,11 @@ package net.consensys.linea.zktracer.module.ecdata; import java.nio.MappedByteBuffer; +import java.util.Comparator; import java.util.List; import java.util.Set; +import lombok.Getter; import lombok.RequiredArgsConstructor; import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.container.stacked.set.StackedSet; @@ -37,11 +39,12 @@ public class EcData implements Module { public static final Set
EC_PRECOMPILES = Set.of(Address.ECREC, Address.ALTBN128_ADD, Address.ALTBN128_MUL, Address.ALTBN128_PAIRING); - private final StackedSet operations = new StackedSet<>(); + @Getter private final StackedSet operations = new StackedSet<>(); private final Hub hub; private final Wcp wcp; private final Ext ext; - private int previousContextNumber = 0; + + @Getter private EcDataOperation ecdDataOperation; @Override public String moduleKey() { @@ -60,28 +63,22 @@ public void popTransaction() { @Override public void tracePreOpcode(MessageFrame frame) { - final Address to = Words.toAddress(frame.getStackItem(1)); - if (!EC_PRECOMPILES.contains(to)) { + final Address target = Words.toAddress(frame.getStackItem(1)); + if (!EC_PRECOMPILES.contains(target)) { return; } final MemorySpan callDataSource = hub.transients().op().callDataSegment(); - if (to.equals(Address.ALTBN128_PAIRING) + if (target.equals(Address.ALTBN128_PAIRING) && (callDataSource.isEmpty() || callDataSource.length() % 192 != 0)) { return; } - final Bytes input = hub.transients().op().callData(); - - this.operations.add( - EcDataOperation.of( - this.wcp, - this.ext, - to, - input, - this.hub.currentFrame().contextNumber(), - this.previousContextNumber)); - this.previousContextNumber = this.hub.currentFrame().contextNumber(); + final Bytes data = hub.transients().op().callData(); + + this.ecdDataOperation = + EcDataOperation.of(this.wcp, this.ext, 1 + this.hub.stamp(), target.get(19), data); + this.operations.add(ecdDataOperation); } @Override @@ -97,8 +94,16 @@ public List columnsHeaders() { @Override public void commit(List buffers) { final Trace trace = new Trace(buffers); - for (EcDataOperation op : this.operations) { - op.trace(trace); + int stamp = 0; + long previousId = 0; + + List sortedOperations = + this.operations.stream().sorted(Comparator.comparingLong(EcDataOperation::id)).toList(); + + for (EcDataOperation op : sortedOperations) { + stamp++; + op.trace(trace, stamp, previousId); + previousId = op.id(); } } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/EcDataOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/EcDataOperation.java index 7530d8f7cf..7514949b82 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/EcDataOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/EcDataOperation.java @@ -15,6 +15,40 @@ package net.consensys.linea.zktracer.module.ecdata; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_ECADD_DATA; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_ECADD_RESULT; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_ECMUL_DATA; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_ECMUL_RESULT; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_ECPAIRING_DATA; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_ECPAIRING_RESULT; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_ECRECOVER_DATA; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_ECRECOVER_RESULT; +import static net.consensys.linea.zktracer.module.ecdata.Trace.CT_MAX_LARGE_POINT; +import static net.consensys.linea.zktracer.module.ecdata.Trace.CT_MAX_SMALL_POINT; +import static net.consensys.linea.zktracer.module.ecdata.Trace.ECADD; +import static net.consensys.linea.zktracer.module.ecdata.Trace.ECMUL; +import static net.consensys.linea.zktracer.module.ecdata.Trace.ECPAIRING; +import static net.consensys.linea.zktracer.module.ecdata.Trace.ECRECOVER; +import static net.consensys.linea.zktracer.module.ecdata.Trace.INDEX_MAX_ECADD_DATA; +import static net.consensys.linea.zktracer.module.ecdata.Trace.INDEX_MAX_ECADD_RESULT; +import static net.consensys.linea.zktracer.module.ecdata.Trace.INDEX_MAX_ECMUL_DATA; +import static net.consensys.linea.zktracer.module.ecdata.Trace.INDEX_MAX_ECMUL_RESULT; +import static net.consensys.linea.zktracer.module.ecdata.Trace.INDEX_MAX_ECPAIRING_DATA_MIN; +import static net.consensys.linea.zktracer.module.ecdata.Trace.INDEX_MAX_ECPAIRING_RESULT; +import static net.consensys.linea.zktracer.module.ecdata.Trace.INDEX_MAX_ECRECOVER_DATA; +import static net.consensys.linea.zktracer.module.ecdata.Trace.INDEX_MAX_ECRECOVER_RESULT; +import static net.consensys.linea.zktracer.module.ecdata.Trace.P_BN_HI; +import static net.consensys.linea.zktracer.module.ecdata.Trace.P_BN_LO; +import static net.consensys.linea.zktracer.module.ecdata.Trace.SECP256K1N_HI; +import static net.consensys.linea.zktracer.module.ecdata.Trace.SECP256K1N_LO; +import static net.consensys.linea.zktracer.module.ecdata.Trace.TOTAL_SIZE_ECADD_DATA; +import static net.consensys.linea.zktracer.module.ecdata.Trace.TOTAL_SIZE_ECADD_RESULT; +import static net.consensys.linea.zktracer.module.ecdata.Trace.TOTAL_SIZE_ECMUL_DATA; +import static net.consensys.linea.zktracer.module.ecdata.Trace.TOTAL_SIZE_ECMUL_RESULT; +import static net.consensys.linea.zktracer.module.ecdata.Trace.TOTAL_SIZE_ECPAIRING_DATA_MIN; +import static net.consensys.linea.zktracer.module.ecdata.Trace.TOTAL_SIZE_ECPAIRING_RESULT; +import static net.consensys.linea.zktracer.module.ecdata.Trace.TOTAL_SIZE_ECRECOVER_DATA; +import static net.consensys.linea.zktracer.module.ecdata.Trace.TOTAL_SIZE_ECRECOVER_RESULT; import static net.consensys.linea.zktracer.types.Containers.repeat; import static net.consensys.linea.zktracer.types.Utils.leftPadTo; @@ -22,324 +56,741 @@ import java.util.Set; import com.google.common.base.Preconditions; +import lombok.Getter; import lombok.experimental.Accessors; -import net.consensys.linea.zktracer.CurveOperations; import net.consensys.linea.zktracer.container.ModuleOperation; import net.consensys.linea.zktracer.module.ext.Ext; import net.consensys.linea.zktracer.module.wcp.Wcp; import net.consensys.linea.zktracer.opcode.OpCode; import net.consensys.linea.zktracer.types.EWord; +import net.consensys.linea.zktracer.types.UnsignedByte; +import org.apache.commons.lang3.tuple.Pair; import org.apache.tuweni.bytes.Bytes; -import org.hyperledger.besu.datatypes.Address; +import org.hyperledger.besu.crypto.altbn128.AltBn128Fq2Point; +import org.hyperledger.besu.crypto.altbn128.Fq2; @Accessors(fluent = true) public class EcDataOperation extends ModuleOperation { - private static final int EC_RECOVER = 1; - private static final int EC_ADD = 6; - private static final int EC_MUL = 7; - private static final int EC_PAIRING = 8; - private static final Set EC_TYPES = Set.of(EC_RECOVER, EC_ADD, EC_MUL, EC_PAIRING); - - private static final EWord P = - EWord.ofHexString("0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47"); - private static final EWord Q = - EWord.ofHexString("0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000001"); - private static final EWord SECP256_K1N = - EWord.ofHexString("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"); + private static final Set EC_TYPES = Set.of(ECRECOVER, ECADD, ECMUL, ECPAIRING); + private static final EWord P_BN = EWord.of(P_BN_HI, P_BN_LO); + public static final EWord SECP256K1N = EWord.of(SECP256K1N_HI, SECP256K1N_LO); + public static final int nBYTES_OF_DELTA_BYTES = 4; private final Wcp wcp; private final Ext ext; - private final int contextNumber; - private final int contextNumberDelta; - private final Bytes input; + @Getter private final long id; + private final Bytes data; private final int ecType; private final int nRows; - /** -1 if no switch off (i.e. preliminary checks passed) */ - private int hurdleSwitchOffRow; + private final int nRowsData; + private final int nRowsResult; - private final List comparisons; - private final List equalities; - private final List squares; - private final List cubes; - private final List limbs; + @Getter private final List limb; + private final List hurdle; + @Getter private boolean internalChecksPassed; // WCP interaction - private final List wcpArg1; - private final List wcpArg2; - private final List wcpInst; + private final List wcpFlag; + private final List wcpArg1Hi; + private final List wcpArg1Lo; + private final List wcpArg2Hi; + private final List wcpArg2Lo; private final List wcpRes; + private final List wcpInst; // EXT interaction - private final List extArg1; - private final List extArg2; - private final List extArg3; + private final List extFlag; + private final List extArg1Hi; + private final List extArg1Lo; + private final List extArg2Hi; + private final List extArg2Lo; + private final List extArg3Hi; + private final List extArg3Lo; + private final List extResHi; + private final List extResLo; private final List extInst; - private final List extRes; + + @Getter private boolean successBit; + private boolean circuitSelectorEcrecover; + private boolean circuitSelectorEcadd; + private boolean circuitSelectorEcmul; // pairing-specific - private int thisIsNotOnG2Index; - private final int nPairings; - - private static int addressToEcType(final Address target) { - if (target.equals(Address.ECREC)) { - return EC_RECOVER; - } else if (target.equals(Address.ALTBN128_ADD)) { - return EC_ADD; - } else if (target.equals(Address.ALTBN128_MUL)) { - return EC_MUL; - } else if (target.equals(Address.ALTBN128_PAIRING)) { - return EC_PAIRING; - } else { - throw new IllegalArgumentException("invalid EC address"); - } - } + private final int totalPairings; - private static int ecTypeToNRows(int ecType, final Bytes input) { - return switch (ecType) { - case EC_RECOVER, EC_ADD -> 8; - case EC_MUL -> 6; - case EC_PAIRING -> input.size() / 16; - default -> throw new IllegalArgumentException("invalid EC type"); - }; - } + private List notOnG2; // counter-constant + private List notOnG2Acc; // counter-constant + private boolean notOnG2AccMax; // index-constant + private List isInfinity; // counter-constant + private List overallTrivialPairing; // counter-constant + + // For debugging + private boolean returnDataSet = false; - private EcDataOperation( - Wcp wcp, Ext ext, int contextNumber, int previousContextNumber, int ecType, Bytes input) { + private EcDataOperation(Wcp wcp, Ext ext, int id, int ecType, Bytes data) { Preconditions.checkArgument(EC_TYPES.contains(ecType), "invalid EC type"); - final int nRows = ecTypeToNRows(ecType, input); - final int minInputLength = ecType == EC_MUL ? 96 : 128; - if (input.size() < minInputLength) { - this.input = leftPadTo(input, minInputLength); + final int minInputLength = ecType == ECMUL ? 96 : 128; + if (data.size() < minInputLength) { + this.data = leftPadTo(data, minInputLength); } else { - this.input = input; + this.data = data; } - this.contextNumber = contextNumber; - this.contextNumberDelta = contextNumber - previousContextNumber; this.ecType = ecType; - this.nRows = nRows; - this.thisIsNotOnG2Index = -1; - if (ecType == EC_PAIRING) { - this.nPairings = input.size() / 192; + + if (ecType == ECPAIRING) { + totalPairings = data.size() / 192; } else { - this.nPairings = 0; + totalPairings = 0; } - this.comparisons = repeat(false, nRows / 2); - this.equalities = repeat(false, nRows); - this.squares = repeat(Bytes.EMPTY, nRows / 2); - this.cubes = repeat(Bytes.EMPTY, nRows / 2); - this.limbs = repeat(Bytes.EMPTY, nRows / 2); - - this.wcpArg1 = repeat(Bytes.EMPTY, nRows); - this.wcpArg2 = repeat(Bytes.EMPTY, nRows); - this.wcpInst = repeat(OpCode.INVALID, nRows); - this.wcpRes = repeat(false, nRows); - - this.extArg1 = repeat(Bytes.EMPTY, nRows); - this.extArg2 = repeat(Bytes.EMPTY, nRows); - this.extArg3 = repeat(Bytes.EMPTY, nRows); - this.extInst = repeat(OpCode.INVALID, nRows); - this.extRes = repeat(Bytes.EMPTY, nRows); + nRowsData = getIndexMax(ecType, true) + 1; + nRowsResult = getIndexMax(ecType, false) + 1; + nRows = nRowsData + nRowsResult; + this.id = id; + + limb = repeat(Bytes.EMPTY, nRows); + hurdle = repeat(false, nRows); + + wcpFlag = repeat(false, nRows); + wcpArg1Hi = repeat(Bytes.EMPTY, nRows); + wcpArg1Lo = repeat(Bytes.EMPTY, nRows); + wcpArg2Hi = repeat(Bytes.EMPTY, nRows); + wcpArg2Lo = repeat(Bytes.EMPTY, nRows); + wcpRes = repeat(false, nRows); + wcpInst = repeat(OpCode.INVALID, nRows); + + extFlag = repeat(false, nRows); + extArg1Hi = repeat(Bytes.EMPTY, nRows); + extArg1Lo = repeat(Bytes.EMPTY, nRows); + extArg2Hi = repeat(Bytes.EMPTY, nRows); + extArg2Lo = repeat(Bytes.EMPTY, nRows); + extArg3Hi = repeat(Bytes.EMPTY, nRows); + extArg3Lo = repeat(Bytes.EMPTY, nRows); + extResHi = repeat(Bytes.EMPTY, nRows); + extResLo = repeat(Bytes.EMPTY, nRows); + extInst = repeat(OpCode.INVALID, nRows); this.wcp = wcp; this.ext = ext; + + isInfinity = repeat(false, nRows); + overallTrivialPairing = repeat(true, nRows); + notOnG2 = repeat(false, nRows); + notOnG2Acc = repeat(false, nRows); } - public static EcDataOperation of( - Wcp wcp, - Ext ext, - final Address to, - Bytes input, - int currentContextNumber, - int previousContextNumber) { - final int ecType = addressToEcType(to); - - EcDataOperation r = - new EcDataOperation(wcp, ext, currentContextNumber, previousContextNumber, ecType, input); + public static EcDataOperation of(Wcp wcp, Ext ext, int id, final int ecType, Bytes data) { + EcDataOperation ecDataRes = new EcDataOperation(wcp, ext, id, ecType, data); switch (ecType) { - case EC_RECOVER -> r.handleRecover(); - case EC_ADD -> r.handleAdd(); - case EC_MUL -> r.handleMul(); - case EC_PAIRING -> r.handlePairing(); + case ECRECOVER -> ecDataRes.handleRecover(); + case ECADD -> ecDataRes.handleAdd(); + case ECMUL -> ecDataRes.handleMul(); + case ECPAIRING -> ecDataRes.handlePairing(); } - return r; + return ecDataRes; } - private boolean preliminaryChecksPassed() { - return this.hurdleSwitchOffRow == -1; - } + public void setReturnData(Bytes returnData) { + switch (ecType) { + case ECRECOVER -> { + EWord recoveredAddress = EWord.ZERO; - private boolean callWcp(int i, OpCode inst, Bytes arg1, Bytes arg2) { - final boolean r = - switch (inst) { - case LT -> this.wcp.callLT(arg1, arg2); - case EQ -> this.wcp.callEQ(arg1, arg2); - default -> throw new IllegalStateException("Unexpected value: " + inst); - }; + // Extract output + if (internalChecksPassed) { + System.out.println(returnData.toArray().length); + recoveredAddress = EWord.of(returnData); + } - this.wcpArg1.set(i, arg1); - this.wcpArg2.set(i, arg2); - this.wcpInst.set(i, inst); - this.wcpRes.set(i, r); - return r; - } + // Set success bit and output limb + successBit = !recoveredAddress.isZero(); + limb.set(8, recoveredAddress.hi()); + limb.set(9, recoveredAddress.lo()); + } + case ECADD -> { + EWord resX = EWord.ZERO; + EWord resY = EWord.ZERO; + + // Extract output + if (internalChecksPassed && returnData.toArray().length != 0) { + Preconditions.checkArgument(returnData.toArray().length == 64); + System.out.println(returnData.toArray().length); + resX = EWord.of(returnData.slice(0, 32)); + resY = EWord.of(returnData.slice(32, 32)); + } - private Bytes callExt(int i, OpCode opCode, Bytes arg1, Bytes arg2, Bytes arg3) { - final Bytes result = ext.call(opCode, arg1, arg2, arg3); - this.extArg1.set(i, arg1); - this.extArg2.set(i, arg2); - this.extArg3.set(i, arg3); - this.extInst.set(i, opCode); - this.extRes.set(i, result); + // Set success bit and output limb + successBit = internalChecksPassed; + limb.set(8, resX.hi()); + limb.set(9, resX.lo()); + limb.set(10, resY.hi()); + limb.set(11, resY.lo()); + } + case ECMUL -> { + EWord resX = EWord.ZERO; + EWord resY = EWord.ZERO; + + // Extract output + if (internalChecksPassed && returnData.toArray().length != 0) { + Preconditions.checkArgument(returnData.toArray().length == 64); + System.out.println(returnData.toArray().length); + resX = EWord.of(returnData.slice(0, 32)); + resY = EWord.of(returnData.slice(32, 32)); + } - return result; - } + // Set success bit and output limb + successBit = internalChecksPassed; + limb.set(6, resX.hi()); + limb.set(7, resX.lo()); + limb.set(8, resY.hi()); + limb.set(9, resY.lo()); + } + case ECPAIRING -> { + EWord pairingResult = EWord.ZERO; - private void fillHurdle() { - for (int i = 0; i < this.nRows; i++) { - boolean check = false; - switch (i % 4) { - case 1 -> { - check = true; + // Extract output + if (internalChecksPassed) { + System.out.println(returnData.toArray().length); + pairingResult = EWord.of(returnData); } - case 0, 2 -> { - check = this.comparisons.get(i / 2); + + // Set output limb + limb.set(limb.size() - 2, pairingResult.hi()); + limb.set(limb.size() - 1, pairingResult.lo()); + + // Set successBit + /* + if (!internalChecksPassed || notOnG2AccMax) { + successBit = false; + } else { + successBit = true; } - case 3 -> { - check = this.equalities.get(i); + */ + if (!internalChecksPassed) { + successBit = false; + } else { + successBit = !notOnG2AccMax; } } - if (!check) { - this.hurdleSwitchOffRow = i; - return; - } } + returnDataSet = true; + } - this.hurdleSwitchOffRow = -1; + private int getTotalSize(int ecType, boolean isData) { + Preconditions.checkArgument(returnDataSet, "returnData must be set before"); + + if (isData) { + return switch (ecType) { + case ECRECOVER -> TOTAL_SIZE_ECRECOVER_DATA; + case ECADD -> TOTAL_SIZE_ECADD_DATA; + case ECMUL -> TOTAL_SIZE_ECMUL_DATA; + case ECPAIRING -> TOTAL_SIZE_ECPAIRING_DATA_MIN * totalPairings; + default -> throw new IllegalArgumentException("invalid EC type"); + }; + } else { + return switch (ecType) { + case ECRECOVER -> successBit ? TOTAL_SIZE_ECRECOVER_RESULT : 0; + case ECADD -> successBit ? TOTAL_SIZE_ECADD_RESULT : 0; + case ECMUL -> successBit ? TOTAL_SIZE_ECMUL_RESULT : 0; + case ECPAIRING -> successBit ? TOTAL_SIZE_ECPAIRING_RESULT : 0; + default -> throw new IllegalArgumentException("invalid EC type"); + }; + } } - void handleRecover() { - final Bytes v = this.input.slice(32, 32); - final Bytes r = this.input.slice(64, 32); - final Bytes s = this.input.slice(96, 32); + private static short getPhase(int ecType, boolean isData) { + if (isData) { + return switch (ecType) { + case ECRECOVER -> PHASE_ECRECOVER_DATA; + case ECADD -> PHASE_ECADD_DATA; + case ECMUL -> PHASE_ECMUL_DATA; + case ECPAIRING -> PHASE_ECPAIRING_DATA; + default -> throw new IllegalArgumentException("invalid EC type"); + }; + } else { + return switch (ecType) { + case ECRECOVER -> PHASE_ECRECOVER_RESULT; + case ECADD -> PHASE_ECADD_RESULT; + case ECMUL -> PHASE_ECMUL_RESULT; + case ECPAIRING -> PHASE_ECPAIRING_RESULT; + default -> throw new IllegalArgumentException("invalid EC type"); + }; + } + } + + private int getIndexMax(int ecType, boolean isData) { + if (isData) { + return switch (ecType) { + case ECRECOVER -> INDEX_MAX_ECRECOVER_DATA; + case ECADD -> INDEX_MAX_ECADD_DATA; + case ECMUL -> INDEX_MAX_ECMUL_DATA; + case ECPAIRING -> (INDEX_MAX_ECPAIRING_DATA_MIN + 1) * totalPairings - 1; + default -> throw new IllegalArgumentException("invalid EC type"); + }; + } else { + return switch (ecType) { + case ECRECOVER -> INDEX_MAX_ECRECOVER_RESULT; + case ECADD -> INDEX_MAX_ECADD_RESULT; + case ECMUL -> INDEX_MAX_ECMUL_RESULT; + case ECPAIRING -> INDEX_MAX_ECPAIRING_RESULT; + default -> throw new IllegalArgumentException("invalid EC type"); + }; + } + } + + private boolean callWcp(int i, OpCode wcpInst, EWord arg1, EWord arg2) { + final boolean wcpRes = + switch (wcpInst) { + case LT -> wcp.callLT(arg1, arg2); + case EQ -> wcp.callEQ(arg1, arg2); + default -> throw new IllegalStateException("Unexpected value: " + wcpInst); + }; + + wcpFlag.set(i, true); + wcpArg1Hi.set(i, arg1.hi()); + wcpArg1Lo.set(i, arg1.lo()); + wcpArg2Hi.set(i, arg2.hi()); + wcpArg2Lo.set(i, arg2.lo()); + this.wcpRes.set(i, wcpRes); + this.wcpInst.set(i, wcpInst); + return wcpRes; + } - this.comparisons.set(0, this.callWcp(0, OpCode.LT, r, SECP256_K1N)); // r < secp256k1N - this.comparisons.set(2, this.callWcp(1, OpCode.LT, s, SECP256_K1N)); // s < secp256k1N - this.comparisons.set(1, this.callWcp(2, OpCode.LT, Bytes.EMPTY, r)); // 0 < r - this.comparisons.set(3, this.callWcp(3, OpCode.LT, Bytes.EMPTY, s)); // 0 < s - this.equalities.set(1, this.callWcp(4, OpCode.EQ, v, Bytes.of(27))); // v == 27 - this.equalities.set(2, this.callWcp(5, OpCode.EQ, v, Bytes.of(28))); // v == 28 - this.equalities.set(3, this.equalities.get(1) || this.equalities.get(2)); - this.equalities.set(7, true); + private EWord callExt(int i, OpCode extInst, EWord arg1, EWord arg2, EWord arg3) { + final EWord extRes = EWord.of(ext.call(extInst, arg1, arg2, arg3)); + + extFlag.set(i, true); + extArg1Hi.set(i, arg1.hi()); + extArg1Lo.set(i, arg1.lo()); + extArg2Hi.set(i, arg2.hi()); + extArg2Lo.set(i, arg2.lo()); + extArg3Hi.set(i, arg3.hi()); + extArg3Lo.set(i, arg3.lo()); + extResHi.set(i, extRes.hi()); + extResLo.set(i, extRes.lo()); + this.extInst.set(i, extInst); + return extRes; + } - this.fillHurdle(); + void handleRecover() { + // Extract inputs + final EWord h = EWord.of(data.slice(0, 32)); + final EWord v = EWord.of(data.slice(32, 32)); + final EWord r = EWord.of(data.slice(64, 32)); + final EWord s = EWord.of(data.slice(96, 32)); + + // Set input limb + limb.set(0, h.hi()); + limb.set(1, h.lo()); + limb.set(2, v.hi()); + limb.set(3, v.lo()); + limb.set(4, r.hi()); + limb.set(5, r.lo()); + limb.set(6, s.hi()); + limb.set(7, s.lo()); + + // Compute internal checks + // row i + boolean rIsInRange = callWcp(0, OpCode.LT, r, SECP256K1N); // r < secp256k1N + + // row i + 1 + boolean rIsPositive = callWcp(1, OpCode.LT, EWord.ZERO, r); // 0 < r + + // row i + 2 + boolean sIsInRange = callWcp(2, OpCode.LT, s, SECP256K1N); // s < secp256k1N + + // row i + 3 + boolean sIsPositive = callWcp(3, OpCode.LT, EWord.ZERO, s); // 0 < s + + // row i+ 4 + boolean vIs27 = callWcp(4, OpCode.EQ, v, EWord.of(27)); // v == 27 + + // row i + 5 + boolean vIs28 = callWcp(5, OpCode.EQ, v, EWord.of(28)); // v == 28 + + // Set hurdle + hurdle.set(0, rIsInRange && rIsPositive); + hurdle.set(1, sIsInRange && sIsPositive); + hurdle.set(2, hurdle.get(0) && hurdle.get(1)); + hurdle.set(INDEX_MAX_ECRECOVER_DATA, hurdle.get(2) && (vIs27 || vIs28)); + + // Set internal checks passed + internalChecksPassed = hurdle.get(INDEX_MAX_ECRECOVER_DATA); + + // Success bit is set in setReturnData + + // Set circuitSelectorEcrecover + if (internalChecksPassed) { + circuitSelectorEcrecover = true; + } // Very unlikely edge case: if the ext module is never used elsewhere, we need to insert a // useless row, in order to trigger the construction of the first empty row, useful for the ext // lookup. // Because of the hashmap in the ext module, this useless row will only be inserted one time. // Tested by TestEcRecoverWithEmptyExt - this.ext.callADDMOD(Bytes.EMPTY, Bytes.EMPTY, Bytes.EMPTY); - } - - private void handlePointOnC1(final Bytes x, final Bytes y, int u, int i) { - this.squares.set( - 6 * i + 2 * u, this.callExt(12 * i + 4 * u, OpCode.MULMOD, x, x, P)); // x² mod p - this.squares.set( - 1 + 2 * u + 6 * i, this.callExt(1 + 4 * u + 12 * i, OpCode.MULMOD, y, y, P)); // y² mod p - this.cubes.set( - 2 * u + 6 * i, - this.callExt( - 2 + 4 * u + 12 * i, OpCode.MULMOD, this.squares.get(2 * u + 6 * i), x, P)); // x³ mod p - this.cubes.set( - 1 + 2 * u + 6 * i, - this.callExt( - 3 + 4 * u + 12 * i, - OpCode.ADDMOD, - this.cubes.get(2 * u + 6 * i), - Bytes.of(3), - P)); // x³ + 3 mod p - - this.comparisons.set(2 * u + 6 * i, this.callWcp(4 * u + 12 * i, OpCode.LT, x, P)); // x < p - this.comparisons.set( - 1 + 2 * u + 6 * i, this.callWcp(1 + 4 * u + 12 * i, OpCode.LT, y, P)); // y < p - - this.equalities.set( - 1 + 4 * u + 12 * i, - this.callWcp( - 2 + 4 * u + 12 * i, - OpCode.EQ, - this.squares.get(1 + 2 * u + 6 * i), - this.cubes.get(1 + 2 * u + 6 * i))); // y² = x³ + 3 - this.equalities.set(2 + 4 * u + 12 * i, x.isZero() && y.isZero()); // (x, y) == (0, 0) - this.equalities.set( - 3 + 4 * u + 12 * i, - this.equalities.get(1 + 4 * u + 12 * i) || this.equalities.get(2 + 4 * u + 12 * i)); + ext.callADDMOD(Bytes.EMPTY, Bytes.EMPTY, Bytes.EMPTY); } void handleAdd() { - for (int u = 0; u < 2; u++) { - final Bytes x = this.input.slice(64 * u, 32); - final Bytes y = this.input.slice(64 * u + 32, 32); - this.handlePointOnC1(x, y, u, 0); - } + // Extract inputs + final EWord pX = EWord.of(data.slice(0, 32)); + final EWord pY = EWord.of(data.slice(32, 32)); + final EWord qX = EWord.of(data.slice(64, 32)); + final EWord qY = EWord.of(data.slice(96, 32)); + + // Set limb + limb.set(0, pX.hi()); + limb.set(1, pX.lo()); + limb.set(2, pY.hi()); + limb.set(3, pY.lo()); + limb.set(4, qX.hi()); + limb.set(5, qX.lo()); + limb.set(6, qY.hi()); + limb.set(7, qY.lo()); + + // Compute internal checks + // row i + boolean c1MembershipFirstPoint = callToC1Membership(0, pX, pY).getLeft(); + + // row i + 4 + boolean c1MembershipSecondPoint = callToC1Membership(4, qX, qY).getLeft(); + + // Complete set hurdle + hurdle.set(INDEX_MAX_ECADD_DATA, c1MembershipFirstPoint && c1MembershipSecondPoint); + + // Set intenral checks passed + internalChecksPassed = hurdle.get(INDEX_MAX_ECADD_DATA); + + // Success bit is set in setReturnData + + // set circuitSelectorEcadd + circuitSelectorEcadd = internalChecksPassed; } void handleMul() { - final Bytes x = this.input.slice(0, 32); - final Bytes y = this.input.slice(32, 32); - this.handlePointOnC1(x, y, 0, 0); - this.comparisons.set(2, true); - this.fillHurdle(); + // Extract inputs + final EWord pX = EWord.of(data.slice(0, 32)); + final EWord pY = EWord.of(data.slice(32, 32)); + final EWord n = EWord.of(data.slice(64, 32)); + + // Set limb + limb.set(0, pX.hi()); + limb.set(1, pX.lo()); + limb.set(2, pY.hi()); + limb.set(3, pY.lo()); + limb.set(4, n.hi()); + limb.set(5, n.lo()); + + // Compute internal checks + // row i + boolean c1Membership = callToC1Membership(0, pX, pY).getLeft(); + + // Complete set hurdle + hurdle.set(INDEX_MAX_ECMUL_DATA, c1Membership); + + // Set intenral checks passed + internalChecksPassed = hurdle.get(INDEX_MAX_ECMUL_DATA); + + // Success bit is set in setReturnData + + // Set circuitSelectorEcmul + circuitSelectorEcmul = internalChecksPassed; } void handlePairing() { - for (int i = 0; i < this.nPairings; i++) { - final Bytes x = this.input.slice(i * 192, 32); - final Bytes y = this.input.slice(i * 192 + 32, 32); - final Bytes aIm = this.input.slice(i * 192 + 64, 32); - final Bytes aRe = this.input.slice(i * 192 + 96, 32); - final Bytes bIm = this.input.slice(i * 192 + 128, 32); - final Bytes bRe = this.input.slice(i * 192 + 160, 32); - - this.handlePointOnC1(x, y, 0, i); - - this.comparisons.set(6 * i + 2, this.callWcp(12 * i + 3, OpCode.LT, aIm, P)); - this.comparisons.set(6 * i + 3, this.callWcp(12 * i + 4, OpCode.LT, aRe, P)); - this.comparisons.set(6 * i + 4, this.callWcp(12 * i + 5, OpCode.LT, bIm, P)); - this.comparisons.set(6 * i + 5, this.callWcp(12 * i + 6, OpCode.LT, bRe, P)); - this.equalities.set(12 * i + 7, true); - this.equalities.set(12 * i + 11, true); - } + boolean atLeastOneLargePointIsNotInfinity = false; + boolean firstLargePointNotInfinity = false; + boolean atLeastOneLargePointIsNotOnG2 = false; + boolean firstLargePointNotOnG2 = false; + + for (int accPairings = 1; accPairings <= totalPairings; accPairings++) { + // Extract inputs + final int bytesOffset = (accPairings - 1) * 192; + final EWord aX = EWord.of(data.slice(bytesOffset, 32)); + final EWord aY = EWord.of(data.slice(32 + bytesOffset, 32)); + final EWord bXIm = EWord.of(data.slice(64 + bytesOffset, 32)); + final EWord bXRe = EWord.of(data.slice(96 + bytesOffset, 32)); + final EWord bYIm = EWord.of(data.slice(128 + bytesOffset, 32)); + final EWord bYRe = EWord.of(data.slice(160 + bytesOffset, 32)); + + // Set limb + final int rowsOffset = (accPairings - 1) * (INDEX_MAX_ECPAIRING_DATA_MIN + 1); // 12 + limb.set(rowsOffset, aX.hi()); + limb.set(1 + rowsOffset, aX.lo()); + limb.set(2 + rowsOffset, aY.hi()); + limb.set(3 + rowsOffset, aY.lo()); + limb.set(4 + rowsOffset, bXIm.hi()); + limb.set(5 + rowsOffset, bXIm.lo()); + limb.set(6 + rowsOffset, bXRe.hi()); + limb.set(7 + rowsOffset, bXRe.lo()); + limb.set(8 + rowsOffset, bYIm.hi()); + limb.set(9 + rowsOffset, bYIm.lo()); + limb.set(10 + rowsOffset, bYRe.hi()); + limb.set(11 + rowsOffset, bYRe.lo()); + + // Compute internal checks + // row i + Pair callToC1MembershipReturnedValues = + callToC1Membership(rowsOffset, aX, aY); + boolean c1Membership = callToC1MembershipReturnedValues.getLeft(); + boolean smallPointIsAtInfinity = callToC1MembershipReturnedValues.getRight(); + + // row i + 4 + Pair callToWellFormedCoordinatesReturnedValues = + callToWellFormedCoordinates(4 + rowsOffset, bXIm, bXRe, bYIm, bYRe); + boolean wellFormedCoordinates = callToWellFormedCoordinatesReturnedValues.getLeft(); + boolean largePointIsAtInfinity = callToWellFormedCoordinatesReturnedValues.getRight(); + + // Check if the large point is on G2 + final Fq2 bX = Fq2.create(bXRe.toUnsignedBigInteger(), bXIm.toUnsignedBigInteger()); + final Fq2 bY = Fq2.create(bYRe.toUnsignedBigInteger(), bYIm.toUnsignedBigInteger()); + final AltBn128Fq2Point b = new AltBn128Fq2Point(bX, bY); + if (!atLeastOneLargePointIsNotOnG2 && (!b.isOnCurve() || !b.isInGroup())) { + atLeastOneLargePointIsNotOnG2 = true; + firstLargePointNotOnG2 = true; + notOnG2AccMax = true; + } - this.fillHurdle(); + // Set isInfinity, overallTrivialPairing, notOnG2, notOnG2Acc + for (int i = 0; i <= INDEX_MAX_ECPAIRING_DATA_MIN; i++) { + if (!largePointIsAtInfinity && !atLeastOneLargePointIsNotInfinity) { + atLeastOneLargePointIsNotInfinity = true; + firstLargePointNotInfinity = true; + } + + if (firstLargePointNotInfinity) { + if (i > CT_MAX_SMALL_POINT) { + // Transition should happen at the beginning of large point + overallTrivialPairing.set(i + rowsOffset, false); + } + } else { + overallTrivialPairing.set(i + rowsOffset, !atLeastOneLargePointIsNotInfinity); + } - if (this.preliminaryChecksPassed()) { - for (int i = 0; i < this.nPairings; i++) { - if (!CurveOperations.isOnG2(this.input.slice(192 * i + 64, 192 - 64))) { - this.thisIsNotOnG2Index = i; - break; + if (firstLargePointNotOnG2) { + if (i > CT_MAX_SMALL_POINT) { + // Transition should happen at the beginning of large point + notOnG2.set(i + rowsOffset, true); + notOnG2Acc.set(i + rowsOffset, true); + } + } else { + notOnG2Acc.set(i + rowsOffset, atLeastOneLargePointIsNotOnG2); } } + + // Set firstLargePointNotInfinity back to false + firstLargePointNotInfinity = false; + + // Set firstLargePointNotOnG2 back to false + firstLargePointNotOnG2 = false; + + // Set hurdle and internal checks passed + if (accPairings == 1) { + internalChecksPassed = c1Membership && wellFormedCoordinates; + + hurdle.set(INDEX_MAX_ECPAIRING_DATA_MIN, internalChecksPassed); + } else { + boolean prevInternalChecksPassed = internalChecksPassed; + internalChecksPassed = c1Membership && wellFormedCoordinates && prevInternalChecksPassed; + + hurdle.set( + INDEX_MAX_ECPAIRING_DATA_MIN - 1 + rowsOffset, c1Membership && wellFormedCoordinates); + hurdle.set(INDEX_MAX_ECPAIRING_DATA_MIN + rowsOffset, internalChecksPassed); + } } - } - private void traceRow(Trace trace, int i) { - trace.stamp(this.contextNumber); - // TODO: the rest + // This is after all pairings have been processed + + // Success bit is set in setReturnData + + // acceptablePairOfPointsForPairingCircuit, g2MembershipTestRequired, circuitSelectorEcpairing, + // circuitSelectorG2Membership are set in the trace method } - void trace(Trace trace) { - for (int i = 0; i < this.nRows; i++) { - this.traceRow(trace, i); + void trace(Trace trace, final int stamp, final long previousId) { + Preconditions.checkArgument(returnDataSet, "returnData must be set before"); + + final Bytes deltaByte = + leftPadTo(Bytes.minimalBytes(id - previousId - 1), nBYTES_OF_DELTA_BYTES); + + // Part of the columns are computed here + int ct = 0; + boolean isSmallPoint = false; + boolean isLargePoint = false; + boolean smallPointIsAtInfinity = false; + boolean largePointIsAtInfinity = false; + + for (int i = 0; i < nRows; i++) { + boolean isData = i < nRowsData; + // Turn isSmallPoint on if we are in the first row of a new pairing + if (ecType == ECPAIRING && isData && ct == 0 && !isSmallPoint && !isLargePoint) { + isSmallPoint = true; + smallPointIsAtInfinity = isInfinity.get(i); + largePointIsAtInfinity = isInfinity.get(i + CT_MAX_SMALL_POINT + 1); + } + + boolean notOnG2AccMax = + ecType == ECPAIRING + && isData + && this + .notOnG2AccMax; // && conditions is necessary since we want IS_ECPAIRING_DATA = 1 + boolean g2MembershipTestRequired = + notOnG2AccMax + ? isLargePoint && !largePointIsAtInfinity && notOnG2.get(i) + : isLargePoint && !largePointIsAtInfinity && smallPointIsAtInfinity; + boolean acceptablePairOfPointsForPairingCircuit = + ecType == ECPAIRING + && successBit + && !notOnG2AccMax + && !largePointIsAtInfinity + && !smallPointIsAtInfinity; + + if (ecType != ECPAIRING || !isData) { + Preconditions.checkArgument(ct == 0); + } + Preconditions.checkArgument(!(isSmallPoint && isLargePoint)); + + trace + .stamp(stamp) + .id(id) + .index(isData ? UnsignedByte.of(i) : UnsignedByte.of(i - nRowsData)) + .limb(limb.get(i)) + .totalSize(Bytes.ofUnsignedLong(getTotalSize(ecType, isData))) + .phase(getPhase(ecType, isData)) + .indexMax(Bytes.ofUnsignedLong(getIndexMax(ecType, isData))) + .successBit(successBit) + .isEcrecoverData(ecType == ECRECOVER && isData) + .isEcrecoverResult(ecType == ECRECOVER && !isData) + .isEcaddData(ecType == ECADD && isData) + .isEcaddResult(ecType == ECADD && !isData) + .isEcmulData(ecType == ECMUL && isData) + .isEcmulResult(ecType == ECMUL && !isData) + .isEcpairingData(ecType == ECPAIRING && isData) + .isEcpairingResult(ecType == ECPAIRING && !isData) + .totalPairings(Bytes.ofUnsignedLong(totalPairings)) + .accPairings( + ecType == ECPAIRING && isData + ? Bytes.ofUnsignedLong(1 + i / (INDEX_MAX_ECPAIRING_DATA_MIN + 1)) + : Bytes.of(0)) + .internalChecksPassed(internalChecksPassed) + .hurdle(hurdle.get(i)) + .byteDelta( + i < nBYTES_OF_DELTA_BYTES ? UnsignedByte.of(deltaByte.get(i)) : UnsignedByte.of(0)) + .ct((short) ct) + .ctMax( + (short) (isSmallPoint ? CT_MAX_SMALL_POINT : (isLargePoint ? CT_MAX_LARGE_POINT : 0))) + .isSmallPoint(isSmallPoint) + .isLargePoint(isLargePoint) + .notOnG2(notOnG2.get(i)) + .notOnG2Acc(notOnG2Acc.get(i)) + .notOnG2AccMax(notOnG2AccMax) + .isInfinity(isInfinity.get(i)) + .overallTrivialPairing( + ecType == ECPAIRING + && isData + && overallTrivialPairing.get( + i)) // && conditions necessary because default value is true + .g2MembershipTestRequired(g2MembershipTestRequired) + .acceptablePairOfPointsForPairingCircuit(acceptablePairOfPointsForPairingCircuit) + .circuitSelectorEcrecover(circuitSelectorEcrecover) + .circuitSelectorEcadd(circuitSelectorEcadd) + .circuitSelectorEcmul(circuitSelectorEcmul) + .circuitSelectorEcpairing(acceptablePairOfPointsForPairingCircuit) + .circuitSelectorG2Membership(g2MembershipTestRequired) + .wcpFlag(wcpFlag.get(i)) + .wcpArg1Hi(wcpArg1Hi.get(i)) + .wcpArg1Lo(wcpArg1Lo.get(i)) + .wcpArg2Hi(wcpArg2Hi.get(i)) + .wcpArg2Lo(wcpArg2Lo.get(i)) + .wcpRes(wcpRes.get(i)) + .wcpInst(wcpInst.get(i).unsignedByteValue()) + .extFlag(extFlag.get(i)) + .extArg1Hi(extArg1Hi.get(i)) + .extArg1Lo(extArg1Lo.get(i)) + .extArg2Hi(extArg2Hi.get(i)) + .extArg2Lo(extArg2Lo.get(i)) + .extArg3Hi(extArg3Hi.get(i)) + .extArg3Lo(extArg3Lo.get(i)) + .extResHi(extResHi.get(i)) + .extResLo(extResLo.get(i)) + .extInst(extInst.get(i).unsignedByteValue()) + .validateRow(); + + // Update ct, isSmallPoint, isLargePoint + if (ecType == ECPAIRING && isData) { + ct++; + if (isSmallPoint && ct == CT_MAX_SMALL_POINT + 1) { + isSmallPoint = false; + isLargePoint = true; + ct = 0; + } else if (isLargePoint && ct == CT_MAX_LARGE_POINT + 1) { + isLargePoint = false; + ct = 0; + smallPointIsAtInfinity = false; + largePointIsAtInfinity = false; + } + } } } @Override protected int computeLineCount() { - return this.nRows; + return nRowsData + nRowsResult; + } + + private Pair callToC1Membership(int k, EWord pX, EWord pY) { + // EXT + EWord pYSquare = callExt(k, OpCode.MULMOD, pY, pY, P_BN); + EWord pXSquare = callExt(k + 1, OpCode.MULMOD, pX, pX, P_BN); + EWord pXCube = callExt(k + 2, OpCode.MULMOD, pXSquare, pX, P_BN); + EWord pXCubePlus3 = callExt(k + 3, OpCode.ADDMOD, pXCube, EWord.of(3), P_BN); + + // WCP + boolean pXIsInRange = callWcp(k, OpCode.LT, pX, P_BN); + boolean pYIsInRange = callWcp(k + 1, OpCode.LT, pY, P_BN); + boolean pSatisfiesCubic = callWcp(k + 2, OpCode.EQ, pYSquare, pXCubePlus3); + + // Set hurdle + boolean pIsRange = pXIsInRange && pYIsInRange; + boolean pIsPointAtInfinity = pIsRange && pX.isZero() && pY.isZero(); + boolean c1Membership = pIsRange && (pIsPointAtInfinity || pSatisfiesCubic); + hurdle.set(k + 1, pIsRange); + hurdle.set(k, c1Membership); + + // Set isInfinity + for (int i = 0; i <= CT_MAX_SMALL_POINT; i++) { + isInfinity.set(i + k, pIsPointAtInfinity); + } + + return Pair.of(c1Membership, pIsPointAtInfinity); + } + + private Pair callToWellFormedCoordinates( + int k, EWord bXIm, EWord bXRe, EWord bYIm, EWord bYRe) { + // WCP + boolean bXImIsInRange = callWcp(k, OpCode.LT, bXIm, P_BN); + boolean bXReIsInRange = callWcp(k + 1, OpCode.LT, bXRe, P_BN); + boolean bYImIsInRange = callWcp(k + 2, OpCode.LT, bYIm, P_BN); + boolean bYReIsInRange = callWcp(k + 3, OpCode.LT, bYRe, P_BN); + + // Set hurdle + boolean bXIsRange = bXImIsInRange && bXReIsInRange; + boolean bYIsRange = bYImIsInRange && bYReIsInRange; + boolean wellFormedCoordinates = bXIsRange && bYIsRange; + boolean bIsPointAtInfinity = + wellFormedCoordinates && bXIm.isZero() && bXRe.isZero() && bYIm.isZero() && bYRe.isZero(); + hurdle.set(k + 2, bXIsRange); + hurdle.set(k + 1, bYIsRange); + hurdle.set(k, wellFormedCoordinates); + + // Set isInfinity + for (int i = 0; i <= CT_MAX_LARGE_POINT; i++) { + isInfinity.set(i + k, bIsPointAtInfinity); + } + + return Pair.of(wellFormedCoordinates, bIsPointAtInfinity); } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/Trace.java index fa465d5c80..afbdf3cfa9 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ecdata/Trace.java @@ -15,6 +15,7 @@ package net.consensys.linea.zktracer.module.ecdata; +import java.math.BigInteger; import java.nio.MappedByteBuffer; import java.util.BitSet; import java.util.List; @@ -30,130 +31,209 @@ * Please DO NOT ATTEMPT TO MODIFY this code directly. */ public class Trace { + public static final int ADDMOD = 0x8; + public static final int CT_MAX_LARGE_POINT = 0x7; + public static final int CT_MAX_SMALL_POINT = 0x3; + public static final int ECADD = 0x6; + public static final int ECMUL = 0x7; + public static final int ECPAIRING = 0x8; + public static final int ECRECOVER = 0x1; + public static final int INDEX_MAX_ECADD_DATA = 0x7; + public static final int INDEX_MAX_ECADD_RESULT = 0x3; + public static final int INDEX_MAX_ECMUL_DATA = 0x5; + public static final int INDEX_MAX_ECMUL_RESULT = 0x3; + public static final int INDEX_MAX_ECPAIRING_DATA_MIN = 0xb; + public static final int INDEX_MAX_ECPAIRING_RESULT = 0x1; + public static final int INDEX_MAX_ECRECOVER_DATA = 0x7; + public static final int INDEX_MAX_ECRECOVER_RESULT = 0x1; + public static final int MULMOD = 0x9; + public static final BigInteger P_BN_HI = new BigInteger("64323764613183177041862057485226039389"); + public static final BigInteger P_BN_LO = + new BigInteger("201385395114098847380338600778089168199"); + public static final BigInteger SECP256K1N_HI = + new BigInteger("340282366920938463463374607431768211455"); + public static final BigInteger SECP256K1N_LO = + new BigInteger("340282366920938463463374607427473243183"); + public static final int TOTAL_SIZE_ECADD_DATA = 0x80; + public static final int TOTAL_SIZE_ECADD_RESULT = 0x40; + public static final int TOTAL_SIZE_ECMUL_DATA = 0x60; + public static final int TOTAL_SIZE_ECMUL_RESULT = 0x40; + public static final int TOTAL_SIZE_ECPAIRING_DATA_MIN = 0xc0; + public static final int TOTAL_SIZE_ECPAIRING_RESULT = 0x20; + public static final int TOTAL_SIZE_ECRECOVER_DATA = 0x80; + public static final int TOTAL_SIZE_ECRECOVER_RESULT = 0x20; private final BitSet filled = new BitSet(); private int currentLine = 0; - private final MappedByteBuffer accDelta; private final MappedByteBuffer accPairings; - private final MappedByteBuffer allChecksPassed; + private final MappedByteBuffer acceptablePairOfPointsForPairingCircuit; private final MappedByteBuffer byteDelta; - private final MappedByteBuffer comparisons; - private final MappedByteBuffer ctMin; - private final MappedByteBuffer cube; - private final MappedByteBuffer ecAdd; - private final MappedByteBuffer ecMul; - private final MappedByteBuffer ecPairing; - private final MappedByteBuffer ecRecover; - private final MappedByteBuffer equalities; + private final MappedByteBuffer circuitSelectorEcadd; + private final MappedByteBuffer circuitSelectorEcmul; + private final MappedByteBuffer circuitSelectorEcpairing; + private final MappedByteBuffer circuitSelectorEcrecover; + private final MappedByteBuffer circuitSelectorG2Membership; + private final MappedByteBuffer ct; + private final MappedByteBuffer ctMax; private final MappedByteBuffer extArg1Hi; private final MappedByteBuffer extArg1Lo; private final MappedByteBuffer extArg2Hi; private final MappedByteBuffer extArg2Lo; private final MappedByteBuffer extArg3Hi; private final MappedByteBuffer extArg3Lo; + private final MappedByteBuffer extFlag; private final MappedByteBuffer extInst; private final MappedByteBuffer extResHi; private final MappedByteBuffer extResLo; + private final MappedByteBuffer g2MembershipTestRequired; private final MappedByteBuffer hurdle; + private final MappedByteBuffer id; private final MappedByteBuffer index; + private final MappedByteBuffer indexMax; + private final MappedByteBuffer internalChecksPassed; + private final MappedByteBuffer isEcaddData; + private final MappedByteBuffer isEcaddResult; + private final MappedByteBuffer isEcmulData; + private final MappedByteBuffer isEcmulResult; + private final MappedByteBuffer isEcpairingData; + private final MappedByteBuffer isEcpairingResult; + private final MappedByteBuffer isEcrecoverData; + private final MappedByteBuffer isEcrecoverResult; + private final MappedByteBuffer isInfinity; + private final MappedByteBuffer isLargePoint; + private final MappedByteBuffer isSmallPoint; private final MappedByteBuffer limb; - private final MappedByteBuffer preliminaryChecksPassed; - private final MappedByteBuffer somethingWasntOnG2; - private final MappedByteBuffer square; + private final MappedByteBuffer notOnG2; + private final MappedByteBuffer notOnG2Acc; + private final MappedByteBuffer notOnG2AccMax; + private final MappedByteBuffer overallTrivialPairing; + private final MappedByteBuffer phase; private final MappedByteBuffer stamp; - private final MappedByteBuffer thisIsNotOnG2; - private final MappedByteBuffer thisIsNotOnG2Acc; + private final MappedByteBuffer successBit; private final MappedByteBuffer totalPairings; - private final MappedByteBuffer type; + private final MappedByteBuffer totalSize; private final MappedByteBuffer wcpArg1Hi; private final MappedByteBuffer wcpArg1Lo; private final MappedByteBuffer wcpArg2Hi; private final MappedByteBuffer wcpArg2Lo; + private final MappedByteBuffer wcpFlag; private final MappedByteBuffer wcpInst; private final MappedByteBuffer wcpRes; static List headers(int length) { return List.of( - new ColumnHeader("ecdata.ACC_DELTA", 32, length), - new ColumnHeader("ecdata.ACC_PAIRINGS", 2, length), - new ColumnHeader("ecdata.ALL_CHECKS_PASSED", 1, length), + new ColumnHeader("ecdata.ACC_PAIRINGS", 32, length), + new ColumnHeader("ecdata.ACCEPTABLE_PAIR_OF_POINTS_FOR_PAIRING_CIRCUIT", 1, length), new ColumnHeader("ecdata.BYTE_DELTA", 1, length), - new ColumnHeader("ecdata.COMPARISONS", 1, length), - new ColumnHeader("ecdata.CT_MIN", 1, length), - new ColumnHeader("ecdata.CUBE", 32, length), - new ColumnHeader("ecdata.EC_ADD", 1, length), - new ColumnHeader("ecdata.EC_MUL", 1, length), - new ColumnHeader("ecdata.EC_PAIRING", 1, length), - new ColumnHeader("ecdata.EC_RECOVER", 1, length), - new ColumnHeader("ecdata.EQUALITIES", 1, length), - new ColumnHeader("ecdata.EXT_ARG1_HI", 32, length), - new ColumnHeader("ecdata.EXT_ARG1_LO", 32, length), - new ColumnHeader("ecdata.EXT_ARG2_HI", 32, length), - new ColumnHeader("ecdata.EXT_ARG2_LO", 32, length), - new ColumnHeader("ecdata.EXT_ARG3_HI", 32, length), - new ColumnHeader("ecdata.EXT_ARG3_LO", 32, length), + new ColumnHeader("ecdata.CIRCUIT_SELECTOR_ECADD", 1, length), + new ColumnHeader("ecdata.CIRCUIT_SELECTOR_ECMUL", 1, length), + new ColumnHeader("ecdata.CIRCUIT_SELECTOR_ECPAIRING", 1, length), + new ColumnHeader("ecdata.CIRCUIT_SELECTOR_ECRECOVER", 1, length), + new ColumnHeader("ecdata.CIRCUIT_SELECTOR_G2_MEMBERSHIP", 1, length), + new ColumnHeader("ecdata.CT", 1, length), + new ColumnHeader("ecdata.CT_MAX", 1, length), + new ColumnHeader("ecdata.EXT_ARG1_HI", 16, length), + new ColumnHeader("ecdata.EXT_ARG1_LO", 16, length), + new ColumnHeader("ecdata.EXT_ARG2_HI", 16, length), + new ColumnHeader("ecdata.EXT_ARG2_LO", 16, length), + new ColumnHeader("ecdata.EXT_ARG3_HI", 16, length), + new ColumnHeader("ecdata.EXT_ARG3_LO", 16, length), + new ColumnHeader("ecdata.EXT_FLAG", 1, length), new ColumnHeader("ecdata.EXT_INST", 1, length), - new ColumnHeader("ecdata.EXT_RES_HI", 32, length), - new ColumnHeader("ecdata.EXT_RES_LO", 32, length), + new ColumnHeader("ecdata.EXT_RES_HI", 16, length), + new ColumnHeader("ecdata.EXT_RES_LO", 16, length), + new ColumnHeader("ecdata.G2_MEMBERSHIP_TEST_REQUIRED", 1, length), new ColumnHeader("ecdata.HURDLE", 1, length), + new ColumnHeader("ecdata.ID", 4, length), new ColumnHeader("ecdata.INDEX", 1, length), - new ColumnHeader("ecdata.LIMB", 32, length), - new ColumnHeader("ecdata.PRELIMINARY_CHECKS_PASSED", 1, length), - new ColumnHeader("ecdata.SOMETHING_WASNT_ON_G2", 1, length), - new ColumnHeader("ecdata.SQUARE", 32, length), - new ColumnHeader("ecdata.STAMP", 8, length), - new ColumnHeader("ecdata.THIS_IS_NOT_ON_G2", 1, length), - new ColumnHeader("ecdata.THIS_IS_NOT_ON_G2_ACC", 1, length), - new ColumnHeader("ecdata.TOTAL_PAIRINGS", 2, length), - new ColumnHeader("ecdata.TYPE", 1, length), - new ColumnHeader("ecdata.WCP_ARG1_HI", 32, length), - new ColumnHeader("ecdata.WCP_ARG1_LO", 32, length), - new ColumnHeader("ecdata.WCP_ARG2_HI", 32, length), - new ColumnHeader("ecdata.WCP_ARG2_LO", 32, length), + new ColumnHeader("ecdata.INDEX_MAX", 32, length), + new ColumnHeader("ecdata.INTERNAL_CHECKS_PASSED", 1, length), + new ColumnHeader("ecdata.IS_ECADD_DATA", 1, length), + new ColumnHeader("ecdata.IS_ECADD_RESULT", 1, length), + new ColumnHeader("ecdata.IS_ECMUL_DATA", 1, length), + new ColumnHeader("ecdata.IS_ECMUL_RESULT", 1, length), + new ColumnHeader("ecdata.IS_ECPAIRING_DATA", 1, length), + new ColumnHeader("ecdata.IS_ECPAIRING_RESULT", 1, length), + new ColumnHeader("ecdata.IS_ECRECOVER_DATA", 1, length), + new ColumnHeader("ecdata.IS_ECRECOVER_RESULT", 1, length), + new ColumnHeader("ecdata.IS_INFINITY", 1, length), + new ColumnHeader("ecdata.IS_LARGE_POINT", 1, length), + new ColumnHeader("ecdata.IS_SMALL_POINT", 1, length), + new ColumnHeader("ecdata.LIMB", 16, length), + new ColumnHeader("ecdata.NOT_ON_G2", 1, length), + new ColumnHeader("ecdata.NOT_ON_G2_ACC", 1, length), + new ColumnHeader("ecdata.NOT_ON_G2_ACC_MAX", 1, length), + new ColumnHeader("ecdata.OVERALL_TRIVIAL_PAIRING", 1, length), + new ColumnHeader("ecdata.PHASE", 2, length), + new ColumnHeader("ecdata.STAMP", 4, length), + new ColumnHeader("ecdata.SUCCESS_BIT", 1, length), + new ColumnHeader("ecdata.TOTAL_PAIRINGS", 32, length), + new ColumnHeader("ecdata.TOTAL_SIZE", 32, length), + new ColumnHeader("ecdata.WCP_ARG1_HI", 16, length), + new ColumnHeader("ecdata.WCP_ARG1_LO", 16, length), + new ColumnHeader("ecdata.WCP_ARG2_HI", 16, length), + new ColumnHeader("ecdata.WCP_ARG2_LO", 16, length), + new ColumnHeader("ecdata.WCP_FLAG", 1, length), new ColumnHeader("ecdata.WCP_INST", 1, length), new ColumnHeader("ecdata.WCP_RES", 1, length)); } public Trace(List buffers) { - this.accDelta = buffers.get(0); - this.accPairings = buffers.get(1); - this.allChecksPassed = buffers.get(2); - this.byteDelta = buffers.get(3); - this.comparisons = buffers.get(4); - this.ctMin = buffers.get(5); - this.cube = buffers.get(6); - this.ecAdd = buffers.get(7); - this.ecMul = buffers.get(8); - this.ecPairing = buffers.get(9); - this.ecRecover = buffers.get(10); - this.equalities = buffers.get(11); - this.extArg1Hi = buffers.get(12); - this.extArg1Lo = buffers.get(13); - this.extArg2Hi = buffers.get(14); - this.extArg2Lo = buffers.get(15); - this.extArg3Hi = buffers.get(16); - this.extArg3Lo = buffers.get(17); - this.extInst = buffers.get(18); - this.extResHi = buffers.get(19); - this.extResLo = buffers.get(20); + this.accPairings = buffers.get(0); + this.acceptablePairOfPointsForPairingCircuit = buffers.get(1); + this.byteDelta = buffers.get(2); + this.circuitSelectorEcadd = buffers.get(3); + this.circuitSelectorEcmul = buffers.get(4); + this.circuitSelectorEcpairing = buffers.get(5); + this.circuitSelectorEcrecover = buffers.get(6); + this.circuitSelectorG2Membership = buffers.get(7); + this.ct = buffers.get(8); + this.ctMax = buffers.get(9); + this.extArg1Hi = buffers.get(10); + this.extArg1Lo = buffers.get(11); + this.extArg2Hi = buffers.get(12); + this.extArg2Lo = buffers.get(13); + this.extArg3Hi = buffers.get(14); + this.extArg3Lo = buffers.get(15); + this.extFlag = buffers.get(16); + this.extInst = buffers.get(17); + this.extResHi = buffers.get(18); + this.extResLo = buffers.get(19); + this.g2MembershipTestRequired = buffers.get(20); this.hurdle = buffers.get(21); - this.index = buffers.get(22); - this.limb = buffers.get(23); - this.preliminaryChecksPassed = buffers.get(24); - this.somethingWasntOnG2 = buffers.get(25); - this.square = buffers.get(26); - this.stamp = buffers.get(27); - this.thisIsNotOnG2 = buffers.get(28); - this.thisIsNotOnG2Acc = buffers.get(29); - this.totalPairings = buffers.get(30); - this.type = buffers.get(31); - this.wcpArg1Hi = buffers.get(32); - this.wcpArg1Lo = buffers.get(33); - this.wcpArg2Hi = buffers.get(34); - this.wcpArg2Lo = buffers.get(35); - this.wcpInst = buffers.get(36); - this.wcpRes = buffers.get(37); + this.id = buffers.get(22); + this.index = buffers.get(23); + this.indexMax = buffers.get(24); + this.internalChecksPassed = buffers.get(25); + this.isEcaddData = buffers.get(26); + this.isEcaddResult = buffers.get(27); + this.isEcmulData = buffers.get(28); + this.isEcmulResult = buffers.get(29); + this.isEcpairingData = buffers.get(30); + this.isEcpairingResult = buffers.get(31); + this.isEcrecoverData = buffers.get(32); + this.isEcrecoverResult = buffers.get(33); + this.isInfinity = buffers.get(34); + this.isLargePoint = buffers.get(35); + this.isSmallPoint = buffers.get(36); + this.limb = buffers.get(37); + this.notOnG2 = buffers.get(38); + this.notOnG2Acc = buffers.get(39); + this.notOnG2AccMax = buffers.get(40); + this.overallTrivialPairing = buffers.get(41); + this.phase = buffers.get(42); + this.stamp = buffers.get(43); + this.successBit = buffers.get(44); + this.totalPairings = buffers.get(45); + this.totalSize = buffers.get(46); + this.wcpArg1Hi = buffers.get(47); + this.wcpArg1Lo = buffers.get(48); + this.wcpArg2Hi = buffers.get(49); + this.wcpArg2Lo = buffers.get(50); + this.wcpFlag = buffers.get(51); + this.wcpInst = buffers.get(52); + this.wcpRes = buffers.get(53); } public int size() { @@ -164,294 +244,385 @@ public int size() { return this.currentLine; } - public Trace accDelta(final Bytes b) { - if (filled.get(0)) { - throw new IllegalStateException("ecdata.ACC_DELTA already set"); + public Trace accPairings(final Bytes b) { + if (filled.get(1)) { + throw new IllegalStateException("ecdata.ACC_PAIRINGS already set"); } else { - filled.set(0); + filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - accDelta.put((byte) 0); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "accPairings has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { + accPairings.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accPairings.put(bs.get(j)); } - accDelta.put(b.toArrayUnsafe()); return this; } - public Trace accPairings(final short b) { - if (filled.get(1)) { - throw new IllegalStateException("ecdata.ACC_PAIRINGS already set"); + public Trace acceptablePairOfPointsForPairingCircuit(final Boolean b) { + if (filled.get(0)) { + throw new IllegalStateException( + "ecdata.ACCEPTABLE_PAIR_OF_POINTS_FOR_PAIRING_CIRCUIT already set"); } else { - filled.set(1); + filled.set(0); } - accPairings.putShort(b); + acceptablePairOfPointsForPairingCircuit.put((byte) (b ? 1 : 0)); return this; } - public Trace allChecksPassed(final Boolean b) { + public Trace byteDelta(final UnsignedByte b) { if (filled.get(2)) { - throw new IllegalStateException("ecdata.ALL_CHECKS_PASSED already set"); + throw new IllegalStateException("ecdata.BYTE_DELTA already set"); } else { filled.set(2); } - allChecksPassed.put((byte) (b ? 1 : 0)); + byteDelta.put(b.toByte()); return this; } - public Trace byteDelta(final UnsignedByte b) { + public Trace circuitSelectorEcadd(final Boolean b) { if (filled.get(3)) { - throw new IllegalStateException("ecdata.BYTE_DELTA already set"); + throw new IllegalStateException("ecdata.CIRCUIT_SELECTOR_ECADD already set"); } else { filled.set(3); } - byteDelta.put(b.toByte()); + circuitSelectorEcadd.put((byte) (b ? 1 : 0)); return this; } - public Trace comparisons(final Boolean b) { + public Trace circuitSelectorEcmul(final Boolean b) { if (filled.get(4)) { - throw new IllegalStateException("ecdata.COMPARISONS already set"); + throw new IllegalStateException("ecdata.CIRCUIT_SELECTOR_ECMUL already set"); } else { filled.set(4); } - comparisons.put((byte) (b ? 1 : 0)); + circuitSelectorEcmul.put((byte) (b ? 1 : 0)); return this; } - public Trace ctMin(final UnsignedByte b) { + public Trace circuitSelectorEcpairing(final Boolean b) { if (filled.get(5)) { - throw new IllegalStateException("ecdata.CT_MIN already set"); + throw new IllegalStateException("ecdata.CIRCUIT_SELECTOR_ECPAIRING already set"); } else { filled.set(5); } - ctMin.put(b.toByte()); + circuitSelectorEcpairing.put((byte) (b ? 1 : 0)); return this; } - public Trace cube(final Bytes b) { + public Trace circuitSelectorEcrecover(final Boolean b) { if (filled.get(6)) { - throw new IllegalStateException("ecdata.CUBE already set"); + throw new IllegalStateException("ecdata.CIRCUIT_SELECTOR_ECRECOVER already set"); } else { filled.set(6); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - cube.put((byte) 0); - } - cube.put(b.toArrayUnsafe()); + circuitSelectorEcrecover.put((byte) (b ? 1 : 0)); return this; } - public Trace ecAdd(final Boolean b) { + public Trace circuitSelectorG2Membership(final Boolean b) { if (filled.get(7)) { - throw new IllegalStateException("ecdata.EC_ADD already set"); + throw new IllegalStateException("ecdata.CIRCUIT_SELECTOR_G2_MEMBERSHIP already set"); } else { filled.set(7); } - ecAdd.put((byte) (b ? 1 : 0)); + circuitSelectorG2Membership.put((byte) (b ? 1 : 0)); return this; } - public Trace ecMul(final Boolean b) { + public Trace ct(final long b) { if (filled.get(8)) { - throw new IllegalStateException("ecdata.EC_MUL already set"); + throw new IllegalStateException("ecdata.CT already set"); } else { filled.set(8); } - ecMul.put((byte) (b ? 1 : 0)); + if (b >= 8L) { + throw new IllegalArgumentException("ct has invalid value (" + b + ")"); + } + ct.put((byte) b); return this; } - public Trace ecPairing(final Boolean b) { + public Trace ctMax(final long b) { if (filled.get(9)) { - throw new IllegalStateException("ecdata.EC_PAIRING already set"); + throw new IllegalStateException("ecdata.CT_MAX already set"); } else { filled.set(9); } - ecPairing.put((byte) (b ? 1 : 0)); + if (b >= 8L) { + throw new IllegalArgumentException("ctMax has invalid value (" + b + ")"); + } + ctMax.put((byte) b); return this; } - public Trace ecRecover(final Boolean b) { + public Trace extArg1Hi(final Bytes b) { if (filled.get(10)) { - throw new IllegalStateException("ecdata.EC_RECOVER already set"); + throw new IllegalStateException("ecdata.EXT_ARG1_HI already set"); } else { filled.set(10); } - ecRecover.put((byte) (b ? 1 : 0)); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "extArg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + extArg1Hi.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + extArg1Hi.put(bs.get(j)); + } return this; } - public Trace equalities(final Boolean b) { + public Trace extArg1Lo(final Bytes b) { if (filled.get(11)) { - throw new IllegalStateException("ecdata.EQUALITIES already set"); + throw new IllegalStateException("ecdata.EXT_ARG1_LO already set"); } else { filled.set(11); } - equalities.put((byte) (b ? 1 : 0)); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "extArg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + extArg1Lo.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + extArg1Lo.put(bs.get(j)); + } return this; } - public Trace extArg1Hi(final Bytes b) { + public Trace extArg2Hi(final Bytes b) { if (filled.get(12)) { - throw new IllegalStateException("ecdata.EXT_ARG1_HI already set"); + throw new IllegalStateException("ecdata.EXT_ARG2_HI already set"); } else { filled.set(12); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - extArg1Hi.put((byte) 0); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "extArg2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + extArg2Hi.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + extArg2Hi.put(bs.get(j)); } - extArg1Hi.put(b.toArrayUnsafe()); return this; } - public Trace extArg1Lo(final Bytes b) { + public Trace extArg2Lo(final Bytes b) { if (filled.get(13)) { - throw new IllegalStateException("ecdata.EXT_ARG1_LO already set"); + throw new IllegalStateException("ecdata.EXT_ARG2_LO already set"); } else { filled.set(13); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - extArg1Lo.put((byte) 0); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "extArg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + extArg2Lo.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + extArg2Lo.put(bs.get(j)); } - extArg1Lo.put(b.toArrayUnsafe()); return this; } - public Trace extArg2Hi(final Bytes b) { + public Trace extArg3Hi(final Bytes b) { if (filled.get(14)) { - throw new IllegalStateException("ecdata.EXT_ARG2_HI already set"); + throw new IllegalStateException("ecdata.EXT_ARG3_HI already set"); } else { filled.set(14); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - extArg2Hi.put((byte) 0); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "extArg3Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + extArg3Hi.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + extArg3Hi.put(bs.get(j)); } - extArg2Hi.put(b.toArrayUnsafe()); return this; } - public Trace extArg2Lo(final Bytes b) { + public Trace extArg3Lo(final Bytes b) { if (filled.get(15)) { - throw new IllegalStateException("ecdata.EXT_ARG2_LO already set"); + throw new IllegalStateException("ecdata.EXT_ARG3_LO already set"); } else { filled.set(15); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - extArg2Lo.put((byte) 0); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "extArg3Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + extArg3Lo.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + extArg3Lo.put(bs.get(j)); } - extArg2Lo.put(b.toArrayUnsafe()); return this; } - public Trace extArg3Hi(final Bytes b) { + public Trace extFlag(final Boolean b) { if (filled.get(16)) { - throw new IllegalStateException("ecdata.EXT_ARG3_HI already set"); + throw new IllegalStateException("ecdata.EXT_FLAG already set"); } else { filled.set(16); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - extArg3Hi.put((byte) 0); - } - extArg3Hi.put(b.toArrayUnsafe()); + extFlag.put((byte) (b ? 1 : 0)); return this; } - public Trace extArg3Lo(final Bytes b) { + public Trace extInst(final UnsignedByte b) { if (filled.get(17)) { - throw new IllegalStateException("ecdata.EXT_ARG3_LO already set"); + throw new IllegalStateException("ecdata.EXT_INST already set"); } else { filled.set(17); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - extArg3Lo.put((byte) 0); - } - extArg3Lo.put(b.toArrayUnsafe()); + extInst.put(b.toByte()); return this; } - public Trace extInst(final UnsignedByte b) { + public Trace extResHi(final Bytes b) { if (filled.get(18)) { - throw new IllegalStateException("ecdata.EXT_INST already set"); + throw new IllegalStateException("ecdata.EXT_RES_HI already set"); } else { filled.set(18); } - extInst.put(b.toByte()); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("extResHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + extResHi.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + extResHi.put(bs.get(j)); + } return this; } - public Trace extResHi(final Bytes b) { + public Trace extResLo(final Bytes b) { if (filled.get(19)) { - throw new IllegalStateException("ecdata.EXT_RES_HI already set"); + throw new IllegalStateException("ecdata.EXT_RES_LO already set"); } else { filled.set(19); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - extResHi.put((byte) 0); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("extResLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + extResLo.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + extResLo.put(bs.get(j)); } - extResHi.put(b.toArrayUnsafe()); return this; } - public Trace extResLo(final Bytes b) { + public Trace g2MembershipTestRequired(final Boolean b) { if (filled.get(20)) { - throw new IllegalStateException("ecdata.EXT_RES_LO already set"); + throw new IllegalStateException("ecdata.G2_MEMBERSHIP_TEST_REQUIRED already set"); } else { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - extResLo.put((byte) 0); - } - extResLo.put(b.toArrayUnsafe()); + g2MembershipTestRequired.put((byte) (b ? 1 : 0)); return this; } @@ -468,203 +639,497 @@ public Trace hurdle(final Boolean b) { return this; } - public Trace index(final UnsignedByte b) { + public Trace id(final long b) { if (filled.get(22)) { - throw new IllegalStateException("ecdata.INDEX already set"); + throw new IllegalStateException("ecdata.ID already set"); } else { filled.set(22); } - index.put(b.toByte()); + if (b >= 4294967296L) { + throw new IllegalArgumentException("id has invalid value (" + b + ")"); + } + id.put((byte) (b >> 24)); + id.put((byte) (b >> 16)); + id.put((byte) (b >> 8)); + id.put((byte) b); return this; } - public Trace limb(final Bytes b) { + public Trace index(final UnsignedByte b) { if (filled.get(23)) { - throw new IllegalStateException("ecdata.LIMB already set"); + throw new IllegalStateException("ecdata.INDEX already set"); } else { filled.set(23); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - limb.put((byte) 0); - } - limb.put(b.toArrayUnsafe()); + index.put(b.toByte()); return this; } - public Trace preliminaryChecksPassed(final Boolean b) { + public Trace indexMax(final Bytes b) { if (filled.get(24)) { - throw new IllegalStateException("ecdata.PRELIMINARY_CHECKS_PASSED already set"); + throw new IllegalStateException("ecdata.INDEX_MAX already set"); } else { filled.set(24); } - preliminaryChecksPassed.put((byte) (b ? 1 : 0)); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("indexMax has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { + indexMax.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + indexMax.put(bs.get(j)); + } return this; } - public Trace somethingWasntOnG2(final Boolean b) { + public Trace internalChecksPassed(final Boolean b) { if (filled.get(25)) { - throw new IllegalStateException("ecdata.SOMETHING_WASNT_ON_G2 already set"); + throw new IllegalStateException("ecdata.INTERNAL_CHECKS_PASSED already set"); } else { filled.set(25); } - somethingWasntOnG2.put((byte) (b ? 1 : 0)); + internalChecksPassed.put((byte) (b ? 1 : 0)); return this; } - public Trace square(final Bytes b) { + public Trace isEcaddData(final Boolean b) { if (filled.get(26)) { - throw new IllegalStateException("ecdata.SQUARE already set"); + throw new IllegalStateException("ecdata.IS_ECADD_DATA already set"); } else { filled.set(26); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { - square.put((byte) 0); - } - square.put(b.toArrayUnsafe()); + isEcaddData.put((byte) (b ? 1 : 0)); return this; } - public Trace stamp(final long b) { + public Trace isEcaddResult(final Boolean b) { if (filled.get(27)) { - throw new IllegalStateException("ecdata.STAMP already set"); + throw new IllegalStateException("ecdata.IS_ECADD_RESULT already set"); } else { filled.set(27); } - stamp.putLong(b); + isEcaddResult.put((byte) (b ? 1 : 0)); return this; } - public Trace thisIsNotOnG2(final Boolean b) { + public Trace isEcmulData(final Boolean b) { if (filled.get(28)) { - throw new IllegalStateException("ecdata.THIS_IS_NOT_ON_G2 already set"); + throw new IllegalStateException("ecdata.IS_ECMUL_DATA already set"); } else { filled.set(28); } - thisIsNotOnG2.put((byte) (b ? 1 : 0)); + isEcmulData.put((byte) (b ? 1 : 0)); return this; } - public Trace thisIsNotOnG2Acc(final Boolean b) { + public Trace isEcmulResult(final Boolean b) { if (filled.get(29)) { - throw new IllegalStateException("ecdata.THIS_IS_NOT_ON_G2_ACC already set"); + throw new IllegalStateException("ecdata.IS_ECMUL_RESULT already set"); } else { filled.set(29); } - thisIsNotOnG2Acc.put((byte) (b ? 1 : 0)); + isEcmulResult.put((byte) (b ? 1 : 0)); return this; } - public Trace totalPairings(final short b) { + public Trace isEcpairingData(final Boolean b) { if (filled.get(30)) { - throw new IllegalStateException("ecdata.TOTAL_PAIRINGS already set"); + throw new IllegalStateException("ecdata.IS_ECPAIRING_DATA already set"); } else { filled.set(30); } - totalPairings.putShort(b); + isEcpairingData.put((byte) (b ? 1 : 0)); return this; } - public Trace type(final UnsignedByte b) { + public Trace isEcpairingResult(final Boolean b) { if (filled.get(31)) { - throw new IllegalStateException("ecdata.TYPE already set"); + throw new IllegalStateException("ecdata.IS_ECPAIRING_RESULT already set"); } else { filled.set(31); } - type.put(b.toByte()); + isEcpairingResult.put((byte) (b ? 1 : 0)); return this; } - public Trace wcpArg1Hi(final Bytes b) { + public Trace isEcrecoverData(final Boolean b) { if (filled.get(32)) { - throw new IllegalStateException("ecdata.WCP_ARG1_HI already set"); + throw new IllegalStateException("ecdata.IS_ECRECOVER_DATA already set"); } else { filled.set(32); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + isEcrecoverData.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace isEcrecoverResult(final Boolean b) { + if (filled.get(33)) { + throw new IllegalStateException("ecdata.IS_ECRECOVER_RESULT already set"); + } else { + filled.set(33); + } + + isEcrecoverResult.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace isInfinity(final Boolean b) { + if (filled.get(34)) { + throw new IllegalStateException("ecdata.IS_INFINITY already set"); + } else { + filled.set(34); + } + + isInfinity.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace isLargePoint(final Boolean b) { + if (filled.get(35)) { + throw new IllegalStateException("ecdata.IS_LARGE_POINT already set"); + } else { + filled.set(35); + } + + isLargePoint.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace isSmallPoint(final Boolean b) { + if (filled.get(36)) { + throw new IllegalStateException("ecdata.IS_SMALL_POINT already set"); + } else { + filled.set(36); + } + + isSmallPoint.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace limb(final Bytes b) { + if (filled.get(37)) { + throw new IllegalStateException("ecdata.LIMB already set"); + } else { + filled.set(37); + } + + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("limb has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + limb.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb.put(bs.get(j)); + } + + return this; + } + + public Trace notOnG2(final Boolean b) { + if (filled.get(38)) { + throw new IllegalStateException("ecdata.NOT_ON_G2 already set"); + } else { + filled.set(38); + } + + notOnG2.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace notOnG2Acc(final Boolean b) { + if (filled.get(39)) { + throw new IllegalStateException("ecdata.NOT_ON_G2_ACC already set"); + } else { + filled.set(39); + } + + notOnG2Acc.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace notOnG2AccMax(final Boolean b) { + if (filled.get(40)) { + throw new IllegalStateException("ecdata.NOT_ON_G2_ACC_MAX already set"); + } else { + filled.set(40); + } + + notOnG2AccMax.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace overallTrivialPairing(final Boolean b) { + if (filled.get(41)) { + throw new IllegalStateException("ecdata.OVERALL_TRIVIAL_PAIRING already set"); + } else { + filled.set(41); + } + + overallTrivialPairing.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace phase(final long b) { + if (filled.get(42)) { + throw new IllegalStateException("ecdata.PHASE already set"); + } else { + filled.set(42); + } + + if (b >= 65536L) { + throw new IllegalArgumentException("phase has invalid value (" + b + ")"); + } + phase.put((byte) (b >> 8)); + phase.put((byte) b); + + return this; + } + + public Trace stamp(final long b) { + if (filled.get(43)) { + throw new IllegalStateException("ecdata.STAMP already set"); + } else { + filled.set(43); + } + + if (b >= 4294967296L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 24)); + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); + + return this; + } + + public Trace successBit(final Boolean b) { + if (filled.get(44)) { + throw new IllegalStateException("ecdata.SUCCESS_BIT already set"); + } else { + filled.set(44); + } + + successBit.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace totalPairings(final Bytes b) { + if (filled.get(45)) { + throw new IllegalStateException("ecdata.TOTAL_PAIRINGS already set"); + } else { + filled.set(45); + } + + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "totalPairings has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { + totalPairings.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + totalPairings.put(bs.get(j)); + } + + return this; + } + + public Trace totalSize(final Bytes b) { + if (filled.get(46)) { + throw new IllegalStateException("ecdata.TOTAL_SIZE already set"); + } else { + filled.set(46); + } + + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "totalSize has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { + totalSize.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + totalSize.put(bs.get(j)); + } + + return this; + } + + public Trace wcpArg1Hi(final Bytes b) { + if (filled.get(47)) { + throw new IllegalStateException("ecdata.WCP_ARG1_HI already set"); + } else { + filled.set(47); + } + + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "wcpArg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { wcpArg1Hi.put((byte) 0); } - wcpArg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + wcpArg1Hi.put(bs.get(j)); + } return this; } public Trace wcpArg1Lo(final Bytes b) { - if (filled.get(33)) { + if (filled.get(48)) { throw new IllegalStateException("ecdata.WCP_ARG1_LO already set"); } else { - filled.set(33); + filled.set(48); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "wcpArg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { wcpArg1Lo.put((byte) 0); } - wcpArg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + wcpArg1Lo.put(bs.get(j)); + } return this; } public Trace wcpArg2Hi(final Bytes b) { - if (filled.get(34)) { + if (filled.get(49)) { throw new IllegalStateException("ecdata.WCP_ARG2_HI already set"); } else { - filled.set(34); + filled.set(49); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "wcpArg2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { wcpArg2Hi.put((byte) 0); } - wcpArg2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + wcpArg2Hi.put(bs.get(j)); + } return this; } public Trace wcpArg2Lo(final Bytes b) { - if (filled.get(35)) { + if (filled.get(50)) { throw new IllegalStateException("ecdata.WCP_ARG2_LO already set"); } else { - filled.set(35); + filled.set(50); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "wcpArg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { wcpArg2Lo.put((byte) 0); } - wcpArg2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + wcpArg2Lo.put(bs.get(j)); + } + + return this; + } + + public Trace wcpFlag(final Boolean b) { + if (filled.get(51)) { + throw new IllegalStateException("ecdata.WCP_FLAG already set"); + } else { + filled.set(51); + } + + wcpFlag.put((byte) (b ? 1 : 0)); return this; } public Trace wcpInst(final UnsignedByte b) { - if (filled.get(36)) { + if (filled.get(52)) { throw new IllegalStateException("ecdata.WCP_INST already set"); } else { - filled.set(36); + filled.set(52); } wcpInst.put(b.toByte()); @@ -673,10 +1138,10 @@ public Trace wcpInst(final UnsignedByte b) { } public Trace wcpRes(final Boolean b) { - if (filled.get(37)) { + if (filled.get(53)) { throw new IllegalStateException("ecdata.WCP_RES already set"); } else { - filled.set(37); + filled.set(53); } wcpRes.put((byte) (b ? 1 : 0)); @@ -685,88 +1150,89 @@ public Trace wcpRes(final Boolean b) { } public Trace validateRow() { - if (!filled.get(0)) { - throw new IllegalStateException("ecdata.ACC_DELTA has not been filled"); - } - if (!filled.get(1)) { throw new IllegalStateException("ecdata.ACC_PAIRINGS has not been filled"); } + if (!filled.get(0)) { + throw new IllegalStateException( + "ecdata.ACCEPTABLE_PAIR_OF_POINTS_FOR_PAIRING_CIRCUIT has not been filled"); + } + if (!filled.get(2)) { - throw new IllegalStateException("ecdata.ALL_CHECKS_PASSED has not been filled"); + throw new IllegalStateException("ecdata.BYTE_DELTA has not been filled"); } if (!filled.get(3)) { - throw new IllegalStateException("ecdata.BYTE_DELTA has not been filled"); + throw new IllegalStateException("ecdata.CIRCUIT_SELECTOR_ECADD has not been filled"); } if (!filled.get(4)) { - throw new IllegalStateException("ecdata.COMPARISONS has not been filled"); + throw new IllegalStateException("ecdata.CIRCUIT_SELECTOR_ECMUL has not been filled"); } if (!filled.get(5)) { - throw new IllegalStateException("ecdata.CT_MIN has not been filled"); + throw new IllegalStateException("ecdata.CIRCUIT_SELECTOR_ECPAIRING has not been filled"); } if (!filled.get(6)) { - throw new IllegalStateException("ecdata.CUBE has not been filled"); + throw new IllegalStateException("ecdata.CIRCUIT_SELECTOR_ECRECOVER has not been filled"); } if (!filled.get(7)) { - throw new IllegalStateException("ecdata.EC_ADD has not been filled"); + throw new IllegalStateException("ecdata.CIRCUIT_SELECTOR_G2_MEMBERSHIP has not been filled"); } if (!filled.get(8)) { - throw new IllegalStateException("ecdata.EC_MUL has not been filled"); + throw new IllegalStateException("ecdata.CT has not been filled"); } if (!filled.get(9)) { - throw new IllegalStateException("ecdata.EC_PAIRING has not been filled"); + throw new IllegalStateException("ecdata.CT_MAX has not been filled"); } if (!filled.get(10)) { - throw new IllegalStateException("ecdata.EC_RECOVER has not been filled"); + throw new IllegalStateException("ecdata.EXT_ARG1_HI has not been filled"); } if (!filled.get(11)) { - throw new IllegalStateException("ecdata.EQUALITIES has not been filled"); + throw new IllegalStateException("ecdata.EXT_ARG1_LO has not been filled"); } if (!filled.get(12)) { - throw new IllegalStateException("ecdata.EXT_ARG1_HI has not been filled"); + throw new IllegalStateException("ecdata.EXT_ARG2_HI has not been filled"); } if (!filled.get(13)) { - throw new IllegalStateException("ecdata.EXT_ARG1_LO has not been filled"); + throw new IllegalStateException("ecdata.EXT_ARG2_LO has not been filled"); } if (!filled.get(14)) { - throw new IllegalStateException("ecdata.EXT_ARG2_HI has not been filled"); + throw new IllegalStateException("ecdata.EXT_ARG3_HI has not been filled"); } if (!filled.get(15)) { - throw new IllegalStateException("ecdata.EXT_ARG2_LO has not been filled"); + throw new IllegalStateException("ecdata.EXT_ARG3_LO has not been filled"); } if (!filled.get(16)) { - throw new IllegalStateException("ecdata.EXT_ARG3_HI has not been filled"); + throw new IllegalStateException("ecdata.EXT_FLAG has not been filled"); } if (!filled.get(17)) { - throw new IllegalStateException("ecdata.EXT_ARG3_LO has not been filled"); + throw new IllegalStateException("ecdata.EXT_INST has not been filled"); } if (!filled.get(18)) { - throw new IllegalStateException("ecdata.EXT_INST has not been filled"); + throw new IllegalStateException("ecdata.EXT_RES_HI has not been filled"); } if (!filled.get(19)) { - throw new IllegalStateException("ecdata.EXT_RES_HI has not been filled"); + throw new IllegalStateException("ecdata.EXT_RES_LO has not been filled"); } if (!filled.get(20)) { - throw new IllegalStateException("ecdata.EXT_RES_LO has not been filled"); + throw new IllegalStateException("ecdata.G2_MEMBERSHIP_TEST_REQUIRED has not been filled"); } if (!filled.get(21)) { @@ -774,66 +1240,130 @@ public Trace validateRow() { } if (!filled.get(22)) { - throw new IllegalStateException("ecdata.INDEX has not been filled"); + throw new IllegalStateException("ecdata.ID has not been filled"); } if (!filled.get(23)) { - throw new IllegalStateException("ecdata.LIMB has not been filled"); + throw new IllegalStateException("ecdata.INDEX has not been filled"); } if (!filled.get(24)) { - throw new IllegalStateException("ecdata.PRELIMINARY_CHECKS_PASSED has not been filled"); + throw new IllegalStateException("ecdata.INDEX_MAX has not been filled"); } if (!filled.get(25)) { - throw new IllegalStateException("ecdata.SOMETHING_WASNT_ON_G2 has not been filled"); + throw new IllegalStateException("ecdata.INTERNAL_CHECKS_PASSED has not been filled"); } if (!filled.get(26)) { - throw new IllegalStateException("ecdata.SQUARE has not been filled"); + throw new IllegalStateException("ecdata.IS_ECADD_DATA has not been filled"); } if (!filled.get(27)) { - throw new IllegalStateException("ecdata.STAMP has not been filled"); + throw new IllegalStateException("ecdata.IS_ECADD_RESULT has not been filled"); } if (!filled.get(28)) { - throw new IllegalStateException("ecdata.THIS_IS_NOT_ON_G2 has not been filled"); + throw new IllegalStateException("ecdata.IS_ECMUL_DATA has not been filled"); } if (!filled.get(29)) { - throw new IllegalStateException("ecdata.THIS_IS_NOT_ON_G2_ACC has not been filled"); + throw new IllegalStateException("ecdata.IS_ECMUL_RESULT has not been filled"); } if (!filled.get(30)) { - throw new IllegalStateException("ecdata.TOTAL_PAIRINGS has not been filled"); + throw new IllegalStateException("ecdata.IS_ECPAIRING_DATA has not been filled"); } if (!filled.get(31)) { - throw new IllegalStateException("ecdata.TYPE has not been filled"); + throw new IllegalStateException("ecdata.IS_ECPAIRING_RESULT has not been filled"); } if (!filled.get(32)) { - throw new IllegalStateException("ecdata.WCP_ARG1_HI has not been filled"); + throw new IllegalStateException("ecdata.IS_ECRECOVER_DATA has not been filled"); } if (!filled.get(33)) { - throw new IllegalStateException("ecdata.WCP_ARG1_LO has not been filled"); + throw new IllegalStateException("ecdata.IS_ECRECOVER_RESULT has not been filled"); } if (!filled.get(34)) { - throw new IllegalStateException("ecdata.WCP_ARG2_HI has not been filled"); + throw new IllegalStateException("ecdata.IS_INFINITY has not been filled"); } if (!filled.get(35)) { - throw new IllegalStateException("ecdata.WCP_ARG2_LO has not been filled"); + throw new IllegalStateException("ecdata.IS_LARGE_POINT has not been filled"); } if (!filled.get(36)) { - throw new IllegalStateException("ecdata.WCP_INST has not been filled"); + throw new IllegalStateException("ecdata.IS_SMALL_POINT has not been filled"); } if (!filled.get(37)) { + throw new IllegalStateException("ecdata.LIMB has not been filled"); + } + + if (!filled.get(38)) { + throw new IllegalStateException("ecdata.NOT_ON_G2 has not been filled"); + } + + if (!filled.get(39)) { + throw new IllegalStateException("ecdata.NOT_ON_G2_ACC has not been filled"); + } + + if (!filled.get(40)) { + throw new IllegalStateException("ecdata.NOT_ON_G2_ACC_MAX has not been filled"); + } + + if (!filled.get(41)) { + throw new IllegalStateException("ecdata.OVERALL_TRIVIAL_PAIRING has not been filled"); + } + + if (!filled.get(42)) { + throw new IllegalStateException("ecdata.PHASE has not been filled"); + } + + if (!filled.get(43)) { + throw new IllegalStateException("ecdata.STAMP has not been filled"); + } + + if (!filled.get(44)) { + throw new IllegalStateException("ecdata.SUCCESS_BIT has not been filled"); + } + + if (!filled.get(45)) { + throw new IllegalStateException("ecdata.TOTAL_PAIRINGS has not been filled"); + } + + if (!filled.get(46)) { + throw new IllegalStateException("ecdata.TOTAL_SIZE has not been filled"); + } + + if (!filled.get(47)) { + throw new IllegalStateException("ecdata.WCP_ARG1_HI has not been filled"); + } + + if (!filled.get(48)) { + throw new IllegalStateException("ecdata.WCP_ARG1_LO has not been filled"); + } + + if (!filled.get(49)) { + throw new IllegalStateException("ecdata.WCP_ARG2_HI has not been filled"); + } + + if (!filled.get(50)) { + throw new IllegalStateException("ecdata.WCP_ARG2_LO has not been filled"); + } + + if (!filled.get(51)) { + throw new IllegalStateException("ecdata.WCP_FLAG has not been filled"); + } + + if (!filled.get(52)) { + throw new IllegalStateException("ecdata.WCP_INST has not been filled"); + } + + if (!filled.get(53)) { throw new IllegalStateException("ecdata.WCP_RES has not been filled"); } @@ -844,88 +1374,89 @@ public Trace validateRow() { } public Trace fillAndValidateRow() { - if (!filled.get(0)) { - accDelta.position(accDelta.position() + 32); + if (!filled.get(1)) { + accPairings.position(accPairings.position() + 32); } - if (!filled.get(1)) { - accPairings.position(accPairings.position() + 2); + if (!filled.get(0)) { + acceptablePairOfPointsForPairingCircuit.position( + acceptablePairOfPointsForPairingCircuit.position() + 1); } if (!filled.get(2)) { - allChecksPassed.position(allChecksPassed.position() + 1); + byteDelta.position(byteDelta.position() + 1); } if (!filled.get(3)) { - byteDelta.position(byteDelta.position() + 1); + circuitSelectorEcadd.position(circuitSelectorEcadd.position() + 1); } if (!filled.get(4)) { - comparisons.position(comparisons.position() + 1); + circuitSelectorEcmul.position(circuitSelectorEcmul.position() + 1); } if (!filled.get(5)) { - ctMin.position(ctMin.position() + 1); + circuitSelectorEcpairing.position(circuitSelectorEcpairing.position() + 1); } if (!filled.get(6)) { - cube.position(cube.position() + 32); + circuitSelectorEcrecover.position(circuitSelectorEcrecover.position() + 1); } if (!filled.get(7)) { - ecAdd.position(ecAdd.position() + 1); + circuitSelectorG2Membership.position(circuitSelectorG2Membership.position() + 1); } if (!filled.get(8)) { - ecMul.position(ecMul.position() + 1); + ct.position(ct.position() + 1); } if (!filled.get(9)) { - ecPairing.position(ecPairing.position() + 1); + ctMax.position(ctMax.position() + 1); } if (!filled.get(10)) { - ecRecover.position(ecRecover.position() + 1); + extArg1Hi.position(extArg1Hi.position() + 16); } if (!filled.get(11)) { - equalities.position(equalities.position() + 1); + extArg1Lo.position(extArg1Lo.position() + 16); } if (!filled.get(12)) { - extArg1Hi.position(extArg1Hi.position() + 32); + extArg2Hi.position(extArg2Hi.position() + 16); } if (!filled.get(13)) { - extArg1Lo.position(extArg1Lo.position() + 32); + extArg2Lo.position(extArg2Lo.position() + 16); } if (!filled.get(14)) { - extArg2Hi.position(extArg2Hi.position() + 32); + extArg3Hi.position(extArg3Hi.position() + 16); } if (!filled.get(15)) { - extArg2Lo.position(extArg2Lo.position() + 32); + extArg3Lo.position(extArg3Lo.position() + 16); } if (!filled.get(16)) { - extArg3Hi.position(extArg3Hi.position() + 32); + extFlag.position(extFlag.position() + 1); } if (!filled.get(17)) { - extArg3Lo.position(extArg3Lo.position() + 32); + extInst.position(extInst.position() + 1); } if (!filled.get(18)) { - extInst.position(extInst.position() + 1); + extResHi.position(extResHi.position() + 16); } if (!filled.get(19)) { - extResHi.position(extResHi.position() + 32); + extResLo.position(extResLo.position() + 16); } if (!filled.get(20)) { - extResLo.position(extResLo.position() + 32); + g2MembershipTestRequired.position(g2MembershipTestRequired.position() + 1); } if (!filled.get(21)) { @@ -933,66 +1464,130 @@ public Trace fillAndValidateRow() { } if (!filled.get(22)) { - index.position(index.position() + 1); + id.position(id.position() + 4); } if (!filled.get(23)) { - limb.position(limb.position() + 32); + index.position(index.position() + 1); } if (!filled.get(24)) { - preliminaryChecksPassed.position(preliminaryChecksPassed.position() + 1); + indexMax.position(indexMax.position() + 32); } if (!filled.get(25)) { - somethingWasntOnG2.position(somethingWasntOnG2.position() + 1); + internalChecksPassed.position(internalChecksPassed.position() + 1); } if (!filled.get(26)) { - square.position(square.position() + 32); + isEcaddData.position(isEcaddData.position() + 1); } if (!filled.get(27)) { - stamp.position(stamp.position() + 8); + isEcaddResult.position(isEcaddResult.position() + 1); } if (!filled.get(28)) { - thisIsNotOnG2.position(thisIsNotOnG2.position() + 1); + isEcmulData.position(isEcmulData.position() + 1); } if (!filled.get(29)) { - thisIsNotOnG2Acc.position(thisIsNotOnG2Acc.position() + 1); + isEcmulResult.position(isEcmulResult.position() + 1); } if (!filled.get(30)) { - totalPairings.position(totalPairings.position() + 2); + isEcpairingData.position(isEcpairingData.position() + 1); } if (!filled.get(31)) { - type.position(type.position() + 1); + isEcpairingResult.position(isEcpairingResult.position() + 1); } if (!filled.get(32)) { - wcpArg1Hi.position(wcpArg1Hi.position() + 32); + isEcrecoverData.position(isEcrecoverData.position() + 1); } if (!filled.get(33)) { - wcpArg1Lo.position(wcpArg1Lo.position() + 32); + isEcrecoverResult.position(isEcrecoverResult.position() + 1); } if (!filled.get(34)) { - wcpArg2Hi.position(wcpArg2Hi.position() + 32); + isInfinity.position(isInfinity.position() + 1); } if (!filled.get(35)) { - wcpArg2Lo.position(wcpArg2Lo.position() + 32); + isLargePoint.position(isLargePoint.position() + 1); } if (!filled.get(36)) { - wcpInst.position(wcpInst.position() + 1); + isSmallPoint.position(isSmallPoint.position() + 1); } if (!filled.get(37)) { + limb.position(limb.position() + 16); + } + + if (!filled.get(38)) { + notOnG2.position(notOnG2.position() + 1); + } + + if (!filled.get(39)) { + notOnG2Acc.position(notOnG2Acc.position() + 1); + } + + if (!filled.get(40)) { + notOnG2AccMax.position(notOnG2AccMax.position() + 1); + } + + if (!filled.get(41)) { + overallTrivialPairing.position(overallTrivialPairing.position() + 1); + } + + if (!filled.get(42)) { + phase.position(phase.position() + 2); + } + + if (!filled.get(43)) { + stamp.position(stamp.position() + 4); + } + + if (!filled.get(44)) { + successBit.position(successBit.position() + 1); + } + + if (!filled.get(45)) { + totalPairings.position(totalPairings.position() + 32); + } + + if (!filled.get(46)) { + totalSize.position(totalSize.position() + 32); + } + + if (!filled.get(47)) { + wcpArg1Hi.position(wcpArg1Hi.position() + 16); + } + + if (!filled.get(48)) { + wcpArg1Lo.position(wcpArg1Lo.position() + 16); + } + + if (!filled.get(49)) { + wcpArg2Hi.position(wcpArg2Hi.position() + 16); + } + + if (!filled.get(50)) { + wcpArg2Lo.position(wcpArg2Lo.position() + 16); + } + + if (!filled.get(51)) { + wcpFlag.position(wcpFlag.position() + 1); + } + + if (!filled.get(52)) { + wcpInst.position(wcpInst.position() + 1); + } + + if (!filled.get(53)) { wcpRes.position(wcpRes.position() + 1); } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/euc/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/euc/Trace.java index 8f3d1485ea..208f99ffc4 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/euc/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/euc/Trace.java @@ -49,17 +49,17 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("euc.CEIL", 32, length), - new ColumnHeader("euc.CT", 2, length), - new ColumnHeader("euc.CT_MAX", 2, length), - new ColumnHeader("euc.DIVIDEND", 32, length), - new ColumnHeader("euc.DIVISOR", 32, length), + new ColumnHeader("euc.CEIL", 8, length), + new ColumnHeader("euc.CT", 1, length), + new ColumnHeader("euc.CT_MAX", 1, length), + new ColumnHeader("euc.DIVIDEND", 8, length), + new ColumnHeader("euc.DIVISOR", 8, length), new ColumnHeader("euc.DIVISOR_BYTE", 1, length), new ColumnHeader("euc.DONE", 1, length), new ColumnHeader("euc.IOMF", 1, length), - new ColumnHeader("euc.QUOTIENT", 32, length), + new ColumnHeader("euc.QUOTIENT", 8, length), new ColumnHeader("euc.QUOTIENT_BYTE", 1, length), - new ColumnHeader("euc.REMAINDER", 32, length), + new ColumnHeader("euc.REMAINDER", 8, length), new ColumnHeader("euc.REMAINDER_BYTE", 1, length)); } @@ -93,35 +93,50 @@ public Trace ceil(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("ceil has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { ceil.put((byte) 0); } - ceil.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + ceil.put(bs.get(j)); + } return this; } - public Trace ct(final short b) { + public Trace ct(final long b) { if (filled.get(1)) { throw new IllegalStateException("euc.CT already set"); } else { filled.set(1); } - ct.putShort(b); + if (b >= 256L) { + throw new IllegalArgumentException("ct has invalid value (" + b + ")"); + } + ct.put((byte) b); return this; } - public Trace ctMax(final short b) { + public Trace ctMax(final long b) { if (filled.get(2)) { throw new IllegalStateException("euc.CT_MAX already set"); } else { filled.set(2); } - ctMax.putShort(b); + if (b >= 256L) { + throw new IllegalArgumentException("ctMax has invalid value (" + b + ")"); + } + ctMax.put((byte) b); return this; } @@ -133,11 +148,20 @@ public Trace dividend(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("dividend has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { dividend.put((byte) 0); } - dividend.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + dividend.put(bs.get(j)); + } return this; } @@ -149,11 +173,20 @@ public Trace divisor(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("divisor has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { divisor.put((byte) 0); } - divisor.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + divisor.put(bs.get(j)); + } return this; } @@ -201,11 +234,20 @@ public Trace quotient(final Bytes b) { filled.set(8); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("quotient has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { quotient.put((byte) 0); } - quotient.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + quotient.put(bs.get(j)); + } return this; } @@ -229,11 +271,21 @@ public Trace remainder(final Bytes b) { filled.set(10); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "remainder has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { remainder.put((byte) 0); } - remainder.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + remainder.put(bs.get(j)); + } return this; } @@ -307,23 +359,23 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - ceil.position(ceil.position() + 32); + ceil.position(ceil.position() + 8); } if (!filled.get(1)) { - ct.position(ct.position() + 2); + ct.position(ct.position() + 1); } if (!filled.get(2)) { - ctMax.position(ctMax.position() + 2); + ctMax.position(ctMax.position() + 1); } if (!filled.get(3)) { - dividend.position(dividend.position() + 32); + dividend.position(dividend.position() + 8); } if (!filled.get(4)) { - divisor.position(divisor.position() + 32); + divisor.position(divisor.position() + 8); } if (!filled.get(5)) { @@ -339,7 +391,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(8)) { - quotient.position(quotient.position() + 32); + quotient.position(quotient.position() + 8); } if (!filled.get(9)) { @@ -347,7 +399,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(10)) { - remainder.position(remainder.position() + 32); + remainder.position(remainder.position() + 8); } if (!filled.get(11)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ExpLogOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ExpLogOperation.java index 249d069a41..ffbf32b01e 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ExpLogOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ExpLogOperation.java @@ -15,10 +15,10 @@ package net.consensys.linea.zktracer.module.exp; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.EVM_INST_ISZERO; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.EXP_INST_EXPLOG; -import static net.consensys.linea.zktracer.module.exp.Trace.ISZERO; -import static net.consensys.linea.zktracer.module.exp.Trace.MAX_CT_CMPTN_EXP_LOG; -import static net.consensys.linea.zktracer.module.exp.Trace.MAX_CT_PRPRC_EXP_LOG; +import static net.consensys.linea.zktracer.module.exp.Trace.CT_MAX_CMPTN_EXP_LOG; +import static net.consensys.linea.zktracer.module.exp.Trace.CT_MAX_PRPRC_EXP_LOG; import static net.consensys.linea.zktracer.opcode.gas.GasConstants.G_EXP_BYTE; import lombok.EqualsAndHashCode; @@ -55,7 +55,7 @@ public void preCompute() { pMacroData1 = this.exponent.hi(); pMacroData2 = this.exponent.lo(); pMacroData5 = Bytes.ofUnsignedLong(this.dynCost); - initArrays(MAX_CT_PRPRC_EXP_LOG + 1); + initArrays(CT_MAX_PRPRC_EXP_LOG + 1); // Preprocessing // First row @@ -64,7 +64,7 @@ public void preCompute() { pPreprocessingWcpArg1Lo[0] = this.exponent.hi(); pPreprocessingWcpArg2Hi[0] = Bytes.EMPTY; pPreprocessingWcpArg2Lo[0] = Bytes.EMPTY; - pPreprocessingWcpInst[0] = UnsignedByte.of(ISZERO); + pPreprocessingWcpInst[0] = UnsignedByte.of(EVM_INST_ISZERO); final boolean expnHiIsZero = wcp.callISZERO(this.exponent.hi()); ; pPreprocessingWcpRes[0] = expnHiIsZero; @@ -77,7 +77,7 @@ public void preCompute() { } // Fill trimAcc - short maxCt = (short) MAX_CT_CMPTN_EXP_LOG; + short maxCt = (short) CT_MAX_CMPTN_EXP_LOG; for (short i = 0; i < maxCt + 1; i++) { boolean pltBit = i >= pComputationPltJmp; byte rawByte = pComputationRawAcc.get(i); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ExpOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ExpOperation.java index 1ee5f9b4e3..a27ba9beb7 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ExpOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ExpOperation.java @@ -15,10 +15,10 @@ package net.consensys.linea.zktracer.module.exp; -import static net.consensys.linea.zktracer.module.exp.Trace.MAX_CT_CMPTN_EXP_LOG; -import static net.consensys.linea.zktracer.module.exp.Trace.MAX_CT_CMPTN_MODEXP_LOG; -import static net.consensys.linea.zktracer.module.exp.Trace.MAX_CT_PRPRC_EXP_LOG; -import static net.consensys.linea.zktracer.module.exp.Trace.MAX_CT_PRPRC_MODEXP_LOG; +import static net.consensys.linea.zktracer.module.exp.Trace.CT_MAX_CMPTN_EXP_LOG; +import static net.consensys.linea.zktracer.module.exp.Trace.CT_MAX_CMPTN_MODEXP_LOG; +import static net.consensys.linea.zktracer.module.exp.Trace.CT_MAX_PRPRC_EXP_LOG; +import static net.consensys.linea.zktracer.module.exp.Trace.CT_MAX_PRPRC_MODEXP_LOG; import lombok.Getter; import net.consensys.linea.zktracer.container.ModuleOperation; @@ -64,12 +64,12 @@ protected void initArrays(int pPreprocessingLen) { @Override protected int computeLineCount() { - // We assume MAX_CT_MACRO_EXP_LOG = MAX_CT_MACRO_MODEXP_LOG = 0; + // We assume CT_MAX_MACRO_EXP_LOG = CT_MAX_MACRO_MODEXP_LOG = 0; if (this.isExpLog()) { - return MAX_CT_CMPTN_EXP_LOG + MAX_CT_PRPRC_EXP_LOG + 3; + return CT_MAX_CMPTN_EXP_LOG + CT_MAX_PRPRC_EXP_LOG + 3; } - return MAX_CT_CMPTN_MODEXP_LOG + MAX_CT_PRPRC_MODEXP_LOG + 3; + return CT_MAX_CMPTN_MODEXP_LOG + CT_MAX_PRPRC_MODEXP_LOG + 3; } public abstract void preCompute(); @@ -79,7 +79,7 @@ final void traceComputation(int stamp, Trace trace) { short pComputationTanzbAcc = 0; // Paired with Tanzb boolean manzb; short pComputationManzbAcc = 0; // Paired with Manzb - short maxCt = (short) (isExpLog() ? MAX_CT_CMPTN_EXP_LOG : MAX_CT_CMPTN_MODEXP_LOG); + short maxCt = (short) (isExpLog() ? CT_MAX_CMPTN_EXP_LOG : CT_MAX_CMPTN_MODEXP_LOG); for (short i = 0; i < maxCt + 1; i++) { /* @@ -91,7 +91,7 @@ final void traceComputation(int stamp, Trace trace) { pComputationMsb */ // tanzb turns to 1 iff trimAcc is nonzero - tanzb = pComputationTrimAcc.slice(0, i + 1).toBigInteger().signum() != 0; + tanzb = pComputationTrimAcc.slice(0, i + 1).toUnsignedBigInteger().signum() != 0; pComputationTanzbAcc += (short) (tanzb ? 1 : 0); // manzb turns to 1 iff msbAcc is nonzero manzb = i > maxCt - 8 && pComputationMsb.slice(0, i % 8 + 1) != 0; @@ -122,7 +122,7 @@ final void traceComputation(int stamp, Trace trace) { } final void traceMacro(int stamp, Trace trace) { - // We assume MAX_CT_MACRO_EXP_LOG = MAX_CT_MACRO_MODEXP_LOG = 0; + // We assume CT_MAX_MACRO_EXP_LOG = CT_MAX_MACRO_MODEXP_LOG = 0; trace .macro(true) .stamp(stamp) @@ -140,7 +140,7 @@ final void traceMacro(int stamp, Trace trace) { } final void tracePreprocessing(int stamp, Trace trace) { - short maxCt = (short) (isExpLog() ? MAX_CT_PRPRC_EXP_LOG : MAX_CT_PRPRC_MODEXP_LOG); + short maxCt = (short) (isExpLog() ? CT_MAX_PRPRC_EXP_LOG : CT_MAX_PRPRC_MODEXP_LOG); for (short i = 0; i < maxCt + 1; i++) { trace .prprc(true) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ModexpLogOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ModexpLogOperation.java index c9cb6b0c73..bf7aa66949 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ModexpLogOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/ModexpLogOperation.java @@ -22,8 +22,8 @@ import static net.consensys.linea.zktracer.module.constants.GlobalConstants.EXP_INST_MODEXPLOG; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.LLARGE; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.LLARGEPO; -import static net.consensys.linea.zktracer.module.exp.Trace.MAX_CT_CMPTN_MODEXP_LOG; -import static net.consensys.linea.zktracer.module.exp.Trace.MAX_CT_PRPRC_MODEXP_LOG; +import static net.consensys.linea.zktracer.module.exp.Trace.CT_MAX_CMPTN_MODEXP_LOG; +import static net.consensys.linea.zktracer.module.exp.Trace.CT_MAX_PRPRC_MODEXP_LOG; import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; import static net.consensys.linea.zktracer.types.Utils.leftPadTo; @@ -102,7 +102,7 @@ public void preCompute() { pMacroData3 = Bytes.of(this.cdsCutoff); pMacroData4 = Bytes.of(this.ebsCutoff); pMacroData5 = bigIntegerToBytes(this.leadLog); - initArrays(MAX_CT_PRPRC_MODEXP_LOG + 1); + initArrays(CT_MAX_PRPRC_MODEXP_LOG + 1); // Preprocessing final BigInteger trimLimb = @@ -183,7 +183,7 @@ public void preCompute() { } // Fill trimAcc - final short maxCt = (short) MAX_CT_CMPTN_MODEXP_LOG; + final short maxCt = (short) CT_MAX_CMPTN_MODEXP_LOG; for (short i = 0; i < maxCt + 1; i++) { final boolean pltBit = i >= pComputationPltJmp; final byte rawByte = pComputationRawAcc.get(i); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/Trace.java index f493f515a7..6630970796 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/exp/Trace.java @@ -30,16 +30,12 @@ * Please DO NOT ATTEMPT TO MODIFY this code directly. */ public class Trace { - public static final int EQ = 0x14; - public static final int G_EXPBYTES = 0x32; - public static final int ISZERO = 0x15; - public static final int LT = 0x10; - public static final int MAX_CT_CMPTN_EXP_LOG = 0xf; - public static final int MAX_CT_CMPTN_MODEXP_LOG = 0xf; - public static final int MAX_CT_MACRO_EXP_LOG = 0x0; - public static final int MAX_CT_MACRO_MODEXP_LOG = 0x0; - public static final int MAX_CT_PRPRC_EXP_LOG = 0x0; - public static final int MAX_CT_PRPRC_MODEXP_LOG = 0x4; + public static final int CT_MAX_CMPTN_EXP_LOG = 0xf; + public static final int CT_MAX_CMPTN_MODEXP_LOG = 0xf; + public static final int CT_MAX_MACRO_EXP_LOG = 0x0; + public static final int CT_MAX_MACRO_MODEXP_LOG = 0x0; + public static final int CT_MAX_PRPRC_EXP_LOG = 0x0; + public static final int CT_MAX_PRPRC_MODEXP_LOG = 0x4; private final BitSet filled = new BitSet(); private int currentLine = 0; @@ -73,29 +69,29 @@ public class Trace { static List headers(int length) { return List.of( new ColumnHeader("exp.CMPTN", 1, length), - new ColumnHeader("exp.CT", 2, length), - new ColumnHeader("exp.CT_MAX", 2, length), - new ColumnHeader("exp.DATA_3_xor_WCP_ARG_2_HI", 32, length), - new ColumnHeader("exp.DATA_4_xor_WCP_ARG_2_LO", 32, length), - new ColumnHeader("exp.DATA_5", 32, length), - new ColumnHeader("exp.EXP_INST", 4, length), + new ColumnHeader("exp.CT", 1, length), + new ColumnHeader("exp.CT_MAX", 1, length), + new ColumnHeader("exp.DATA_3_xor_WCP_ARG_2_HI", 16, length), + new ColumnHeader("exp.DATA_4_xor_WCP_ARG_2_LO", 16, length), + new ColumnHeader("exp.DATA_5", 16, length), + new ColumnHeader("exp.EXP_INST", 2, length), new ColumnHeader("exp.IS_EXP_LOG", 1, length), new ColumnHeader("exp.IS_MODEXP_LOG", 1, length), new ColumnHeader("exp.MACRO", 1, length), - new ColumnHeader("exp.MANZB_ACC", 2, length), + new ColumnHeader("exp.MANZB_ACC", 1, length), new ColumnHeader("exp.MANZB_xor_WCP_FLAG", 1, length), new ColumnHeader("exp.MSB_ACC", 1, length), new ColumnHeader("exp.MSB_BIT_xor_WCP_RES", 1, length), new ColumnHeader("exp.MSB_xor_WCP_INST", 1, length), new ColumnHeader("exp.PLT_BIT", 1, length), - new ColumnHeader("exp.PLT_JMP", 2, length), + new ColumnHeader("exp.PLT_JMP", 1, length), new ColumnHeader("exp.PRPRC", 1, length), - new ColumnHeader("exp.RAW_ACC_xor_DATA_1_xor_WCP_ARG_1_HI", 32, length), + new ColumnHeader("exp.RAW_ACC_xor_DATA_1_xor_WCP_ARG_1_HI", 16, length), new ColumnHeader("exp.RAW_BYTE", 1, length), - new ColumnHeader("exp.STAMP", 8, length), + new ColumnHeader("exp.STAMP", 4, length), new ColumnHeader("exp.TANZB", 1, length), - new ColumnHeader("exp.TANZB_ACC", 2, length), - new ColumnHeader("exp.TRIM_ACC_xor_DATA_2_xor_WCP_ARG_1_LO", 32, length), + new ColumnHeader("exp.TANZB_ACC", 1, length), + new ColumnHeader("exp.TRIM_ACC_xor_DATA_2_xor_WCP_ARG_1_LO", 16, length), new ColumnHeader("exp.TRIM_BYTE", 1, length)); } @@ -147,26 +143,32 @@ public Trace cmptn(final Boolean b) { return this; } - public Trace ct(final short b) { + public Trace ct(final long b) { if (filled.get(1)) { throw new IllegalStateException("exp.CT already set"); } else { filled.set(1); } - ct.putShort(b); + if (b >= 16L) { + throw new IllegalArgumentException("ct has invalid value (" + b + ")"); + } + ct.put((byte) b); return this; } - public Trace ctMax(final short b) { + public Trace ctMax(final long b) { if (filled.get(2)) { throw new IllegalStateException("exp.CT_MAX already set"); } else { filled.set(2); } - ctMax.putShort(b); + if (b >= 16L) { + throw new IllegalArgumentException("ctMax has invalid value (" + b + ")"); + } + ctMax.put((byte) b); return this; } @@ -219,14 +221,17 @@ public Trace pComputationManzb(final Boolean b) { return this; } - public Trace pComputationManzbAcc(final short b) { + public Trace pComputationManzbAcc(final long b) { if (filled.get(16)) { throw new IllegalStateException("exp.computation/MANZB_ACC already set"); } else { filled.set(16); } - manzbAcc.putShort(b); + if (b >= 16L) { + throw new IllegalArgumentException("manzbAcc has invalid value (" + b + ")"); + } + manzbAcc.put((byte) b); return this; } @@ -279,14 +284,17 @@ public Trace pComputationPltBit(final Boolean b) { return this; } - public Trace pComputationPltJmp(final short b) { + public Trace pComputationPltJmp(final long b) { if (filled.get(18)) { throw new IllegalStateException("exp.computation/PLT_JMP already set"); } else { filled.set(18); } - pltJmp.putShort(b); + if (b >= 64L) { + throw new IllegalArgumentException("pltJmp has invalid value (" + b + ")"); + } + pltJmp.put((byte) b); return this; } @@ -298,11 +306,21 @@ public Trace pComputationRawAcc(final Bytes b) { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "rawAccXorData1XorWcpArg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { rawAccXorData1XorWcpArg1Hi.put((byte) 0); } - rawAccXorData1XorWcpArg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + rawAccXorData1XorWcpArg1Hi.put(bs.get(j)); + } return this; } @@ -331,14 +349,17 @@ public Trace pComputationTanzb(final Boolean b) { return this; } - public Trace pComputationTanzbAcc(final short b) { + public Trace pComputationTanzbAcc(final long b) { if (filled.get(17)) { throw new IllegalStateException("exp.computation/TANZB_ACC already set"); } else { filled.set(17); } - tanzbAcc.putShort(b); + if (b >= 32L) { + throw new IllegalArgumentException("tanzbAcc has invalid value (" + b + ")"); + } + tanzbAcc.put((byte) b); return this; } @@ -350,11 +371,21 @@ public Trace pComputationTrimAcc(final Bytes b) { filled.set(21); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "trimAccXorData2XorWcpArg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { trimAccXorData2XorWcpArg1Lo.put((byte) 0); } - trimAccXorData2XorWcpArg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + trimAccXorData2XorWcpArg1Lo.put(bs.get(j)); + } return this; } @@ -378,11 +409,21 @@ public Trace pMacroData1(final Bytes b) { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "rawAccXorData1XorWcpArg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { rawAccXorData1XorWcpArg1Hi.put((byte) 0); } - rawAccXorData1XorWcpArg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + rawAccXorData1XorWcpArg1Hi.put(bs.get(j)); + } return this; } @@ -394,11 +435,21 @@ public Trace pMacroData2(final Bytes b) { filled.set(21); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "trimAccXorData2XorWcpArg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { trimAccXorData2XorWcpArg1Lo.put((byte) 0); } - trimAccXorData2XorWcpArg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + trimAccXorData2XorWcpArg1Lo.put(bs.get(j)); + } return this; } @@ -410,11 +461,21 @@ public Trace pMacroData3(final Bytes b) { filled.set(22); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "data3XorWcpArg2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { data3XorWcpArg2Hi.put((byte) 0); } - data3XorWcpArg2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data3XorWcpArg2Hi.put(bs.get(j)); + } return this; } @@ -426,11 +487,21 @@ public Trace pMacroData4(final Bytes b) { filled.set(23); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "data4XorWcpArg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { data4XorWcpArg2Lo.put((byte) 0); } - data4XorWcpArg2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data4XorWcpArg2Lo.put(bs.get(j)); + } return this; } @@ -442,23 +513,36 @@ public Trace pMacroData5(final Bytes b) { filled.set(24); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("data5 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { data5.put((byte) 0); } - data5.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data5.put(bs.get(j)); + } return this; } - public Trace pMacroExpInst(final int b) { + public Trace pMacroExpInst(final long b) { if (filled.get(19)) { throw new IllegalStateException("exp.macro/EXP_INST already set"); } else { filled.set(19); } - expInst.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("expInst has invalid value (" + b + ")"); + } + expInst.put((byte) (b >> 8)); + expInst.put((byte) b); return this; } @@ -470,11 +554,21 @@ public Trace pPreprocessingWcpArg1Hi(final Bytes b) { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "rawAccXorData1XorWcpArg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { rawAccXorData1XorWcpArg1Hi.put((byte) 0); } - rawAccXorData1XorWcpArg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + rawAccXorData1XorWcpArg1Hi.put(bs.get(j)); + } return this; } @@ -486,11 +580,21 @@ public Trace pPreprocessingWcpArg1Lo(final Bytes b) { filled.set(21); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "trimAccXorData2XorWcpArg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { trimAccXorData2XorWcpArg1Lo.put((byte) 0); } - trimAccXorData2XorWcpArg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + trimAccXorData2XorWcpArg1Lo.put(bs.get(j)); + } return this; } @@ -502,11 +606,21 @@ public Trace pPreprocessingWcpArg2Hi(final Bytes b) { filled.set(22); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "data3XorWcpArg2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { data3XorWcpArg2Hi.put((byte) 0); } - data3XorWcpArg2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data3XorWcpArg2Hi.put(bs.get(j)); + } return this; } @@ -518,11 +632,21 @@ public Trace pPreprocessingWcpArg2Lo(final Bytes b) { filled.set(23); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "data4XorWcpArg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { data4XorWcpArg2Lo.put((byte) 0); } - data4XorWcpArg2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data4XorWcpArg2Lo.put(bs.get(j)); + } return this; } @@ -582,7 +706,13 @@ public Trace stamp(final long b) { filled.set(7); } - stamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 24)); + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); return this; } @@ -702,27 +832,27 @@ public Trace fillAndValidateRow() { } if (!filled.get(1)) { - ct.position(ct.position() + 2); + ct.position(ct.position() + 1); } if (!filled.get(2)) { - ctMax.position(ctMax.position() + 2); + ctMax.position(ctMax.position() + 1); } if (!filled.get(22)) { - data3XorWcpArg2Hi.position(data3XorWcpArg2Hi.position() + 32); + data3XorWcpArg2Hi.position(data3XorWcpArg2Hi.position() + 16); } if (!filled.get(23)) { - data4XorWcpArg2Lo.position(data4XorWcpArg2Lo.position() + 32); + data4XorWcpArg2Lo.position(data4XorWcpArg2Lo.position() + 16); } if (!filled.get(24)) { - data5.position(data5.position() + 32); + data5.position(data5.position() + 16); } if (!filled.get(19)) { - expInst.position(expInst.position() + 4); + expInst.position(expInst.position() + 2); } if (!filled.get(3)) { @@ -738,7 +868,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(16)) { - manzbAcc.position(manzbAcc.position() + 2); + manzbAcc.position(manzbAcc.position() + 1); } if (!filled.get(8)) { @@ -762,7 +892,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(18)) { - pltJmp.position(pltJmp.position() + 2); + pltJmp.position(pltJmp.position() + 1); } if (!filled.get(6)) { @@ -770,7 +900,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(20)) { - rawAccXorData1XorWcpArg1Hi.position(rawAccXorData1XorWcpArg1Hi.position() + 32); + rawAccXorData1XorWcpArg1Hi.position(rawAccXorData1XorWcpArg1Hi.position() + 16); } if (!filled.get(14)) { @@ -778,7 +908,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(7)) { - stamp.position(stamp.position() + 8); + stamp.position(stamp.position() + 4); } if (!filled.get(11)) { @@ -786,11 +916,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(17)) { - tanzbAcc.position(tanzbAcc.position() + 2); + tanzbAcc.position(tanzbAcc.position() + 1); } if (!filled.get(21)) { - trimAccXorData2XorWcpArg1Lo.position(trimAccXorData2XorWcpArg1Lo.position() + 32); + trimAccXorData2XorWcpArg1Lo.position(trimAccXorData2XorWcpArg1Lo.position() + 16); } if (!filled.get(15)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ext/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ext/Trace.java index e9ff1d731b..7fbf4bd49f 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ext/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/ext/Trace.java @@ -411,11 +411,20 @@ public Trace accA0(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accA0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accA0.put((byte) 0); } - accA0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accA0.put(bs.get(j)); + } return this; } @@ -427,11 +436,20 @@ public Trace accA1(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accA1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accA1.put((byte) 0); } - accA1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accA1.put(bs.get(j)); + } return this; } @@ -443,11 +461,20 @@ public Trace accA2(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accA2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accA2.put((byte) 0); } - accA2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accA2.put(bs.get(j)); + } return this; } @@ -459,11 +486,20 @@ public Trace accA3(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accA3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accA3.put((byte) 0); } - accA3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accA3.put(bs.get(j)); + } return this; } @@ -475,11 +511,20 @@ public Trace accB0(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accB0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accB0.put((byte) 0); } - accB0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB0.put(bs.get(j)); + } return this; } @@ -491,11 +536,20 @@ public Trace accB1(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accB1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accB1.put((byte) 0); } - accB1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB1.put(bs.get(j)); + } return this; } @@ -507,11 +561,20 @@ public Trace accB2(final Bytes b) { filled.set(6); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accB2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accB2.put((byte) 0); } - accB2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB2.put(bs.get(j)); + } return this; } @@ -523,11 +586,20 @@ public Trace accB3(final Bytes b) { filled.set(7); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accB3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accB3.put((byte) 0); } - accB3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB3.put(bs.get(j)); + } return this; } @@ -539,11 +611,20 @@ public Trace accC0(final Bytes b) { filled.set(8); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accC0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accC0.put((byte) 0); } - accC0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accC0.put(bs.get(j)); + } return this; } @@ -555,11 +636,20 @@ public Trace accC1(final Bytes b) { filled.set(9); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accC1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accC1.put((byte) 0); } - accC1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accC1.put(bs.get(j)); + } return this; } @@ -571,11 +661,20 @@ public Trace accC2(final Bytes b) { filled.set(10); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accC2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accC2.put((byte) 0); } - accC2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accC2.put(bs.get(j)); + } return this; } @@ -587,11 +686,20 @@ public Trace accC3(final Bytes b) { filled.set(11); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accC3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accC3.put((byte) 0); } - accC3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accC3.put(bs.get(j)); + } return this; } @@ -603,11 +711,21 @@ public Trace accDelta0(final Bytes b) { filled.set(12); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "accDelta0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accDelta0.put((byte) 0); } - accDelta0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accDelta0.put(bs.get(j)); + } return this; } @@ -619,11 +737,21 @@ public Trace accDelta1(final Bytes b) { filled.set(13); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "accDelta1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accDelta1.put((byte) 0); } - accDelta1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accDelta1.put(bs.get(j)); + } return this; } @@ -635,11 +763,21 @@ public Trace accDelta2(final Bytes b) { filled.set(14); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "accDelta2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accDelta2.put((byte) 0); } - accDelta2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accDelta2.put(bs.get(j)); + } return this; } @@ -651,11 +789,21 @@ public Trace accDelta3(final Bytes b) { filled.set(15); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "accDelta3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accDelta3.put((byte) 0); } - accDelta3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accDelta3.put(bs.get(j)); + } return this; } @@ -667,11 +815,20 @@ public Trace accH0(final Bytes b) { filled.set(16); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accH0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accH0.put((byte) 0); } - accH0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH0.put(bs.get(j)); + } return this; } @@ -683,11 +840,20 @@ public Trace accH1(final Bytes b) { filled.set(17); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accH1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accH1.put((byte) 0); } - accH1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH1.put(bs.get(j)); + } return this; } @@ -699,11 +865,20 @@ public Trace accH2(final Bytes b) { filled.set(18); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accH2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accH2.put((byte) 0); } - accH2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH2.put(bs.get(j)); + } return this; } @@ -715,11 +890,20 @@ public Trace accH3(final Bytes b) { filled.set(19); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accH3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accH3.put((byte) 0); } - accH3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH3.put(bs.get(j)); + } return this; } @@ -731,11 +915,20 @@ public Trace accH4(final Bytes b) { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accH4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accH4.put((byte) 0); } - accH4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH4.put(bs.get(j)); + } return this; } @@ -747,11 +940,20 @@ public Trace accH5(final Bytes b) { filled.set(21); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accH5 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accH5.put((byte) 0); } - accH5.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH5.put(bs.get(j)); + } return this; } @@ -763,11 +965,20 @@ public Trace accI0(final Bytes b) { filled.set(22); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accI0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accI0.put((byte) 0); } - accI0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accI0.put(bs.get(j)); + } return this; } @@ -779,11 +990,20 @@ public Trace accI1(final Bytes b) { filled.set(23); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accI1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accI1.put((byte) 0); } - accI1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accI1.put(bs.get(j)); + } return this; } @@ -795,11 +1015,20 @@ public Trace accI2(final Bytes b) { filled.set(24); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accI2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accI2.put((byte) 0); } - accI2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accI2.put(bs.get(j)); + } return this; } @@ -811,11 +1040,20 @@ public Trace accI3(final Bytes b) { filled.set(25); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accI3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accI3.put((byte) 0); } - accI3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accI3.put(bs.get(j)); + } return this; } @@ -827,11 +1065,20 @@ public Trace accI4(final Bytes b) { filled.set(26); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accI4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accI4.put((byte) 0); } - accI4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accI4.put(bs.get(j)); + } return this; } @@ -843,11 +1090,20 @@ public Trace accI5(final Bytes b) { filled.set(27); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accI5 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accI5.put((byte) 0); } - accI5.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accI5.put(bs.get(j)); + } return this; } @@ -859,11 +1115,20 @@ public Trace accI6(final Bytes b) { filled.set(28); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accI6 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accI6.put((byte) 0); } - accI6.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accI6.put(bs.get(j)); + } return this; } @@ -875,11 +1140,20 @@ public Trace accJ0(final Bytes b) { filled.set(29); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accJ0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accJ0.put((byte) 0); } - accJ0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accJ0.put(bs.get(j)); + } return this; } @@ -891,11 +1165,20 @@ public Trace accJ1(final Bytes b) { filled.set(30); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accJ1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accJ1.put((byte) 0); } - accJ1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accJ1.put(bs.get(j)); + } return this; } @@ -907,11 +1190,20 @@ public Trace accJ2(final Bytes b) { filled.set(31); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accJ2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accJ2.put((byte) 0); } - accJ2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accJ2.put(bs.get(j)); + } return this; } @@ -923,11 +1215,20 @@ public Trace accJ3(final Bytes b) { filled.set(32); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accJ3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accJ3.put((byte) 0); } - accJ3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accJ3.put(bs.get(j)); + } return this; } @@ -939,11 +1240,20 @@ public Trace accJ4(final Bytes b) { filled.set(33); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accJ4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accJ4.put((byte) 0); } - accJ4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accJ4.put(bs.get(j)); + } return this; } @@ -955,11 +1265,20 @@ public Trace accJ5(final Bytes b) { filled.set(34); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accJ5 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accJ5.put((byte) 0); } - accJ5.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accJ5.put(bs.get(j)); + } return this; } @@ -971,11 +1290,20 @@ public Trace accJ6(final Bytes b) { filled.set(35); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accJ6 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accJ6.put((byte) 0); } - accJ6.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accJ6.put(bs.get(j)); + } return this; } @@ -987,11 +1315,20 @@ public Trace accJ7(final Bytes b) { filled.set(36); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accJ7 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accJ7.put((byte) 0); } - accJ7.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accJ7.put(bs.get(j)); + } return this; } @@ -1003,11 +1340,20 @@ public Trace accQ0(final Bytes b) { filled.set(37); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accQ0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accQ0.put((byte) 0); } - accQ0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ0.put(bs.get(j)); + } return this; } @@ -1019,11 +1365,20 @@ public Trace accQ1(final Bytes b) { filled.set(38); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accQ1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accQ1.put((byte) 0); } - accQ1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ1.put(bs.get(j)); + } return this; } @@ -1035,11 +1390,20 @@ public Trace accQ2(final Bytes b) { filled.set(39); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accQ2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accQ2.put((byte) 0); } - accQ2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ2.put(bs.get(j)); + } return this; } @@ -1051,11 +1415,20 @@ public Trace accQ3(final Bytes b) { filled.set(40); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accQ3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accQ3.put((byte) 0); } - accQ3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ3.put(bs.get(j)); + } return this; } @@ -1067,11 +1440,20 @@ public Trace accQ4(final Bytes b) { filled.set(41); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accQ4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accQ4.put((byte) 0); } - accQ4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ4.put(bs.get(j)); + } return this; } @@ -1083,11 +1465,20 @@ public Trace accQ5(final Bytes b) { filled.set(42); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accQ5 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accQ5.put((byte) 0); } - accQ5.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ5.put(bs.get(j)); + } return this; } @@ -1099,11 +1490,20 @@ public Trace accQ6(final Bytes b) { filled.set(43); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accQ6 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accQ6.put((byte) 0); } - accQ6.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ6.put(bs.get(j)); + } return this; } @@ -1115,11 +1515,20 @@ public Trace accQ7(final Bytes b) { filled.set(44); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accQ7 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accQ7.put((byte) 0); } - accQ7.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ7.put(bs.get(j)); + } return this; } @@ -1131,11 +1540,20 @@ public Trace accR0(final Bytes b) { filled.set(45); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accR0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accR0.put((byte) 0); } - accR0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accR0.put(bs.get(j)); + } return this; } @@ -1147,11 +1565,20 @@ public Trace accR1(final Bytes b) { filled.set(46); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accR1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accR1.put((byte) 0); } - accR1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accR1.put(bs.get(j)); + } return this; } @@ -1163,11 +1590,20 @@ public Trace accR2(final Bytes b) { filled.set(47); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accR2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accR2.put((byte) 0); } - accR2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accR2.put(bs.get(j)); + } return this; } @@ -1179,11 +1615,20 @@ public Trace accR3(final Bytes b) { filled.set(48); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accR3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accR3.put((byte) 0); } - accR3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accR3.put(bs.get(j)); + } return this; } @@ -1195,11 +1640,20 @@ public Trace arg1Hi(final Bytes b) { filled.set(49); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("arg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { arg1Hi.put((byte) 0); } - arg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Hi.put(bs.get(j)); + } return this; } @@ -1211,11 +1665,20 @@ public Trace arg1Lo(final Bytes b) { filled.set(50); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("arg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { arg1Lo.put((byte) 0); } - arg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Lo.put(bs.get(j)); + } return this; } @@ -1227,11 +1690,20 @@ public Trace arg2Hi(final Bytes b) { filled.set(51); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("arg2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { arg2Hi.put((byte) 0); } - arg2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg2Hi.put(bs.get(j)); + } return this; } @@ -1243,11 +1715,20 @@ public Trace arg2Lo(final Bytes b) { filled.set(52); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("arg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { arg2Lo.put((byte) 0); } - arg2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg2Lo.put(bs.get(j)); + } return this; } @@ -1259,11 +1740,20 @@ public Trace arg3Hi(final Bytes b) { filled.set(53); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("arg3Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { arg3Hi.put((byte) 0); } - arg3Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg3Hi.put(bs.get(j)); + } return this; } @@ -1275,11 +1765,20 @@ public Trace arg3Lo(final Bytes b) { filled.set(54); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("arg3Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { arg3Lo.put((byte) 0); } - arg3Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg3Lo.put(bs.get(j)); + } return this; } @@ -1927,11 +2426,20 @@ public Trace ct(final Bytes b) { filled.set(108); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("ct has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { ct.put((byte) 0); } - ct.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + ct.put(bs.get(j)); + } return this; } @@ -1943,11 +2451,20 @@ public Trace inst(final Bytes b) { filled.set(109); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("inst has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { inst.put((byte) 0); } - inst.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + inst.put(bs.get(j)); + } return this; } @@ -2019,11 +2536,20 @@ public Trace resHi(final Bytes b) { filled.set(115); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("resHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { resHi.put((byte) 0); } - resHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resHi.put(bs.get(j)); + } return this; } @@ -2035,11 +2561,20 @@ public Trace resLo(final Bytes b) { filled.set(116); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("resLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { resLo.put((byte) 0); } - resLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resLo.put(bs.get(j)); + } return this; } @@ -2051,11 +2586,20 @@ public Trace stamp(final Bytes b) { filled.set(117); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("stamp has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { stamp.put((byte) 0); } - stamp.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + stamp.put(bs.get(j)); + } return this; } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/Gas.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/Gas.java new file mode 100644 index 0000000000..4d40ee9121 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/Gas.java @@ -0,0 +1,74 @@ +/* + * Copyright ConsenSys Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.gas; + +import java.math.BigInteger; +import java.nio.MappedByteBuffer; +import java.util.List; + +import net.consensys.linea.zktracer.ColumnHeader; +import net.consensys.linea.zktracer.container.stacked.list.StackedList; +import net.consensys.linea.zktracer.module.Module; +import org.hyperledger.besu.evm.frame.MessageFrame; + +public class Gas implements Module { + /** A list of the operations to trace */ + private final StackedList chunks = new StackedList<>(); + + @Override + public String moduleKey() { + return "GAS"; + } + + @Override + public void enterTransaction() { + this.chunks.enter(); + } + + @Override + public void popTransaction() { + this.chunks.pop(); + } + + @Override + public int lineCount() { + return this.chunks.lineCount(); + } + + @Override + public List columnsHeaders() { + return null; + } + + @Override + public void tracePreOpcode(MessageFrame frame) { + GasParameters gasParameters = extractGasParameters(frame); + this.chunks.add(new GasOperation(gasParameters)); + } + + private GasParameters extractGasParameters(MessageFrame frame) { + return new GasParameters(BigInteger.ZERO, BigInteger.ZERO, false); + } + + @Override + public void commit(List buffers) { + final Trace trace = new Trace(buffers); + for (int i = 0; i < this.chunks.size(); i++) { + GasOperation gasOperation = this.chunks.get(i); + gasOperation.trace(i + 1, trace); + } + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/GasOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/GasOperation.java new file mode 100644 index 0000000000..e242022323 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/GasOperation.java @@ -0,0 +1,65 @@ +/* + * Copyright ConsenSys Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.gas; + +import static net.consensys.linea.zktracer.module.gas.Trace.CT_MAX; +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToInt; + +import java.math.BigInteger; + +import lombok.EqualsAndHashCode; +import net.consensys.linea.zktracer.container.ModuleOperation; +import net.consensys.linea.zktracer.types.UnsignedByte; +import org.apache.tuweni.bytes.Bytes; + +@EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = false) +public class GasOperation extends ModuleOperation { + @EqualsAndHashCode.Include GasParameters gasParameters; + Bytes acc1; + Bytes acc2; + + public GasOperation(GasParameters gasParameters) { + this.gasParameters = gasParameters; + acc1 = bigIntegerToBytes(gasParameters.gasActl()); + acc2 = + bigIntegerToBytes( + (BigInteger.valueOf((2L * booleanToInt(gasParameters.oogx()) - 1)) + .multiply(gasParameters.gasCost().subtract(gasParameters.gasActl()))) + .subtract(BigInteger.valueOf(booleanToInt(gasParameters.oogx())))); + } + + @Override + protected int computeLineCount() { + return CT_MAX + 1; + } + + public void trace(int stamp, Trace trace) { + for (short i = 0; i < CT_MAX + 1; i++) { + trace + .stamp(stamp) + .ct(i) + .gasActl(gasParameters.gasActl().longValue()) + .gasCost(bigIntegerToBytes(gasParameters.gasCost())) + .oogx(gasParameters.oogx()) + .byte1(UnsignedByte.of(acc1.get(i))) + .byte2(UnsignedByte.of(acc2.get(i))) + .acc1(acc1.slice(0, i + 1)) + .acc2(acc2.slice(0, i + 1)) + .validateRow(); + } + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/GasParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/GasParameters.java new file mode 100644 index 0000000000..9106de5266 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/GasParameters.java @@ -0,0 +1,20 @@ +/* + * Copyright ConsenSys Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.gas; + +import java.math.BigInteger; + +public record GasParameters(BigInteger gasActl, BigInteger gasCost, boolean oogx) {} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/Trace.java new file mode 100644 index 0000000000..c74d850528 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/gas/Trace.java @@ -0,0 +1,334 @@ +/* + * Copyright ConsenSys Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.gas; + +import java.nio.MappedByteBuffer; +import java.util.BitSet; +import java.util.List; + +import net.consensys.linea.zktracer.ColumnHeader; +import net.consensys.linea.zktracer.types.UnsignedByte; +import org.apache.tuweni.bytes.Bytes; + +/** + * WARNING: This code is generated automatically. + * + *

Any modifications to this code may be overwritten and could lead to unexpected behavior. + * Please DO NOT ATTEMPT TO MODIFY this code directly. + */ +public class Trace { + public static final int CT_MAX = 0x7; + + private final BitSet filled = new BitSet(); + private int currentLine = 0; + + private final MappedByteBuffer acc1; + private final MappedByteBuffer acc2; + private final MappedByteBuffer byte1; + private final MappedByteBuffer byte2; + private final MappedByteBuffer ct; + private final MappedByteBuffer gasActl; + private final MappedByteBuffer gasCost; + private final MappedByteBuffer oogx; + private final MappedByteBuffer stamp; + + static List headers(int length) { + return List.of( + new ColumnHeader("gas.ACC_1", 8, length), + new ColumnHeader("gas.ACC_2", 8, length), + new ColumnHeader("gas.BYTE_1", 1, length), + new ColumnHeader("gas.BYTE_2", 1, length), + new ColumnHeader("gas.CT", 1, length), + new ColumnHeader("gas.GAS_ACTL", 4, length), + new ColumnHeader("gas.GAS_COST", 8, length), + new ColumnHeader("gas.OOGX", 1, length), + new ColumnHeader("gas.STAMP", 4, length)); + } + + public Trace(List buffers) { + this.acc1 = buffers.get(0); + this.acc2 = buffers.get(1); + this.byte1 = buffers.get(2); + this.byte2 = buffers.get(3); + this.ct = buffers.get(4); + this.gasActl = buffers.get(5); + this.gasCost = buffers.get(6); + this.oogx = buffers.get(7); + this.stamp = buffers.get(8); + } + + public int size() { + if (!filled.isEmpty()) { + throw new RuntimeException("Cannot measure a trace with a non-validated row."); + } + + return this.currentLine; + } + + public Trace acc1(final Bytes b) { + if (filled.get(0)) { + throw new IllegalStateException("gas.ACC_1 already set"); + } else { + filled.set(0); + } + + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("acc1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { + acc1.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc1.put(bs.get(j)); + } + + return this; + } + + public Trace acc2(final Bytes b) { + if (filled.get(1)) { + throw new IllegalStateException("gas.ACC_2 already set"); + } else { + filled.set(1); + } + + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("acc2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { + acc2.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc2.put(bs.get(j)); + } + + return this; + } + + public Trace byte1(final UnsignedByte b) { + if (filled.get(2)) { + throw new IllegalStateException("gas.BYTE_1 already set"); + } else { + filled.set(2); + } + + byte1.put(b.toByte()); + + return this; + } + + public Trace byte2(final UnsignedByte b) { + if (filled.get(3)) { + throw new IllegalStateException("gas.BYTE_2 already set"); + } else { + filled.set(3); + } + + byte2.put(b.toByte()); + + return this; + } + + public Trace ct(final long b) { + if (filled.get(4)) { + throw new IllegalStateException("gas.CT already set"); + } else { + filled.set(4); + } + + if (b >= 8L) { + throw new IllegalArgumentException("ct has invalid value (" + b + ")"); + } + ct.put((byte) b); + + return this; + } + + public Trace gasActl(final long b) { + if (filled.get(5)) { + throw new IllegalStateException("gas.GAS_ACTL already set"); + } else { + filled.set(5); + } + + if (b >= 4294967296L) { + throw new IllegalArgumentException("gasActl has invalid value (" + b + ")"); + } + gasActl.put((byte) (b >> 24)); + gasActl.put((byte) (b >> 16)); + gasActl.put((byte) (b >> 8)); + gasActl.put((byte) b); + + return this; + } + + public Trace gasCost(final Bytes b) { + if (filled.get(6)) { + throw new IllegalStateException("gas.GAS_COST already set"); + } else { + filled.set(6); + } + + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("gasCost has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { + gasCost.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasCost.put(bs.get(j)); + } + + return this; + } + + public Trace oogx(final Boolean b) { + if (filled.get(7)) { + throw new IllegalStateException("gas.OOGX already set"); + } else { + filled.set(7); + } + + oogx.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace stamp(final long b) { + if (filled.get(8)) { + throw new IllegalStateException("gas.STAMP already set"); + } else { + filled.set(8); + } + + if (b >= 4294967296L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 24)); + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); + + return this; + } + + public Trace validateRow() { + if (!filled.get(0)) { + throw new IllegalStateException("gas.ACC_1 has not been filled"); + } + + if (!filled.get(1)) { + throw new IllegalStateException("gas.ACC_2 has not been filled"); + } + + if (!filled.get(2)) { + throw new IllegalStateException("gas.BYTE_1 has not been filled"); + } + + if (!filled.get(3)) { + throw new IllegalStateException("gas.BYTE_2 has not been filled"); + } + + if (!filled.get(4)) { + throw new IllegalStateException("gas.CT has not been filled"); + } + + if (!filled.get(5)) { + throw new IllegalStateException("gas.GAS_ACTL has not been filled"); + } + + if (!filled.get(6)) { + throw new IllegalStateException("gas.GAS_COST has not been filled"); + } + + if (!filled.get(7)) { + throw new IllegalStateException("gas.OOGX has not been filled"); + } + + if (!filled.get(8)) { + throw new IllegalStateException("gas.STAMP has not been filled"); + } + + filled.clear(); + this.currentLine++; + + return this; + } + + public Trace fillAndValidateRow() { + if (!filled.get(0)) { + acc1.position(acc1.position() + 8); + } + + if (!filled.get(1)) { + acc2.position(acc2.position() + 8); + } + + if (!filled.get(2)) { + byte1.position(byte1.position() + 1); + } + + if (!filled.get(3)) { + byte2.position(byte2.position() + 1); + } + + if (!filled.get(4)) { + ct.position(ct.position() + 1); + } + + if (!filled.get(5)) { + gasActl.position(gasActl.position() + 4); + } + + if (!filled.get(6)) { + gasCost.position(gasCost.position() + 8); + } + + if (!filled.get(7)) { + oogx.position(oogx.position() + 1); + } + + if (!filled.get(8)) { + stamp.position(stamp.position() + 4); + } + + filled.clear(); + this.currentLine++; + + return this; + } + + public void build() { + if (!filled.isEmpty()) { + throw new IllegalStateException("Cannot build trace with a non-validated row."); + } + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/AccountSnapshot.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/AccountSnapshot.java index 0f2ad97dfd..8db53c9a9a 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/AccountSnapshot.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/AccountSnapshot.java @@ -17,32 +17,60 @@ import java.util.Optional; +import com.google.common.base.Preconditions; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; import net.consensys.linea.zktracer.types.Bytecode; import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.datatypes.Wei; import org.hyperledger.besu.evm.account.Account; -public record AccountSnapshot( - Address address, - long nonce, - Wei balance, - boolean warm, - Bytecode code, - int deploymentNumber, - boolean deploymentStatus) { +@AllArgsConstructor +@Getter +@Setter +@Accessors(fluent = true) +public class AccountSnapshot { + private Address address; + private long nonce; + private Wei balance; + private boolean isWarm; + private Bytecode code; + private int deploymentNumber; + private boolean deploymentStatus; + + public AccountSnapshot decrementBalance(Wei quantity) { + Preconditions.checkState( + this.balance.greaterOrEqualThan(quantity), + "Insufficient balance: %s".formatted(this.balance)); + this.balance = this.balance.subtract(quantity); + return this; + } + + public AccountSnapshot incrementBalance(Wei quantity) { + this.balance = this.balance.add(quantity); + return this; + } + + public AccountSnapshot incrementNonce() { + this.nonce++; + return this; + } + public static AccountSnapshot fromAccount( - Account account, boolean warm, int deploymentNumber, boolean deploymentStatus) { - return fromAccount(Optional.ofNullable(account), warm, deploymentNumber, deploymentStatus); + Account account, boolean isWarm, int deploymentNumber, boolean deploymentStatus) { + return fromAccount(Optional.ofNullable(account), isWarm, deploymentNumber, deploymentStatus); } public static AccountSnapshot empty( - boolean warm, int deploymentNumber, boolean deploymentStatus) { + boolean isWarm, int deploymentNumber, boolean deploymentStatus) { return new AccountSnapshot( - Address.ZERO, 0, Wei.ZERO, warm, Bytecode.EMPTY, deploymentNumber, deploymentStatus); + Address.ZERO, 0, Wei.ZERO, isWarm, Bytecode.EMPTY, deploymentNumber, deploymentStatus); } public static AccountSnapshot fromAccount( - Optional account, boolean warm, int deploymentNumber, boolean deploymentStatus) { + Optional account, boolean isWarm, int deploymentNumber, boolean deploymentStatus) { return account .map( @@ -51,11 +79,11 @@ public static AccountSnapshot fromAccount( a.getAddress(), a.getNonce(), a.getBalance().copy(), - warm, + isWarm, new Bytecode(a.getCode().copy()), deploymentNumber, deploymentStatus)) - .orElseGet(() -> AccountSnapshot.empty(warm, deploymentNumber, deploymentStatus)); + .orElseGet(() -> AccountSnapshot.empty(isWarm, deploymentNumber, deploymentStatus)); } public AccountSnapshot debit(Wei quantity) { @@ -63,7 +91,18 @@ public AccountSnapshot debit(Wei quantity) { this.address, this.nonce + 1, this.balance.subtract(quantity), - this.warm, + this.isWarm, + this.code, + this.deploymentNumber, + this.deploymentStatus); + } + + public AccountSnapshot debit(Wei quantity, boolean isWarm) { + return new AccountSnapshot( + this.address, + this.nonce + 1, + this.balance.subtract(quantity), + isWarm, this.code, this.deploymentNumber, this.deploymentStatus); @@ -74,12 +113,25 @@ public AccountSnapshot deploy(Wei value) { this.address, this.nonce + 1, this.balance.add(value), - this.warm, + this.isWarm, this.code, this.deploymentNumber + 1, this.deploymentStatus); } + public AccountSnapshot deploy(Wei value, Bytecode code) { + Preconditions.checkState( + !this.deploymentStatus, "Deployment status should be false before deploying."); + return new AccountSnapshot( + this.address, + this.nonce + 1, + this.balance.add(value), + true, + code, + this.deploymentNumber + 1, + true); + } + public AccountSnapshot credit(Wei value) { return new AccountSnapshot( this.address, @@ -90,4 +142,15 @@ public AccountSnapshot credit(Wei value) { this.deploymentNumber, this.deploymentStatus); } + + public AccountSnapshot credit(Wei value, boolean isWarm) { + return new AccountSnapshot( + this.address, + this.nonce, + this.balance.add(value), + isWarm, + this.code, + this.deploymentNumber, + this.deploymentStatus); + } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/DeploymentExceptions.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/DeploymentExceptions.java index 2de9fe2d45..9e7a334692 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/DeploymentExceptions.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/DeploymentExceptions.java @@ -15,6 +15,7 @@ package net.consensys.linea.zktracer.module.hub; +import net.consensys.linea.zktracer.module.constants.GlobalConstants; import net.consensys.linea.zktracer.runtime.callstack.CallFrame; import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.evm.frame.MessageFrame; @@ -26,18 +27,16 @@ * @param codeSizeOverflow trying to deploy a contract larger than 24KB */ public record DeploymentExceptions(boolean invalidCodePrefix, boolean codeSizeOverflow) { - private static final byte EIP_3541_MARKER = (byte) 0xEF; - private static final int MAX_CODE_SIZE = 24576; - private static boolean isInvalidCodePrefix(MessageFrame frame) { final Bytes deployedCode = frame.getOutputData(); - return !deployedCode.isEmpty() && (deployedCode.get(0) == EIP_3541_MARKER); + return !deployedCode.isEmpty() + && (deployedCode.get(0) == (byte) GlobalConstants.EIP_3541_MARKER); } private static boolean isCodeSizeOverflow(MessageFrame frame) { final Bytes deployedCode = frame.getOutputData(); - return deployedCode.size() > MAX_CODE_SIZE; + return deployedCode.size() > GlobalConstants.MAX_CODE_SIZE; } public static DeploymentExceptions empty() { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/Hub.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/Hub.java index 7a894db706..cc5f109d48 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/Hub.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/Hub.java @@ -17,6 +17,7 @@ import static net.consensys.linea.zktracer.types.AddressUtils.effectiveToAddress; import static net.consensys.linea.zktracer.types.AddressUtils.isPrecompile; +import static net.consensys.linea.zktracer.types.AddressUtils.precompileAddress; import java.nio.MappedByteBuffer; import java.util.ArrayList; @@ -28,6 +29,7 @@ import java.util.Set; import java.util.stream.Stream; +import com.google.common.base.Preconditions; import lombok.Getter; import lombok.experimental.Accessors; import lombok.extern.slf4j.Slf4j; @@ -36,32 +38,37 @@ import net.consensys.linea.zktracer.module.Module; import net.consensys.linea.zktracer.module.add.Add; import net.consensys.linea.zktracer.module.bin.Bin; -import net.consensys.linea.zktracer.module.blake2fmodexpdata.Blake2fModexpData; +import net.consensys.linea.zktracer.module.blake2fmodexpdata.BlakeModexpData; import net.consensys.linea.zktracer.module.blockdata.Blockdata; import net.consensys.linea.zktracer.module.blockhash.Blockhash; import net.consensys.linea.zktracer.module.ecdata.EcData; import net.consensys.linea.zktracer.module.euc.Euc; import net.consensys.linea.zktracer.module.exp.Exp; import net.consensys.linea.zktracer.module.ext.Ext; +import net.consensys.linea.zktracer.module.gas.Gas; import net.consensys.linea.zktracer.module.hub.defer.*; import net.consensys.linea.zktracer.module.hub.fragment.*; import net.consensys.linea.zktracer.module.hub.fragment.imc.ImcFragment; import net.consensys.linea.zktracer.module.hub.fragment.scenario.ScenarioFragment; import net.consensys.linea.zktracer.module.hub.precompiles.PrecompileInvocation; import net.consensys.linea.zktracer.module.hub.section.*; +import net.consensys.linea.zktracer.module.hub.signals.Exceptions; import net.consensys.linea.zktracer.module.hub.signals.PlatformController; +import net.consensys.linea.zktracer.module.hub.transients.DeploymentInfo; import net.consensys.linea.zktracer.module.hub.transients.Transients; import net.consensys.linea.zktracer.module.limits.Keccak; import net.consensys.linea.zktracer.module.limits.L2Block; import net.consensys.linea.zktracer.module.limits.L2L1Logs; -import net.consensys.linea.zktracer.module.limits.precompiles.Blake2fRounds; +import net.consensys.linea.zktracer.module.limits.precompiles.BlakeEffectiveCall; +import net.consensys.linea.zktracer.module.limits.precompiles.BlakeRounds; import net.consensys.linea.zktracer.module.limits.precompiles.EcAddEffectiveCall; import net.consensys.linea.zktracer.module.limits.precompiles.EcMulEffectiveCall; -import net.consensys.linea.zktracer.module.limits.precompiles.EcPairingCallEffectiveCall; -import net.consensys.linea.zktracer.module.limits.precompiles.EcPairingMillerLoop; +import net.consensys.linea.zktracer.module.limits.precompiles.EcPairingFinalExponentiations; +import net.consensys.linea.zktracer.module.limits.precompiles.EcPairingG2MembershipCalls; +import net.consensys.linea.zktracer.module.limits.precompiles.EcPairingMillerLoops; import net.consensys.linea.zktracer.module.limits.precompiles.EcRecoverEffectiveCall; import net.consensys.linea.zktracer.module.limits.precompiles.ModexpEffectiveCall; -import net.consensys.linea.zktracer.module.limits.precompiles.Rip160Blocks; +import net.consensys.linea.zktracer.module.limits.precompiles.RipemdBlocks; import net.consensys.linea.zktracer.module.limits.precompiles.Sha256Blocks; import net.consensys.linea.zktracer.module.logdata.LogData; import net.consensys.linea.zktracer.module.loginfo.LogInfo; @@ -70,11 +77,13 @@ import net.consensys.linea.zktracer.module.mod.Mod; import net.consensys.linea.zktracer.module.mul.Mul; import net.consensys.linea.zktracer.module.mxp.Mxp; +import net.consensys.linea.zktracer.module.oob.Oob; import net.consensys.linea.zktracer.module.rlpaddr.RlpAddr; import net.consensys.linea.zktracer.module.rlptxn.RlpTxn; -import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxrcpt; +import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxnRcpt; import net.consensys.linea.zktracer.module.rom.Rom; import net.consensys.linea.zktracer.module.romlex.RomLex; +import net.consensys.linea.zktracer.module.shakiradata.ShakiraData; import net.consensys.linea.zktracer.module.shf.Shf; import net.consensys.linea.zktracer.module.stp.Stp; import net.consensys.linea.zktracer.module.tables.bin.BinRt; @@ -91,6 +100,7 @@ import net.consensys.linea.zktracer.runtime.callstack.CallStack; import net.consensys.linea.zktracer.runtime.stack.StackContext; import net.consensys.linea.zktracer.runtime.stack.StackLine; +import net.consensys.linea.zktracer.types.AddressUtils; import net.consensys.linea.zktracer.types.Bytecode; import net.consensys.linea.zktracer.types.EWord; import net.consensys.linea.zktracer.types.Precompile; @@ -117,12 +127,14 @@ @Slf4j @Accessors(fluent = true) public class Hub implements Module { + private static final int TAU = 8; public static final GasProjector GAS_PROJECTOR = new GasProjector(); /** accumulate the trace information for the Hub */ @Getter private final State state = new State(); + /** contain the factories for trace segments that need complex initialization */ @Getter private final Factories factories; @@ -199,12 +211,13 @@ public void addTraceSection(TraceSection section) { @Getter private final Wcp wcp = new Wcp(this); private final Module add = new Add(this); private final Module bin = new Bin(this); - private final Blake2fModexpData blake2fModexpData = new Blake2fModexpData(); + private final BlakeModexpData blakeModexpData = new BlakeModexpData(this.wcp); + @Getter private final EcData ecData; private final Blockdata blockdata; private final Blockhash blockhash = new Blockhash(wcp); - private final EcData ecData; private final Euc euc; private final Ext ext = new Ext(this); + private final Gas gas = new Gas(); private final Module mul = new Mul(this); private final Mod mod = new Mod(); private final Module shf = new Shf(); @@ -214,7 +227,7 @@ public void addTraceSection(TraceSection section) { @Getter private final Exp exp; @Getter private final Mmu mmu; - private final RlpTxrcpt rlpTxrcpt; + private final RlpTxnRcpt rlpTxnRcpt; private final LogInfo logInfo; private final LogData logData; private final Trm trm = new Trm(); @@ -223,16 +236,23 @@ public void addTraceSection(TraceSection section) { @Getter private final RomLex romLex; private final TxnData txnData; - + private final ShakiraData shakiraData = new ShakiraData(this.wcp); private final ModexpEffectiveCall modexpEffectiveCall; private final Stp stp = new Stp(this, wcp, mod); private final L2Block l2Block; + @Getter private final Oob oob; + private final List modules; - /* Those modules are not traced, we just compute the number of calls to those precompile to meet the prover limits */ + /* + * Those modules are not traced, we just compute the number of calls to those + * precompile to meet the prover limits + */ private final List precompileLimitModules; private final List refTableModules; + private boolean previousOperationWasCallToEcPrecompile; + public Hub(final Address l2l1ContractAddress, final Bytes l2l1Topic) { this.l2Block = new L2Block(l2l1ContractAddress, LogTopic.of(l2l1Topic)); this.transients = new Transients(this); @@ -247,41 +267,45 @@ public Hub(final Address l2l1ContractAddress, final Bytes l2l1Topic) { this.euc = new Euc(this.wcp); this.txnData = new TxnData(this, this.romLex, this.wcp, this.euc); this.blockdata = new Blockdata(this.wcp, this.txnData, this.rlpTxn); - this.rlpTxrcpt = new RlpTxrcpt(txnData); - this.logData = new LogData(rlpTxrcpt); - this.logInfo = new LogInfo(rlpTxrcpt); + this.rlpTxnRcpt = new RlpTxnRcpt(txnData); + this.logData = new LogData(rlpTxnRcpt); + this.logInfo = new LogInfo(rlpTxnRcpt); this.ecData = new EcData(this, this.wcp, this.ext); + this.oob = new Oob(this, (Add) this.add, this.mod, this.wcp); this.mmu = new Mmu( this.euc, this.wcp, this.romLex, this.rlpTxn, - this.rlpTxrcpt, + this.rlpTxnRcpt, this.ecData, - this.blake2fModexpData, + this.blakeModexpData, this.callStack); this.mmio = new Mmio(this.mmu); final EcRecoverEffectiveCall ecRec = new EcRecoverEffectiveCall(this); - this.modexpEffectiveCall = new ModexpEffectiveCall(this, this.blake2fModexpData); - final EcPairingCallEffectiveCall ecPairingCall = new EcPairingCallEffectiveCall(this); + this.modexpEffectiveCall = new ModexpEffectiveCall(this, this.blakeModexpData); + final EcPairingFinalExponentiations ecPairingCall = new EcPairingFinalExponentiations(this); final L2Block l2Block = new L2Block(l2l1ContractAddress, LogTopic.of(l2l1Topic)); + final BlakeRounds blakeRounds = new BlakeRounds(this, this.blakeModexpData); this.precompileLimitModules = List.of( - new Sha256Blocks(this), + new Sha256Blocks(this, shakiraData), ecRec, - new Rip160Blocks(this), + new RipemdBlocks(this, shakiraData), this.modexpEffectiveCall, new EcAddEffectiveCall(this), new EcMulEffectiveCall(this), ecPairingCall, - new EcPairingMillerLoop(ecPairingCall), - new Blake2fRounds(this, this.blake2fModexpData), + new EcPairingG2MembershipCalls(ecPairingCall), + new EcPairingMillerLoops(ecPairingCall), + blakeRounds, + new BlakeEffectiveCall(blakeRounds), // Block level limits l2Block, - new Keccak(this, ecRec, l2Block), + new Keccak(this, ecRec, l2Block, shakiraData), new L2L1Logs(l2Block)); this.refTableModules = List.of(new BinRt(), new InstructionDecoder(), new ShfRt()); @@ -291,12 +315,13 @@ public Hub(final Address l2l1ContractAddress, final Bytes l2l1Topic) { Stream.of( this.add, this.bin, - this.blake2fModexpData, + this.blakeModexpData, this.blockdata, this.blockhash, this.ecData, this.euc, this.ext, + this.gas, this.logData, this.logInfo, this.mmio, @@ -304,17 +329,19 @@ public Hub(final Address l2l1ContractAddress, final Bytes l2l1Topic) { this.mod, this.mul, this.mxp, + this.oob, this.exp, this.rlpAddr, this.rlpTxn, this.rom, this.romLex, + this.shakiraData, this.shf, this.stp, this.trm, this.wcp, /* WARN: must be called BEFORE txnData */ this.txnData, - this.rlpTxrcpt /* WARN: must be called AFTER txnData */), + this.rlpTxnRcpt /* WARN: must be called AFTER txnData */), this.precompileLimitModules.stream()) .toList(); } @@ -330,13 +357,15 @@ public List getModulesToTrace() { this, this.add, this.bin, - this.blake2fModexpData, + this.blakeModexpData, + this.ecData, this.blockdata, this.blockhash, - // this.ecData, // TODO: not yet this.ext, this.euc, this.exp, + // TODO: GAS module has no columnHeaders and cannot be traced. Needs a fix! + // this.gas, this.logData, this.logInfo, this.mmu, // WARN: must be called before the MMIO @@ -344,11 +373,13 @@ public List getModulesToTrace() { this.mod, this.mul, this.mxp, + this.oob, this.rlpAddr, this.rlpTxn, - this.rlpTxrcpt, + this.rlpTxnRcpt, this.rom, this.romLex, + this.shakiraData, this.shf, this.stp, this.trm, @@ -364,35 +395,43 @@ public List getModulesToTrace() { * @return the modules to count */ public List getModulesToCount() { + final Stream regularModulesStream = + Stream.of( + this, + this.romLex, + this.add, + this.bin, + this.blakeModexpData, + this.blockdata, + this.blockhash, + this.ext, + this.ecData, + this.euc, + this.gas, + this.mmu, + this.mmio, + this.logData, + this.logInfo, + this.mod, + this.mul, + this.mxp, + this.oob, + this.exp, + this.rlpAddr, + this.rlpTxn, + this.rlpTxnRcpt, + this.rom, + this.shakiraData, + this.shf, + this.stp, + this.trm, + this.txnData, + this.wcp, + this.l2Block); + return Stream.concat( - Stream.of( - this, - this.romLex, - this.add, - this.bin, - this.blockdata, - this.blockhash, - this.ext, - this.ecData, - this.euc, - this.mmu, - this.mmio, - this.logData, - this.logInfo, - this.mod, - this.mul, - this.mxp, - this.exp, - this.rlpAddr, - this.rlpTxn, - this.rlpTxrcpt, - this.rom, - this.shf, - this.trm, - this.txnData, - this.wcp, - this.l2Block), - this.precompileLimitModules.stream()) + this.refTableModules.stream(), + Stream.concat(regularModulesStream, this.precompileLimitModules.stream())) .toList(); } @@ -402,45 +441,40 @@ public List getModulesToCount() { * @param world a view onto the state */ void processStateSkip(WorldView world) { - this.state.stamps().stampHubIncrements(); - boolean isDeployment = this.transients.tx().besuTx().getTo().isEmpty(); + this.state.stamps().incrementHubStamp(); + final boolean isDeployment = this.transients.tx().besuTx().getTo().isEmpty(); // // 3 sections -- account changes // // From account information - Address fromAddress = this.transients.tx().besuTx().getSender(); - AccountSnapshot oldFromAccount = + final Address fromAddress = this.transients.tx().besuTx().getSender(); + final AccountSnapshot oldFromAccount = AccountSnapshot.fromAccount( world.get(fromAddress), - false, + isPrecompile(fromAddress), this.transients.conflation().deploymentInfo().number(fromAddress), false); // To account information - Address toAddress = effectiveToAddress(this.transients.tx().besuTx()); + final Address toAddress = effectiveToAddress(this.transients.tx().besuTx()); if (isDeployment) { this.transients.conflation().deploymentInfo().deploy(toAddress); } - boolean toIsWarm = - (fromAddress == toAddress) - || isPrecompile(toAddress); // should never happen – no TX to PC allowed - AccountSnapshot oldToAccount = + final AccountSnapshot oldToAccount = AccountSnapshot.fromAccount( world.get(toAddress), - toIsWarm, + isPrecompile(toAddress), this.transients.conflation().deploymentInfo().number(toAddress), false); // Miner account information - boolean minerIsWarm = - (this.transients.block().minerAddress() == fromAddress) - || (this.transients.block().minerAddress() == toAddress) - || isPrecompile(this.transients.block().minerAddress()); - AccountSnapshot oldMinerAccount = + final Address minerAddress = this.transients.block().minerAddress(); + + final AccountSnapshot oldMinerAccount = AccountSnapshot.fromAccount( - world.get(this.transients.block().minerAddress()), - minerIsWarm, + world.get(minerAddress), + isPrecompile(minerAddress), this.transients .conflation() .deploymentInfo() @@ -458,7 +492,7 @@ void processStateSkip(WorldView world) { } /** - * Traces the warm-up information of a transaction + * Traces the isWarm-up information of a transaction * * @param world a view onto the state */ @@ -470,38 +504,75 @@ void processStateWarm(WorldView world) { .ifPresent( preWarmed -> { if (!preWarmed.isEmpty()) { - this.state.stamps().stampHubIncrements(); + Set

seenAddresses = new HashSet<>(precompileAddress); + this.state.stamps().incrementHubStamp(); - Set
seenAddresses = new HashSet<>(); Map> seenKeys = new HashMap<>(); List fragments = new ArrayList<>(); + final TransactionStack.MetaTransaction tx = this.transients.tx(); + final Transaction besuTx = tx.besuTx(); + final Address senderAddress = besuTx.getSender(); + final Address receiverAddress = effectiveToAddress(besuTx); + for (AccessListEntry entry : preWarmed) { - Address address = entry.address(); - AccountSnapshot snapshot = + this.state.stamps().incrementHubStamp(); + + final Address address = entry.address(); + if (senderAddress.equals(address)) { + tx.isSenderPreWarmed(true); + } + + if (receiverAddress.equals(address)) { + tx.isReceiverPreWarmed(true); + } + + final DeploymentInfo deploymentInfo = + this.transients.conflation().deploymentInfo(); + + final int deploymentNumber = deploymentInfo.number(address); + Preconditions.checkArgument( + !deploymentInfo.isDeploying(address), + "Deployment status during TX_INIT phase of any address should always be false"); + + final boolean isAccountWarm = seenAddresses.contains(address); + final AccountSnapshot preWarmingAccountSnapshot = + AccountSnapshot.fromAccount( + world.get(address), isAccountWarm, deploymentNumber, false); + + final AccountSnapshot postWarmingAccountSnapshot = AccountSnapshot.fromAccount( - world.get(address), seenAddresses.contains(address), 0, false); + world.get(address), true, deploymentNumber, false); + fragments.add( - this.factories.accountFragment().make(snapshot, snapshot, false, 0, false)); + this.factories + .accountFragment() + .makeWithTrm( + preWarmingAccountSnapshot, postWarmingAccountSnapshot, address)); + seenAddresses.add(address); List keys = entry.storageKeys(); - for (Bytes32 key_ : keys) { - UInt256 key = UInt256.fromBytes(key_); - EWord value = + for (Bytes32 k : keys) { + this.state.stamps().incrementHubStamp(); + + final UInt256 key = UInt256.fromBytes(k); + final EWord value = Optional.ofNullable(world.get(address)) .map(account -> EWord.of(account.getStorageValue(key))) .orElse(EWord.ZERO); + fragments.add( new StorageFragment( address, - this.transients.conflation().deploymentInfo().number(address), + deploymentInfo.number(address), EWord.of(key), value, value, value, seenKeys.computeIfAbsent(address, x -> new HashSet<>()).contains(key), true)); + seenKeys.get(address).add(key); } } @@ -518,71 +589,83 @@ void processStateWarm(WorldView world) { * @param world a view onto the state */ void processStateInit(WorldView world) { - this.state.stamps().stampHubIncrements(); - final boolean isDeployment = this.transients.tx().besuTx().getTo().isEmpty(); - final Address toAddress = effectiveToAddress(this.transients.tx().besuTx()); - if (isDeployment) { - this.transients.conflation().deploymentInfo().deploy(toAddress); - } + this.state.stamps().incrementHubStamp(); + final TransactionStack.MetaTransaction tx = this.transients.tx(); + final boolean isDeployment = tx.besuTx().getTo().isEmpty(); + final Address toAddress = effectiveToAddress(tx.besuTx()); + final DeploymentInfo deploymentInfo = this.transients.conflation().deploymentInfo(); - final Address fromAddress = this.transients.tx().besuTx().getSender(); + final Address fromAddress = tx.besuTx().getSender(); final Account fromAccount = world.get(fromAddress); - final AccountSnapshot fromSnapshot = + final AccountSnapshot preInitFromSnapshot = AccountSnapshot.fromAccount( fromAccount, - true, - this.transients.conflation().deploymentInfo().number(fromAddress), - this.transients.conflation().deploymentInfo().isDeploying(fromAddress)); - - final Account toAccount = world.get(toAddress); - final AccountSnapshot toSnapshot = - AccountSnapshot.fromAccount( - toAccount, - true, - this.transients.conflation().deploymentInfo().number(toAddress), - this.transients.conflation().deploymentInfo().isDeploying(toAddress)); + tx.isSenderPreWarmed(), + deploymentInfo.number(fromAddress), + deploymentInfo.isDeploying(fromAddress)); final Wei transactionGasPrice = ZkTracer.feeMarket .getTransactionPriceCalculator() .price( - (org.hyperledger.besu.ethereum.core.Transaction) this.transients.tx().besuTx(), + (org.hyperledger.besu.ethereum.core.Transaction) tx.besuTx(), Optional.of(this.transients.block().baseFee())); - final Wei value = (Wei) this.transients.tx().besuTx().getValue(); - final AccountSnapshot fromPostDebitSnapshot = - fromSnapshot.debit( - transactionGasPrice.multiply(this.transients.tx().besuTx().getGasLimit()).add(value)); + final Wei value = (Wei) tx.besuTx().getValue(); + final AccountSnapshot postInitFromSnapshot = + preInitFromSnapshot.debit( + transactionGasPrice.multiply(tx.besuTx().getGasLimit()).add(value), true); final boolean isSelfCredit = toAddress.equals(fromAddress); + + final Account toAccount = world.get(toAddress); + + final AccountSnapshot preInitToSnapshot = + isSelfCredit + ? postInitFromSnapshot + : AccountSnapshot.fromAccount( + toAccount, + tx.isReceiverPreWarmed(), + deploymentInfo.number(toAddress), + deploymentInfo.isDeploying(toAddress)); + + if (isDeployment) { + deploymentInfo.deploy(toAddress); + } + + final Bytecode initBytecode = new Bytecode(tx.besuTx().getInit().orElse(Bytes.EMPTY)); + final AccountSnapshot postInitToSnapshot = + isDeployment + ? preInitToSnapshot.deploy(value, initBytecode) + : preInitToSnapshot.credit(value, true); + final TransactionFragment txFragment = TransactionFragment.prepare( this.transients.conflation().number(), this.transients.block().minerAddress(), - this.transients.tx().besuTx(), + tx.besuTx(), true, - ((org.hyperledger.besu.ethereum.core.Transaction) this.transients.tx().besuTx()) + ((org.hyperledger.besu.ethereum.core.Transaction) tx.besuTx()) .getEffectiveGasPrice(Optional.ofNullable(this.transients().block().baseFee())), this.transients.block().baseFee(), 0 // TODO: find getInitialGas ); this.defers.postTx(txFragment); + final AccountFragment.AccountFragmentFactory accountFragmentFactory = + this.factories.accountFragment(); + this.addTraceSection( new TxInitSection( this, - this.factories.accountFragment().make(fromSnapshot, fromPostDebitSnapshot), - isDeployment - ? this.factories.accountFragment().make(toSnapshot, toSnapshot.deploy(value)) - : (isSelfCredit - ? this.factories - .accountFragment() - .make(fromPostDebitSnapshot, fromPostDebitSnapshot.credit(value)) - : this.factories.accountFragment().make(toSnapshot, toSnapshot.credit(value))), + accountFragmentFactory.make(preInitFromSnapshot, postInitFromSnapshot), + accountFragmentFactory + .make(preInitToSnapshot, postInitToSnapshot) + .requiresCodeFragmentIndex(true), ImcFragment.forTxInit(this), ContextFragment.initializeExecutionContext(this), txFragment)); - this.transients.tx().state(TxState.TX_EXEC); + tx.state(TxState.TX_EXEC); } public CallFrame currentFrame() { @@ -601,7 +684,7 @@ private void handleStack(MessageFrame frame) { } void triggerModules(MessageFrame frame) { - if (this.pch.exceptions().none() && this.pch.aborts().none()) { + if (Exceptions.none(this.pch.exceptions()) && this.pch.aborts().none()) { for (Module precompileLimit : this.precompileLimitModules) { precompileLimit.tracePreOpcode(frame); } @@ -638,15 +721,13 @@ void triggerModules(MessageFrame frame) { this.mxp.tracePreOpcode(frame); } if (this.pch.signals().oob()) { - // TODO: this.oob.tracePreOpcode(frame); + this.oob.tracePreOpcode(frame); } if (this.pch.signals().stp()) { this.stp.tracePreOpcode(frame); } if (this.pch.signals().exp()) { this.exp.tracePreOpcode(frame); - this.modexpEffectiveCall.tracePreOpcode(frame); - // if (this.pch.exceptions().none() && this.pch.aborts().none()) } if (this.pch.signals().trm()) { this.trm.tracePreOpcode(frame); @@ -663,18 +744,27 @@ void triggerModules(MessageFrame frame) { } void processStateExec(MessageFrame frame) { + // Note: in some cases there is no operation since ECPAIRING arguments are invalid + if (previousOperationWasCallToEcPrecompile && this.ecData.getOperations().size() > 0) { + this.ecData.getEcdDataOperation().setReturnData(frame.getReturnData()); + previousOperationWasCallToEcPrecompile = false; + } this.currentFrame().frame(frame); - this.state.stamps().stampHubIncrements(); + this.state.stamps().incrementHubStamp(); + this.pch.setup(frame); this.state.stamps().stampSubmodules(this.pch()); this.handleStack(frame); this.triggerModules(frame); - if (this.pch().exceptions().any() || this.currentFrame().opCode() == OpCode.REVERT) { + if (Exceptions.any(this.pch().exceptions()) || this.currentFrame().opCode() == OpCode.REVERT) { this.callStack.revert(this.state.stamps().hub()); } if (this.currentFrame().stack().isOk()) { + if (this.pch.signals().ecData()) { + this.previousOperationWasCallToEcPrecompile = true; + } this.traceOperation(frame); } else { this.addTraceSection(new StackOnlySection(this)); @@ -685,38 +775,52 @@ void processStateExec(MessageFrame frame) { void processStateFinal(WorldView worldView, Transaction tx, boolean isSuccess) { this.transients().tx().state(TxState.TX_FINAL); - this.state.stamps().stampHubIncrements(); + this.state.stamps().incrementHubStamp(); - Address fromAddress = this.transients.tx().besuTx().getSender(); - Account fromAccount = worldView.get(fromAddress); - AccountSnapshot fromSnapshot = + final Address fromAddress = this.transients.tx().besuTx().getSender(); + final Account fromAccount = worldView.get(fromAddress); + final DeploymentInfo deploymentInfo = this.transients.conflation().deploymentInfo(); + final AccountSnapshot preFinalFromSnapshot = AccountSnapshot.fromAccount( fromAccount, true, - this.transients.conflation().deploymentInfo().number(fromAddress), - this.transients.conflation().deploymentInfo().isDeploying(fromAddress)); + deploymentInfo.number(fromAddress), + deploymentInfo.isDeploying(fromAddress)); + + // TODO: still no finished + final AccountSnapshot postFinalFromSnapshot = + AccountSnapshot.fromAccount( + fromAccount, + true, + deploymentInfo.number(fromAddress), + deploymentInfo.isDeploying(fromAddress)); Account minerAccount = worldView.get(this.transients.block().minerAddress()); - AccountSnapshot minerSnapshot = + AccountSnapshot preFinalCoinbaseSnapshot = AccountSnapshot.fromAccount( minerAccount, true, - this.transients - .conflation() - .deploymentInfo() - .number(this.transients.block().minerAddress()), - this.transients - .conflation() - .deploymentInfo() - .isDeploying(this.transients.block().minerAddress())); + deploymentInfo.number(this.transients.block().minerAddress()), + deploymentInfo.isDeploying(this.transients.block().minerAddress())); + + // TODO: still not finished + AccountSnapshot postFinalCoinbaseSnapshot = + AccountSnapshot.fromAccount( + minerAccount, + true, + deploymentInfo.number(this.transients.block().minerAddress()), + deploymentInfo.isDeploying(this.transients.block().minerAddress())); + + final AccountFragment.AccountFragmentFactory accountFragmentFactory = + this.factories.accountFragment(); if (isSuccess) { // if no revert: 2 account rows (sender, coinbase) + 1 tx row this.addTraceSection( - new EndTransaction( + new EndTransactionSection( this, - this.factories.accountFragment().make(fromSnapshot, fromSnapshot, false, 0, false), - this.factories.accountFragment().make(minerSnapshot, minerSnapshot, false, 0, false), + accountFragmentFactory.make(preFinalFromSnapshot, postFinalFromSnapshot), + accountFragmentFactory.make(preFinalCoinbaseSnapshot, postFinalCoinbaseSnapshot), TransactionFragment.prepare( this.transients.conflation().number(), this.transients.block().minerAddress(), @@ -729,24 +833,31 @@ void processStateFinal(WorldView worldView, Transaction tx, boolean isSuccess) { // Trace the exceptions of a transaction that could not even start // TODO: integrate with PCH // if (this.exceptions == null) { - // this.exceptions = Exceptions.fromOutOfGas(); + // this.exceptions = Exceptions.OUT_OF_GAS; // } // otherwise 4 account rows (sender, coinbase, sender, recipient) + 1 tx row Address toAddress = this.transients.tx().besuTx().getSender(); Account toAccount = worldView.get(toAddress); - AccountSnapshot toSnapshot = + AccountSnapshot preFinalToSnapshot = AccountSnapshot.fromAccount( toAccount, true, - this.transients.conflation().deploymentInfo().number(toAddress), - this.transients.conflation().deploymentInfo().isDeploying(toAddress)); + deploymentInfo.number(toAddress), + deploymentInfo.isDeploying(toAddress)); + + // TODO: still not finished + AccountSnapshot postFinalToSnapshot = + AccountSnapshot.fromAccount( + toAccount, + true, + deploymentInfo.number(toAddress), + deploymentInfo.isDeploying(toAddress)); this.addTraceSection( - new EndTransaction( + new EndTransactionSection( this, - this.factories.accountFragment().make(fromSnapshot, fromSnapshot, false, 0, false), - this.factories.accountFragment().make(minerSnapshot, minerSnapshot, false, 0, false), - this.factories.accountFragment().make(fromSnapshot, fromSnapshot, false, 0, false), - this.factories.accountFragment().make(toSnapshot, toSnapshot, false, 0, false))); + accountFragmentFactory.make(preFinalFromSnapshot, postFinalFromSnapshot), + accountFragmentFactory.make(preFinalToSnapshot, postFinalToSnapshot), + accountFragmentFactory.make(preFinalCoinbaseSnapshot, postFinalCoinbaseSnapshot))); } } @@ -768,7 +879,9 @@ public void traceStartTx(final WorldView world, final Transaction tx) { this.enterTransaction(); - if (this.transients.tx().shouldSkip(world)) { + if (this.transients + .tx() + .shouldSkip(world)) /* TODO: should use requiresEvmExecution instead of recomputing it */ { this.transients.tx().state(TxState.TX_SKIP); this.processStateSkip(world); } else { @@ -827,7 +940,7 @@ public void unlatchStack(MessageFrame frame, TraceSection section) { if (line.needsResult()) { Bytes result = Bytes.EMPTY; // Only pop from the stack if no exceptions have been encountered - if (this.pch.exceptions().none()) { + if (Exceptions.none(this.pch.exceptions())) { result = frame.getStackItem(0).copy(); } @@ -839,7 +952,7 @@ public void unlatchStack(MessageFrame frame, TraceSection section) { } } - if (this.pch.exceptions().none()) { + if (Exceptions.none(this.pch.exceptions())) { for (TraceSection.TraceLine line : section.lines()) { if (line.specific() instanceof StackFragment stackFragment) { stackFragment.feedHashedValue(frame); @@ -860,7 +973,8 @@ public void traceContextEnter(MessageFrame frame) { final boolean shouldCopyTxCallData = !isDeployment && !frame.getInputData().isEmpty() && currentTx.requiresEvmExecution(); - // TODO simplify this, the same bedRock context ( = root context ??) seems to be generated in + // TODO simplify this, the same bedRock context ( = root context ??) seems to be + // generated in // both case if (shouldCopyTxCallData) { this.callStack.newMantleAndBedrock( @@ -885,7 +999,7 @@ public void traceContextEnter(MessageFrame frame) { } else { this.callStack.newBedrock( this.state.stamps().hub(), - // this.transients.tx().transaction().getSender(), + // this.transients.tx().transaction().getSender(), toAddress, CallFrameType.BEDROCK, new Bytecode( @@ -970,9 +1084,9 @@ private boolean requiresEvmExecution(final WorldView worldView, final Transactio public void traceContextReEnter(MessageFrame frame) { this.defers.runReEntry(this, frame); - if (this.currentFrame().needsUnlatchingAtReEntry() != null) { - this.unlatchStack(frame, this.currentFrame().needsUnlatchingAtReEntry()); - this.currentFrame().needsUnlatchingAtReEntry(null); + if (this.currentFrame().sectionToUnlatch() != null) { + this.unlatchStack(frame, this.currentFrame().sectionToUnlatch()); + this.currentFrame().sectionToUnlatch(null); } } @@ -1019,39 +1133,39 @@ public void tracePostExecution(MessageFrame frame, Operation.OperationResult ope this.defers.runPostExec(this, frame, operationResult); this.romLex.tracePostOpcode(frame); - if (this.currentFrame().needsUnlatchingAtReEntry() == null) { + if (this.currentFrame().sectionToUnlatch() == null) { this.unlatchStack(frame); } switch (this.opCodeData().instructionFamily()) { case ADD -> { - if (this.pch.exceptions().noStackException()) { + if (Exceptions.noStackException(this.pch.exceptions())) { this.add.tracePostOpcode(frame); } } case MOD -> { - if (this.pch.exceptions().noStackException()) { + if (Exceptions.noStackException(this.pch.exceptions())) { this.mod.tracePostOpcode(frame); } } case MUL -> { - if (this.pch.exceptions().noStackException()) { + if (Exceptions.noStackException(this.pch.exceptions())) { this.mul.tracePostOpcode(frame); } } case EXT -> { - if (this.pch.exceptions().noStackException()) { + if (Exceptions.noStackException(this.pch.exceptions())) { this.ext.tracePostOpcode(frame); } } case WCP -> { - if (this.pch.exceptions().noStackException()) { + if (Exceptions.noStackException(this.pch.exceptions())) { this.wcp.tracePostOpcode(frame); } } case BIN -> {} case SHF -> { - if (this.pch.exceptions().noStackException()) { + if (Exceptions.noStackException(this.pch.exceptions())) { this.shf.tracePostOpcode(frame); } } @@ -1066,7 +1180,7 @@ public void tracePostExecution(MessageFrame frame, Operation.OperationResult ope } } case STACK_RAM -> { - if (this.pch.exceptions().noStackException()) { + if (Exceptions.noStackException(this.pch.exceptions())) { this.mxp.tracePostOpcode(frame); } } @@ -1157,12 +1271,12 @@ void traceOperation(MessageFrame frame) { case RETURN -> { Bytes returnData = Bytes.EMPTY; // Trying to read memory with absurd arguments will throw an exception - if (pch.exceptions().none()) { + if (Exceptions.none(pch.exceptions())) { returnData = this.transients.op().returnData(); } this.currentFrame().returnDataSource(transients.op().returnDataSegment()); this.currentFrame().returnData(returnData); - if (!this.pch.exceptions().any() && !this.currentFrame().underDeployment()) { + if (!Exceptions.any(this.pch.exceptions()) && !this.currentFrame().underDeployment()) { parentFrame.latestReturnData(returnData); } else { parentFrame.latestReturnData(Bytes.EMPTY); @@ -1173,7 +1287,7 @@ void traceOperation(MessageFrame frame) { final Bytes returnData = this.transients.op().returnData(); this.currentFrame().returnDataSource(transients.op().returnDataSegment()); this.currentFrame().returnData(returnData); - if (!this.pch.exceptions().any()) { + if (!Exceptions.any(this.pch.exceptions())) { parentFrame.latestReturnData(returnData); } else { parentFrame.latestReturnData(Bytes.EMPTY); @@ -1220,7 +1334,7 @@ void traceOperation(MessageFrame frame) { this.currentFrame(), this.factories .accountFragment() - .makeWithTrm(accountSnapshot, accountSnapshot, false, 0, false, rawTargetAddress)); + .makeWithTrm(accountSnapshot, accountSnapshot, rawTargetAddress)); this.addTraceSection(accountSection); } @@ -1249,11 +1363,8 @@ void traceOperation(MessageFrame frame) { this.currentFrame().opCode() == OpCode.EXTCODECOPY ? this.factories .accountFragment() - .makeWithTrm( - accountSnapshot, accountSnapshot, false, 0, false, rawTargetAddress) - : this.factories - .accountFragment() - .make(accountSnapshot, accountSnapshot, false, 0, false)); + .makeWithTrm(accountSnapshot, accountSnapshot, rawTargetAddress) + : this.factories.accountFragment().make(accountSnapshot, accountSnapshot)); } else { copySection.addFragment( this, this.currentFrame(), ContextFragment.readContextData(callStack)); @@ -1304,7 +1415,7 @@ void traceOperation(MessageFrame frame) { .getOriginalValueOrUpdate(address, key, valNext), EWord.of(frame.getTransientStorageValue(address, key)), valNext, - frame.isStorageWarm(address, key), + frame.getWarmedUpStorage().contains(address, key), true))); } case SLOAD -> { @@ -1320,15 +1431,15 @@ void traceOperation(MessageFrame frame) { this.transients.tx().storage().getOriginalValueOrUpdate(address, key), valCurrent, valCurrent, - frame.isStorageWarm(address, key), + frame.getWarmedUpStorage().contains(address, key), true))); } default -> throw new IllegalStateException("invalid operation in family STORAGE"); } } case CREATE -> { - Address myAddress = this.currentFrame().address(); - Account myAccount = frame.getWorldUpdater().get(myAddress); + final Address myAddress = this.currentFrame().address(); + final Account myAccount = frame.getWorldUpdater().get(myAddress); AccountSnapshot myAccountSnapshot = AccountSnapshot.fromAccount( myAccount, @@ -1336,8 +1447,8 @@ void traceOperation(MessageFrame frame) { this.transients.conflation().deploymentInfo().number(myAddress), this.transients.conflation().deploymentInfo().isDeploying(myAddress)); - Address createdAddress = this.currentFrame().address(); - Account createdAccount = frame.getWorldUpdater().get(createdAddress); + final Address createdAddress = AddressUtils.getCreateAddress(frame); + final Account createdAccount = frame.getWorldUpdater().get(createdAddress); AccountSnapshot createdAccountSnapshot = AccountSnapshot.fromAccount( createdAccount, @@ -1348,7 +1459,7 @@ void traceOperation(MessageFrame frame) { CreateSection createSection = new CreateSection(this, myAccountSnapshot, createdAccountSnapshot); this.addTraceSection(createSection); - this.currentFrame().needsUnlatchingAtReEntry(createSection); + this.currentFrame().sectionToUnlatch(createSection); } case CALL -> { @@ -1376,24 +1487,24 @@ void traceOperation(MessageFrame frame) { Optional targetPrecompile = Precompile.maybeOf(calledAddress); - if (this.pch().exceptions().any()) { + if (Exceptions.any(this.pch().exceptions())) { // // THERE IS AN EXCEPTION // - if (this.pch().exceptions().staticFault()) { + if (Exceptions.staticFault(this.pch().exceptions())) { this.addTraceSection( new FailedCallSection( this, ScenarioFragment.forCall(this, hasCode), ImcFragment.forCall(this, myAccount, calledAccount), ContextFragment.readContextData(callStack))); - } else if (this.pch().exceptions().outOfMemoryExpansion()) { + } else if (Exceptions.outOfMemoryExpansion(this.pch().exceptions())) { this.addTraceSection( new FailedCallSection( this, ScenarioFragment.forCall(this, hasCode), ImcFragment.forCall(this, myAccount, calledAccount))); - } else if (this.pch().exceptions().outOfGas()) { + } else if (Exceptions.outOfGas(this.pch().exceptions())) { this.addTraceSection( new FailedCallSection( this, @@ -1428,7 +1539,7 @@ void traceOperation(MessageFrame frame) { new SmartContractCallSection( this, myAccountSnapshot, calledAccountSnapshot, rawCalledAddress, imcFragment); this.addTraceSection(section); - this.currentFrame().needsUnlatchingAtReEntry(section); + this.currentFrame().sectionToUnlatch(section); } else { // // CALL EXECUTED @@ -1457,7 +1568,7 @@ void traceOperation(MessageFrame frame) { rawCalledAddress, imcFragment); this.addTraceSection(section); - this.currentFrame().needsUnlatchingAtReEntry(section); + this.currentFrame().sectionToUnlatch(section); } } } @@ -1477,9 +1588,7 @@ void traceOperation(MessageFrame frame) { new JumpSection( this, ContextFragment.readContextData(callStack), - this.factories - .accountFragment() - .make(codeAccountSnapshot, codeAccountSnapshot, false, 0, false), + this.factories.accountFragment().make(codeAccountSnapshot, codeAccountSnapshot), ImcFragment.forOpcode(this, frame)); this.addTraceSection(jumpSection); @@ -1487,7 +1596,7 @@ void traceOperation(MessageFrame frame) { } // In all cases, add a context fragment if an exception occurred - if (this.pch().exceptions().any()) { + if (Exceptions.any(this.pch().exceptions())) { this.currentTraceSection() .addFragment( this, this.currentFrame(), ContextFragment.executionEmptyReturnData(callStack)); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/State.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/State.java index ded291b987..0ed1f507cc 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/State.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/State.java @@ -131,7 +131,7 @@ Stamps spinOff() { return new Stamps(this.hub, this.mmu, this.mxp, this.hashInfo); } - void stampHubIncrements() { + void incrementHubStamp() { this.hub++; } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/TransactionStack.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/TransactionStack.java index aa7df38a28..eee07b4d60 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/TransactionStack.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/TransactionStack.java @@ -111,6 +111,8 @@ public static class MetaTransaction { @Getter private long initialGas; @Getter private final StorageInitialValues storage = new StorageInitialValues(); @Getter @Setter @Builder.Default int endStamp = -1; + @Getter @Setter boolean isSenderPreWarmed; + @Getter @Setter boolean isReceiverPreWarmed; @Getter @Setter boolean requiresEvmExecution; /** diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/TxTrace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/TxTrace.java index 4f0416e853..b4b313023b 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/TxTrace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/TxTrace.java @@ -33,6 +33,7 @@ public class TxTrace implements PostTransactionDefer { /** The {@link TraceSection} of which this transaction trace is made of */ @Getter private final List trace = new ArrayList<>(); + /** A cache for the line count of this transaction */ private int cachedLineCount = 0; @@ -40,6 +41,8 @@ public class TxTrace implements PostTransactionDefer { @Getter private long leftoverGas = -1; @Getter private long gasRefundFinalCounter = 0; // TODO: + private static final int PARALLELIZATION_THRESHOLD = 10_000; + public int size() { return this.trace.size(); } @@ -71,16 +74,22 @@ public void add(TraceSection section) { } public long refundedGas() { - if (this.refundedGas == -1) { - this.refundedGas = 0; - for (TraceSection section : this.trace) { - if (!section.hasReverted()) { - this.refundedGas += section.refundDelta(); + if (this.trace.size() >= PARALLELIZATION_THRESHOLD) { + return this.trace.parallelStream() + .filter(section -> !section.hasReverted()) + .mapToLong(TraceSection::refundDelta) + .sum(); + } else { + if (this.refundedGas == -1) { + this.refundedGas = 0; + for (TraceSection section : this.trace) { + if (!section.hasReverted()) { + this.refundedGas += section.refundDelta(); + } } } + return this.refundedGas; } - - return this.refundedGas; } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/defer/DeferRegistry.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/defer/DeferRegistry.java index c08fc3923b..3b5aa47e58 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/defer/DeferRegistry.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/defer/DeferRegistry.java @@ -32,12 +32,16 @@ public class DeferRegistry { /** A list of actions deferred until the end of the current conflation execution */ private final List conflationDefers = new ArrayList<>(); + /** A list of actions deferred until the end of the current transaction */ private final List txDefers = new ArrayList<>(); + /** A list of actions deferred until the end of the current opcode execution */ private final List postExecDefers = new ArrayList<>(); + /** A list of actions deferred until the end of the current opcode execution */ private final List reEntryDefers = new ArrayList<>(); + /** A list of actions deferred until the end of the current opcode execution */ private final List> contextReentry = new ArrayList<>(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/defer/SkippedPostTransactionDefer.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/defer/SkippedPostTransactionDefer.java index c938d57fe7..cab82eb200 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/defer/SkippedPostTransactionDefer.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/defer/SkippedPostTransactionDefer.java @@ -50,21 +50,21 @@ public void runPostTx(Hub hub, WorldView state, Transaction tx, boolean isSucces AccountSnapshot newFromAccount = AccountSnapshot.fromAccount( state.get(fromAddress), - true, + this.oldFromAccount.isWarm(), hub.transients().conflation().deploymentInfo().number(fromAddress), false); AccountSnapshot newToAccount = AccountSnapshot.fromAccount( state.get(toAddress), - true, + this.oldToAccount.isWarm(), hub.transients().conflation().deploymentInfo().number(toAddress), false); AccountSnapshot newMinerAccount = AccountSnapshot.fromAccount( state.get(minerAddress), - true, + this.oldMinerAccount.isWarm(), hub.transients().conflation().deploymentInfo().number(minerAddress), false); @@ -74,13 +74,11 @@ public void runPostTx(Hub hub, WorldView state, Transaction tx, boolean isSucces hub, // 3 lines -- account changes // From - hub.factories().accountFragment().make(oldFromAccount, newFromAccount, false, 0, false), + hub.factories().accountFragment().make(oldFromAccount, newFromAccount), // To - hub.factories().accountFragment().make(oldToAccount, newToAccount, false, 0, false), + hub.factories().accountFragment().make(oldToAccount, newToAccount), // Miner - hub.factories() - .accountFragment() - .make(oldMinerAccount, newMinerAccount, false, 0, false), + hub.factories().accountFragment().make(oldMinerAccount, newMinerAccount), // 1 line -- transaction data TransactionFragment.prepare( diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/AccountFragment.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/AccountFragment.java index 2509c45a41..584acb09df 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/AccountFragment.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/AccountFragment.java @@ -29,14 +29,18 @@ import net.consensys.linea.zktracer.module.hub.Trace; import net.consensys.linea.zktracer.module.hub.defer.DeferRegistry; import net.consensys.linea.zktracer.module.hub.defer.PostConflationDefer; +import net.consensys.linea.zktracer.module.hub.defer.PostTransactionDefer; import net.consensys.linea.zktracer.types.EWord; import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.datatypes.Hash; +import org.hyperledger.besu.datatypes.Transaction; import org.hyperledger.besu.evm.worldstate.WorldView; @Accessors(fluent = true) -public final class AccountFragment implements TraceFragment, PostConflationDefer { +public final class AccountFragment + implements TraceFragment, PostTransactionDefer, PostConflationDefer { + /** * {@link AccountFragment} creation requires access to a {@link DeferRegistry} for post-conflation * data gathering, which is provided by this factory. @@ -53,63 +57,31 @@ public AccountFragment makeWithTrm( AccountSnapshot oldState, AccountSnapshot newState, Bytes toTrim) { return new AccountFragment(this.defers, oldState, newState, Optional.of(toTrim)); } - - public AccountFragment make( - AccountSnapshot oldState, - AccountSnapshot newState, - boolean debit, - long cost, - boolean createAddress) { - return new AccountFragment( - this.defers, oldState, newState, debit, cost, createAddress, Optional.empty()); - } - - public AccountFragment makeWithTrm( - AccountSnapshot oldState, - AccountSnapshot newState, - boolean debit, - long cost, - boolean createAddress, - final Bytes addressToTrim) { - return new AccountFragment( - this.defers, oldState, newState, debit, cost, createAddress, Optional.of(addressToTrim)); - } } @Getter private final Address who; private final AccountSnapshot oldState; private final AccountSnapshot newState; - private final boolean debit; - private final long cost; - private final boolean createAddress; - @Setter private int deploymentNumberInfnty = 0; // retconned on conflation end + @Setter private int deploymentNumberInfinity = 0; // retconned on conflation end + private final int deploymentNumber; + private final boolean isDeployment; @Setter private boolean existsInfinity = false; // retconned on conflation end + private int codeFragmentIndex; + @Setter private boolean requiresCodeFragmentIndex; private final Optional addressToTrim; - private AccountFragment( - final DeferRegistry defers, - AccountSnapshot oldState, - AccountSnapshot newState, - Optional addressToTrim) { - this(defers, oldState, newState, false, 0, false, addressToTrim); - } - public AccountFragment( final DeferRegistry defers, AccountSnapshot oldState, AccountSnapshot newState, - boolean debit, - long cost, - boolean createAddress, Optional addressToTrim) { Preconditions.checkArgument(oldState.address().equals(newState.address())); this.who = oldState.address(); this.oldState = oldState; this.newState = newState; - this.debit = debit; - this.cost = cost; - this.createAddress = createAddress; + this.deploymentNumber = newState.deploymentNumber(); + this.isDeployment = newState.deploymentStatus(); this.addressToTrim = addressToTrim; defers.postConflation(this); @@ -140,6 +112,7 @@ public Trace trace(Trace trace) { .pAccountCodeHashLoNew(eCodeHashNew.lo()) .pAccountHasCode(oldState.code().getCodeHash() != Hash.EMPTY) .pAccountHasCodeNew(newState.code().getCodeHash() != Hash.EMPTY) + .pAccountCodeFragmentIndex(Bytes.of(this.codeFragmentIndex)) .pAccountExists( oldState.nonce() > 0 || oldState.code().getCodeHash() != Hash.EMPTY @@ -148,19 +121,28 @@ public Trace trace(Trace trace) { newState.nonce() > 0 || newState.code().getCodeHash() != Hash.EMPTY || !newState.balance().isZero()) - .pAccountWarmth(oldState.warm()) - .pAccountWarmthNew(newState.warm()) + .pAccountWarmth(oldState.isWarm()) + .pAccountWarmthNew(newState.isWarm()) .pAccountDeploymentNumber(Bytes.ofUnsignedInt(oldState.deploymentNumber())) .pAccountDeploymentNumberNew(Bytes.ofUnsignedInt(newState.deploymentNumber())) - .pAccountDeploymentNumberInfty(Bytes.ofUnsignedInt(deploymentNumberInfnty)) + .pAccountDeploymentNumberInfty(Bytes.ofUnsignedInt(deploymentNumberInfinity)) .pAccountDeploymentStatus(oldState.deploymentStatus()) .pAccountDeploymentStatusNew(newState.deploymentStatus()) .pAccountDeploymentStatusInfty(existsInfinity); } + @Override + public void runPostTx(Hub hub, WorldView state, Transaction tx, boolean isSuccessful) {} + @Override public void runPostConflation(Hub hub, WorldView world) { - this.deploymentNumberInfnty = hub.transients().conflation().deploymentInfo().number(this.who); + this.deploymentNumberInfinity = hub.transients().conflation().deploymentInfo().number(this.who); this.existsInfinity = world.get(this.who) != null; + // this.codeFragmentIndex = + // this.requiresCodeFragmentIndex + // ? hub.romLex() + // .getCodeFragmentIndexByMetadata( + // ContractMetadata.make(this.who, this.deploymentNumber, this.isDeployment)) + // : 0; } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/CommonFragment.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/CommonFragment.java index d5f98b365e..678078055e 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/CommonFragment.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/CommonFragment.java @@ -38,7 +38,7 @@ public final class CommonFragment implements TraceFragment { private final TxState txState; private final int stamp; private final InstructionFamily instructionFamily; - private final Exceptions exceptions; + private final short exceptions; private final int callFrameId; @Getter private final int contextNumber; @Setter private int newContextNumber; @@ -63,7 +63,7 @@ public final class CommonFragment implements TraceFragment { public static CommonFragment fromHub( final Hub hub, final CallFrame frame, boolean tliCounter, int nonStackRowsCounter) { long refund = 0; - if (hub.pch().exceptions().noStackException()) { + if (Exceptions.noStackException(hub.pch().exceptions())) { refund = Hub.GAS_PROJECTOR.of(frame.frame(), hub.opCode()).refund(); } @@ -74,7 +74,7 @@ public static CommonFragment fromHub( .txState(hub.transients().tx().state()) .stamp(hub.stamp()) .instructionFamily(hub.opCodeData().instructionFamily()) - .exceptions(hub.pch().exceptions().snapshot()) + .exceptions(hub.pch().exceptions()) .callFrameId(frame.id()) .contextNumber(frame.contextNumber()) .newContextNumber(frame.contextNumber()) @@ -136,8 +136,8 @@ public Trace trace(Trace trace, int stackHeight, int stackHeightNew) { || instructionFamily == InstructionFamily.CREATE || instructionFamily == InstructionFamily.HALT || instructionFamily == InstructionFamily.INVALID) - || exceptions.any())) - .exceptionAhoy(exceptions.any()) + || Exceptions.any(exceptions))) + .exceptionAhoy(Exceptions.any(exceptions)) // Context data .contextNumber(Bytes.ofUnsignedInt(contextNumber)) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/StackFragment.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/StackFragment.java index 94e1c7b93b..dc33c0eac6 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/StackFragment.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/StackFragment.java @@ -45,7 +45,7 @@ public final class StackFragment implements TraceFragment { private final Stack stack; @Getter private final List stackOps; - private final Exceptions exceptions; + private final short exceptions; @Setter private DeploymentExceptions contextExceptions; private final long staticGas; private EWord hashInfoKeccak = EWord.ZERO; @@ -57,7 +57,7 @@ private StackFragment( final Hub hub, Stack stack, List stackOps, - Exceptions exceptions, + short exceptions, AbortingConditions aborts, DeploymentExceptions contextExceptions, GasProjection gp, @@ -69,9 +69,9 @@ private StackFragment( this.opCode = stack.getCurrentOpcodeData().mnemonic(); this.hashInfoFlag = switch (this.opCode) { - case SHA3 -> exceptions.none() && gp.messageSize() > 0; - case RETURN -> exceptions.none() && gp.messageSize() > 0 && isDeploying; - case CREATE2 -> exceptions.none() + case SHA3 -> Exceptions.none(exceptions) && gp.messageSize() > 0; + case RETURN -> Exceptions.none(exceptions) && gp.messageSize() > 0 && isDeploying; + case CREATE2 -> Exceptions.none(exceptions) && contextExceptions.none() && aborts.none() && gp.messageSize() > 0; @@ -79,7 +79,7 @@ private StackFragment( }; this.hashInfoSize = this.hashInfoFlag ? gp.messageSize() : 0; this.staticGas = gp.staticGas(); - if (this.opCode == OpCode.RETURN && exceptions.none()) { + if (this.opCode == OpCode.RETURN && Exceptions.none(exceptions)) { this.hashInfoKeccak = EWord.of(org.hyperledger.besu.crypto.Hash.keccak256(hub.transients().op().returnData())); } @@ -89,7 +89,7 @@ public static StackFragment prepare( final Hub hub, final Stack stack, final List stackOperations, - final Exceptions exceptions, + final short exceptions, final AbortingConditions aborts, final GasProjection gp, boolean isDeploying) { @@ -199,15 +199,15 @@ public Trace trace(Trace trace) { .pStackDecFlag3(this.stack.getCurrentOpcodeData().stackSettings().flag3()) .pStackDecFlag4(this.stack.getCurrentOpcodeData().stackSettings().flag4()) // Exception flag - .pStackOpcx(exceptions.invalidOpcode()) - .pStackSux(exceptions.stackUnderflow()) - .pStackSox(exceptions.stackOverflow()) - .pStackOogx(exceptions.outOfGas()) - .pStackMxpx(exceptions.outOfMemoryExpansion()) - .pStackRdcx(exceptions.returnDataCopyFault()) - .pStackJumpx(exceptions.jumpFault()) - .pStackStaticx(exceptions.staticFault()) - .pStackSstorex(exceptions.outOfSStore()) + .pStackOpcx(Exceptions.invalidOpcode(exceptions)) + .pStackSux(Exceptions.stackUnderflow(exceptions)) + .pStackSox(Exceptions.stackOverflow(exceptions)) + .pStackOogx(Exceptions.outOfGas(exceptions)) + .pStackMxpx(Exceptions.outOfMemoryExpansion(exceptions)) + .pStackRdcx(Exceptions.returnDataCopyFault(exceptions)) + .pStackJumpx(Exceptions.jumpFault(exceptions)) + .pStackStaticx(Exceptions.staticFault(exceptions)) + .pStackSstorex(Exceptions.outOfSStore(exceptions)) .pStackIcpx(contextExceptions.invalidCodePrefix()) .pStackMaxcsx(contextExceptions.codeSizeOverflow()) // Opcode families diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/ImcFragment.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/ImcFragment.java index b10b2448d0..b44fb4ad2e 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/ImcFragment.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/ImcFragment.java @@ -38,6 +38,7 @@ import net.consensys.linea.zktracer.module.hub.fragment.imc.call.oob.opcodes.ExceptionalCall; import net.consensys.linea.zktracer.module.hub.fragment.imc.call.oob.opcodes.Jump; import net.consensys.linea.zktracer.module.hub.fragment.imc.call.oob.opcodes.SStore; +import net.consensys.linea.zktracer.module.hub.signals.Exceptions; import net.consensys.linea.zktracer.opcode.OpCode; import net.consensys.linea.zktracer.opcode.gas.GasConstants; import net.consensys.linea.zktracer.types.EWord; @@ -54,7 +55,7 @@ */ public class ImcFragment implements TraceFragment { /** the list of modules to trigger withing this fragment. */ - private final List moduleCalls = new ArrayList<>(); + private final List moduleCalls = new ArrayList<>(5); private final Hub hub; @@ -121,7 +122,7 @@ public static ImcFragment forCall( if (hub.pch().signals().oob()) { switch (hub.opCode()) { case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - if (hub.opCode().equals(OpCode.CALL) && hub.pch().exceptions().any()) { + if (hub.opCode().equals(OpCode.CALL) && Exceptions.any(hub.pch().exceptions())) { r.callOob(new ExceptionalCall(EWord.of(hub.messageFrame().getStackItem(2)))); } else { r.callOob( @@ -155,7 +156,7 @@ public static ImcFragment forCall( calledAccount .map(a -> hub.messageFrame().isAddressWarm(a.getAddress())) .orElse(false), - hub.pch().exceptions().outOfGas(), + Exceptions.outOfGas(hub.pch().exceptions()), upfrontCost, Math.max( Words.unsignedMin( @@ -179,7 +180,7 @@ public static ImcFragment forOpcode(Hub hub, MessageFrame frame) { r.callExp(new ExpCallForExpPricing(EWord.of(hub.messageFrame().getStackItem(1)))); } - if (hub.pch().signals().exp() && !hub.pch().exceptions().stackException()) { + if (hub.pch().signals().exp() && !Exceptions.stackException(hub.pch().exceptions())) { hub.exp().tracePreOpcode(frame); } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/MxpCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/MxpCall.java index a60c452a1c..54d6d0a3b0 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/MxpCall.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/MxpCall.java @@ -18,6 +18,7 @@ import net.consensys.linea.zktracer.module.hub.Hub; import net.consensys.linea.zktracer.module.hub.Trace; import net.consensys.linea.zktracer.module.hub.fragment.TraceSubFragment; +import net.consensys.linea.zktracer.module.hub.signals.Exceptions; import net.consensys.linea.zktracer.opcode.OpCode; import net.consensys.linea.zktracer.types.EWord; import org.apache.tuweni.bytes.Bytes; @@ -46,7 +47,7 @@ public static MxpCall build(Hub hub) { EWord size2 = EWord.ZERO; return new MxpCall( - hub.pch().exceptions().outOfMemoryExpansion(), + Exceptions.outOfMemoryExpansion(hub.pch().exceptions()), hub.currentFrame().opCodeData().value(), opCode == OpCode.RETURN && hub.currentFrame().underDeployment(), hub.currentFrame().frame().memoryWordSize(), diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/MmuCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/MmuCall.java index 94225e343d..3d48434c35 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/MmuCall.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/MmuCall.java @@ -312,15 +312,18 @@ public static MmuCall forEcRecover( final int precompileContextNumber = p.hubStamp() + 1; if (i == 0) { - return new MmuCall(MMU_INST_RAM_TO_EXO_WITH_PADDING) - .sourceId(hub.currentFrame().contextNumber()) - .targetId(precompileContextNumber) - .sourceOffset(EWord.of(p.callDataSource().offset())) - .size(p.callDataSource().length()) - .referenceSize(128) - .successBit(recoverySuccessful) - .phase(PHASE_ECRECOVER_DATA) - .setEcData(); + final long inputSize = p.callDataSource().length(); + return inputSize == 0 + ? nop() + : new MmuCall(MMU_INST_RAM_TO_EXO_WITH_PADDING) + .sourceId(hub.currentFrame().contextNumber()) + .targetId(precompileContextNumber) + .sourceOffset(EWord.of(p.callDataSource().offset())) + .size(inputSize) + .referenceSize(128) + .successBit(recoverySuccessful) + .phase(PHASE_ECRECOVER_DATA) + .setEcData(); } else if (i == 1) { if (recoverySuccessful) { return new MmuCall(MMU_INST_EXO_TO_RAM_TRANSPLANTS) @@ -373,8 +376,7 @@ private static MmuCall forRipeMd160Sha( return new MmuCall(MMU_INST_MSTORE) .targetId(precompileContextNumber) .targetOffset(EWord.ZERO) - .limb1( - isSha ? bigIntegerToBytes(EMPTY_SHA2_HI) : Bytes.ofUnsignedShort(EMPTY_RIPEMD_HI)) + .limb1(isSha ? bigIntegerToBytes(EMPTY_SHA2_HI) : Bytes.ofUnsignedLong(EMPTY_RIPEMD_HI)) .limb2(isSha ? bigIntegerToBytes(EMPTY_SHA2_LO) : bigIntegerToBytes(EMPTY_RIPEMD_LO)); } else { return new MmuCall(MMU_INST_EXO_TO_RAM_TRANSPLANTS) @@ -443,15 +445,18 @@ public static MmuCall forEcAdd(final Hub hub, final PrecompileInvocation p, int Preconditions.checkArgument(i >= 0 && i < 3); final int precompileContextNumber = p.hubStamp() + 1; if (i == 0) { - return new MmuCall(MMU_INST_RAM_TO_EXO_WITH_PADDING) - .sourceId(hub.currentFrame().contextNumber()) - .targetId(precompileContextNumber) - .sourceOffset(EWord.of(p.callDataSource().offset())) - .size(p.callDataSource().length()) - .referenceSize(128) - .successBit(!p.ramFailure()) - .setEcData() - .phase(PHASE_ECADD_DATA); + final long inputSize = p.callDataSource().length(); + return inputSize == 0 + ? nop() + : new MmuCall(MMU_INST_RAM_TO_EXO_WITH_PADDING) + .sourceId(hub.currentFrame().contextNumber()) + .targetId(precompileContextNumber) + .sourceOffset(EWord.of(p.callDataSource().offset())) + .size(inputSize) + .referenceSize(128) + .successBit(!p.ramFailure()) + .setEcData() + .phase(PHASE_ECADD_DATA); } else if (i == 1) { return new MmuCall(MMU_INST_EXO_TO_RAM_TRANSPLANTS) .sourceId(precompileContextNumber) @@ -473,15 +478,18 @@ public static MmuCall forEcMul(final Hub hub, final PrecompileInvocation p, int Preconditions.checkArgument(i >= 0 && i < 3); final int precompileContextNumber = p.hubStamp() + 1; if (i == 0) { - return new MmuCall(MMU_INST_RAM_TO_EXO_WITH_PADDING) - .sourceId(hub.currentFrame().contextNumber()) - .targetId(precompileContextNumber) - .sourceOffset(EWord.of(p.callDataSource().offset())) - .size(p.callDataSource().length()) - .referenceSize(96) - .successBit(!p.ramFailure()) - .setEcData() - .phase(PHASE_ECMUL_DATA); + final long inputSize = p.callDataSource().length(); + return inputSize == 0 + ? nop() + : new MmuCall(MMU_INST_RAM_TO_EXO_WITH_PADDING) + .sourceId(hub.currentFrame().contextNumber()) + .targetId(precompileContextNumber) + .sourceOffset(EWord.of(p.callDataSource().offset())) + .size(inputSize) + .referenceSize(96) + .successBit(!p.ramFailure()) + .setEcData() + .phase(PHASE_ECMUL_DATA); } else if (i == 1) { return new MmuCall(MMU_INST_EXO_TO_RAM_TRANSPLANTS) .sourceId(precompileContextNumber) @@ -503,15 +511,18 @@ public static MmuCall forEcPairing(final Hub hub, final PrecompileInvocation p, Preconditions.checkArgument(i >= 0 && i < 3); final int precompileContextNumber = p.hubStamp() + 1; if (i == 0) { - return new MmuCall(MMU_INST_RAM_TO_EXO_WITH_PADDING) - .sourceId(hub.currentFrame().contextNumber()) - .targetId(precompileContextNumber) - .sourceOffset(EWord.of(p.callDataSource().offset())) - .size(p.callDataSource().length()) - .referenceSize(p.callDataSource().length()) - .successBit(!p.ramFailure()) - .setEcData() - .phase(PHASE_ECPAIRING_DATA); + final long inputSize = p.callDataSource().length(); + return inputSize == 0 + ? nop() + : new MmuCall(MMU_INST_RAM_TO_EXO_WITH_PADDING) + .sourceId(hub.currentFrame().contextNumber()) + .targetId(precompileContextNumber) + .sourceOffset(EWord.of(p.callDataSource().offset())) + .size(inputSize) + .referenceSize(p.callDataSource().length()) + .successBit(!p.ramFailure()) + .setEcData() + .phase(PHASE_ECPAIRING_DATA); } else if (i == 1) { if (p.callDataSource().isEmpty()) { return new MmuCall(MMU_INST_MSTORE).targetId(precompileContextNumber).limb2(Bytes.of(1)); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/CodeCopy.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/CodeCopy.java index c3a7da67ff..82cbaf0b59 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/CodeCopy.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/CodeCopy.java @@ -46,6 +46,6 @@ public CodeCopy(final Hub hub) { @Override public int sourceId() { - return this.hub.romLex().getCfiByMetadata(this.contract); + return this.hub.romLex().getCodeFragmentIndexByMetadata(this.contract); } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/Create.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/Create.java index 0465274565..3f249dc42b 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/Create.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/Create.java @@ -46,7 +46,7 @@ public Create(final Hub hub) { @Override public int targetId() { - return this.hub.romLex().getCfiByMetadata(this.contract); + return this.hub.romLex().getCodeFragmentIndexByMetadata(this.contract); } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/Create2.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/Create2.java index f5a4bb5251..3a18430a54 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/Create2.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/Create2.java @@ -48,7 +48,7 @@ public Create2(final Hub hub) { @Override public int targetId() { - return this.hub.romLex().getCfiByMetadata(this.contract); + return this.hub.romLex().getCodeFragmentIndexByMetadata(this.contract); } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/ExtCodeCopy.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/ExtCodeCopy.java index c8cf76648c..ddf029ed3d 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/ExtCodeCopy.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/ExtCodeCopy.java @@ -52,7 +52,7 @@ public ExtCodeCopy(final Hub hub) { @Override public int sourceId() { try { - return this.hub.romLex().getCfiByMetadata(this.contract); + return this.hub.romLex().getCodeFragmentIndexByMetadata(this.contract); } catch (Exception ignored) { // Triggered if the external bytecode is empty, and thus absent from the ROMLex. return 0; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/ReturnFromDeployment.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/ReturnFromDeployment.java index 27a07c5c9c..ebd450df88 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/ReturnFromDeployment.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/mmu/opcode/ReturnFromDeployment.java @@ -55,6 +55,6 @@ public ReturnFromDeployment(final Hub hub) { @Override public int targetId() { - return this.hub.romLex().getCfiByMetadata(this.contract); + return this.hub.romLex().getCodeFragmentIndexByMetadata(this.contract); } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/oob/opcodes/DeploymentReturn.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/oob/opcodes/DeploymentReturn.java index dad8cedc2c..27ed2782f1 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/oob/opcodes/DeploymentReturn.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/oob/opcodes/DeploymentReturn.java @@ -18,8 +18,8 @@ import static net.consensys.linea.zktracer.module.constants.GlobalConstants.OOB_INST_DEPLOYMENT; import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; +import net.consensys.linea.zktracer.module.constants.GlobalConstants; import net.consensys.linea.zktracer.module.hub.fragment.imc.call.oob.OobCall; -import net.consensys.linea.zktracer.module.hub.signals.Exceptions; import net.consensys.linea.zktracer.module.oob.OobDataChannel; import net.consensys.linea.zktracer.types.EWord; import org.apache.tuweni.bytes.Bytes; @@ -30,7 +30,7 @@ public Bytes data(OobDataChannel i) { return switch (i) { case DATA_1 -> size.hi(); case DATA_2 -> size.lo(); - case DATA_7 -> booleanToBytes(size.greaterThan(EWord.of(Exceptions.MAX_CODE_SIZE))); + case DATA_7 -> booleanToBytes(size.greaterThan(EWord.of(GlobalConstants.MAX_CODE_SIZE))); default -> Bytes.EMPTY; }; } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/oob/opcodes/SStore.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/oob/opcodes/SStore.java index 9ca25b68e7..5e47d70f62 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/oob/opcodes/SStore.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/imc/call/oob/opcodes/SStore.java @@ -15,8 +15,8 @@ package net.consensys.linea.zktracer.module.hub.fragment.imc.call.oob.opcodes; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.GAS_CONST_G_CALL_STIPEND; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.OOB_INST_SSTORE; -import static net.consensys.linea.zktracer.module.oob.Trace.G_CALLSTIPEND; import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; import net.consensys.linea.zktracer.module.hub.fragment.imc.call.oob.OobCall; @@ -28,7 +28,7 @@ public record SStore(long gas) implements OobCall { public Bytes data(OobDataChannel i) { return switch (i) { case DATA_5 -> Bytes.ofUnsignedLong(gas); - case DATA_7 -> booleanToBytes(gas <= G_CALLSTIPEND); + case DATA_7 -> booleanToBytes(gas <= GAS_CONST_G_CALL_STIPEND); default -> Bytes.EMPTY; }; } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/scenario/ScenarioFragment.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/scenario/ScenarioFragment.java index 5fd1342d86..f540fa1b42 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/scenario/ScenarioFragment.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/fragment/scenario/ScenarioFragment.java @@ -23,6 +23,7 @@ import net.consensys.linea.zktracer.module.hub.defer.PostTransactionDefer; import net.consensys.linea.zktracer.module.hub.fragment.TraceFragment; import net.consensys.linea.zktracer.module.hub.precompiles.PrecompileInvocation; +import net.consensys.linea.zktracer.module.hub.signals.Exceptions; import net.consensys.linea.zktracer.types.MemorySpan; import net.consensys.linea.zktracer.types.Precompile; import org.hyperledger.besu.datatypes.Transaction; @@ -92,10 +93,10 @@ public static ScenarioFragment forCall(final Hub hub, boolean targetHasCode) { targetHasCode, hub.currentFrame().id(), hub.callStack().futureId(), - hub.pch().exceptions().any(), + Exceptions.any(hub.pch().exceptions()), hub.pch().aborts().any(), hub.pch().failures().any(), - hub.pch().exceptions().invalidCodePrefix()); + Exceptions.invalidCodePrefix(hub.pch().exceptions())); hub.defers().postTx(r); return r; } @@ -107,10 +108,10 @@ public static ScenarioFragment forCreate(final Hub hub, boolean targetHasCode) { targetHasCode, hub.currentFrame().id(), hub.callStack().futureId(), - hub.pch().exceptions().any(), + Exceptions.any(hub.pch().exceptions()), hub.pch().aborts().any(), hub.pch().failures().any(), - hub.pch().exceptions().invalidCodePrefix()); + Exceptions.invalidCodePrefix(hub.pch().exceptions())); } public static ScenarioFragment forSmartContractCallSection( diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/precompiles/PrecompileInvocation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/precompiles/PrecompileInvocation.java index abdcbc39be..63129f09e6 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/precompiles/PrecompileInvocation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/precompiles/PrecompileInvocation.java @@ -18,13 +18,13 @@ import lombok.Builder; import lombok.experimental.Accessors; import net.consensys.linea.zktracer.module.hub.Hub; -import net.consensys.linea.zktracer.module.limits.precompiles.Blake2fRounds; +import net.consensys.linea.zktracer.module.limits.precompiles.BlakeRounds; import net.consensys.linea.zktracer.module.limits.precompiles.EcAddEffectiveCall; import net.consensys.linea.zktracer.module.limits.precompiles.EcMulEffectiveCall; -import net.consensys.linea.zktracer.module.limits.precompiles.EcPairingCallEffectiveCall; +import net.consensys.linea.zktracer.module.limits.precompiles.EcPairingFinalExponentiations; import net.consensys.linea.zktracer.module.limits.precompiles.EcRecoverEffectiveCall; import net.consensys.linea.zktracer.module.limits.precompiles.ModexpEffectiveCall; -import net.consensys.linea.zktracer.module.limits.precompiles.Rip160Blocks; +import net.consensys.linea.zktracer.module.limits.precompiles.RipemdBlocks; import net.consensys.linea.zktracer.module.limits.precompiles.Sha256Blocks; import net.consensys.linea.zktracer.types.MemorySpan; import net.consensys.linea.zktracer.types.Precompile; @@ -77,7 +77,7 @@ public static PrecompileInvocation of(final Hub hub, Precompile p) { switch (p) { case EC_RECOVER -> !EcRecoverEffectiveCall.hasEnoughGas(hub); case SHA2_256 -> !Sha256Blocks.hasEnoughGas(hub); - case RIPEMD_160 -> !Rip160Blocks.hasEnoughGas(hub); + case RIPEMD_160 -> !RipemdBlocks.hasEnoughGas(hub); case IDENTITY -> switch (hub.opCode()) { case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { final Address target = Words.toAddress(hub.messageFrame().getStackItem(1)); @@ -96,8 +96,8 @@ public static PrecompileInvocation of(final Hub hub, Precompile p) { case MODEXP -> false; case EC_ADD -> hub.transients().op().gasAllowanceForCall() < 150; case EC_MUL -> hub.transients().op().gasAllowanceForCall() < 6000; - case EC_PAIRING -> EcPairingCallEffectiveCall.isHubFailure(hub); - case BLAKE2F -> Blake2fRounds.isHubFailure(hub); + case EC_PAIRING -> EcPairingFinalExponentiations.isHubFailure(hub); + case BLAKE2F -> BlakeRounds.isHubFailure(hub); }; final boolean ramFailure = @@ -108,8 +108,8 @@ && switch (p) { > hub.transients().op().gasAllowanceForCall(); case EC_ADD -> EcAddEffectiveCall.isRamFailure(hub); case EC_MUL -> EcMulEffectiveCall.isRamFailure(hub); - case EC_PAIRING -> EcPairingCallEffectiveCall.isRamFailure(hub); - case BLAKE2F -> Blake2fRounds.isRamFailure(hub); + case EC_PAIRING -> EcPairingFinalExponentiations.isRamFailure(hub); + case BLAKE2F -> BlakeRounds.isRamFailure(hub); }; final long opCodeGas = Hub.GAS_PROJECTOR.of(hub.messageFrame(), hub.opCode()).total(); @@ -120,7 +120,7 @@ && switch (p) { : switch (p) { case EC_RECOVER -> EcRecoverEffectiveCall.gasCost(); case SHA2_256 -> Sha256Blocks.gasCost(hub); - case RIPEMD_160 -> Rip160Blocks.gasCost(hub); + case RIPEMD_160 -> RipemdBlocks.gasCost(hub); case IDENTITY -> switch (hub.opCode()) { case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { final Address target = Words.toAddress(hub.messageFrame().getStackItem(1)); @@ -137,8 +137,8 @@ && switch (p) { case MODEXP -> ModexpEffectiveCall.gasCost(hub); case EC_ADD -> EcAddEffectiveCall.gasCost(); case EC_MUL -> EcMulEffectiveCall.gasCost(); - case EC_PAIRING -> EcPairingCallEffectiveCall.gasCost(hub); - case BLAKE2F -> Blake2fRounds.gasCost(hub); + case EC_PAIRING -> EcPairingFinalExponentiations.gasCost(hub); + case BLAKE2F -> BlakeRounds.gasCost(hub); }; final long returnGas = @@ -156,7 +156,7 @@ && switch (p) { case EC_ADD -> null; case EC_MUL -> null; case EC_PAIRING -> null; - case BLAKE2F -> Blake2fRounds.metadata(hub); + case BLAKE2F -> BlakeRounds.metadata(hub); }; return PrecompileInvocation.builder() diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/CreateSection.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/CreateSection.java index 831f789220..8393d349d6 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/CreateSection.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/CreateSection.java @@ -50,7 +50,7 @@ public class CreateSection extends TraceSection private final OpCode opCode; private final long initialGas; private final AbortingConditions aborts; - private final Exceptions exceptions; + private final short exceptions; private final FailureConditions failures; private final ScenarioFragment scenarioFragment; @@ -80,7 +80,7 @@ public CreateSection( this.emptyInitCode = hub.transients().op().callDataSegment().isEmpty(); this.initialGas = hub.messageFrame().getRemainingGas(); this.aborts = hub.pch().aborts().snapshot(); - this.exceptions = hub.pch().exceptions().snapshot(); + this.exceptions = hub.pch().exceptions(); this.failures = hub.pch().failures().snapshot(); this.oldCreatorSnapshot = oldCreatorSnapshot; @@ -171,26 +171,26 @@ public void runPostTx(Hub hub, WorldView state, Transaction tx, boolean isSucces EWord.of(this.initialGas), EWord.ZERO, false, - oldCreatedSnapshot.warm(), - this.exceptions.outOfGas(), + oldCreatedSnapshot.isWarm(), + Exceptions.outOfGas(this.exceptions), upfrontCost, allButOneSixtyFourth(this.initialGas - upfrontCost), 0)); this.scenarioFragment.runPostTx(hub, state, tx, isSuccessful); this.addFragmentsWithoutStack(hub, scenarioFragment); - if (this.exceptions.staticFault()) { + if (Exceptions.staticFault(this.exceptions)) { this.addFragmentsWithoutStack( hub, ImcFragment.empty(hub), ContextFragment.readContextData(hub.callStack()), ContextFragment.executionEmptyReturnData(hub.callStack())); - } else if (this.exceptions.outOfMemoryExpansion()) { + } else if (Exceptions.outOfMemoryExpansion(this.exceptions)) { this.addFragmentsWithoutStack( hub, ImcFragment.empty(hub).callMxp(MxpCall.build(hub)), ContextFragment.executionEmptyReturnData(hub.callStack())); - } else if (this.exceptions.outOfGas()) { + } else if (Exceptions.outOfGas(this.exceptions)) { this.addFragmentsWithoutStack( hub, commonImcFragment, ContextFragment.executionEmptyReturnData(hub.callStack())); } else if (this.aborts.any()) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/EndTransaction.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/EndTransactionSection.java similarity index 87% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/EndTransaction.java rename to arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/EndTransactionSection.java index 0887558454..f95adc442e 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/EndTransaction.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/EndTransactionSection.java @@ -18,8 +18,8 @@ import net.consensys.linea.zktracer.module.hub.Hub; import net.consensys.linea.zktracer.module.hub.fragment.TraceFragment; -public class EndTransaction extends TraceSection { - public EndTransaction(Hub hub, TraceFragment... fragments) { +public class EndTransactionSection extends TraceSection { + public EndTransactionSection(Hub hub, TraceFragment... fragments) { this.addFragmentsWithoutStack(hub, fragments); } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/TraceSection.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/TraceSection.java index cd90c34029..91ba5e4444 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/TraceSection.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/section/TraceSection.java @@ -34,7 +34,7 @@ import net.consensys.linea.zktracer.runtime.stack.StackLine; @Accessors(fluent = true) -/** A TraceSection gather the trace lines linked to a single operation */ +/* A TraceSection gather the trace lines linked to a single operation */ public abstract class TraceSection { @Getter private int stackHeight = 0; @Getter private int stackHeightNew = 0; @@ -65,6 +65,7 @@ public Trace trace(Trace trace, int stackInt, int stackHeight) { /** Count the stack lines */ @Getter private int stackRowsCounter; + /** Count the non-stack lines */ private int nonStackRowsCounter; @@ -250,7 +251,7 @@ private List makeStackFragments(final Hub hub, CallFrame f) { hub, f.stack().snapshot(), new StackLine().asStackOperations(), - hub.pch().exceptions().snapshot(), + hub.pch().exceptions(), hub.pch().aborts().snapshot(), Hub.GAS_PROJECTOR.of(f.frame(), f.opCode()), f.underDeployment())); @@ -262,7 +263,7 @@ private List makeStackFragments(final Hub hub, CallFrame f) { hub, f.stack().snapshot(), line.asStackOperations(), - hub.pch().exceptions().snapshot(), + hub.pch().exceptions(), hub.pch().aborts().snapshot(), Hub.GAS_PROJECTOR.of(f.frame(), f.opCode()), f.underDeployment())); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/AbortingConditions.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/AbortingConditions.java index 0860845c89..81f7690b5b 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/AbortingConditions.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/AbortingConditions.java @@ -60,7 +60,7 @@ public void prepare(Hub hub) { this.balanceTooLow = switch (hub.currentFrame().opCode()) { case CALL, CALLCODE -> { - if (hub.pch().exceptions().none()) { + if (Exceptions.none(hub.pch().exceptions())) { final Address myAddress = hub.currentFrame().address(); final Wei myBalance = hub.messageFrame().getWorldUpdater().get(myAddress).getBalance(); @@ -72,7 +72,7 @@ public void prepare(Hub hub) { } } case CREATE, CREATE2 -> { - if (hub.pch().exceptions().none()) { + if (Exceptions.none(hub.pch().exceptions())) { final Address myAddress = hub.currentFrame().address(); final Wei myBalance = hub.messageFrame().getWorldUpdater().get(myAddress).getBalance(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/Exceptions.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/Exceptions.java index 90f8d82350..6de4f64957 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/Exceptions.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/Exceptions.java @@ -16,10 +16,8 @@ package net.consensys.linea.zktracer.module.hub.signals; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.EIP_3541_MARKER; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MAX_CODE_SIZE; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.experimental.Accessors; import net.consensys.linea.zktracer.module.hub.Hub; import net.consensys.linea.zktracer.opcode.OpCode; import net.consensys.linea.zktracer.opcode.OpCodeData; @@ -29,168 +27,91 @@ import org.hyperledger.besu.evm.frame.MessageFrame; import org.hyperledger.besu.evm.internal.Words; -/** Encode the exceptions that may be triggered byt the execution of an instruction. */ -@Getter -@RequiredArgsConstructor -@Accessors(fluent = true) -public final class Exceptions { - public static final int MAX_CODE_SIZE = 24576; - - private final Hub hub; - - private boolean invalidOpcode; - private boolean stackUnderflow; - private boolean stackOverflow; - private boolean outOfMemoryExpansion; - private boolean outOfGas; - private boolean returnDataCopyFault; - private boolean jumpFault; - private boolean staticFault; - private boolean outOfSStore; - private boolean invalidCodePrefix; - private boolean codeSizeOverflow; +/** Encode the exceptions that may be triggered by the execution of an instruction. */ +public class Exceptions { + private Exceptions() {} + + public static final short NONE = 0; // no exceptions occurred + private static final short INVALID_OPCODE = 1; // unknown opcode + private static final short STACK_UNDERFLOW = 2; // stack underflow + private static final short STACK_OVERFLOW = 4; // stack overflow + private static final short OUT_OF_MEMORY_EXPANSION = 8; // tried to use memory too far away + private static final short OUT_OF_GAS = 16; // not enough gas for instruction + private static final short RETURN_DATA_COPY_FAULT = 32; // trying to read past the RETURNDATA end + private static final short JUMP_FAULT = 64; // jumping to an invalid destination + private static final short STATIC_FAULT = + 128; // trying to execute non-static instruction in a static context + private static final short OUT_OF_SSTORE = 256; // not enough gas to execute an SSTORE + private static final short INVALID_CODE_PREFIX = 512; + private static final short CODE_SIZE_OVERFLOW = 2048; + + public static boolean stackException(final short bitmask) { + return stackOverflow(bitmask) || stackUnderflow(bitmask); + } /** - * @param invalidOpcode unknown opcode - * @param stackUnderflow stack underflow - * @param stackOverflow stack overflow - * @param outOfMemoryExpansion tried to use memory too far away - * @param outOfGas not enough gas for instruction - * @param returnDataCopyFault trying to read pas the RETURNDATA end - * @param jumpFault jumping to an invalid destination - * @param staticFault trying to execute a non-static instruction in a static context - * @param outOfSStore not enough gas to execute an SSTORE + * @return true if no stack exception has been raised */ - public Exceptions( - boolean invalidOpcode, - boolean stackUnderflow, - boolean stackOverflow, - boolean outOfMemoryExpansion, - boolean outOfGas, - boolean returnDataCopyFault, - boolean jumpFault, - boolean staticFault, - boolean outOfSStore, - boolean invalidCodePrefix, - boolean codeSizeOverflow) { - this.hub = null; - this.invalidOpcode = invalidOpcode; - this.stackUnderflow = stackUnderflow; - this.stackOverflow = stackOverflow; - this.outOfMemoryExpansion = outOfMemoryExpansion; - this.outOfGas = outOfGas; - this.returnDataCopyFault = returnDataCopyFault; - this.jumpFault = jumpFault; - this.staticFault = staticFault; - this.outOfSStore = outOfSStore; - this.invalidCodePrefix = invalidCodePrefix; - this.codeSizeOverflow = codeSizeOverflow; + public static boolean noStackException(final short bitmask) { + return !stackException(bitmask); } - @Override - public String toString() { - if (this.invalidOpcode) { - return "Invalid opcode"; - } - if (this.stackUnderflow) { - return "Stack underflow"; - } - if (this.stackOverflow) { - return "Stack overflow"; - } - if (this.outOfMemoryExpansion) { - return "Out of MXP"; - } - if (this.outOfGas) { - return "Out of gas"; - } - if (this.returnDataCopyFault) { - return "RDC fault"; - } - if (this.jumpFault) { - return "JMP fault"; - } - if (this.staticFault) { - return "Static fault"; - } - if (this.outOfSStore) { - return "Out of SSTORE"; - } - if (this.invalidCodePrefix) { - return "Invalid code prefix"; - } - if (this.codeSizeOverflow) { - return "Code size overflow"; - } - return "No exception"; + /** + * @return true if any exception flag has been raised + */ + public static boolean any(final short bitmask) { + return !none(bitmask); } - public void reset() { - this.invalidOpcode = false; - this.stackUnderflow = false; - this.stackOverflow = false; - this.outOfMemoryExpansion = false; - this.outOfGas = false; - this.returnDataCopyFault = false; - this.jumpFault = false; - this.staticFault = false; - this.outOfSStore = false; - this.invalidCodePrefix = false; - this.codeSizeOverflow = false; + /** + * @return true if no exception flag has been raised + */ + public static boolean none(final short bitmask) { + return bitmask == NONE; } - public boolean stackException() { - return this.stackUnderflow() || this.stackOverflow(); + public static boolean invalidOpcode(final short bitmask) { + return (bitmask & INVALID_OPCODE) != 0; } - /** - * @return true if no stack exception has been raised - */ - public boolean noStackException() { - return !this.stackException(); + + public static boolean stackUnderflow(final short bitmask) { + return (bitmask & STACK_UNDERFLOW) != 0; } - /** - * Creates a snapshot (a copy) of the given Exceptions object. - * - * @return a new Exceptions - */ - public Exceptions snapshot() { - return new Exceptions( - invalidOpcode, - stackUnderflow, - stackOverflow, - outOfMemoryExpansion, - outOfGas, - returnDataCopyFault, - jumpFault, - staticFault, - outOfSStore, - invalidCodePrefix, - codeSizeOverflow); + public static boolean stackOverflow(final short bitmask) { + return (bitmask & STACK_OVERFLOW) != 0; } - /** - * @return true if any exception flag has been raised - */ - public boolean any() { - return this.invalidOpcode - || this.stackUnderflow - || this.stackOverflow - || this.outOfMemoryExpansion - || this.outOfGas - || this.returnDataCopyFault - || this.jumpFault - || this.staticFault - || this.outOfSStore - || this.invalidCodePrefix - || this.codeSizeOverflow; + public static boolean outOfMemoryExpansion(final short bitmask) { + return (bitmask & OUT_OF_MEMORY_EXPANSION) != 0; } - /** - * @return true if no exception flag has been raised - */ - public boolean none() { - return !this.any(); + public static boolean outOfGas(final short bitmask) { + return (bitmask & OUT_OF_GAS) != 0; + } + + public static boolean returnDataCopyFault(final short bitmask) { + return (bitmask & RETURN_DATA_COPY_FAULT) != 0; + } + + public static boolean jumpFault(final short bitmask) { + return (bitmask & JUMP_FAULT) != 0; + } + + public static boolean staticFault(final short bitmask) { + return (bitmask & STATIC_FAULT) != 0; + } + + public static boolean outOfSStore(final short bitmask) { + return (bitmask & OUT_OF_SSTORE) != 0; + } + + public static boolean invalidCodePrefix(final short bitmask) { + return (bitmask & INVALID_CODE_PREFIX) != 0; + } + + public static boolean codeSizeOverflow(final short bitmask) { + return (bitmask & CODE_SIZE_OVERFLOW) != 0; } private static boolean isInvalidOpcode(final OpCode opCode) { @@ -286,48 +207,33 @@ private static boolean isCodeSizeOverflow(MessageFrame frame) { return deployedCode.size() > MAX_CODE_SIZE; } - public static Exceptions fromOutOfGas() { - return new Exceptions( - false, false, false, false, true, false, false, false, false, false, false); - } - /** - * Compute all the first exception that may have happened in the current frame. Wlthout multiple + * Return the first exception that may have happened in the current frame. Although multiple * exceptions may be triggered, the one minimizing the quantity of trace lines is generated. * * @param frame the context from which to compute the putative exceptions */ - public void prepare(final MessageFrame frame, GasProjector gp) { + public static short fromFrame(final Hub hub, final MessageFrame frame) { OpCode opCode = hub.opCode(); OpCodeData opCodeData = hub.opCodeData(); - this.reset(); - - this.invalidOpcode = isInvalidOpcode(opCode); - if (this.invalidOpcode) { - return; + if (isInvalidOpcode(opCode)) { + return INVALID_OPCODE; } - - this.stackUnderflow = isStackUnderflow(frame, opCodeData); - if (this.stackUnderflow) { - return; + if (isStackUnderflow(frame, opCodeData)) { + return STACK_UNDERFLOW; } - - this.stackOverflow = isStackOverflow(frame, opCodeData); - if (this.stackOverflow) { - return; + if (isStackOverflow(frame, opCodeData)) { + return STACK_OVERFLOW; } - - this.staticFault = isStaticFault(frame, opCodeData); - if (this.staticFault) { - return; + if (isStaticFault(frame, opCodeData)) { + return STATIC_FAULT; } - - this.codeSizeOverflow = isCodeSizeOverflow(frame); - if (this.codeSizeOverflow) { - return; + if (isCodeSizeOverflow(frame)) { + return CODE_SIZE_OVERFLOW; } + final GasProjector gp = Hub.GAS_PROJECTOR; switch (opCode) { case CALLDATACOPY, CODECOPY, @@ -350,63 +256,56 @@ public void prepare(final MessageFrame frame, GasProjector gp) { MLOAD, MSTORE, MSTORE8 -> { - this.outOfMemoryExpansion = isMemoryExpansionFault(frame, opCode, gp); - if (this.outOfMemoryExpansion) { - return; + if (isMemoryExpansionFault(frame, opCode, gp)) { + return OUT_OF_MEMORY_EXPANSION; } - - this.outOfGas = isOutOfGas(frame, opCode, gp); - if (this.outOfGas) { - return; + if (isOutOfGas(frame, opCode, gp)) { + return OUT_OF_GAS; } } + case RETURNDATACOPY -> { - this.returnDataCopyFault = isReturnDataCopyFault(frame, opCode); - if (this.returnDataCopyFault) { - return; + if (isReturnDataCopyFault(frame, opCode)) { + return RETURN_DATA_COPY_FAULT; } - - this.outOfMemoryExpansion = isMemoryExpansionFault(frame, opCode, gp); - if (this.outOfMemoryExpansion) { - return; + if (isMemoryExpansionFault(frame, opCode, gp)) { + return OUT_OF_MEMORY_EXPANSION; } - - this.outOfGas = isOutOfGas(frame, opCode, gp); - if (this.outOfGas) { - return; + if (isOutOfGas(frame, opCode, gp)) { + return OUT_OF_GAS; } } + case STOP -> {} + case JUMP, JUMPI -> { - this.outOfGas = isOutOfGas(frame, opCode, gp); - if (this.outOfGas) { - return; + if (isOutOfGas(frame, opCode, gp)) { + return OUT_OF_GAS; } - - this.jumpFault = isJumpFault(frame, opCode); - if (this.jumpFault) { - return; + if (isJumpFault(frame, opCode)) { + return JUMP_FAULT; } } + case SSTORE -> { - this.outOfSStore = isOutOfSStore(frame, opCode); - if (this.outOfSStore) { - return; + if (isOutOfSStore(frame, opCode)) { + return OUT_OF_SSTORE; } - - this.outOfGas = isOutOfGas(frame, opCode, gp); - if (this.outOfGas) { - return; + if (isOutOfGas(frame, opCode, gp)) { + return OUT_OF_GAS; } } + default -> { - this.outOfGas = isOutOfGas(frame, opCode, gp); - if (this.outOfGas) { - return; + if (isOutOfGas(frame, opCode, gp)) { + return OUT_OF_GAS; } } } - this.invalidCodePrefix = isInvalidCodePrefix(frame); + if (isInvalidCodePrefix(frame)) { + return INVALID_CODE_PREFIX; + } + return NONE; } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/PlatformController.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/PlatformController.java index ad8211d90b..0609ec0ef2 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/PlatformController.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/PlatformController.java @@ -27,10 +27,13 @@ @Accessors(fluent = true) public class PlatformController { private final Hub hub; + /** What other modules should be triggered for the current operation */ @Getter private final Signals signals; + /** The exceptions raised during the execution of the current operation */ - @Getter private final Exceptions exceptions; + @Getter private short exceptions; + /** The aborting conditions raised during the execution of the current operation */ @Getter private final AbortingConditions aborts; @@ -38,7 +41,7 @@ public class PlatformController { public PlatformController(final Hub hub) { this.hub = hub; - this.exceptions = new Exceptions(hub); + this.exceptions = Exceptions.NONE; this.aborts = new AbortingConditions(); this.signals = new Signals(this); this.failures = new FailureConditions(hub); @@ -47,7 +50,7 @@ public PlatformController(final Hub hub) { /** Reset all information */ public void reset() { this.signals.reset(); - this.exceptions.reset(); + this.exceptions = Exceptions.NONE; this.aborts.reset(); this.failures.reset(); } @@ -61,8 +64,8 @@ public void reset() { public void setup(MessageFrame frame) { this.reset(); - this.exceptions.prepare(frame, Hub.GAS_PROJECTOR); - if (this.exceptions.none()) { + this.exceptions |= Exceptions.fromFrame(hub, frame); + if (Exceptions.none(this.exceptions)) { this.aborts.prepare(hub); if (aborts.none()) { this.failures.prepare(frame); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/Signals.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/Signals.java index a65cd49ad3..c8dad3d638 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/Signals.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/signals/Signals.java @@ -129,34 +129,37 @@ public Signals snapshot() { */ public void prepare(MessageFrame frame, PlatformController platformController, Hub hub) { final OpCode opCode = hub.opCode(); - final Exceptions ex = platformController.exceptions(); + final short ex = platformController.exceptions(); // this.gas coincides with CONTEXT_MAY_CHANGE this.gas = - ex.any() + Exceptions.any(ex) || this.AUTOMATIC_GAS_MODULE_TRIGGER.contains(hub.opCodeData().instructionFamily()); - if (ex.stackException()) { + if (Exceptions.stackException(ex)) { return; } switch (opCode) { case CALLDATACOPY, CODECOPY -> { - this.mxp = ex.outOfMemoryExpansion() || ex.outOfGas() || ex.none(); - this.mmu = ex.none() && !frame.getStackItem(2).isZero(); + this.mxp = + Exceptions.outOfMemoryExpansion(ex) || Exceptions.outOfGas(ex) || Exceptions.none(ex); + this.mmu = Exceptions.none(ex) && !frame.getStackItem(2).isZero(); } case RETURNDATACOPY -> { - this.oob = ex.none() || ex.returnDataCopyFault(); - this.mxp = ex.none() || ex.outOfMemoryExpansion() || ex.outOfGas(); - this.mmu = ex.none() && !frame.getStackItem(2).isZero(); + this.oob = Exceptions.none(ex) || Exceptions.returnDataCopyFault(ex); + this.mxp = + Exceptions.none(ex) || Exceptions.outOfMemoryExpansion(ex) || Exceptions.outOfGas(ex); + this.mmu = Exceptions.none(ex) && !frame.getStackItem(2).isZero(); } case EXTCODECOPY -> { final boolean nonzeroSize = !frame.getStackItem(3).isZero(); - this.mxp = ex.outOfMemoryExpansion() || ex.outOfGas() || ex.none(); - this.trm = ex.outOfGas() || ex.none(); - this.mmu = ex.none() && nonzeroSize; + this.mxp = + Exceptions.outOfMemoryExpansion(ex) || Exceptions.outOfGas(ex) || Exceptions.none(ex); + this.trm = Exceptions.outOfGas(ex) || Exceptions.none(ex); + this.mmu = Exceptions.none(ex) && nonzeroSize; final Address address = Words.toAddress(frame.getStackItem(0)); final boolean targetAddressHasCode = @@ -164,13 +167,14 @@ public void prepare(MessageFrame frame, PlatformController platformController, H .map(AccountState::hasCode) .orElse(false); - this.romLex = ex.none() && nonzeroSize && targetAddressHasCode; + this.romLex = Exceptions.none(ex) && nonzeroSize && targetAddressHasCode; } case LOG0, LOG1, LOG2, LOG3, LOG4 -> { - this.mxp = ex.outOfMemoryExpansion() || ex.outOfGas() || ex.none(); + this.mxp = + Exceptions.outOfMemoryExpansion(ex) || Exceptions.outOfGas(ex) || Exceptions.none(ex); this.mmu = - ex.none() + Exceptions.none(ex) && !frame .getStackItem(1) .isZero(); // TODO do not trigger the MMU if the context is going to revert and @@ -179,13 +183,13 @@ public void prepare(MessageFrame frame, PlatformController platformController, H } case CALL, DELEGATECALL, STATICCALL, CALLCODE -> { - this.mxp = !ex.staticFault(); - this.stp = ex.outOfGas() || ex.none(); - this.oob = opCode.equals(OpCode.CALL) && ex.staticFault() || ex.none(); - this.trm = ex.outOfGas() || ex.none(); + this.mxp = !Exceptions.staticFault(ex); + this.stp = Exceptions.outOfGas(ex) || Exceptions.none(ex); + this.oob = opCode.equals(OpCode.CALL) && Exceptions.staticFault(ex) || Exceptions.none(ex); + this.trm = Exceptions.outOfGas(ex) || Exceptions.none(ex); final boolean triggersAbortingCondition = - ex.none() && this.platformController.aborts().any(); + Exceptions.none(ex) && this.platformController.aborts().any(); final Address target = Words.toAddress(frame.getStackItem(1)); final boolean targetAddressHasNonEmptyCode = @@ -193,37 +197,46 @@ public void prepare(MessageFrame frame, PlatformController platformController, H .map(AccountState::hasCode) .orElse(false); - this.romLex = ex.none() && !triggersAbortingCondition && targetAddressHasNonEmptyCode; - this.ecData = ex.none() && EC_PRECOMPILES.contains(target); + this.romLex = + Exceptions.none(ex) && !triggersAbortingCondition && targetAddressHasNonEmptyCode; + this.ecData = Exceptions.none(ex) && EC_PRECOMPILES.contains(target); this.exp = - ex.none() && this.platformController.aborts().none() && target.equals(Address.MODEXP); + Exceptions.none(ex) + && this.platformController.aborts().none() + && target.equals(Address.MODEXP); } case CREATE, CREATE2 -> { - boolean triggersAbortingCondition = ex.none() && this.platformController.aborts().any(); + boolean triggersAbortingCondition = + Exceptions.none(ex) && this.platformController.aborts().any(); boolean triggersFailureCondition = false; - if (ex.none() && this.platformController.aborts().none()) { + if (Exceptions.none(ex) && this.platformController.aborts().none()) { triggersFailureCondition = this.platformController.failures().any(); } final boolean nonzeroSize = !frame.getStackItem(2).isZero(); final boolean isCreate2 = opCode == OpCode.CREATE2; - this.mxp = !ex.staticFault(); - this.stp = ex.outOfGas() || ex.none(); - this.oob = ex.none(); - this.rlpAddr = ex.none() && !triggersAbortingCondition; - this.hashInfo = ex.none() && !triggersAbortingCondition && nonzeroSize && isCreate2; + this.mxp = !Exceptions.staticFault(ex); + this.stp = Exceptions.outOfGas(ex) || Exceptions.none(ex); + this.oob = Exceptions.none(ex); + this.rlpAddr = Exceptions.none(ex) && !triggersAbortingCondition; + this.hashInfo = + Exceptions.none(ex) && !triggersAbortingCondition && nonzeroSize && isCreate2; this.romLex = - ex.none() && !triggersAbortingCondition && nonzeroSize && !triggersFailureCondition; + Exceptions.none(ex) + && !triggersAbortingCondition + && nonzeroSize + && !triggersFailureCondition; this.mmu = this.hashInfo || this.romLex; } case REVERT -> { - this.mxp = ex.outOfMemoryExpansion() || ex.outOfGas() || ex.none(); + this.mxp = + Exceptions.outOfMemoryExpansion(ex) || Exceptions.outOfGas(ex) || Exceptions.none(ex); this.mmu = - ex.none() + Exceptions.none(ex) && !frame.getStackItem(1).isZero() && !hub.currentFrame().requestedReturnDataTarget().isEmpty(); } @@ -234,50 +247,54 @@ public void prepare(MessageFrame frame, PlatformController platformController, H // WARN: Static part, other modules may be dynamically requested in the hub this.mxp = - ex.outOfMemoryExpansion() || ex.outOfGas() || ex.invalidCodePrefix() || ex.none(); - this.oob = isDeployment && (ex.codeSizeOverflow() || ex.none()); + Exceptions.outOfMemoryExpansion(ex) + || Exceptions.outOfGas(ex) + || Exceptions.invalidCodePrefix(ex) + || Exceptions.none(ex); + this.oob = isDeployment && (Exceptions.codeSizeOverflow(ex) || Exceptions.none(ex)); this.mmu = - (isDeployment && ex.invalidCodePrefix()) - || (isDeployment && ex.none() && sizeNonZero) + (isDeployment && Exceptions.invalidCodePrefix(ex)) + || (isDeployment && Exceptions.none(ex) && sizeNonZero) || (!isDeployment - && ex.none() + && Exceptions.none(ex) && sizeNonZero && !hub.currentFrame().requestedReturnDataTarget().isEmpty()); - this.romLex = this.hashInfo = isDeployment && ex.none() && sizeNonZero; + this.romLex = this.hashInfo = isDeployment && Exceptions.none(ex) && sizeNonZero; } case EXP -> { this.exp = true; - this.mul = !ex.outOfGas(); + this.mul = !Exceptions.outOfGas(ex); } // other opcodes - case ADD, SUB -> this.add = !ex.outOfGas(); - case MUL -> this.mul = !ex.outOfGas(); - case DIV, SDIV, MOD, SMOD -> this.mod = !ex.outOfGas(); - case ADDMOD, MULMOD -> this.ext = !ex.outOfGas(); - case LT, GT, SLT, SGT, EQ, ISZERO -> this.wcp = !ex.outOfGas(); - case AND, OR, XOR, NOT, SIGNEXTEND, BYTE -> this.bin = !ex.outOfGas(); - case SHL, SHR, SAR -> this.shf = !ex.outOfGas(); + case ADD, SUB -> this.add = !Exceptions.outOfGas(ex); + case MUL -> this.mul = !Exceptions.outOfGas(ex); + case DIV, SDIV, MOD, SMOD -> this.mod = !Exceptions.outOfGas(ex); + case ADDMOD, MULMOD -> this.ext = !Exceptions.outOfGas(ex); + case LT, GT, SLT, SGT, EQ, ISZERO -> this.wcp = !Exceptions.outOfGas(ex); + case AND, OR, XOR, NOT, SIGNEXTEND, BYTE -> this.bin = !Exceptions.outOfGas(ex); + case SHL, SHR, SAR -> this.shf = !Exceptions.outOfGas(ex); case SHA3 -> { this.mxp = true; - this.hashInfo = ex.none() && !frame.getStackItem(1).isZero(); + this.hashInfo = Exceptions.none(ex) && !frame.getStackItem(1).isZero(); this.mmu = this.hashInfo; } case BALANCE, EXTCODESIZE, EXTCODEHASH, SELFDESTRUCT -> this.trm = true; case MLOAD, MSTORE, MSTORE8 -> { this.mxp = true; - this.mmu = ex.none(); + this.mmu = Exceptions.none(ex); } case CALLDATALOAD -> { this.oob = true; this.mmu = - ex.none() && frame.getInputData().size() > Words.clampedToLong(frame.getStackItem(0)); + Exceptions.none(ex) + && frame.getInputData().size() > Words.clampedToLong(frame.getStackItem(0)); } case SLOAD -> {} case SSTORE, JUMP, JUMPI -> this.oob = true; - case MSIZE -> this.mxp = ex.none(); - case BLOCKHASH -> this.blockhash = ex.none(); + case MSIZE -> this.mxp = Exceptions.none(ex); + case BLOCKHASH -> this.blockhash = Exceptions.none(ex); } } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/transients/OperationAncillaries.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/transients/OperationAncillaries.java index fb7a212414..3d23b0cd61 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/transients/OperationAncillaries.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/transients/OperationAncillaries.java @@ -16,7 +16,9 @@ package net.consensys.linea.zktracer.module.hub.transients; import static net.consensys.linea.zktracer.module.UtilCalculator.allButOneSixtyFourth; +import static net.consensys.linea.zktracer.types.AddressUtils.isPrecompile; +import com.google.common.base.Preconditions; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.consensys.linea.zktracer.module.hub.Hub; @@ -25,6 +27,7 @@ import net.consensys.linea.zktracer.types.EWord; import net.consensys.linea.zktracer.types.MemorySpan; import org.apache.tuweni.bytes.Bytes; +import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.evm.frame.MessageFrame; import org.hyperledger.besu.evm.internal.Words; @@ -57,23 +60,22 @@ private static Bytes maybeShadowReadMemory(final MemorySpan span, final MessageF public long gasAllowanceForCall() { final OpCode opCode = hub.opCode(); - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final long gas = Words.clampedToLong(hub.messageFrame().getStackItem(0)); - EWord value = EWord.ZERO; - if (opCode == OpCode.CALL || opCode == OpCode.CALLCODE) { - value = EWord.of(hub.messageFrame().getStackItem(2)); - } - final long stipend = value.isZero() ? 0 : GasConstants.G_CALL_STIPEND.cost(); - final long upfrontCost = Hub.GAS_PROJECTOR.of(hub.messageFrame(), opCode).total(); - return stipend - + Math.max( - Words.unsignedMin( - allButOneSixtyFourth(hub.messageFrame().getRemainingGas() - upfrontCost), gas), - 0); + if (opCode.isCall()) { + final long gas = Words.clampedToLong(hub.messageFrame().getStackItem(0)); + EWord value = EWord.ZERO; + if (opCode == OpCode.CALL || opCode == OpCode.CALLCODE) { + value = EWord.of(hub.messageFrame().getStackItem(2)); } - default -> throw new IllegalStateException("not a CALL"); + final long stipend = value.isZero() ? 0 : GasConstants.G_CALL_STIPEND.cost(); + final long upfrontCost = Hub.GAS_PROJECTOR.of(hub.messageFrame(), opCode).total(); + return stipend + + Math.max( + Words.unsignedMin( + allButOneSixtyFourth(hub.messageFrame().getRemainingGas() - upfrontCost), gas), + 0); } + + throw new IllegalStateException("not a CALL"); } /** @@ -179,10 +181,24 @@ public MemorySpan returnDataRequestedSegment() { public static MemorySpan returnDataSegment(final MessageFrame frame) { switch (OpCode.of(frame.getCurrentOperation().getOpcode())) { case RETURN, REVERT -> { + // TODO: make sure this isn't triggered when RETURNing from a CREATE(2) + // or when RETURNing from the root context of a deployment transaction. + // Recall that this case leads to the deployment of bytecode and produces + // empty return data in the caller context. long offset = Words.clampedToLong(frame.getStackItem(0)); long length = Words.clampedToLong(frame.getStackItem(1)); return MemorySpan.fromStartLength(offset, length); } + case CALL, CALLCODE, DELEGATECALL, STATICCALL -> { + Address target = Words.toAddress(frame.getStackItem(1)); + if (isPrecompile(target)) { + return MemorySpan.fromStartLength(0, 0); + } + Preconditions.checkArgument(isPrecompile(target)); // useless (?) sanity check + // TODO: this will not work for MODEXP as return data starts at offset + // 512 - modulusByteSize + return MemorySpan.fromStartLength(0, frame.getReturnData().size()); + } default -> throw new IllegalArgumentException( "returnDataRequestedSegment called outside of a RETURN/REVERT"); } @@ -199,9 +215,9 @@ public MemorySpan returnDataSegment() { } /** - * Return the bytes of the calldata if the current operation is a call, throws otherwise. + * Return the bytes of the return data if the current operation is a call, throws otherwise. * - * @return the calldata content + * @return the return data content */ public Bytes returnData() { final MemorySpan returnDataSegment = returnDataSegment(); @@ -217,6 +233,7 @@ public Bytes returnData() { return Bytes.EMPTY; } + // TODO: this WON'T work for precompiles, they don't have memory. return maybeShadowReadMemory(returnDataSegment, hub.messageFrame()); } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/transients/Transients.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/transients/Transients.java index 490a4cee82..2916331283 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/transients/Transients.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/hub/transients/Transients.java @@ -28,10 +28,13 @@ @Accessors(fluent = true) public class Transients { private final Hub hub; + /** stores conflation-lived information */ final Conflation conflation = new Conflation(); + /** stores block-lived information */ final Block block = new Block(); + /** provides operation-related information */ final OperationAncillaries op; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/Keccak.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/Keccak.java index d0f214e388..6cc5e7cf43 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/Keccak.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/Keccak.java @@ -15,20 +15,25 @@ package net.consensys.linea.zktracer.module.limits; -import static org.hyperledger.besu.evm.internal.Words.clampedToLong; - import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List; import com.google.common.base.Preconditions; +import lombok.Getter; import lombok.RequiredArgsConstructor; import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.module.Module; import net.consensys.linea.zktracer.module.hub.Hub; +import net.consensys.linea.zktracer.module.hub.signals.Exceptions; +import net.consensys.linea.zktracer.module.hub.signals.PlatformController; import net.consensys.linea.zktracer.module.limits.precompiles.EcRecoverEffectiveCall; +import net.consensys.linea.zktracer.module.shakiradata.ShakiraData; +import net.consensys.linea.zktracer.module.shakiradata.ShakiraDataOperation; +import net.consensys.linea.zktracer.module.shakiradata.ShakiraPrecompileType; import net.consensys.linea.zktracer.opcode.OpCode; +import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.evm.frame.MessageFrame; import org.hyperledger.besu.evm.internal.Words; @@ -39,13 +44,18 @@ public class Keccak implements Module { private static final int L1_MSG_INDICES_BYTES = 8; private static final int L1_TIMESTAMPS_BYTES = 8; private static final int PUBKEY_BYTES = 64; + private static final int KECCAK_BIT_RATE = 1088; + private static final int KECCAK_BYTE_RATE = KECCAK_BIT_RATE / 8; // TODO: find correct name private final Hub hub; private final EcRecoverEffectiveCall ecRec; private final L2Block l2Block; - private final Deque> deployedCodesizes = new ArrayDeque<>(); + @Getter private final ShakiraData shakiraData; + + private final Deque> deployedCodeSizes = new ArrayDeque<>(); private final Deque> sha3Sizes = new ArrayDeque<>(); + private final Deque> create2Sizes = new ArrayDeque<>(); @Override public String moduleKey() { @@ -54,22 +64,20 @@ public String moduleKey() { @Override public void enterTransaction() { - this.deployedCodesizes.push(new ArrayList<>(5)); - this.sha3Sizes.push(new ArrayList<>(100)); + this.deployedCodeSizes.push(new ArrayList<>()); + this.sha3Sizes.push(new ArrayList<>()); + this.create2Sizes.push(new ArrayList<>()); } @Override public void popTransaction() { - this.deployedCodesizes.pop(); + this.deployedCodeSizes.pop(); this.sha3Sizes.pop(); - } - - public static int numKeccak(int x) { - return (x + 136) / 136; + this.create2Sizes.pop(); } private static int numKeccak(long x) { - final long r = (x + 136) / 136; + final long r = (x + KECCAK_BYTE_RATE - 1) / KECCAK_BYTE_RATE; Preconditions.checkState(r < Integer.MAX_VALUE, "demented KECCAK"); return (int) r; } @@ -78,18 +86,40 @@ private static int numKeccak(long x) { public void tracePreOpcode(final MessageFrame frame) { final OpCode opCode = this.hub.opCode(); - // Capture calls to SHA3 - if (opCode == OpCode.SHA3) { - if (frame.stackSize() > 1) { - final long sha3Size = Words.clampedToLong(frame.getStackItem(1)); - this.sha3Sizes.peek().add(sha3Size); + final PlatformController pch = this.hub.pch(); + + if (Exceptions.none(pch.exceptions())) { + // Capture calls to SHA3. + if (opCode == OpCode.SHA3) { + callShakira(frame, 0, 1, this.sha3Sizes); + } + + // Capture contract deployment + // TODO: compute the gas cost if we are under deployment. + if (opCode == OpCode.RETURN && hub.currentFrame().underDeployment()) { + callShakira(frame, 0, 1, this.deployedCodeSizes); + } + + if (opCode == OpCode.CREATE2 && pch.aborts().none()) { + callShakira(frame, 1, 2, this.create2Sizes); } } + } + + private void callShakira( + final MessageFrame frame, + final int codeOffsetStackItemOffset, + final int codeSizeStackItemOffset, + final Deque> codeSizes) { + final long codeSize = Words.clampedToLong(frame.getStackItem(codeSizeStackItemOffset)); + codeSizes.peek().add(codeSize); + + if (codeSize != 0) { + final long codeOffset = Words.clampedToLong(frame.getStackItem(codeOffsetStackItemOffset)); + final Bytes byteCode = frame.shadowReadMemory(codeOffset, codeSize); - // Capture contract deployment - if (opCode == OpCode.RETURN && hub.currentFrame().underDeployment() && frame.stackSize() > 1) { - final long codeSize = clampedToLong(frame.getStackItem(1)); - this.deployedCodesizes.peek().add(codeSize); + this.shakiraData.call( + new ShakiraDataOperation(hub.stamp(), ShakiraPrecompileType.KECCAK, byteCode)); } } @@ -107,7 +137,7 @@ public int lineCount() { // accurate? If this is actually the same data then we should not need to // prove it twice. If the second time the data is hashed with a few extra // bytes this should be accounted for : numKeccak(l) + numKeccak(l + extra) - + this.deployedCodesizes.stream().flatMap(List::stream).mapToInt(Keccak::numKeccak).sum() + + this.deployedCodeSizes.stream().flatMap(List::stream).mapToInt(Keccak::numKeccak).sum() // From ecRecover precompiles, // This accounts for the keccak of the recovered public keys to derive the // addresses. This also accounts for the transactions signatures diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/L2Block.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/L2Block.java index 2b384aee0b..0516714e23 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/L2Block.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/L2Block.java @@ -47,12 +47,13 @@ public class L2Block implements Module { /** The byte size of the RLP-encoded transaction of the conflation */ @Getter private final Deque sizesRlpEncodedTxs = new ArrayDeque<>(); + /** The byte size of the L2->L1 logs messages of the conflation */ @Getter private final Deque> l2l1LogSizes = new ArrayDeque<>(); @Override public String moduleKey() { - return "BLOCK_L1SIZE"; + return "BLOCK_L1_SIZE"; } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/L2L1Logs.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/L2L1Logs.java index 7a6b11d9ce..ad7ecb9b4e 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/L2L1Logs.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/L2L1Logs.java @@ -27,7 +27,7 @@ public class L2L1Logs implements Module { @Override public String moduleKey() { - return "BLOCK_L2L1LOGS"; + return "BLOCK_L2_L1_LOGS"; } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/BlakeEffectiveCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/BlakeEffectiveCall.java new file mode 100644 index 0000000000..dccbeef227 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/BlakeEffectiveCall.java @@ -0,0 +1,53 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.limits.precompiles; + +import java.util.List; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import net.consensys.linea.zktracer.ColumnHeader; +import net.consensys.linea.zktracer.module.Module; + +@RequiredArgsConstructor +public final class BlakeEffectiveCall implements Module { + @Getter private final BlakeRounds blakeRounds; + + @Override + public String moduleKey() { + return "PRECOMPILE_BLAKE_EFFECTIVE_CALLS"; + } + + @Override + public void enterTransaction() {} + + @Override + public void popTransaction() {} + + @Override + public int lineCount() { + int r = 0; + for (BlakeLimit count : this.blakeRounds.counts()) { + r += count.numberOfEffectiveCalls(); + } + return r; + } + + @Override + public List columnsHeaders() { + throw new UnsupportedOperationException("should never be called"); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingLimit.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/BlakeLimit.java similarity index 90% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingLimit.java rename to arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/BlakeLimit.java index b2af67b2e6..d5c0e5fbb3 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingLimit.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/BlakeLimit.java @@ -15,4 +15,4 @@ package net.consensys.linea.zktracer.module.limits.precompiles; -record EcPairingLimit(int nPrecompileCall, long nMillerLoop) {} +record BlakeLimit(int numberOfRounds, int numberOfEffectiveCalls) {} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/Blake2fRounds.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/BlakeRounds.java similarity index 59% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/Blake2fRounds.java rename to arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/BlakeRounds.java index 7f0c06bdad..2bb82e5f9b 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/Blake2fRounds.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/BlakeRounds.java @@ -16,16 +16,18 @@ package net.consensys.linea.zktracer.module.limits.precompiles; import java.nio.MappedByteBuffer; +import java.util.ArrayDeque; +import java.util.Deque; import java.util.List; -import java.util.Stack; import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.experimental.Accessors; import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.module.Module; -import net.consensys.linea.zktracer.module.blake2fmodexpdata.Blake2fComponents; -import net.consensys.linea.zktracer.module.blake2fmodexpdata.Blake2fModexpData; -import net.consensys.linea.zktracer.module.blake2fmodexpdata.Blake2fModexpDataOperation; +import net.consensys.linea.zktracer.module.blake2fmodexpdata.BlakeComponents; +import net.consensys.linea.zktracer.module.blake2fmodexpdata.BlakeModexpData; +import net.consensys.linea.zktracer.module.blake2fmodexpdata.BlakeModexpDataOperation; import net.consensys.linea.zktracer.module.hub.Hub; import net.consensys.linea.zktracer.module.hub.precompiles.Blake2fMetadata; import net.consensys.linea.zktracer.module.hub.precompiles.PrecompileMetadata; @@ -38,24 +40,28 @@ import org.hyperledger.besu.evm.internal.Words; @RequiredArgsConstructor -public final class Blake2fRounds implements Module { +@Accessors(fluent = true) +public final class BlakeRounds implements Module { private static final int BLAKE2f_INPUT_SIZE = 213; private final Hub hub; - @Getter private final Blake2fModexpData blake2fModexpData; + @Getter private final BlakeModexpData blakeModexpData; - private long lastDataCallHubStamp = 0; - - private final Stack counts = new Stack<>(); + @Getter private final Deque counts = new ArrayDeque<>(); @Override public String moduleKey() { - return "PRECOMPILE_BLAKE2F_ROUNDS"; + return "PRECOMPILE_BLAKE_ROUNDS"; + } + + @Override + public void traceStartConflation(final long blockCount) { + counts.push(new BlakeLimit(0, 0)); } @Override public void enterTransaction() { - counts.push(0); + counts.push(counts.getFirst()); } @Override @@ -67,18 +73,15 @@ public static boolean isHubFailure(final Hub hub) { final OpCode opCode = hub.opCode(); final MessageFrame frame = hub.messageFrame(); - return switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(frame.getStackItem(1)); - if (target.equals(Address.BLAKE2B_F_COMPRESSION)) { - final long length = hub.transients().op().callDataSegment().length(); - yield length != BLAKE2f_INPUT_SIZE; - } else { - yield false; - } + if (opCode.isCall()) { + final Address target = Words.toAddress(frame.getStackItem(1)); + if (target.equals(Address.BLAKE2B_F_COMPRESSION)) { + final long length = hub.transients().op().callDataSegment().length(); + return length != BLAKE2f_INPUT_SIZE; } - default -> false; - }; + } + + return false; } public static boolean isRamFailure(final Hub hub) { @@ -89,25 +92,22 @@ public static boolean isRamFailure(final Hub hub) { return false; } - return switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(frame.getStackItem(1)); - if (target.equals(Address.BLAKE2B_F_COMPRESSION)) { - final long offset = hub.transients().op().callDataSegment().offset(); - final int f = - frame.shadowReadMemory(offset, BLAKE2f_INPUT_SIZE).get(BLAKE2f_INPUT_SIZE - 1); - final int r = - frame - .shadowReadMemory(offset, BLAKE2f_INPUT_SIZE) - .slice(0, 4) - .toInt(); // The number of round is equal to the gas to pay - yield !((f == 0 || f == 1) && hub.transients().op().gasAllowanceForCall() >= r); - } else { - yield false; - } + if (opCode.isCall()) { + final Address target = Words.toAddress(frame.getStackItem(1)); + if (target.equals(Address.BLAKE2B_F_COMPRESSION)) { + final long offset = hub.transients().op().callDataSegment().offset(); + final int f = + frame.shadowReadMemory(offset, BLAKE2f_INPUT_SIZE).get(BLAKE2f_INPUT_SIZE - 1); + final int r = + frame + .shadowReadMemory(offset, BLAKE2f_INPUT_SIZE) + .slice(0, 4) + .toInt(); // The number of round is equal to the gas to pay + return !((f == 0 || f == 1) && hub.transients().op().gasAllowanceForCall() >= r); } - default -> false; - }; + } + + return false; } public static long gasCost(final Hub hub) { @@ -135,23 +135,21 @@ public static long gasCost(final Hub hub) { public static PrecompileMetadata metadata(final Hub hub) { final OpCode opCode = hub.opCode(); - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(hub.messageFrame().getStackItem(1)); - if (target.equals(Address.BLAKE2B_F_COMPRESSION)) { - final long length = hub.transients().op().callDataSegment().length(); - - if (length == BLAKE2f_INPUT_SIZE) { - final int f = hub.transients().op().callData().get(BLAKE2f_INPUT_SIZE - 1); - if (f == 0 || f == 1) { - final int r = - hub.transients() - .op() - .callData() - .slice(0, 4) - .toInt(); // The number of round is equal to the gas to pay - return new Blake2fMetadata(r, f); - } + if (opCode.isCall()) { + final Address target = Words.toAddress(hub.messageFrame().getStackItem(1)); + if (target.equals(Address.BLAKE2B_F_COMPRESSION)) { + final long length = hub.transients().op().callDataSegment().length(); + + if (length == BLAKE2f_INPUT_SIZE) { + final int f = hub.transients().op().callData().get(BLAKE2f_INPUT_SIZE - 1); + if (f == 0 || f == 1) { + final int r = + hub.transients() + .op() + .callData() + .slice(0, 4) + .toInt(); // The number of round is equal to the gas to pay + return new Blake2fMetadata(r, f); } } } @@ -164,7 +162,7 @@ public static PrecompileMetadata metadata(final Hub hub) { public void tracePreOpcode(MessageFrame frame) { final OpCode opCode = hub.opCode(); - if (opCode.isAnyOf(OpCode.CALL, OpCode.STATICCALL, OpCode.DELEGATECALL, OpCode.CALLCODE)) { + if (opCode.isCall()) { final Address target = Words.toAddress(frame.getStackItem(1)); if (target.equals(Address.BLAKE2B_F_COMPRESSION)) { @@ -179,17 +177,17 @@ public void tracePreOpcode(MessageFrame frame) { final int rInt = r.toInt(); - final Bytes data = inputData.slice(4, BLAKE2f_INPUT_SIZE - 4); - if (opInfo.gasAllowanceForCall() >= rInt) { - this.lastDataCallHubStamp = - this.blake2fModexpData.call( - new Blake2fModexpDataOperation( - hub.stamp(), - lastDataCallHubStamp, - null, - new Blake2fComponents(inputData, data, r, Bytes.of(f)))); - this.counts.push(this.counts.pop() + rInt); + final Bytes data = inputData.slice(4, BLAKE2f_INPUT_SIZE - 5); + this.blakeModexpData.call( + new BlakeModexpDataOperation( + hub.stamp(), null, new BlakeComponents(data, r, Bytes.of(f)))); + + final BlakeLimit currentLimit = this.counts.pop(); + this.counts.push( + new BlakeLimit( + currentLimit.numberOfRounds() + rInt, + currentLimit.numberOfEffectiveCalls() + 1)); } } } @@ -199,11 +197,12 @@ public void tracePreOpcode(MessageFrame frame) { @Override public int lineCount() { - int r = 0; - for (int i = 0; i < this.counts.size(); i++) { - r += this.counts.get(i); + final long totalR = counts.stream().mapToLong(BlakeLimit::numberOfRounds).sum(); + if (totalR > Integer.MAX_VALUE) { + throw new RuntimeException("Ludicrous BlakeLimit calls"); } - return r; + + return (int) totalR; } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcAddEffectiveCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcAddEffectiveCall.java index 5228e85a6e..e3022205e6 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcAddEffectiveCall.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcAddEffectiveCall.java @@ -40,7 +40,7 @@ public final class EcAddEffectiveCall implements Module { @Override public String moduleKey() { - return "PRECOMPILE_ECADD_EFFECTIVE_CALL"; + return "PRECOMPILE_ECADD_EFFECTIVE_CALLS"; } private static final int PRECOMPILE_GAS_FEE = 150; // cf EIP-1108 @@ -59,13 +59,11 @@ public void popTransaction() { public void tracePreOpcode(MessageFrame frame) { final OpCode opCode = hub.opCode(); - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(frame.getStackItem(1)); - if (target.equals(Address.ALTBN128_ADD) - && hub.transients().op().gasAllowanceForCall() >= PRECOMPILE_GAS_FEE) { - this.counts.push(this.counts.pop() + 1); - } + if (opCode.isCall()) { + final Address target = Words.toAddress(frame.getStackItem(1)); + if (target.equals(Address.ALTBN128_ADD) + && hub.transients().op().gasAllowanceForCall() >= PRECOMPILE_GAS_FEE) { + this.counts.push(this.counts.pop() + 1); } } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcMulEffectiveCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcMulEffectiveCall.java index d776fc28c7..a1878520d0 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcMulEffectiveCall.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcMulEffectiveCall.java @@ -40,7 +40,7 @@ public final class EcMulEffectiveCall implements Module { @Override public String moduleKey() { - return "PRECOMPILE_ECMUL_EFFECTIVE_CALL"; + return "PRECOMPILE_ECMUL_EFFECTIVE_CALLS"; } private static final int PRECOMPILE_GAS_FEE = 6000; // cf EIP-1108 @@ -59,15 +59,12 @@ public void popTransaction() { public void tracePreOpcode(MessageFrame frame) { final OpCode opCode = hub.opCode(); - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(frame.getStackItem(1)); - if (target.equals(Address.ALTBN128_MUL) - && hub.transients().op().gasAllowanceForCall() >= PRECOMPILE_GAS_FEE) { - this.counts.push(this.counts.pop() + 1); - } + if (opCode.isCall()) { + final Address target = Words.toAddress(frame.getStackItem(1)); + if (target.equals(Address.ALTBN128_MUL) + && hub.transients().op().gasAllowanceForCall() >= PRECOMPILE_GAS_FEE) { + this.counts.push(this.counts.pop() + 1); } - default -> {} } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingCallEffectiveCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingCallEffectiveCall.java deleted file mode 100644 index 5f1d5f3303..0000000000 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingCallEffectiveCall.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright Consensys Software Inc. - * - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package net.consensys.linea.zktracer.module.limits.precompiles; - -import static net.consensys.linea.zktracer.CurveOperations.isOnC1; -import static net.consensys.linea.zktracer.CurveOperations.isOnG2; - -import java.nio.MappedByteBuffer; -import java.util.List; -import java.util.Stack; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import net.consensys.linea.zktracer.ColumnHeader; -import net.consensys.linea.zktracer.module.Module; -import net.consensys.linea.zktracer.module.hub.Hub; -import net.consensys.linea.zktracer.opcode.OpCode; -import org.apache.tuweni.bytes.Bytes; -import org.hyperledger.besu.datatypes.Address; -import org.hyperledger.besu.evm.frame.MessageFrame; -import org.hyperledger.besu.evm.internal.Words; - -@Slf4j -@RequiredArgsConstructor -public final class EcPairingCallEffectiveCall implements Module { - private final Hub hub; - @Getter private final Stack counts = new Stack<>(); - private static final int PRECOMPILE_BASE_GAS_FEE = 45_000; // cf EIP-1108 - private static final int PRECOMPILE_MILLER_LOOP_GAS_FEE = 34_000; // cf EIP-1108 - private static final int ECPAIRING_NB_BYTES_PER_MILLER_LOOP = 192; - - @Override - public String moduleKey() { - return "PRECOMPILE_ECPAIRING_EFFECTIVE_CALL"; - } - - @Override - public void enterTransaction() { - counts.push(new EcPairingLimit(0, 0)); - } - - @Override - public void popTransaction() { - counts.pop(); - } - - public static boolean isHubFailure(final Hub hub) { - final OpCode opCode = hub.opCode(); - final MessageFrame frame = hub.messageFrame(); - - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(frame.getStackItem(1)); - if (target.equals(Address.ALTBN128_PAIRING)) { - long length = hub.transients().op().callDataSegment().length(); - if (length % 192 != 0) { - return true; - } - final long pairingCount = length / ECPAIRING_NB_BYTES_PER_MILLER_LOOP; - - return hub.transients().op().gasAllowanceForCall() - < PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_MILLER_LOOP_GAS_FEE * pairingCount; - } - } - default -> {} - } - - return false; - } - - public static boolean isRamFailure(final Hub hub) { - final MessageFrame frame = hub.messageFrame(); - long length = hub.transients().op().callDataSegment().length(); - - if (length == 0) { - return true; - } - - for (int i = 0; i < length; i += 192) { - final Bytes coordinates = frame.shadowReadMemory(i, 192); - if (!isOnC1(coordinates.slice(0, 64)) || !isOnG2(coordinates.slice(64, 128))) { - return true; - } - } - - return false; - } - - public static long gasCost(final Hub hub) { - final OpCode opCode = hub.opCode(); - final MessageFrame frame = hub.messageFrame(); - - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(frame.getStackItem(1)); - if (target.equals(Address.ALTBN128_PAIRING)) { - final long length = hub.transients().op().callDataSegment().length(); - final long nMillerLoop = (length / ECPAIRING_NB_BYTES_PER_MILLER_LOOP); - if (nMillerLoop * ECPAIRING_NB_BYTES_PER_MILLER_LOOP != length) { - return 0; - } - - return PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_MILLER_LOOP_GAS_FEE * nMillerLoop; - } - } - } - - return 0; - } - - @Override - public void tracePreOpcode(MessageFrame frame) { - final OpCode opCode = hub.opCode(); - - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(frame.getStackItem(1)); - if (target.equals(Address.ALTBN128_PAIRING)) { - long length = hub.transients().op().callDataSegment().length(); - - final long nMillerLoop = (length / ECPAIRING_NB_BYTES_PER_MILLER_LOOP); - if (nMillerLoop * ECPAIRING_NB_BYTES_PER_MILLER_LOOP != length) { - log.warn("[ECPairing] Argument is not a right size: " + length); - return; - } - - if (hub.transients().op().gasAllowanceForCall() - >= PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_MILLER_LOOP_GAS_FEE * nMillerLoop) { - final EcPairingLimit lastEcpairingLimit = this.counts.pop(); - this.counts.push( - new EcPairingLimit( - lastEcpairingLimit.nPrecompileCall() + 1, - lastEcpairingLimit.nMillerLoop() + nMillerLoop)); - } - } - } - default -> {} - } - } - - @Override - public int lineCount() { - int r = 0; - for (int i = 0; i < this.counts.size(); i++) { - r += this.counts.get(i).nPrecompileCall(); - } - return r; - } - - @Override - public List columnsHeaders() { - throw new IllegalStateException("should never be called"); - } - - @Override - public void commit(List buffers) { - throw new IllegalStateException("should never be called"); - } -} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingFinalExponentiations.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingFinalExponentiations.java new file mode 100644 index 0000000000..3f6c9d8a49 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingFinalExponentiations.java @@ -0,0 +1,360 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.limits.precompiles; + +import static net.consensys.linea.zktracer.CurveOperations.*; + +import java.math.BigInteger; +import java.nio.MappedByteBuffer; +import java.util.List; +import java.util.Stack; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.experimental.Accessors; +import lombok.extern.slf4j.Slf4j; +import net.consensys.linea.zktracer.ColumnHeader; +import net.consensys.linea.zktracer.module.Module; +import net.consensys.linea.zktracer.module.hub.Hub; +import net.consensys.linea.zktracer.opcode.OpCode; +import net.consensys.linea.zktracer.types.MemorySpan; +import org.apache.tuweni.bytes.Bytes; +import org.hyperledger.besu.crypto.altbn128.AltBn128Fq2Point; +import org.hyperledger.besu.crypto.altbn128.AltBn128Point; +import org.hyperledger.besu.crypto.altbn128.Fq; +import org.hyperledger.besu.crypto.altbn128.Fq2; +import org.hyperledger.besu.datatypes.Address; +import org.hyperledger.besu.evm.frame.MessageFrame; +import org.hyperledger.besu.evm.internal.Words; + +@Slf4j +@RequiredArgsConstructor +@Accessors(fluent = true) +public final class EcPairingFinalExponentiations implements Module { + private final Hub hub; + @Getter private final Stack counts = new Stack<>(); + private static final int PRECOMPILE_BASE_GAS_FEE = 45_000; // cf EIP-1108 + private static final int PRECOMPILE_MILLER_LOOP_GAS_FEE = 34_000; // cf EIP-1108 + private static final int ECPAIRING_NB_BYTES_PER_MILLER_LOOP = 192; + private static final int ECPAIRING_NB_BYTES_PER_SMALL_POINT = 64; + private static final int ECPAIRING_NB_BYTES_PER_LARGE_POINT = 128; + + @Override + public String moduleKey() { + return "PRECOMPILE_ECPAIRING_FINAL_EXPONENTIATIONS"; + } + + @Override + public void enterTransaction() { + counts.push(new EcPairingTallier(0, 0, 0)); + } + + @Override + public void popTransaction() { + counts.pop(); + } + + @Override + public int lineCount() { + int r = 0; + for (EcPairingTallier count : this.counts) { + r += (int) count.numberOfFinalExponentiations(); + } + return r; + } + + @Override + public List columnsHeaders() { + throw new UnsupportedOperationException("should never be called"); + } + + @Override + public void commit(List buffers) { + throw new UnsupportedOperationException("should never be called"); + } + + @Override + public void tracePreOpcode(MessageFrame frame) { + + if (irrelevantOperation(frame)) { + return; + } + + final MemorySpan callDataSpan = hub.transients().op().callDataSegment(); + final long callDataSize = callDataSpan.length(); + final long callDataSizeMod192 = callDataSize % ECPAIRING_NB_BYTES_PER_MILLER_LOOP; + final long nMillerLoop = (callDataSize / ECPAIRING_NB_BYTES_PER_MILLER_LOOP); + if (callDataSizeMod192 != 0) { + log.warn( + "[ECPAIRING] faulty call data size: {} ≡ {} mod {}", + callDataSize, + callDataSizeMod192, + ECPAIRING_NB_BYTES_PER_MILLER_LOOP); + return; + } + + final long gasAllowance = hub.transients().op().gasAllowanceForCall(); + final long precompileCost = + PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_MILLER_LOOP_GAS_FEE * nMillerLoop; + if (gasAllowance < precompileCost) { + log.warn( + "[ECPAIRING] insufficient gas: gas allowance = {}, precompile cost = {}", + gasAllowance, + precompileCost); + return; + } + + if (callDataSize == 0) { + return; + } + + /* + At this point: + - call data size is a positive multiple of 192 + - the precompile call is given sufficient gas + */ + + final EcPairingTallier currentEcpairingTallier = this.counts.pop(); + final long additionalRows = 12 * nMillerLoop + 2; + + if (!internalChecksPassed(frame, callDataSpan)) { + this.counts.push( + new EcPairingTallier( + currentEcpairingTallier.numberOfMillerLoops(), + currentEcpairingTallier.numberOfFinalExponentiations(), + currentEcpairingTallier.numberOfG2MembershipTests())); + return; + } + + if (callDataContainsMalformedLargePoint(frame, callDataSpan)) { + this.counts.push( + new EcPairingTallier( + currentEcpairingTallier.numberOfMillerLoops(), + currentEcpairingTallier.numberOfFinalExponentiations(), + currentEcpairingTallier.numberOfG2MembershipTests() + 1)); + return; + } + + EcpairingCounts preciseCount = preciseCount(frame, callDataSpan); + + this.counts.push( + new EcPairingTallier( + currentEcpairingTallier.numberOfMillerLoops() + preciseCount.nontrivialPairs(), + currentEcpairingTallier.numberOfFinalExponentiations() + preciseCount.nontrivialPairs() + == 0 + ? 0 + : 1, + currentEcpairingTallier.numberOfG2MembershipTests() + preciseCount.membershipTests())); + } + + public static boolean isHubFailure(final Hub hub) { + final OpCode opCode = hub.opCode(); + final MessageFrame frame = hub.messageFrame(); + + if (opCode.isCall()) { + final Address target = Words.toAddress(frame.getStackItem(1)); + if (target.equals(Address.ALTBN128_PAIRING)) { + long length = hub.transients().op().callDataSegment().length(); + if (length % 192 != 0) { + return true; + } + final long pairingCount = length / ECPAIRING_NB_BYTES_PER_MILLER_LOOP; + + return hub.transients().op().gasAllowanceForCall() + < PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_MILLER_LOOP_GAS_FEE * pairingCount; + } + } + + return false; + } + + public static boolean isRamFailure(final Hub hub) { + final MessageFrame frame = hub.messageFrame(); + long length = hub.transients().op().callDataSegment().length(); + + if (length == 0) { + return true; + } + + for (int i = 0; i < length; i += 192) { + final Bytes coordinates = frame.shadowReadMemory(i, 192); + if (!isOnC1(coordinates.slice(0, 64)) || !isOnG2(coordinates.slice(64, 128))) { + return true; + } + } + + return false; + } + + public static long gasCost(final Hub hub) { + final OpCode opCode = hub.opCode(); + final MessageFrame frame = hub.messageFrame(); + + if (irrelevantOperation(hub.messageFrame())) { + return 0; + } + + if (opCode.isCall()) { + final Address target = Words.toAddress(frame.getStackItem(1)); + if (target.equals(Address.ALTBN128_PAIRING)) { + final long length = hub.transients().op().callDataSegment().length(); + final long nMillerLoop = (length / ECPAIRING_NB_BYTES_PER_MILLER_LOOP); + if (nMillerLoop * ECPAIRING_NB_BYTES_PER_MILLER_LOOP != length) { + return 0; + } + + return PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_MILLER_LOOP_GAS_FEE * nMillerLoop; + } + } + + return 0; + } + + /** + * Specifies if an opcode is irrelevant to the tracing of ECPAIRING. + * + * @param frame + * @return true if the current operation is either not a call or would throw a stack exception; + * otherwise it returns true if the target of the CALL isn't the ECPAIRING precompile; + */ + static boolean irrelevantOperation(MessageFrame frame) { + final OpCode opCode = OpCode.of(frame.getCurrentOperation().getOpcode()); + + if (!opCode.isCall() || frame.stackSize() < 2) { + return true; + } + + final Address target = Words.toAddress(frame.getStackItem(1)); + return !target.equals(Address.ALTBN128_PAIRING); + } + + private boolean internalChecksPassed(MessageFrame frame, MemorySpan callData) { + long offset = callData.offset(); + long nPairsOfPoints = callData.length() / ECPAIRING_NB_BYTES_PER_MILLER_LOOP; + + for (long i = 0; i < nPairsOfPoints; i++) { + final Bytes coordinates = frame.shadowReadMemory(offset, ECPAIRING_NB_BYTES_PER_MILLER_LOOP); + + if (!isOnC1(coordinates.slice(0, ECPAIRING_NB_BYTES_PER_SMALL_POINT))) { + return false; + } + + final BigInteger pXIm = + extractParameter(coordinates.slice(ECPAIRING_NB_BYTES_PER_SMALL_POINT, 32)); + final BigInteger pXRe = + extractParameter(coordinates.slice(ECPAIRING_NB_BYTES_PER_SMALL_POINT + 32, 32)); + final BigInteger pYIm = + extractParameter(coordinates.slice(ECPAIRING_NB_BYTES_PER_SMALL_POINT + 64, 32)); + final BigInteger pYRe = + extractParameter(coordinates.slice(ECPAIRING_NB_BYTES_PER_SMALL_POINT + 96, 32)); + final Fq2 pX = Fq2.create(pXRe, pXIm); + final Fq2 pY = Fq2.create(pYRe, pYIm); + + if (!pX.isValid() || !pY.isValid()) { + return false; + } + + offset += ECPAIRING_NB_BYTES_PER_MILLER_LOOP; + } + + return true; + } + + private boolean callDataContainsMalformedLargePoint(MessageFrame frame, MemorySpan callData) { + long offset = callData.offset(); + long nPairsOfPoints = callData.length() / ECPAIRING_NB_BYTES_PER_MILLER_LOOP; + + for (long i = 0; i < nPairsOfPoints; i++) { + final Bytes largeCoordinates = + frame.shadowReadMemory( + offset + ECPAIRING_NB_BYTES_PER_SMALL_POINT, ECPAIRING_NB_BYTES_PER_LARGE_POINT); + + // curve membership implicitly tested + if (!isOnG2(largeCoordinates)) { + return false; + } + + offset += ECPAIRING_NB_BYTES_PER_MILLER_LOOP; + } + + return true; + } + + @Getter + private class EcpairingCounts { + int nontrivialPairs; // a pair of the form (A, B) with [A ≠ ∞] ∧ [B ≠ ∞] + int membershipTests; // a pair of the form (A, B) with [A ≡ ∞] ∧ [B ≠ ∞] + int trivialPairs; // a pair of the form (A, B) with [B ≡ ∞]; likely useless ... + + private void incrementPairingPairs() { + this.nontrivialPairs++; + } + + private void incrementMembershipTests() { + this.membershipTests++; + } + + private void incrementTrivialPairs() { + this.trivialPairs++; + } + } + + private EcpairingCounts preciseCount(MessageFrame frame, MemorySpan callData) { + EcpairingCounts counts = new EcpairingCounts(); + + long offset = callData.offset(); + long nPairsOfPoints = callData.length() / ECPAIRING_NB_BYTES_PER_MILLER_LOOP; + + for (long i = 0; i < nPairsOfPoints; i++) { + final Bytes coordinates = frame.shadowReadMemory(offset, ECPAIRING_NB_BYTES_PER_MILLER_LOOP); + + final BigInteger smallPointX = extractParameter(coordinates.slice(0, 32)); + final BigInteger smallPointY = extractParameter(coordinates.slice(32, 32)); + final AltBn128Point smallPoint = + new AltBn128Point(Fq.create(smallPointX), Fq.create(smallPointY)); + final boolean smallPointIsPointAtInfinity = smallPoint.isInfinity(); + + final BigInteger largePointXIm = + extractParameter(coordinates.slice(ECPAIRING_NB_BYTES_PER_SMALL_POINT, 32)); + final BigInteger largePointXRe = + extractParameter(coordinates.slice(ECPAIRING_NB_BYTES_PER_SMALL_POINT + 32, 32)); + final BigInteger largePointYIm = + extractParameter(coordinates.slice(ECPAIRING_NB_BYTES_PER_SMALL_POINT + 64, 32)); + final BigInteger largePointYRe = + extractParameter(coordinates.slice(ECPAIRING_NB_BYTES_PER_SMALL_POINT + 96, 32)); + final Fq2 largePointX = Fq2.create(largePointXRe, largePointXIm); + final Fq2 largePointY = Fq2.create(largePointYRe, largePointYIm); + AltBn128Fq2Point largePoint = new AltBn128Fq2Point(largePointX, largePointY); + final boolean largePointIsPointAtInfinity = largePoint.isInfinity(); + + if (largePointIsPointAtInfinity) { + counts.incrementTrivialPairs(); + } + + if (!smallPointIsPointAtInfinity && !largePointIsPointAtInfinity) { + counts.incrementPairingPairs(); + } + + if (smallPointIsPointAtInfinity && !largePointIsPointAtInfinity) { + counts.incrementMembershipTests(); + } + + offset += ECPAIRING_NB_BYTES_PER_MILLER_LOOP; + } + + return counts; + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingG2MembershipCalls.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingG2MembershipCalls.java new file mode 100644 index 0000000000..eda89c70f3 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingG2MembershipCalls.java @@ -0,0 +1,63 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.zktracer.module.limits.precompiles; + +import java.nio.MappedByteBuffer; +import java.util.List; + +import lombok.RequiredArgsConstructor; +import net.consensys.linea.zktracer.ColumnHeader; +import net.consensys.linea.zktracer.module.Module; + +@RequiredArgsConstructor +public class EcPairingG2MembershipCalls implements Module { + private final EcPairingFinalExponentiations ecPairingFinalExponentiations; + + @Override + public String moduleKey() { + return "PRECOMPILE_ECPAIRING_G2_MEMBERSHIP_CALLS"; + } + + @Override + public void enterTransaction() {} + + @Override + public void popTransaction() {} + + @Override + public int lineCount() { + long g2MembershipTests = 0; + + for (EcPairingTallier count : this.ecPairingFinalExponentiations.counts()) { + g2MembershipTests += count.numberOfG2MembershipTests(); + } + + if (g2MembershipTests > Integer.MAX_VALUE) { + throw new RuntimeException("Ludicrous amount of " + moduleKey()); + } + + return (int) g2MembershipTests; + } + + @Override + public List columnsHeaders() { + throw new UnsupportedOperationException("should never be called"); + } + + @Override + public void commit(List buffers) { + throw new UnsupportedOperationException("should never be called"); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingMillerLoop.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingMillerLoops.java similarity index 72% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingMillerLoop.java rename to arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingMillerLoops.java index ff0fd622fd..15177d8b88 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingMillerLoop.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingMillerLoops.java @@ -18,19 +18,17 @@ import java.nio.MappedByteBuffer; import java.util.List; +import lombok.RequiredArgsConstructor; import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.module.Module; -public final class EcPairingMillerLoop implements Module { - private final EcPairingCallEffectiveCall ecpairingCall; - - public EcPairingMillerLoop(EcPairingCallEffectiveCall ecpairingCall) { - this.ecpairingCall = ecpairingCall; - } +@RequiredArgsConstructor +public final class EcPairingMillerLoops implements Module { + private final EcPairingFinalExponentiations ecpairingCall; @Override public String moduleKey() { - return "PRECOMPILE_ECPAIRING_MILLER_LOOP"; + return "PRECOMPILE_ECPAIRING_MILLER_LOOPS"; } @Override @@ -41,7 +39,12 @@ public void popTransaction() {} @Override public int lineCount() { - final long r = ecpairingCall.getCounts().stream().mapToLong(EcPairingLimit::nMillerLoop).sum(); + long r = 0; + + for (EcPairingTallier count : this.ecpairingCall.counts()) { + r += count.numberOfMillerLoops(); + } + if (r > Integer.MAX_VALUE) { throw new RuntimeException("Ludicrous EcPairing calls"); } @@ -51,11 +54,11 @@ public int lineCount() { @Override public List columnsHeaders() { - throw new IllegalStateException("should never be called"); + throw new UnsupportedOperationException("should never be called"); } @Override public void commit(List buffers) { - throw new IllegalStateException("should never be called"); + throw new UnsupportedOperationException("should never be called"); } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingTallier.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingTallier.java new file mode 100644 index 0000000000..75005b0d9d --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcPairingTallier.java @@ -0,0 +1,19 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.limits.precompiles; + +record EcPairingTallier( + long numberOfMillerLoops, long numberOfFinalExponentiations, long numberOfG2MembershipTests) {} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcRecoverEffectiveCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcRecoverEffectiveCall.java index 0f22e70af0..30e540d1df 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcRecoverEffectiveCall.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/EcRecoverEffectiveCall.java @@ -40,7 +40,7 @@ public final class EcRecoverEffectiveCall implements Module { @Override public String moduleKey() { - return "PRECOMPILE_ECRECOVER_EFFECTIVE_CALL"; + return "PRECOMPILE_ECRECOVER_EFFECTIVE_CALLS"; } private static final int ECRECOVER_GAS_FEE = 3000; @@ -79,23 +79,21 @@ public static boolean isValid(final Hub hub) { final OpCode opCode = hub.opCode(); final MessageFrame frame = hub.messageFrame(); - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(frame.getStackItem(1)); - if (target.equals(Address.ECREC)) { - final MemorySpan callData = hub.transients().op().callDataSegment(); - final Bytes inputData = frame.shadowReadMemory(callData.offset(), callData.length()); - final BigInteger v = slice(inputData, EWORD_SIZE, EWORD_SIZE).toUnsignedBigInteger(); - final BigInteger r = slice(inputData, EWORD_SIZE * 2, EWORD_SIZE).toUnsignedBigInteger(); - final BigInteger s = slice(inputData, EWORD_SIZE * 3, EWORD_SIZE).toUnsignedBigInteger(); - // TODO: exclude case without valid signature - return hasEnoughGas(hub) - && (v.equals(BigInteger.valueOf(27)) || v.equals(BigInteger.valueOf(28))) - && !r.equals(BigInteger.ZERO) - && r.compareTo(SECP_256_K1N) < 0 - && !s.equals(BigInteger.ZERO) - && s.compareTo(SECP_256_K1N) < 0; - } + if (opCode.isCall()) { + final Address target = Words.toAddress(frame.getStackItem(1)); + if (target.equals(Address.ECREC)) { + final MemorySpan callData = hub.transients().op().callDataSegment(); + final Bytes inputData = frame.shadowReadMemory(callData.offset(), callData.length()); + final BigInteger v = slice(inputData, EWORD_SIZE, EWORD_SIZE).toUnsignedBigInteger(); + final BigInteger r = slice(inputData, EWORD_SIZE * 2, EWORD_SIZE).toUnsignedBigInteger(); + final BigInteger s = slice(inputData, EWORD_SIZE * 3, EWORD_SIZE).toUnsignedBigInteger(); + // TODO: exclude case without valid signature + return hasEnoughGas(hub) + && (v.equals(BigInteger.valueOf(27)) || v.equals(BigInteger.valueOf(28))) + && !r.equals(BigInteger.ZERO) + && r.compareTo(SECP_256_K1N) < 0 + && !s.equals(BigInteger.ZERO) + && s.compareTo(SECP_256_K1N) < 0; } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/ModexpEffectiveCall.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/ModexpEffectiveCall.java index c3eb716cd9..8590bbae86 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/ModexpEffectiveCall.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/ModexpEffectiveCall.java @@ -16,11 +16,13 @@ package net.consensys.linea.zktracer.module.limits.precompiles; import static net.consensys.linea.zktracer.module.Util.slice; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.WORD_SIZE; import java.math.BigInteger; import java.nio.MappedByteBuffer; +import java.util.ArrayDeque; +import java.util.Deque; import java.util.List; -import java.util.Stack; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -28,8 +30,8 @@ import lombok.extern.slf4j.Slf4j; import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.module.Module; -import net.consensys.linea.zktracer.module.blake2fmodexpdata.Blake2fModexpData; -import net.consensys.linea.zktracer.module.blake2fmodexpdata.Blake2fModexpDataOperation; +import net.consensys.linea.zktracer.module.blake2fmodexpdata.BlakeModexpData; +import net.consensys.linea.zktracer.module.blake2fmodexpdata.BlakeModexpDataOperation; import net.consensys.linea.zktracer.module.blake2fmodexpdata.ModexpComponents; import net.consensys.linea.zktracer.module.hub.Hub; import net.consensys.linea.zktracer.opcode.OpCode; @@ -44,23 +46,25 @@ public class ModexpEffectiveCall implements Module { private final Hub hub; - @Getter private final Blake2fModexpData blake2fModexpData; - private final Stack counts = new Stack<>(); + @Getter private final BlakeModexpData blakeModexpData; + private final Deque counts = new ArrayDeque<>(); private static final BigInteger PROVER_MAX_INPUT_BYTE_SIZE = BigInteger.valueOf(4096 / 8); - private static final int EVM_WORD_SIZE = 32; - - private long lastDataCallHubStamp = 0; @Override public String moduleKey() { - return "PRECOMPILE_MODEXP_EFFECTIVE_CALL"; + return "PRECOMPILE_MODEXP_EFFECTIVE_CALLS"; } @Override - public void enterTransaction() { + public void traceStartConflation(final long blockCount) { counts.push(0); } + @Override + public void enterTransaction() { + counts.push(counts.getFirst()); + } + @Override public void popTransaction() { counts.pop(); @@ -70,13 +74,13 @@ public void popTransaction() { public void tracePreOpcode(MessageFrame frame) { final OpCode opCode = hub.opCode(); - if (opCode.isAnyOf(OpCode.CALL, OpCode.STATICCALL, OpCode.DELEGATECALL, OpCode.CALLCODE)) { + if (opCode.isCall()) { final Address target = Words.toAddress(frame.getStackItem(1)); if (target.equals(Address.MODEXP)) { final Bytes inputData = hub.transients().op().callData(); // Get the Base length - final BigInteger baseLength = slice(inputData, 0, EVM_WORD_SIZE).toUnsignedBigInteger(); + final BigInteger baseLength = slice(inputData, 0, WORD_SIZE).toUnsignedBigInteger(); if (isOutOfProverInputBounds(baseLength)) { log.info( "Too big argument, base byte length = {} > {}", @@ -88,8 +92,7 @@ public void tracePreOpcode(MessageFrame frame) { } // Get the Exponent length - final BigInteger expLength = - slice(inputData, EVM_WORD_SIZE, EVM_WORD_SIZE).toUnsignedBigInteger(); + final BigInteger expLength = slice(inputData, WORD_SIZE, WORD_SIZE).toUnsignedBigInteger(); if (isOutOfProverInputBounds(expLength)) { log.info( "Too big argument, exponent byte length = {} > {}", @@ -102,7 +105,7 @@ public void tracePreOpcode(MessageFrame frame) { // Get the Modulo length final BigInteger modLength = - slice(inputData, 2 * EVM_WORD_SIZE, EVM_WORD_SIZE).toUnsignedBigInteger(); + slice(inputData, 2 * WORD_SIZE, WORD_SIZE).toUnsignedBigInteger(); if (isOutOfProverInputBounds(modLength)) { log.info( "Too big argument, modulo byte length = {} > {}", @@ -118,28 +121,24 @@ public void tracePreOpcode(MessageFrame frame) { final int modLengthInt = modLength.intValueExact(); // Get the Base. - final Bytes baseComponent = slice(inputData, 3 * EVM_WORD_SIZE, baseLengthInt); + final Bytes baseComponent = slice(inputData, 3 * WORD_SIZE, baseLengthInt); // Get the Exponent. final Bytes expComponent = - slice(inputData, 3 * EVM_WORD_SIZE + baseLengthInt, expLength.intValueExact()); + slice(inputData, 3 * WORD_SIZE + baseLengthInt, expLength.intValueExact()); // Get the Modulus. final Bytes modComponent = slice( - inputData, - 3 * EVM_WORD_SIZE + baseLengthInt + expLengthInt, - modLength.intValueExact()); + inputData, 3 * WORD_SIZE + baseLengthInt + expLengthInt, modLength.intValueExact()); final long gasPrice = gasPrice(baseLengthInt, expLengthInt, modLengthInt, expComponent); if (hub.transients().op().gasAllowanceForCall() >= gasPrice) { - this.lastDataCallHubStamp = - this.blake2fModexpData.call( - new Blake2fModexpDataOperation( - hub.stamp(), - lastDataCallHubStamp, - new ModexpComponents(baseComponent, expComponent, modComponent), - null)); + this.blakeModexpData.call( + new BlakeModexpDataOperation( + hub.stamp(), + new ModexpComponents(baseComponent, expComponent, modComponent), + null)); this.counts.push(this.counts.pop() + 1); } } @@ -150,27 +149,26 @@ public static long gasCost(final Hub hub) { final OpCode opCode = hub.opCode(); final MessageFrame frame = hub.messageFrame(); - if (opCode.isAnyOf(OpCode.CALL, OpCode.STATICCALL, OpCode.DELEGATECALL, OpCode.CALLCODE)) { + if (opCode.isCall()) { final Address target = Words.toAddress(frame.getStackItem(1)); if (target.equals(Address.MODEXP)) { final Bytes inputData = hub.transients().op().callData(); // Get the Base length - final BigInteger baseLength = slice(inputData, 0, EVM_WORD_SIZE).toUnsignedBigInteger(); + final BigInteger baseLength = slice(inputData, 0, WORD_SIZE).toUnsignedBigInteger(); if (isOutOfProverInputBounds(baseLength)) { return 0; } // Get the Exponent length - final BigInteger expLength = - slice(inputData, EVM_WORD_SIZE, EVM_WORD_SIZE).toUnsignedBigInteger(); + final BigInteger expLength = slice(inputData, WORD_SIZE, WORD_SIZE).toUnsignedBigInteger(); if (isOutOfProverInputBounds(expLength)) { return 0; } // Get the Modulo length final BigInteger modLength = - slice(inputData, 2 * EVM_WORD_SIZE, EVM_WORD_SIZE).toUnsignedBigInteger(); + slice(inputData, 2 * WORD_SIZE, WORD_SIZE).toUnsignedBigInteger(); if (isOutOfProverInputBounds(modLength)) { return 0; } @@ -181,7 +179,7 @@ public static long gasCost(final Hub hub) { // Get the Exponent. final Bytes expComponent = - slice(inputData, 3 * EVM_WORD_SIZE + baseLengthInt, expLength.intValueExact()); + slice(inputData, 3 * WORD_SIZE + baseLengthInt, expLength.intValueExact()); return gasPrice(baseLengthInt, expLengthInt, modLengthInt, expComponent); } @@ -203,7 +201,7 @@ private static int expLengthPrime(int expLength, Bytes e) { return e.isZero() ? 0 : e.toUnsignedBigInteger().bitLength() - 1; } - final Bytes leadingWord = e.slice(0, EVM_WORD_SIZE); + final Bytes leadingWord = e.slice(0, WORD_SIZE); return 8 * (expLength - 32) + Math.max(leadingWord.bitLength() - 1, 0); } @@ -213,7 +211,7 @@ private static boolean isOutOfProverInputBounds(BigInteger modexpComponentLength @Override public int lineCount() { - return this.counts.stream().mapToInt(x -> x).sum(); + return this.counts.getFirst(); } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/Rip160Blocks.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/RipemdBlocks.java similarity index 51% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/Rip160Blocks.java rename to arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/RipemdBlocks.java index 56d6449cf6..10f65ccccc 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/Rip160Blocks.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/RipemdBlocks.java @@ -15,41 +15,57 @@ package net.consensys.linea.zktracer.module.limits.precompiles; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.WORD_SIZE; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.WORD_SIZE_MO; + import java.nio.MappedByteBuffer; +import java.util.ArrayDeque; +import java.util.Deque; import java.util.List; -import java.util.Stack; +import lombok.Getter; import lombok.RequiredArgsConstructor; import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.module.Module; import net.consensys.linea.zktracer.module.hub.Hub; +import net.consensys.linea.zktracer.module.shakiradata.ShakiraData; +import net.consensys.linea.zktracer.module.shakiradata.ShakiraDataOperation; +import net.consensys.linea.zktracer.module.shakiradata.ShakiraPrecompileType; import net.consensys.linea.zktracer.opcode.OpCode; +import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.evm.frame.MessageFrame; import org.hyperledger.besu.evm.internal.Words; @RequiredArgsConstructor -public final class Rip160Blocks implements Module { +public final class RipemdBlocks implements Module { + private static final int PRECOMPILE_BASE_GAS_FEE = 600; + private static final int PRECOMPILE_GAS_FEE_PER_EWORD = 120; + private static final int RIPEMD160_BLOCKSIZE = 64 * 8; + // If the length is > 2⁶4, we just use the lower 64 bits. + private static final int RIPEMD160_LENGTH_APPEND = 64; + private static final int RIPEMD160_ND_PADDED_ONE = 1; + private final Hub hub; - private final Stack counts = new Stack<>(); + private final Deque counts = new ArrayDeque<>(); @Override public String moduleKey() { return "PRECOMPILE_RIPEMD_BLOCKS"; } - private static final int PRECOMPILE_BASE_GAS_FEE = 600; - private static final int PRECOMPILE_GAS_FEE_PER_EWORD = 120; - private static final int RIPEMD160_BLOCKSIZE = 64 * 8; - // If the length is > 2⁶4, we just use the lower 64 bits. - private static final int RIPEMD160_LENGTH_APPEND = 64; - private static final int RIPEMD160_ND_PADDED_ONE = 1; + @Getter private final ShakiraData shakiraData; @Override - public void enterTransaction() { + public void traceStartConflation(final long blockCount) { counts.push(0); } + @Override + public void enterTransaction() { + counts.push(counts.getFirst()); + } + @Override public void popTransaction() { counts.pop(); @@ -62,14 +78,12 @@ public static boolean hasEnoughGas(final Hub hub) { public static long gasCost(final Hub hub) { final OpCode opCode = hub.opCode(); - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(hub.messageFrame().getStackItem(1)); - if (target.equals(Address.RIPEMD160)) { - final long dataByteLength = hub.transients().op().callDataSegment().length(); - final long wordCount = (dataByteLength + 31) / 32; - return PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_GAS_FEE_PER_EWORD * wordCount; - } + if (opCode.isCall()) { + final Address target = Words.toAddress(hub.messageFrame().getStackItem(1)); + if (target.equals(Address.RIPEMD160)) { + final long dataByteLength = hub.transients().op().callDataSegment().length(); + final long wordCount = (dataByteLength + WORD_SIZE_MO) / WORD_SIZE; + return PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_GAS_FEE_PER_EWORD * wordCount; } } @@ -80,41 +94,41 @@ public static long gasCost(final Hub hub) { public void tracePreOpcode(MessageFrame frame) { final OpCode opCode = hub.opCode(); - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(frame.getStackItem(1)); - if (target.equals(Address.RIPEMD160)) { - final long dataByteLength = hub.transients().op().callDataSegment().length(); - if (dataByteLength == 0) { - return; - } // skip trivial hash TODO: check the prover does skip it - final int blockCount = - (int) - (dataByteLength * 8 - + RIPEMD160_ND_PADDED_ONE - + RIPEMD160_LENGTH_APPEND - + (RIPEMD160_BLOCKSIZE - 1)) - / RIPEMD160_BLOCKSIZE; - - final long wordCount = (dataByteLength + 31) / 32; - final long gasNeeded = PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_GAS_FEE_PER_EWORD * wordCount; - - if (hub.transients().op().gasAllowanceForCall() >= gasNeeded) { - this.counts.push(this.counts.pop() + blockCount); - } + if (opCode.isCall()) { + final Address target = Words.toAddress(frame.getStackItem(1)); + if (target.equals(Address.RIPEMD160)) { + final long dataByteLength = hub.transients().op().callDataSegment().length(); + + if (dataByteLength == 0) { + return; + } // skip trivial hash TODO: check the prover does skip it + + final int blockCount = + (int) + (dataByteLength * 8 + + RIPEMD160_ND_PADDED_ONE + + RIPEMD160_LENGTH_APPEND + + (RIPEMD160_BLOCKSIZE - 1)) + / RIPEMD160_BLOCKSIZE; + + final long wordCount = (dataByteLength + WORD_SIZE_MO) / WORD_SIZE; + final long gasNeeded = PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_GAS_FEE_PER_EWORD * wordCount; + + final Bytes inputData = hub.transients().op().callData(); + + if (hub.transients().op().gasAllowanceForCall() >= gasNeeded) { + this.shakiraData.call( + new ShakiraDataOperation(hub.stamp(), ShakiraPrecompileType.RIPEMD, inputData)); + + this.counts.push(this.counts.pop() + blockCount); } } - default -> {} } } @Override public int lineCount() { - int r = 0; - for (int i = 0; i < this.counts.size(); i++) { - r += this.counts.get(i); - } - return r; + return this.counts.getFirst(); } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/Sha256Blocks.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/Sha256Blocks.java index 1bbf27957f..6851236829 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/Sha256Blocks.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/limits/precompiles/Sha256Blocks.java @@ -15,28 +15,30 @@ package net.consensys.linea.zktracer.module.limits.precompiles; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.WORD_SIZE; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.WORD_SIZE_MO; + import java.nio.MappedByteBuffer; +import java.util.ArrayDeque; +import java.util.Deque; import java.util.List; -import java.util.Stack; +import lombok.Getter; import lombok.RequiredArgsConstructor; import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.module.Module; import net.consensys.linea.zktracer.module.hub.Hub; +import net.consensys.linea.zktracer.module.shakiradata.ShakiraData; +import net.consensys.linea.zktracer.module.shakiradata.ShakiraDataOperation; +import net.consensys.linea.zktracer.module.shakiradata.ShakiraPrecompileType; import net.consensys.linea.zktracer.opcode.OpCode; +import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.evm.frame.MessageFrame; import org.hyperledger.besu.evm.internal.Words; @RequiredArgsConstructor public final class Sha256Blocks implements Module { - private final Hub hub; - private final Stack counts = new Stack<>(); - - @Override - public String moduleKey() { - return "PRECOMPILE_SHA2_BLOCKS"; - } private static final int PRECOMPILE_BASE_GAS_FEE = 60; private static final int PRECOMPILE_GAS_FEE_PER_EWORD = 12; @@ -45,11 +47,26 @@ public String moduleKey() { private static final int SHA256_PADDING_LENGTH = 64; private static final int SHA256_NB_PADDED_ONE = 1; + private final Hub hub; + private final Deque counts = new ArrayDeque<>(); + + @Getter private final ShakiraData shakiraData; + @Override - public void enterTransaction() { + public String moduleKey() { + return "PRECOMPILE_SHA2_BLOCKS"; + } + + @Override + public void traceStartConflation(final long blockCount) { counts.push(0); } + @Override + public void enterTransaction() { + counts.push(counts.getFirst()); + } + @Override public void popTransaction() { counts.pop(); @@ -63,16 +80,15 @@ public static long gasCost(final Hub hub) { final OpCode opCode = hub.opCode(); final MessageFrame frame = hub.messageFrame(); - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(frame.getStackItem(1)); - if (target.equals(Address.SHA256)) { - final long dataByteLength = hub.transients().op().callDataSegment().length(); - final long wordCount = (dataByteLength + 31) / 32; - return PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_GAS_FEE_PER_EWORD * wordCount; - } + if (opCode.isCall()) { + final Address target = Words.toAddress(frame.getStackItem(1)); + if (target.equals(Address.SHA256)) { + final long dataByteLength = hub.transients().op().callDataSegment().length(); + final long wordCount = (dataByteLength + WORD_SIZE_MO) / WORD_SIZE; + return PRECOMPILE_BASE_GAS_FEE + PRECOMPILE_GAS_FEE_PER_EWORD * wordCount; } } + return 0; } @@ -80,38 +96,36 @@ public static long gasCost(final Hub hub) { public void tracePreOpcode(MessageFrame frame) { final OpCode opCode = hub.opCode(); - switch (opCode) { - case CALL, STATICCALL, DELEGATECALL, CALLCODE -> { - final Address target = Words.toAddress(frame.getStackItem(1)); - if (target.equals(Address.SHA256)) { - final long dataByteLength = hub.transients().op().callDataSegment().length(); - if (dataByteLength == 0) { - return; - } - final int blockCount = - (int) - (dataByteLength * 8 - + SHA256_NB_PADDED_ONE - + SHA256_PADDING_LENGTH - + (SHA256_BLOCKSIZE - 1)) - / SHA256_BLOCKSIZE; - - if (hasEnoughGas(this.hub)) { - this.counts.push(this.counts.pop() + blockCount); - } + if (opCode.isCall()) { + final Address target = Words.toAddress(frame.getStackItem(1)); + if (target.equals(Address.SHA256)) { + final long dataByteLength = hub.transients().op().callDataSegment().length(); + if (dataByteLength == 0) { + return; + } + final int blockCount = + (int) + (dataByteLength * 8 + + SHA256_NB_PADDED_ONE + + SHA256_PADDING_LENGTH + + (SHA256_BLOCKSIZE - 1)) + / SHA256_BLOCKSIZE; + + final Bytes inputData = hub.transients().op().callData(); + + if (hasEnoughGas(this.hub)) { + this.shakiraData.call( + new ShakiraDataOperation(hub.stamp(), ShakiraPrecompileType.SHA256, inputData)); + + this.counts.push(this.counts.pop() + blockCount); } } - default -> {} } } @Override public int lineCount() { - int r = 0; - for (int i = 0; i < this.counts.size(); i++) { - r += this.counts.get(i); - } - return r; + return counts.getFirst(); } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/logdata/LogData.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/logdata/LogData.java index 6a59b71d63..89dac0e2b6 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/logdata/LogData.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/logdata/LogData.java @@ -22,22 +22,22 @@ import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.module.Module; -import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxrcpt; +import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxnRcpt; import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxrcptChunk; import net.consensys.linea.zktracer.types.UnsignedByte; import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.evm.log.Log; public class LogData implements Module { - private final RlpTxrcpt rlpTxrcpt; + private final RlpTxnRcpt rlpTxnRcpt; - public LogData(RlpTxrcpt rlpTxrcpt) { - this.rlpTxrcpt = rlpTxrcpt; + public LogData(RlpTxnRcpt rlpTxnRcpt) { + this.rlpTxnRcpt = rlpTxnRcpt; } @Override public String moduleKey() { - return "PUB_LOG"; + return "LOG_DATA"; } @Override @@ -49,7 +49,7 @@ public void popTransaction() {} @Override public int lineCount() { int rowSize = 0; - for (RlpTxrcptChunk tx : this.rlpTxrcpt.getChunkList()) { + for (RlpTxrcptChunk tx : this.rlpTxnRcpt.getChunkList()) { rowSize += txRowSize(tx); } return rowSize; @@ -81,12 +81,12 @@ public void commit(List buffers) { final Trace trace = new Trace(buffers); int absLogNumMax = 0; - for (RlpTxrcptChunk tx : this.rlpTxrcpt.chunkList) { + for (RlpTxrcptChunk tx : this.rlpTxnRcpt.chunkList) { absLogNumMax += tx.logs().size(); } int absLogNum = 0; - for (RlpTxrcptChunk tx : this.rlpTxrcpt.chunkList) { + for (RlpTxrcptChunk tx : this.rlpTxnRcpt.chunkList) { if (!tx.logs().isEmpty()) { for (Log log : tx.logs()) { absLogNum += 1; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/logdata/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/logdata/Trace.java index 5f1f1fdafe..4e90eaccfe 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/logdata/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/logdata/Trace.java @@ -45,14 +45,14 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("logdata.ABS_LOG_NUM", 4, length), - new ColumnHeader("logdata.ABS_LOG_NUM_MAX", 4, length), - new ColumnHeader("logdata.INDEX", 4, length), - new ColumnHeader("logdata.LIMB", 32, length), + new ColumnHeader("logdata.ABS_LOG_NUM", 3, length), + new ColumnHeader("logdata.ABS_LOG_NUM_MAX", 3, length), + new ColumnHeader("logdata.INDEX", 3, length), + new ColumnHeader("logdata.LIMB", 16, length), new ColumnHeader("logdata.LOGS_DATA", 1, length), - new ColumnHeader("logdata.SIZE_ACC", 8, length), + new ColumnHeader("logdata.SIZE_ACC", 4, length), new ColumnHeader("logdata.SIZE_LIMB", 1, length), - new ColumnHeader("logdata.SIZE_TOTAL", 8, length)); + new ColumnHeader("logdata.SIZE_TOTAL", 4, length)); } public Trace(List buffers) { @@ -74,38 +74,53 @@ public int size() { return this.currentLine; } - public Trace absLogNum(final int b) { + public Trace absLogNum(final long b) { if (filled.get(0)) { throw new IllegalStateException("logdata.ABS_LOG_NUM already set"); } else { filled.set(0); } - absLogNum.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("absLogNum has invalid value (" + b + ")"); + } + absLogNum.put((byte) (b >> 16)); + absLogNum.put((byte) (b >> 8)); + absLogNum.put((byte) b); return this; } - public Trace absLogNumMax(final int b) { + public Trace absLogNumMax(final long b) { if (filled.get(1)) { throw new IllegalStateException("logdata.ABS_LOG_NUM_MAX already set"); } else { filled.set(1); } - absLogNumMax.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("absLogNumMax has invalid value (" + b + ")"); + } + absLogNumMax.put((byte) (b >> 16)); + absLogNumMax.put((byte) (b >> 8)); + absLogNumMax.put((byte) b); return this; } - public Trace index(final int b) { + public Trace index(final long b) { if (filled.get(2)) { throw new IllegalStateException("logdata.INDEX already set"); } else { filled.set(2); } - index.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("index has invalid value (" + b + ")"); + } + index.put((byte) (b >> 16)); + index.put((byte) (b >> 8)); + index.put((byte) b); return this; } @@ -117,11 +132,20 @@ public Trace limb(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("limb has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb.put((byte) 0); } - limb.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb.put(bs.get(j)); + } return this; } @@ -145,7 +169,13 @@ public Trace sizeAcc(final long b) { filled.set(5); } - sizeAcc.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("sizeAcc has invalid value (" + b + ")"); + } + sizeAcc.put((byte) (b >> 24)); + sizeAcc.put((byte) (b >> 16)); + sizeAcc.put((byte) (b >> 8)); + sizeAcc.put((byte) b); return this; } @@ -169,7 +199,13 @@ public Trace sizeTotal(final long b) { filled.set(7); } - sizeTotal.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("sizeTotal has invalid value (" + b + ")"); + } + sizeTotal.put((byte) (b >> 24)); + sizeTotal.put((byte) (b >> 16)); + sizeTotal.put((byte) (b >> 8)); + sizeTotal.put((byte) b); return this; } @@ -215,19 +251,19 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - absLogNum.position(absLogNum.position() + 4); + absLogNum.position(absLogNum.position() + 3); } if (!filled.get(1)) { - absLogNumMax.position(absLogNumMax.position() + 4); + absLogNumMax.position(absLogNumMax.position() + 3); } if (!filled.get(2)) { - index.position(index.position() + 4); + index.position(index.position() + 3); } if (!filled.get(3)) { - limb.position(limb.position() + 32); + limb.position(limb.position() + 16); } if (!filled.get(4)) { @@ -235,7 +271,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(5)) { - sizeAcc.position(sizeAcc.position() + 8); + sizeAcc.position(sizeAcc.position() + 4); } if (!filled.get(6)) { @@ -243,7 +279,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(7)) { - sizeTotal.position(sizeTotal.position() + 8); + sizeTotal.position(sizeTotal.position() + 4); } filled.clear(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/loginfo/LogInfo.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/loginfo/LogInfo.java index 8cd44178b0..594f9b8e79 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/loginfo/LogInfo.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/loginfo/LogInfo.java @@ -20,7 +20,7 @@ import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.module.Module; -import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxrcpt; +import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxnRcpt; import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxrcptChunk; import net.consensys.linea.zktracer.types.UnsignedByte; import org.apache.tuweni.bytes.Bytes; @@ -28,17 +28,17 @@ import org.hyperledger.besu.evm.log.Log; public class LogInfo implements Module { - private final RlpTxrcpt rlpTxrcpt; + private final RlpTxnRcpt rlpTxnRcpt; - public LogInfo(RlpTxrcpt rlpTxrcpt) { - this.rlpTxrcpt = rlpTxrcpt; + public LogInfo(RlpTxnRcpt rlpTxnRcpt) { + this.rlpTxnRcpt = rlpTxnRcpt; } private static final int LOG0 = 0xa0; // TODO why I don't get it from the .lisp ? @Override public String moduleKey() { - return "PUB_LOG_INFO"; + return "LOG_INFO"; } @Override @@ -50,7 +50,7 @@ public void popTransaction() {} @Override public int lineCount() { int rowSize = 0; - for (RlpTxrcptChunk chunk : this.rlpTxrcpt.getChunkList()) { + for (RlpTxrcptChunk chunk : this.rlpTxnRcpt.getChunkList()) { rowSize += txRowSize(chunk); } return rowSize; @@ -66,13 +66,13 @@ public void commit(List buffers) { final Trace trace = new Trace(buffers); int absLogNumMax = 0; - for (RlpTxrcptChunk tx : this.rlpTxrcpt.chunkList) { + for (RlpTxrcptChunk tx : this.rlpTxnRcpt.chunkList) { absLogNumMax += tx.logs().size(); } int absTxNum = 0; int absLogNum = 0; - for (RlpTxrcptChunk tx : this.rlpTxrcpt.chunkList) { + for (RlpTxrcptChunk tx : this.rlpTxnRcpt.chunkList) { absTxNum += 1; if (tx.logs().isEmpty()) { traceTxWoLog(absTxNum, absLogNum, absLogNumMax, trace); @@ -100,7 +100,7 @@ private int txRowSize(RlpTxrcptChunk tx) { public void traceTxWoLog( final int absTxNum, final int absLogNum, final int absLogNumMax, Trace trace) { trace - .absTxnNumMax(this.rlpTxrcpt.chunkList.size()) + .absTxnNumMax(this.rlpTxnRcpt.chunkList.size()) .absTxnNum(absTxNum) .txnEmitsLogs(false) .absLogNumMax(absLogNumMax) @@ -140,7 +140,7 @@ public void traceLog( final Bytes32 topic4 = nbTopic >= 4 ? log.getTopics().get(3) : Bytes32.ZERO; for (int ct = 0; ct < ctMax + 1; ct++) { trace - .absTxnNumMax(this.rlpTxrcpt.chunkList.size()) + .absTxnNumMax(this.rlpTxnRcpt.chunkList.size()) .absTxnNum(absTxNum) .txnEmitsLogs(true) .absLogNumMax(absLogNumMax) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/loginfo/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/loginfo/Trace.java index 1ba65eaa20..2a692f9095 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/loginfo/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/loginfo/Trace.java @@ -64,24 +64,24 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("loginfo.ABS_LOG_NUM", 4, length), - new ColumnHeader("loginfo.ABS_LOG_NUM_MAX", 4, length), - new ColumnHeader("loginfo.ABS_TXN_NUM", 4, length), - new ColumnHeader("loginfo.ABS_TXN_NUM_MAX", 4, length), - new ColumnHeader("loginfo.ADDR_HI", 8, length), - new ColumnHeader("loginfo.ADDR_LO", 32, length), + new ColumnHeader("loginfo.ABS_LOG_NUM", 3, length), + new ColumnHeader("loginfo.ABS_LOG_NUM_MAX", 3, length), + new ColumnHeader("loginfo.ABS_TXN_NUM", 3, length), + new ColumnHeader("loginfo.ABS_TXN_NUM_MAX", 3, length), + new ColumnHeader("loginfo.ADDR_HI", 4, length), + new ColumnHeader("loginfo.ADDR_LO", 16, length), new ColumnHeader("loginfo.CT", 1, length), new ColumnHeader("loginfo.CT_MAX", 1, length), - new ColumnHeader("loginfo.DATA_HI", 32, length), - new ColumnHeader("loginfo.DATA_LO", 32, length), - new ColumnHeader("loginfo.DATA_SIZE", 8, length), + new ColumnHeader("loginfo.DATA_HI", 16, length), + new ColumnHeader("loginfo.DATA_LO", 16, length), + new ColumnHeader("loginfo.DATA_SIZE", 4, length), new ColumnHeader("loginfo.INST", 1, length), new ColumnHeader("loginfo.IS_LOG_X_0", 1, length), new ColumnHeader("loginfo.IS_LOG_X_1", 1, length), new ColumnHeader("loginfo.IS_LOG_X_2", 1, length), new ColumnHeader("loginfo.IS_LOG_X_3", 1, length), new ColumnHeader("loginfo.IS_LOG_X_4", 1, length), - new ColumnHeader("loginfo.PHASE", 4, length), + new ColumnHeader("loginfo.PHASE", 2, length), new ColumnHeader("loginfo.TOPIC_HI_1", 32, length), new ColumnHeader("loginfo.TOPIC_HI_2", 32, length), new ColumnHeader("loginfo.TOPIC_HI_3", 32, length), @@ -131,50 +131,70 @@ public int size() { return this.currentLine; } - public Trace absLogNum(final int b) { + public Trace absLogNum(final long b) { if (filled.get(0)) { throw new IllegalStateException("loginfo.ABS_LOG_NUM already set"); } else { filled.set(0); } - absLogNum.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("absLogNum has invalid value (" + b + ")"); + } + absLogNum.put((byte) (b >> 16)); + absLogNum.put((byte) (b >> 8)); + absLogNum.put((byte) b); return this; } - public Trace absLogNumMax(final int b) { + public Trace absLogNumMax(final long b) { if (filled.get(1)) { throw new IllegalStateException("loginfo.ABS_LOG_NUM_MAX already set"); } else { filled.set(1); } - absLogNumMax.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("absLogNumMax has invalid value (" + b + ")"); + } + absLogNumMax.put((byte) (b >> 16)); + absLogNumMax.put((byte) (b >> 8)); + absLogNumMax.put((byte) b); return this; } - public Trace absTxnNum(final int b) { + public Trace absTxnNum(final long b) { if (filled.get(2)) { throw new IllegalStateException("loginfo.ABS_TXN_NUM already set"); } else { filled.set(2); } - absTxnNum.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("absTxnNum has invalid value (" + b + ")"); + } + absTxnNum.put((byte) (b >> 16)); + absTxnNum.put((byte) (b >> 8)); + absTxnNum.put((byte) b); return this; } - public Trace absTxnNumMax(final int b) { + public Trace absTxnNumMax(final long b) { if (filled.get(3)) { throw new IllegalStateException("loginfo.ABS_TXN_NUM_MAX already set"); } else { filled.set(3); } - absTxnNumMax.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("absTxnNumMax has invalid value (" + b + ")"); + } + absTxnNumMax.put((byte) (b >> 16)); + absTxnNumMax.put((byte) (b >> 8)); + absTxnNumMax.put((byte) b); return this; } @@ -186,7 +206,13 @@ public Trace addrHi(final long b) { filled.set(4); } - addrHi.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("addrHi has invalid value (" + b + ")"); + } + addrHi.put((byte) (b >> 24)); + addrHi.put((byte) (b >> 16)); + addrHi.put((byte) (b >> 8)); + addrHi.put((byte) b); return this; } @@ -198,11 +224,20 @@ public Trace addrLo(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("addrLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { addrLo.put((byte) 0); } - addrLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + addrLo.put(bs.get(j)); + } return this; } @@ -238,11 +273,20 @@ public Trace dataHi(final Bytes b) { filled.set(8); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("dataHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { dataHi.put((byte) 0); } - dataHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + dataHi.put(bs.get(j)); + } return this; } @@ -254,11 +298,20 @@ public Trace dataLo(final Bytes b) { filled.set(9); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("dataLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { dataLo.put((byte) 0); } - dataLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + dataLo.put(bs.get(j)); + } return this; } @@ -270,7 +323,13 @@ public Trace dataSize(final long b) { filled.set(10); } - dataSize.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("dataSize has invalid value (" + b + ")"); + } + dataSize.put((byte) (b >> 24)); + dataSize.put((byte) (b >> 16)); + dataSize.put((byte) (b >> 8)); + dataSize.put((byte) b); return this; } @@ -347,14 +406,18 @@ public Trace isLogX4(final Boolean b) { return this; } - public Trace phase(final int b) { + public Trace phase(final long b) { if (filled.get(17)) { throw new IllegalStateException("loginfo.PHASE already set"); } else { filled.set(17); } - phase.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("phase has invalid value (" + b + ")"); + } + phase.put((byte) (b >> 8)); + phase.put((byte) b); return this; } @@ -366,11 +429,20 @@ public Trace topicHi1(final Bytes b) { filled.set(18); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("topicHi1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { topicHi1.put((byte) 0); } - topicHi1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + topicHi1.put(bs.get(j)); + } return this; } @@ -382,11 +454,20 @@ public Trace topicHi2(final Bytes b) { filled.set(19); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("topicHi2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { topicHi2.put((byte) 0); } - topicHi2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + topicHi2.put(bs.get(j)); + } return this; } @@ -398,11 +479,20 @@ public Trace topicHi3(final Bytes b) { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("topicHi3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { topicHi3.put((byte) 0); } - topicHi3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + topicHi3.put(bs.get(j)); + } return this; } @@ -414,11 +504,20 @@ public Trace topicHi4(final Bytes b) { filled.set(21); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("topicHi4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { topicHi4.put((byte) 0); } - topicHi4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + topicHi4.put(bs.get(j)); + } return this; } @@ -430,11 +529,20 @@ public Trace topicLo1(final Bytes b) { filled.set(22); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("topicLo1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { topicLo1.put((byte) 0); } - topicLo1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + topicLo1.put(bs.get(j)); + } return this; } @@ -446,11 +554,20 @@ public Trace topicLo2(final Bytes b) { filled.set(23); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("topicLo2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { topicLo2.put((byte) 0); } - topicLo2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + topicLo2.put(bs.get(j)); + } return this; } @@ -462,11 +579,20 @@ public Trace topicLo3(final Bytes b) { filled.set(24); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("topicLo3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { topicLo3.put((byte) 0); } - topicLo3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + topicLo3.put(bs.get(j)); + } return this; } @@ -478,11 +604,20 @@ public Trace topicLo4(final Bytes b) { filled.set(25); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("topicLo4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { topicLo4.put((byte) 0); } - topicLo4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + topicLo4.put(bs.get(j)); + } return this; } @@ -616,27 +751,27 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - absLogNum.position(absLogNum.position() + 4); + absLogNum.position(absLogNum.position() + 3); } if (!filled.get(1)) { - absLogNumMax.position(absLogNumMax.position() + 4); + absLogNumMax.position(absLogNumMax.position() + 3); } if (!filled.get(2)) { - absTxnNum.position(absTxnNum.position() + 4); + absTxnNum.position(absTxnNum.position() + 3); } if (!filled.get(3)) { - absTxnNumMax.position(absTxnNumMax.position() + 4); + absTxnNumMax.position(absTxnNumMax.position() + 3); } if (!filled.get(4)) { - addrHi.position(addrHi.position() + 8); + addrHi.position(addrHi.position() + 4); } if (!filled.get(5)) { - addrLo.position(addrLo.position() + 32); + addrLo.position(addrLo.position() + 16); } if (!filled.get(6)) { @@ -648,15 +783,15 @@ public Trace fillAndValidateRow() { } if (!filled.get(8)) { - dataHi.position(dataHi.position() + 32); + dataHi.position(dataHi.position() + 16); } if (!filled.get(9)) { - dataLo.position(dataLo.position() + 32); + dataLo.position(dataLo.position() + 16); } if (!filled.get(10)) { - dataSize.position(dataSize.position() + 8); + dataSize.position(dataSize.position() + 4); } if (!filled.get(11)) { @@ -684,7 +819,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(17)) { - phase.position(phase.position() + 4); + phase.position(phase.position() + 2); } if (!filled.get(18)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmio/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmio/Trace.java index 695fa22f6f..aa29f75441 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmio/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmio/Trace.java @@ -108,14 +108,14 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("mmio.ACC_1", 32, length), - new ColumnHeader("mmio.ACC_2", 32, length), - new ColumnHeader("mmio.ACC_3", 32, length), - new ColumnHeader("mmio.ACC_4", 32, length), - new ColumnHeader("mmio.ACC_A", 32, length), - new ColumnHeader("mmio.ACC_B", 32, length), - new ColumnHeader("mmio.ACC_C", 32, length), - new ColumnHeader("mmio.ACC_LIMB", 32, length), + new ColumnHeader("mmio.ACC_1", 16, length), + new ColumnHeader("mmio.ACC_2", 16, length), + new ColumnHeader("mmio.ACC_3", 16, length), + new ColumnHeader("mmio.ACC_4", 16, length), + new ColumnHeader("mmio.ACC_A", 16, length), + new ColumnHeader("mmio.ACC_B", 16, length), + new ColumnHeader("mmio.ACC_C", 16, length), + new ColumnHeader("mmio.ACC_LIMB", 16, length), new ColumnHeader("mmio.BIT_1", 1, length), new ColumnHeader("mmio.BIT_2", 1, length), new ColumnHeader("mmio.BIT_3", 1, length), @@ -125,13 +125,13 @@ static List headers(int length) { new ColumnHeader("mmio.BYTE_B", 1, length), new ColumnHeader("mmio.BYTE_C", 1, length), new ColumnHeader("mmio.BYTE_LIMB", 1, length), - new ColumnHeader("mmio.CN_A", 32, length), - new ColumnHeader("mmio.CN_B", 32, length), - new ColumnHeader("mmio.CN_C", 32, length), - new ColumnHeader("mmio.CONTEXT_SOURCE", 32, length), - new ColumnHeader("mmio.CONTEXT_TARGET", 32, length), - new ColumnHeader("mmio.COUNTER", 2, length), - new ColumnHeader("mmio.EXO_ID", 8, length), + new ColumnHeader("mmio.CN_A", 8, length), + new ColumnHeader("mmio.CN_B", 8, length), + new ColumnHeader("mmio.CN_C", 8, length), + new ColumnHeader("mmio.CONTEXT_SOURCE", 8, length), + new ColumnHeader("mmio.CONTEXT_TARGET", 8, length), + new ColumnHeader("mmio.COUNTER", 1, length), + new ColumnHeader("mmio.EXO_ID", 4, length), new ColumnHeader("mmio.EXO_IS_BLAKEMODEXP", 1, length), new ColumnHeader("mmio.EXO_IS_ECDATA", 1, length), new ColumnHeader("mmio.EXO_IS_KEC", 1, length), @@ -139,12 +139,12 @@ static List headers(int length) { new ColumnHeader("mmio.EXO_IS_RIPSHA", 1, length), new ColumnHeader("mmio.EXO_IS_ROM", 1, length), new ColumnHeader("mmio.EXO_IS_TXCD", 1, length), - new ColumnHeader("mmio.EXO_SUM", 8, length), + new ColumnHeader("mmio.EXO_SUM", 4, length), new ColumnHeader("mmio.FAST", 1, length), - new ColumnHeader("mmio.INDEX_A", 32, length), - new ColumnHeader("mmio.INDEX_B", 32, length), - new ColumnHeader("mmio.INDEX_C", 32, length), - new ColumnHeader("mmio.INDEX_X", 32, length), + new ColumnHeader("mmio.INDEX_A", 8, length), + new ColumnHeader("mmio.INDEX_B", 8, length), + new ColumnHeader("mmio.INDEX_C", 8, length), + new ColumnHeader("mmio.INDEX_X", 8, length), new ColumnHeader("mmio.IS_LIMB_TO_RAM_ONE_TARGET", 1, length), new ColumnHeader("mmio.IS_LIMB_TO_RAM_TRANSPLANT", 1, length), new ColumnHeader("mmio.IS_LIMB_TO_RAM_TWO_TARGET", 1, length), @@ -158,27 +158,27 @@ static List headers(int length) { new ColumnHeader("mmio.IS_RAM_TO_RAM_TWO_SOURCE", 1, length), new ColumnHeader("mmio.IS_RAM_TO_RAM_TWO_TARGET", 1, length), new ColumnHeader("mmio.IS_RAM_VANISHES", 1, length), - new ColumnHeader("mmio.KEC_ID", 8, length), - new ColumnHeader("mmio.LIMB", 32, length), - new ColumnHeader("mmio.MMIO_INSTRUCTION", 4, length), - new ColumnHeader("mmio.MMIO_STAMP", 8, length), - new ColumnHeader("mmio.PHASE", 8, length), - new ColumnHeader("mmio.POW_256_1", 32, length), - new ColumnHeader("mmio.POW_256_2", 32, length), - new ColumnHeader("mmio.SIZE", 32, length), + new ColumnHeader("mmio.KEC_ID", 4, length), + new ColumnHeader("mmio.LIMB", 16, length), + new ColumnHeader("mmio.MMIO_INSTRUCTION", 2, length), + new ColumnHeader("mmio.MMIO_STAMP", 4, length), + new ColumnHeader("mmio.PHASE", 4, length), + new ColumnHeader("mmio.POW_256_1", 16, length), + new ColumnHeader("mmio.POW_256_2", 16, length), + new ColumnHeader("mmio.SIZE", 8, length), new ColumnHeader("mmio.SLOW", 1, length), - new ColumnHeader("mmio.SOURCE_BYTE_OFFSET", 2, length), - new ColumnHeader("mmio.SOURCE_LIMB_OFFSET", 32, length), + new ColumnHeader("mmio.SOURCE_BYTE_OFFSET", 1, length), + new ColumnHeader("mmio.SOURCE_LIMB_OFFSET", 8, length), new ColumnHeader("mmio.SUCCESS_BIT", 1, length), - new ColumnHeader("mmio.TARGET_BYTE_OFFSET", 2, length), - new ColumnHeader("mmio.TARGET_LIMB_OFFSET", 32, length), - new ColumnHeader("mmio.TOTAL_SIZE", 32, length), - new ColumnHeader("mmio.VAL_A", 32, length), - new ColumnHeader("mmio.VAL_A_NEW", 32, length), - new ColumnHeader("mmio.VAL_B", 32, length), - new ColumnHeader("mmio.VAL_B_NEW", 32, length), - new ColumnHeader("mmio.VAL_C", 32, length), - new ColumnHeader("mmio.VAL_C_NEW", 32, length)); + new ColumnHeader("mmio.TARGET_BYTE_OFFSET", 1, length), + new ColumnHeader("mmio.TARGET_LIMB_OFFSET", 8, length), + new ColumnHeader("mmio.TOTAL_SIZE", 8, length), + new ColumnHeader("mmio.VAL_A", 16, length), + new ColumnHeader("mmio.VAL_A_NEW", 16, length), + new ColumnHeader("mmio.VAL_B", 16, length), + new ColumnHeader("mmio.VAL_B_NEW", 16, length), + new ColumnHeader("mmio.VAL_C", 16, length), + new ColumnHeader("mmio.VAL_C_NEW", 16, length)); } public Trace(List buffers) { @@ -270,11 +270,20 @@ public Trace acc1(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc1.put((byte) 0); } - acc1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc1.put(bs.get(j)); + } return this; } @@ -286,11 +295,20 @@ public Trace acc2(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc2.put((byte) 0); } - acc2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc2.put(bs.get(j)); + } return this; } @@ -302,11 +320,20 @@ public Trace acc3(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc3.put((byte) 0); } - acc3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc3.put(bs.get(j)); + } return this; } @@ -318,11 +345,20 @@ public Trace acc4(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc4.put((byte) 0); } - acc4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc4.put(bs.get(j)); + } return this; } @@ -334,11 +370,20 @@ public Trace accA(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("accA has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { accA.put((byte) 0); } - accA.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accA.put(bs.get(j)); + } return this; } @@ -350,11 +395,20 @@ public Trace accB(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("accB has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { accB.put((byte) 0); } - accB.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB.put(bs.get(j)); + } return this; } @@ -366,11 +420,20 @@ public Trace accC(final Bytes b) { filled.set(6); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("accC has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { accC.put((byte) 0); } - accC.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accC.put(bs.get(j)); + } return this; } @@ -382,11 +445,20 @@ public Trace accLimb(final Bytes b) { filled.set(7); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("accLimb has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { accLimb.put((byte) 0); } - accLimb.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accLimb.put(bs.get(j)); + } return this; } @@ -506,11 +578,20 @@ public Trace cnA(final Bytes b) { filled.set(17); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("cnA has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { cnA.put((byte) 0); } - cnA.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + cnA.put(bs.get(j)); + } return this; } @@ -522,11 +603,20 @@ public Trace cnB(final Bytes b) { filled.set(18); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("cnB has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { cnB.put((byte) 0); } - cnB.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + cnB.put(bs.get(j)); + } return this; } @@ -538,11 +628,20 @@ public Trace cnC(final Bytes b) { filled.set(19); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("cnC has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { cnC.put((byte) 0); } - cnC.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + cnC.put(bs.get(j)); + } return this; } @@ -554,11 +653,21 @@ public Trace contextSource(final Bytes b) { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "contextSource has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { contextSource.put((byte) 0); } - contextSource.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + contextSource.put(bs.get(j)); + } return this; } @@ -570,23 +679,36 @@ public Trace contextTarget(final Bytes b) { filled.set(21); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "contextTarget has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { contextTarget.put((byte) 0); } - contextTarget.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + contextTarget.put(bs.get(j)); + } return this; } - public Trace counter(final short b) { + public Trace counter(final long b) { if (filled.get(22)) { throw new IllegalStateException("mmio.COUNTER already set"); } else { filled.set(22); } - counter.putShort(b); + if (b >= 256L) { + throw new IllegalArgumentException("counter has invalid value (" + b + ")"); + } + counter.put((byte) b); return this; } @@ -598,7 +720,13 @@ public Trace exoId(final long b) { filled.set(23); } - exoId.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("exoId has invalid value (" + b + ")"); + } + exoId.put((byte) (b >> 24)); + exoId.put((byte) (b >> 16)); + exoId.put((byte) (b >> 8)); + exoId.put((byte) b); return this; } @@ -694,7 +822,13 @@ public Trace exoSum(final long b) { filled.set(31); } - exoSum.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("exoSum has invalid value (" + b + ")"); + } + exoSum.put((byte) (b >> 24)); + exoSum.put((byte) (b >> 16)); + exoSum.put((byte) (b >> 8)); + exoSum.put((byte) b); return this; } @@ -718,11 +852,20 @@ public Trace indexA(final Bytes b) { filled.set(33); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("indexA has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { indexA.put((byte) 0); } - indexA.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + indexA.put(bs.get(j)); + } return this; } @@ -734,11 +877,20 @@ public Trace indexB(final Bytes b) { filled.set(34); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("indexB has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { indexB.put((byte) 0); } - indexB.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + indexB.put(bs.get(j)); + } return this; } @@ -750,11 +902,20 @@ public Trace indexC(final Bytes b) { filled.set(35); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("indexC has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { indexC.put((byte) 0); } - indexC.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + indexC.put(bs.get(j)); + } return this; } @@ -766,11 +927,20 @@ public Trace indexX(final Bytes b) { filled.set(36); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("indexX has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { indexX.put((byte) 0); } - indexX.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + indexX.put(bs.get(j)); + } return this; } @@ -938,7 +1108,13 @@ public Trace kecId(final long b) { filled.set(50); } - kecId.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("kecId has invalid value (" + b + ")"); + } + kecId.put((byte) (b >> 24)); + kecId.put((byte) (b >> 16)); + kecId.put((byte) (b >> 8)); + kecId.put((byte) b); return this; } @@ -950,23 +1126,36 @@ public Trace limb(final Bytes b) { filled.set(51); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("limb has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb.put((byte) 0); } - limb.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb.put(bs.get(j)); + } return this; } - public Trace mmioInstruction(final int b) { + public Trace mmioInstruction(final long b) { if (filled.get(52)) { throw new IllegalStateException("mmio.MMIO_INSTRUCTION already set"); } else { filled.set(52); } - mmioInstruction.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("mmioInstruction has invalid value (" + b + ")"); + } + mmioInstruction.put((byte) (b >> 8)); + mmioInstruction.put((byte) b); return this; } @@ -978,7 +1167,13 @@ public Trace mmioStamp(final long b) { filled.set(53); } - mmioStamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("mmioStamp has invalid value (" + b + ")"); + } + mmioStamp.put((byte) (b >> 24)); + mmioStamp.put((byte) (b >> 16)); + mmioStamp.put((byte) (b >> 8)); + mmioStamp.put((byte) b); return this; } @@ -990,7 +1185,13 @@ public Trace phase(final long b) { filled.set(54); } - phase.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("phase has invalid value (" + b + ")"); + } + phase.put((byte) (b >> 24)); + phase.put((byte) (b >> 16)); + phase.put((byte) (b >> 8)); + phase.put((byte) b); return this; } @@ -1002,11 +1203,20 @@ public Trace pow2561(final Bytes b) { filled.set(55); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("pow2561 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { pow2561.put((byte) 0); } - pow2561.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + pow2561.put(bs.get(j)); + } return this; } @@ -1018,11 +1228,20 @@ public Trace pow2562(final Bytes b) { filled.set(56); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("pow2562 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { pow2562.put((byte) 0); } - pow2562.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + pow2562.put(bs.get(j)); + } return this; } @@ -1034,11 +1253,20 @@ public Trace size(final Bytes b) { filled.set(57); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("size has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { size.put((byte) 0); } - size.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + size.put(bs.get(j)); + } return this; } @@ -1055,14 +1283,17 @@ public Trace slow(final Boolean b) { return this; } - public Trace sourceByteOffset(final short b) { + public Trace sourceByteOffset(final long b) { if (filled.get(59)) { throw new IllegalStateException("mmio.SOURCE_BYTE_OFFSET already set"); } else { filled.set(59); } - sourceByteOffset.putShort(b); + if (b >= 256L) { + throw new IllegalArgumentException("sourceByteOffset has invalid value (" + b + ")"); + } + sourceByteOffset.put((byte) b); return this; } @@ -1074,11 +1305,21 @@ public Trace sourceLimbOffset(final Bytes b) { filled.set(60); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "sourceLimbOffset has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { sourceLimbOffset.put((byte) 0); } - sourceLimbOffset.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + sourceLimbOffset.put(bs.get(j)); + } return this; } @@ -1095,14 +1336,17 @@ public Trace successBit(final Boolean b) { return this; } - public Trace targetByteOffset(final short b) { + public Trace targetByteOffset(final long b) { if (filled.get(62)) { throw new IllegalStateException("mmio.TARGET_BYTE_OFFSET already set"); } else { filled.set(62); } - targetByteOffset.putShort(b); + if (b >= 256L) { + throw new IllegalArgumentException("targetByteOffset has invalid value (" + b + ")"); + } + targetByteOffset.put((byte) b); return this; } @@ -1114,11 +1358,21 @@ public Trace targetLimbOffset(final Bytes b) { filled.set(63); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "targetLimbOffset has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { targetLimbOffset.put((byte) 0); } - targetLimbOffset.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + targetLimbOffset.put(bs.get(j)); + } return this; } @@ -1130,11 +1384,21 @@ public Trace totalSize(final Bytes b) { filled.set(64); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "totalSize has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { totalSize.put((byte) 0); } - totalSize.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + totalSize.put(bs.get(j)); + } return this; } @@ -1146,11 +1410,20 @@ public Trace valA(final Bytes b) { filled.set(65); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("valA has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { valA.put((byte) 0); } - valA.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + valA.put(bs.get(j)); + } return this; } @@ -1162,11 +1435,20 @@ public Trace valANew(final Bytes b) { filled.set(66); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("valANew has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { valANew.put((byte) 0); } - valANew.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + valANew.put(bs.get(j)); + } return this; } @@ -1178,11 +1460,20 @@ public Trace valB(final Bytes b) { filled.set(67); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("valB has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { valB.put((byte) 0); } - valB.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + valB.put(bs.get(j)); + } return this; } @@ -1194,11 +1485,20 @@ public Trace valBNew(final Bytes b) { filled.set(68); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("valBNew has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { valBNew.put((byte) 0); } - valBNew.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + valBNew.put(bs.get(j)); + } return this; } @@ -1210,11 +1510,20 @@ public Trace valC(final Bytes b) { filled.set(69); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("valC has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { valC.put((byte) 0); } - valC.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + valC.put(bs.get(j)); + } return this; } @@ -1226,11 +1535,20 @@ public Trace valCNew(final Bytes b) { filled.set(70); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("valCNew has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { valCNew.put((byte) 0); } - valCNew.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + valCNew.put(bs.get(j)); + } return this; } @@ -1528,35 +1846,35 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - acc1.position(acc1.position() + 32); + acc1.position(acc1.position() + 16); } if (!filled.get(1)) { - acc2.position(acc2.position() + 32); + acc2.position(acc2.position() + 16); } if (!filled.get(2)) { - acc3.position(acc3.position() + 32); + acc3.position(acc3.position() + 16); } if (!filled.get(3)) { - acc4.position(acc4.position() + 32); + acc4.position(acc4.position() + 16); } if (!filled.get(4)) { - accA.position(accA.position() + 32); + accA.position(accA.position() + 16); } if (!filled.get(5)) { - accB.position(accB.position() + 32); + accB.position(accB.position() + 16); } if (!filled.get(6)) { - accC.position(accC.position() + 32); + accC.position(accC.position() + 16); } if (!filled.get(7)) { - accLimb.position(accLimb.position() + 32); + accLimb.position(accLimb.position() + 16); } if (!filled.get(8)) { @@ -1596,31 +1914,31 @@ public Trace fillAndValidateRow() { } if (!filled.get(17)) { - cnA.position(cnA.position() + 32); + cnA.position(cnA.position() + 8); } if (!filled.get(18)) { - cnB.position(cnB.position() + 32); + cnB.position(cnB.position() + 8); } if (!filled.get(19)) { - cnC.position(cnC.position() + 32); + cnC.position(cnC.position() + 8); } if (!filled.get(20)) { - contextSource.position(contextSource.position() + 32); + contextSource.position(contextSource.position() + 8); } if (!filled.get(21)) { - contextTarget.position(contextTarget.position() + 32); + contextTarget.position(contextTarget.position() + 8); } if (!filled.get(22)) { - counter.position(counter.position() + 2); + counter.position(counter.position() + 1); } if (!filled.get(23)) { - exoId.position(exoId.position() + 8); + exoId.position(exoId.position() + 4); } if (!filled.get(24)) { @@ -1652,7 +1970,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(31)) { - exoSum.position(exoSum.position() + 8); + exoSum.position(exoSum.position() + 4); } if (!filled.get(32)) { @@ -1660,19 +1978,19 @@ public Trace fillAndValidateRow() { } if (!filled.get(33)) { - indexA.position(indexA.position() + 32); + indexA.position(indexA.position() + 8); } if (!filled.get(34)) { - indexB.position(indexB.position() + 32); + indexB.position(indexB.position() + 8); } if (!filled.get(35)) { - indexC.position(indexC.position() + 32); + indexC.position(indexC.position() + 8); } if (!filled.get(36)) { - indexX.position(indexX.position() + 32); + indexX.position(indexX.position() + 8); } if (!filled.get(37)) { @@ -1728,35 +2046,35 @@ public Trace fillAndValidateRow() { } if (!filled.get(50)) { - kecId.position(kecId.position() + 8); + kecId.position(kecId.position() + 4); } if (!filled.get(51)) { - limb.position(limb.position() + 32); + limb.position(limb.position() + 16); } if (!filled.get(52)) { - mmioInstruction.position(mmioInstruction.position() + 4); + mmioInstruction.position(mmioInstruction.position() + 2); } if (!filled.get(53)) { - mmioStamp.position(mmioStamp.position() + 8); + mmioStamp.position(mmioStamp.position() + 4); } if (!filled.get(54)) { - phase.position(phase.position() + 8); + phase.position(phase.position() + 4); } if (!filled.get(55)) { - pow2561.position(pow2561.position() + 32); + pow2561.position(pow2561.position() + 16); } if (!filled.get(56)) { - pow2562.position(pow2562.position() + 32); + pow2562.position(pow2562.position() + 16); } if (!filled.get(57)) { - size.position(size.position() + 32); + size.position(size.position() + 8); } if (!filled.get(58)) { @@ -1764,11 +2082,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(59)) { - sourceByteOffset.position(sourceByteOffset.position() + 2); + sourceByteOffset.position(sourceByteOffset.position() + 1); } if (!filled.get(60)) { - sourceLimbOffset.position(sourceLimbOffset.position() + 32); + sourceLimbOffset.position(sourceLimbOffset.position() + 8); } if (!filled.get(61)) { @@ -1776,39 +2094,39 @@ public Trace fillAndValidateRow() { } if (!filled.get(62)) { - targetByteOffset.position(targetByteOffset.position() + 2); + targetByteOffset.position(targetByteOffset.position() + 1); } if (!filled.get(63)) { - targetLimbOffset.position(targetLimbOffset.position() + 32); + targetLimbOffset.position(targetLimbOffset.position() + 8); } if (!filled.get(64)) { - totalSize.position(totalSize.position() + 32); + totalSize.position(totalSize.position() + 8); } if (!filled.get(65)) { - valA.position(valA.position() + 32); + valA.position(valA.position() + 16); } if (!filled.get(66)) { - valANew.position(valANew.position() + 32); + valANew.position(valANew.position() + 16); } if (!filled.get(67)) { - valB.position(valB.position() + 32); + valB.position(valB.position() + 16); } if (!filled.get(68)) { - valBNew.position(valBNew.position() + 32); + valBNew.position(valBNew.position() + 16); } if (!filled.get(69)) { - valC.position(valC.position() + 32); + valC.position(valC.position() + 16); } if (!filled.get(70)) { - valCNew.position(valCNew.position() + 32); + valCNew.position(valCNew.position() + 16); } filled.clear(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/ExoSumDecoder.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/ExoSumDecoder.java index 2850de5fd6..98145c34a0 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/ExoSumDecoder.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/ExoSumDecoder.java @@ -18,11 +18,11 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.experimental.Accessors; -import net.consensys.linea.zktracer.module.blake2fmodexpdata.Blake2fModexpData; +import net.consensys.linea.zktracer.module.blake2fmodexpdata.BlakeModexpData; import net.consensys.linea.zktracer.module.ecdata.EcData; import net.consensys.linea.zktracer.module.mmu.values.HubToMmuValues; import net.consensys.linea.zktracer.module.rlptxn.RlpTxn; -import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxrcpt; +import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxnRcpt; import net.consensys.linea.zktracer.module.romlex.RomLex; import net.consensys.linea.zktracer.runtime.callstack.CallStack; import org.apache.tuweni.bytes.Bytes; @@ -34,9 +34,9 @@ public class ExoSumDecoder { private final CallStack callStack; private final RomLex romLex; private final RlpTxn rlpTxn; - private final RlpTxrcpt rlpTxrcpt; + private final RlpTxnRcpt rlpTxnRcpt; private final EcData ecData; - private final Blake2fModexpData blake2fModexpData; + private final BlakeModexpData blakeModexpData; private boolean exoIsRom; private boolean exoIsBlake2fModexp; @@ -64,7 +64,7 @@ public Bytes getExoBytes(final HubToMmuValues hubToMmuValues, final int exoId) { } if (exoIsLog) { - return this.rlpTxrcpt.getLogDataByAbsLogNumber(exoId); + return this.rlpTxnRcpt.getLogDataByAbsLogNumber(exoId); } if (exoIsEcData) { @@ -78,7 +78,7 @@ public Bytes getExoBytes(final HubToMmuValues hubToMmuValues, final int exoId) { } if (exoIsBlake2fModexp) { - return this.blake2fModexpData.getInputDataByIdAndPhase(exoId, hubToMmuValues.phase()); + return this.blakeModexpData.getInputDataByIdAndPhase(exoId, hubToMmuValues.phase()); } if (exoIsKeccak) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Mmu.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Mmu.java index 0491cb55b9..adb0221271 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Mmu.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Mmu.java @@ -23,13 +23,13 @@ import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.container.stacked.list.StackedList; import net.consensys.linea.zktracer.module.Module; -import net.consensys.linea.zktracer.module.blake2fmodexpdata.Blake2fModexpData; +import net.consensys.linea.zktracer.module.blake2fmodexpdata.BlakeModexpData; import net.consensys.linea.zktracer.module.ecdata.EcData; import net.consensys.linea.zktracer.module.euc.Euc; import net.consensys.linea.zktracer.module.hub.fragment.imc.call.mmu.MmuCall; import net.consensys.linea.zktracer.module.mmu.values.HubToMmuValues; import net.consensys.linea.zktracer.module.rlptxn.RlpTxn; -import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxrcpt; +import net.consensys.linea.zktracer.module.rlptxrcpt.RlpTxnRcpt; import net.consensys.linea.zktracer.module.romlex.RomLex; import net.consensys.linea.zktracer.module.wcp.Wcp; import net.consensys.linea.zktracer.runtime.callstack.CallStack; @@ -47,15 +47,15 @@ public Mmu( final Wcp wcp, final RomLex romLex, final RlpTxn rlpTxn, - final RlpTxrcpt rlpTxrcpt, + final RlpTxnRcpt rlpTxnRcpt, final EcData ecData, - final Blake2fModexpData blake2fModexpData, + final BlakeModexpData blakeModexpData, // TODO: SHAKIRA module final CallStack callStack) { this.euc = euc; this.wcp = wcp; this.exoSumDecoder = - new ExoSumDecoder(callStack, romLex, rlpTxn, rlpTxrcpt, ecData, blake2fModexpData); + new ExoSumDecoder(callStack, romLex, rlpTxn, rlpTxnRcpt, ecData, blakeModexpData); } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Trace.java index 2e4d5d0a04..02add7735c 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/Trace.java @@ -138,14 +138,14 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("mmu.AUX_ID_xor_CN_S_xor_EUC_A", 32, length), + new ColumnHeader("mmu.AUX_ID_xor_CN_S_xor_EUC_A", 8, length), new ColumnHeader("mmu.BIN_1", 1, length), new ColumnHeader("mmu.BIN_2", 1, length), new ColumnHeader("mmu.BIN_3", 1, length), new ColumnHeader("mmu.BIN_4", 1, length), new ColumnHeader("mmu.BIN_5", 1, length), - new ColumnHeader("mmu.EXO_SUM_xor_EXO_ID", 8, length), - new ColumnHeader("mmu.INST_xor_INST_xor_CT", 4, length), + new ColumnHeader("mmu.EXO_SUM_xor_EXO_ID", 4, length), + new ColumnHeader("mmu.INST_xor_INST_xor_CT", 2, length), new ColumnHeader("mmu.IS_ANY_TO_RAM_WITH_PADDING_PURE_PADDING", 1, length), new ColumnHeader("mmu.IS_ANY_TO_RAM_WITH_PADDING_SOME_DATA", 1, length), new ColumnHeader("mmu.IS_BLAKE", 1, length), @@ -159,46 +159,46 @@ static List headers(int length) { new ColumnHeader("mmu.IS_RAM_TO_EXO_WITH_PADDING", 1, length), new ColumnHeader("mmu.IS_RAM_TO_RAM_SANS_PADDING", 1, length), new ColumnHeader("mmu.IS_RIGHT_PADDED_WORD_EXTRACTION", 1, length), - new ColumnHeader("mmu.KEC_ID", 8, length), - new ColumnHeader("mmu.LIMB_1_xor_LIMB_xor_WCP_ARG_1_HI", 32, length), - new ColumnHeader("mmu.LIMB_2_xor_WCP_ARG_1_LO", 32, length), + new ColumnHeader("mmu.KEC_ID", 4, length), + new ColumnHeader("mmu.LIMB_1_xor_LIMB_xor_WCP_ARG_1_HI", 16, length), + new ColumnHeader("mmu.LIMB_2_xor_WCP_ARG_1_LO", 16, length), new ColumnHeader("mmu.LZRO", 1, length), new ColumnHeader("mmu.MACRO", 1, length), new ColumnHeader("mmu.MICRO", 1, length), - new ColumnHeader("mmu.MMIO_STAMP", 8, length), + new ColumnHeader("mmu.MMIO_STAMP", 4, length), new ColumnHeader("mmu.NT_FIRST", 1, length), new ColumnHeader("mmu.NT_LAST", 1, length), new ColumnHeader("mmu.NT_MDDL", 1, length), new ColumnHeader("mmu.NT_ONLY", 1, length), - new ColumnHeader("mmu.OUT_1", 32, length), - new ColumnHeader("mmu.OUT_2", 32, length), - new ColumnHeader("mmu.OUT_3", 32, length), - new ColumnHeader("mmu.OUT_4", 32, length), - new ColumnHeader("mmu.OUT_5", 32, length), - new ColumnHeader("mmu.PHASE", 8, length), - new ColumnHeader("mmu.PHASE_xor_EXO_SUM", 8, length), + new ColumnHeader("mmu.OUT_1", 8, length), + new ColumnHeader("mmu.OUT_2", 8, length), + new ColumnHeader("mmu.OUT_3", 8, length), + new ColumnHeader("mmu.OUT_4", 8, length), + new ColumnHeader("mmu.OUT_5", 8, length), + new ColumnHeader("mmu.PHASE", 4, length), + new ColumnHeader("mmu.PHASE_xor_EXO_SUM", 4, length), new ColumnHeader("mmu.PRPRC", 1, length), - new ColumnHeader("mmu.REF_OFFSET_xor_CN_T_xor_EUC_B", 32, length), - new ColumnHeader("mmu.REF_SIZE_xor_SLO_xor_EUC_CEIL", 32, length), + new ColumnHeader("mmu.REF_OFFSET_xor_CN_T_xor_EUC_B", 8, length), + new ColumnHeader("mmu.REF_SIZE_xor_SLO_xor_EUC_CEIL", 8, length), new ColumnHeader("mmu.RZ_FIRST", 1, length), new ColumnHeader("mmu.RZ_LAST", 1, length), new ColumnHeader("mmu.RZ_MDDL", 1, length), new ColumnHeader("mmu.RZ_ONLY", 1, length), new ColumnHeader("mmu.SBO_xor_WCP_INST", 1, length), new ColumnHeader("mmu.SIZE", 1, length), - new ColumnHeader("mmu.SIZE_xor_TLO_xor_EUC_QUOT", 32, length), - new ColumnHeader("mmu.SRC_ID_xor_TOTAL_SIZE_xor_EUC_REM", 32, length), - new ColumnHeader("mmu.SRC_OFFSET_HI_xor_WCP_ARG_2_LO", 32, length), - new ColumnHeader("mmu.SRC_OFFSET_LO", 32, length), - new ColumnHeader("mmu.STAMP", 8, length), + new ColumnHeader("mmu.SIZE_xor_TLO_xor_EUC_QUOT", 8, length), + new ColumnHeader("mmu.SRC_ID_xor_TOTAL_SIZE_xor_EUC_REM", 8, length), + new ColumnHeader("mmu.SRC_OFFSET_HI_xor_WCP_ARG_2_LO", 16, length), + new ColumnHeader("mmu.SRC_OFFSET_LO", 16, length), + new ColumnHeader("mmu.STAMP", 4, length), new ColumnHeader("mmu.SUCCESS_BIT_xor_SUCCESS_BIT_xor_EUC_FLAG", 1, length), new ColumnHeader("mmu.TBO", 1, length), - new ColumnHeader("mmu.TGT_ID", 32, length), - new ColumnHeader("mmu.TGT_OFFSET_LO", 32, length), - new ColumnHeader("mmu.TOT", 8, length), - new ColumnHeader("mmu.TOTLZ", 8, length), - new ColumnHeader("mmu.TOTNT", 8, length), - new ColumnHeader("mmu.TOTRZ", 8, length), + new ColumnHeader("mmu.TGT_ID", 8, length), + new ColumnHeader("mmu.TGT_OFFSET_LO", 8, length), + new ColumnHeader("mmu.TOT", 4, length), + new ColumnHeader("mmu.TOTLZ", 4, length), + new ColumnHeader("mmu.TOTNT", 4, length), + new ColumnHeader("mmu.TOTRZ", 4, length), new ColumnHeader("mmu.WCP_FLAG", 1, length), new ColumnHeader("mmu.WCP_RES", 1, length)); } @@ -536,7 +536,13 @@ public Trace mmioStamp(final long b) { filled.set(21); } - mmioStamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("mmioStamp has invalid value (" + b + ")"); + } + mmioStamp.put((byte) (b >> 24)); + mmioStamp.put((byte) (b >> 16)); + mmioStamp.put((byte) (b >> 8)); + mmioStamp.put((byte) b); return this; } @@ -596,11 +602,20 @@ public Trace out1(final Bytes b) { filled.set(26); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("out1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { out1.put((byte) 0); } - out1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + out1.put(bs.get(j)); + } return this; } @@ -612,11 +627,20 @@ public Trace out2(final Bytes b) { filled.set(27); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("out2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { out2.put((byte) 0); } - out2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + out2.put(bs.get(j)); + } return this; } @@ -628,11 +652,20 @@ public Trace out3(final Bytes b) { filled.set(28); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("out3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { out3.put((byte) 0); } - out3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + out3.put(bs.get(j)); + } return this; } @@ -644,11 +677,20 @@ public Trace out4(final Bytes b) { filled.set(29); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("out4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { out4.put((byte) 0); } - out4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + out4.put(bs.get(j)); + } return this; } @@ -660,11 +702,20 @@ public Trace out5(final Bytes b) { filled.set(30); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("out5 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { out5.put((byte) 0); } - out5.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + out5.put(bs.get(j)); + } return this; } @@ -676,11 +727,21 @@ public Trace pMacroAuxId(final Bytes b) { filled.set(52); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "auxIdXorCnSXorEucA has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { auxIdXorCnSXorEucA.put((byte) 0); } - auxIdXorCnSXorEucA.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + auxIdXorCnSXorEucA.put(bs.get(j)); + } return this; } @@ -692,19 +753,29 @@ public Trace pMacroExoSum(final long b) { filled.set(48); } - exoSumXorExoId.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("exoSumXorExoId has invalid value (" + b + ")"); + } + exoSumXorExoId.put((byte) (b >> 24)); + exoSumXorExoId.put((byte) (b >> 16)); + exoSumXorExoId.put((byte) (b >> 8)); + exoSumXorExoId.put((byte) b); return this; } - public Trace pMacroInst(final int b) { + public Trace pMacroInst(final long b) { if (filled.get(47)) { throw new IllegalStateException("mmu.macro/INST already set"); } else { filled.set(47); } - instXorInstXorCt.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("instXorInstXorCt has invalid value (" + b + ")"); + } + instXorInstXorCt.put((byte) (b >> 8)); + instXorInstXorCt.put((byte) b); return this; } @@ -716,11 +787,21 @@ public Trace pMacroLimb1(final Bytes b) { filled.set(59); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "limb1XorLimbXorWcpArg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb1XorLimbXorWcpArg1Hi.put((byte) 0); } - limb1XorLimbXorWcpArg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb1XorLimbXorWcpArg1Hi.put(bs.get(j)); + } return this; } @@ -732,11 +813,21 @@ public Trace pMacroLimb2(final Bytes b) { filled.set(60); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "limb2XorWcpArg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb2XorWcpArg1Lo.put((byte) 0); } - limb2XorWcpArg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb2XorWcpArg1Lo.put(bs.get(j)); + } return this; } @@ -748,7 +839,13 @@ public Trace pMacroPhase(final long b) { filled.set(49); } - phaseXorExoSum.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("phaseXorExoSum has invalid value (" + b + ")"); + } + phaseXorExoSum.put((byte) (b >> 24)); + phaseXorExoSum.put((byte) (b >> 16)); + phaseXorExoSum.put((byte) (b >> 8)); + phaseXorExoSum.put((byte) b); return this; } @@ -760,11 +857,21 @@ public Trace pMacroRefOffset(final Bytes b) { filled.set(53); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "refOffsetXorCnTXorEucB has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { refOffsetXorCnTXorEucB.put((byte) 0); } - refOffsetXorCnTXorEucB.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + refOffsetXorCnTXorEucB.put(bs.get(j)); + } return this; } @@ -776,11 +883,21 @@ public Trace pMacroRefSize(final Bytes b) { filled.set(54); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "refSizeXorSloXorEucCeil has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { refSizeXorSloXorEucCeil.put((byte) 0); } - refSizeXorSloXorEucCeil.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + refSizeXorSloXorEucCeil.put(bs.get(j)); + } return this; } @@ -792,11 +909,21 @@ public Trace pMacroSize(final Bytes b) { filled.set(55); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "sizeXorTloXorEucQuot has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { sizeXorTloXorEucQuot.put((byte) 0); } - sizeXorTloXorEucQuot.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + sizeXorTloXorEucQuot.put(bs.get(j)); + } return this; } @@ -808,11 +935,21 @@ public Trace pMacroSrcId(final Bytes b) { filled.set(56); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "srcIdXorTotalSizeXorEucRem has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { srcIdXorTotalSizeXorEucRem.put((byte) 0); } - srcIdXorTotalSizeXorEucRem.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + srcIdXorTotalSizeXorEucRem.put(bs.get(j)); + } return this; } @@ -824,11 +961,21 @@ public Trace pMacroSrcOffsetHi(final Bytes b) { filled.set(61); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "srcOffsetHiXorWcpArg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { srcOffsetHiXorWcpArg2Lo.put((byte) 0); } - srcOffsetHiXorWcpArg2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + srcOffsetHiXorWcpArg2Lo.put(bs.get(j)); + } return this; } @@ -840,11 +987,21 @@ public Trace pMacroSrcOffsetLo(final Bytes b) { filled.set(62); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "srcOffsetLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { srcOffsetLo.put((byte) 0); } - srcOffsetLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + srcOffsetLo.put(bs.get(j)); + } return this; } @@ -868,11 +1025,20 @@ public Trace pMacroTgtId(final Bytes b) { filled.set(57); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("tgtId has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { tgtId.put((byte) 0); } - tgtId.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + tgtId.put(bs.get(j)); + } return this; } @@ -884,11 +1050,21 @@ public Trace pMacroTgtOffsetLo(final Bytes b) { filled.set(58); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "tgtOffsetLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { tgtOffsetLo.put((byte) 0); } - tgtOffsetLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + tgtOffsetLo.put(bs.get(j)); + } return this; } @@ -900,11 +1076,21 @@ public Trace pMicroCnS(final Bytes b) { filled.set(52); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "auxIdXorCnSXorEucA has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { auxIdXorCnSXorEucA.put((byte) 0); } - auxIdXorCnSXorEucA.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + auxIdXorCnSXorEucA.put(bs.get(j)); + } return this; } @@ -916,11 +1102,21 @@ public Trace pMicroCnT(final Bytes b) { filled.set(53); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "refOffsetXorCnTXorEucB has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { refOffsetXorCnTXorEucB.put((byte) 0); } - refOffsetXorCnTXorEucB.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + refOffsetXorCnTXorEucB.put(bs.get(j)); + } return this; } @@ -932,7 +1128,13 @@ public Trace pMicroExoId(final long b) { filled.set(48); } - exoSumXorExoId.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("exoSumXorExoId has invalid value (" + b + ")"); + } + exoSumXorExoId.put((byte) (b >> 24)); + exoSumXorExoId.put((byte) (b >> 16)); + exoSumXorExoId.put((byte) (b >> 8)); + exoSumXorExoId.put((byte) b); return this; } @@ -944,19 +1146,29 @@ public Trace pMicroExoSum(final long b) { filled.set(49); } - phaseXorExoSum.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("phaseXorExoSum has invalid value (" + b + ")"); + } + phaseXorExoSum.put((byte) (b >> 24)); + phaseXorExoSum.put((byte) (b >> 16)); + phaseXorExoSum.put((byte) (b >> 8)); + phaseXorExoSum.put((byte) b); return this; } - public Trace pMicroInst(final int b) { + public Trace pMicroInst(final long b) { if (filled.get(47)) { throw new IllegalStateException("mmu.micro/INST already set"); } else { filled.set(47); } - instXorInstXorCt.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("instXorInstXorCt has invalid value (" + b + ")"); + } + instXorInstXorCt.put((byte) (b >> 8)); + instXorInstXorCt.put((byte) b); return this; } @@ -968,7 +1180,13 @@ public Trace pMicroKecId(final long b) { filled.set(50); } - kecId.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("kecId has invalid value (" + b + ")"); + } + kecId.put((byte) (b >> 24)); + kecId.put((byte) (b >> 16)); + kecId.put((byte) (b >> 8)); + kecId.put((byte) b); return this; } @@ -980,11 +1198,21 @@ public Trace pMicroLimb(final Bytes b) { filled.set(59); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "limb1XorLimbXorWcpArg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb1XorLimbXorWcpArg1Hi.put((byte) 0); } - limb1XorLimbXorWcpArg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb1XorLimbXorWcpArg1Hi.put(bs.get(j)); + } return this; } @@ -996,7 +1224,13 @@ public Trace pMicroPhase(final long b) { filled.set(51); } - phase.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("phase has invalid value (" + b + ")"); + } + phase.put((byte) (b >> 24)); + phase.put((byte) (b >> 16)); + phase.put((byte) (b >> 8)); + phase.put((byte) b); return this; } @@ -1032,11 +1266,21 @@ public Trace pMicroSlo(final Bytes b) { filled.set(54); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "refSizeXorSloXorEucCeil has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { refSizeXorSloXorEucCeil.put((byte) 0); } - refSizeXorSloXorEucCeil.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + refSizeXorSloXorEucCeil.put(bs.get(j)); + } return this; } @@ -1072,11 +1316,21 @@ public Trace pMicroTlo(final Bytes b) { filled.set(55); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "sizeXorTloXorEucQuot has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { sizeXorTloXorEucQuot.put((byte) 0); } - sizeXorTloXorEucQuot.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + sizeXorTloXorEucQuot.put(bs.get(j)); + } return this; } @@ -1088,23 +1342,37 @@ public Trace pMicroTotalSize(final Bytes b) { filled.set(56); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "srcIdXorTotalSizeXorEucRem has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { srcIdXorTotalSizeXorEucRem.put((byte) 0); } - srcIdXorTotalSizeXorEucRem.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + srcIdXorTotalSizeXorEucRem.put(bs.get(j)); + } return this; } - public Trace pPrprcCt(final int b) { + public Trace pPrprcCt(final long b) { if (filled.get(47)) { throw new IllegalStateException("mmu.prprc/CT already set"); } else { filled.set(47); } - instXorInstXorCt.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("instXorInstXorCt has invalid value (" + b + ")"); + } + instXorInstXorCt.put((byte) (b >> 8)); + instXorInstXorCt.put((byte) b); return this; } @@ -1116,11 +1384,21 @@ public Trace pPrprcEucA(final Bytes b) { filled.set(52); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "auxIdXorCnSXorEucA has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { auxIdXorCnSXorEucA.put((byte) 0); } - auxIdXorCnSXorEucA.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + auxIdXorCnSXorEucA.put(bs.get(j)); + } return this; } @@ -1132,11 +1410,21 @@ public Trace pPrprcEucB(final Bytes b) { filled.set(53); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "refOffsetXorCnTXorEucB has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { refOffsetXorCnTXorEucB.put((byte) 0); } - refOffsetXorCnTXorEucB.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + refOffsetXorCnTXorEucB.put(bs.get(j)); + } return this; } @@ -1148,11 +1436,21 @@ public Trace pPrprcEucCeil(final Bytes b) { filled.set(54); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "refSizeXorSloXorEucCeil has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { refSizeXorSloXorEucCeil.put((byte) 0); } - refSizeXorSloXorEucCeil.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + refSizeXorSloXorEucCeil.put(bs.get(j)); + } return this; } @@ -1176,11 +1474,21 @@ public Trace pPrprcEucQuot(final Bytes b) { filled.set(55); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "sizeXorTloXorEucQuot has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { sizeXorTloXorEucQuot.put((byte) 0); } - sizeXorTloXorEucQuot.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + sizeXorTloXorEucQuot.put(bs.get(j)); + } return this; } @@ -1192,11 +1500,21 @@ public Trace pPrprcEucRem(final Bytes b) { filled.set(56); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "srcIdXorTotalSizeXorEucRem has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { srcIdXorTotalSizeXorEucRem.put((byte) 0); } - srcIdXorTotalSizeXorEucRem.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + srcIdXorTotalSizeXorEucRem.put(bs.get(j)); + } return this; } @@ -1208,11 +1526,21 @@ public Trace pPrprcWcpArg1Hi(final Bytes b) { filled.set(59); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "limb1XorLimbXorWcpArg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb1XorLimbXorWcpArg1Hi.put((byte) 0); } - limb1XorLimbXorWcpArg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb1XorLimbXorWcpArg1Hi.put(bs.get(j)); + } return this; } @@ -1224,11 +1552,21 @@ public Trace pPrprcWcpArg1Lo(final Bytes b) { filled.set(60); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "limb2XorWcpArg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb2XorWcpArg1Lo.put((byte) 0); } - limb2XorWcpArg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb2XorWcpArg1Lo.put(bs.get(j)); + } return this; } @@ -1240,11 +1578,21 @@ public Trace pPrprcWcpArg2Lo(final Bytes b) { filled.set(61); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "srcOffsetHiXorWcpArg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { srcOffsetHiXorWcpArg2Lo.put((byte) 0); } - srcOffsetHiXorWcpArg2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + srcOffsetHiXorWcpArg2Lo.put(bs.get(j)); + } return this; } @@ -1352,7 +1700,13 @@ public Trace stamp(final long b) { filled.set(36); } - stamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 24)); + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); return this; } @@ -1364,7 +1718,13 @@ public Trace tot(final long b) { filled.set(37); } - tot.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("tot has invalid value (" + b + ")"); + } + tot.put((byte) (b >> 24)); + tot.put((byte) (b >> 16)); + tot.put((byte) (b >> 8)); + tot.put((byte) b); return this; } @@ -1376,7 +1736,13 @@ public Trace totlz(final long b) { filled.set(38); } - totlz.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("totlz has invalid value (" + b + ")"); + } + totlz.put((byte) (b >> 24)); + totlz.put((byte) (b >> 16)); + totlz.put((byte) (b >> 8)); + totlz.put((byte) b); return this; } @@ -1388,7 +1754,13 @@ public Trace totnt(final long b) { filled.set(39); } - totnt.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("totnt has invalid value (" + b + ")"); + } + totnt.put((byte) (b >> 24)); + totnt.put((byte) (b >> 16)); + totnt.put((byte) (b >> 8)); + totnt.put((byte) b); return this; } @@ -1400,7 +1772,13 @@ public Trace totrz(final long b) { filled.set(40); } - totrz.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("totrz has invalid value (" + b + ")"); + } + totrz.put((byte) (b >> 24)); + totrz.put((byte) (b >> 16)); + totrz.put((byte) (b >> 8)); + totrz.put((byte) b); return this; } @@ -1669,7 +2047,7 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(52)) { - auxIdXorCnSXorEucA.position(auxIdXorCnSXorEucA.position() + 32); + auxIdXorCnSXorEucA.position(auxIdXorCnSXorEucA.position() + 8); } if (!filled.get(0)) { @@ -1693,11 +2071,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(48)) { - exoSumXorExoId.position(exoSumXorExoId.position() + 8); + exoSumXorExoId.position(exoSumXorExoId.position() + 4); } if (!filled.get(47)) { - instXorInstXorCt.position(instXorInstXorCt.position() + 4); + instXorInstXorCt.position(instXorInstXorCt.position() + 2); } if (!filled.get(5)) { @@ -1753,15 +2131,15 @@ public Trace fillAndValidateRow() { } if (!filled.get(50)) { - kecId.position(kecId.position() + 8); + kecId.position(kecId.position() + 4); } if (!filled.get(59)) { - limb1XorLimbXorWcpArg1Hi.position(limb1XorLimbXorWcpArg1Hi.position() + 32); + limb1XorLimbXorWcpArg1Hi.position(limb1XorLimbXorWcpArg1Hi.position() + 16); } if (!filled.get(60)) { - limb2XorWcpArg1Lo.position(limb2XorWcpArg1Lo.position() + 32); + limb2XorWcpArg1Lo.position(limb2XorWcpArg1Lo.position() + 16); } if (!filled.get(18)) { @@ -1777,7 +2155,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(21)) { - mmioStamp.position(mmioStamp.position() + 8); + mmioStamp.position(mmioStamp.position() + 4); } if (!filled.get(22)) { @@ -1797,31 +2175,31 @@ public Trace fillAndValidateRow() { } if (!filled.get(26)) { - out1.position(out1.position() + 32); + out1.position(out1.position() + 8); } if (!filled.get(27)) { - out2.position(out2.position() + 32); + out2.position(out2.position() + 8); } if (!filled.get(28)) { - out3.position(out3.position() + 32); + out3.position(out3.position() + 8); } if (!filled.get(29)) { - out4.position(out4.position() + 32); + out4.position(out4.position() + 8); } if (!filled.get(30)) { - out5.position(out5.position() + 32); + out5.position(out5.position() + 8); } if (!filled.get(51)) { - phase.position(phase.position() + 8); + phase.position(phase.position() + 4); } if (!filled.get(49)) { - phaseXorExoSum.position(phaseXorExoSum.position() + 8); + phaseXorExoSum.position(phaseXorExoSum.position() + 4); } if (!filled.get(31)) { @@ -1829,11 +2207,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(53)) { - refOffsetXorCnTXorEucB.position(refOffsetXorCnTXorEucB.position() + 32); + refOffsetXorCnTXorEucB.position(refOffsetXorCnTXorEucB.position() + 8); } if (!filled.get(54)) { - refSizeXorSloXorEucCeil.position(refSizeXorSloXorEucCeil.position() + 32); + refSizeXorSloXorEucCeil.position(refSizeXorSloXorEucCeil.position() + 8); } if (!filled.get(32)) { @@ -1861,23 +2239,23 @@ public Trace fillAndValidateRow() { } if (!filled.get(55)) { - sizeXorTloXorEucQuot.position(sizeXorTloXorEucQuot.position() + 32); + sizeXorTloXorEucQuot.position(sizeXorTloXorEucQuot.position() + 8); } if (!filled.get(56)) { - srcIdXorTotalSizeXorEucRem.position(srcIdXorTotalSizeXorEucRem.position() + 32); + srcIdXorTotalSizeXorEucRem.position(srcIdXorTotalSizeXorEucRem.position() + 8); } if (!filled.get(61)) { - srcOffsetHiXorWcpArg2Lo.position(srcOffsetHiXorWcpArg2Lo.position() + 32); + srcOffsetHiXorWcpArg2Lo.position(srcOffsetHiXorWcpArg2Lo.position() + 16); } if (!filled.get(62)) { - srcOffsetLo.position(srcOffsetLo.position() + 32); + srcOffsetLo.position(srcOffsetLo.position() + 16); } if (!filled.get(36)) { - stamp.position(stamp.position() + 8); + stamp.position(stamp.position() + 4); } if (!filled.get(41)) { @@ -1889,27 +2267,27 @@ public Trace fillAndValidateRow() { } if (!filled.get(57)) { - tgtId.position(tgtId.position() + 32); + tgtId.position(tgtId.position() + 8); } if (!filled.get(58)) { - tgtOffsetLo.position(tgtOffsetLo.position() + 32); + tgtOffsetLo.position(tgtOffsetLo.position() + 8); } if (!filled.get(37)) { - tot.position(tot.position() + 8); + tot.position(tot.position() + 4); } if (!filled.get(38)) { - totlz.position(totlz.position() + 8); + totlz.position(totlz.position() + 4); } if (!filled.get(39)) { - totnt.position(totnt.position() + 8); + totnt.position(totnt.position() + 4); } if (!filled.get(40)) { - totrz.position(totrz.position() + 8); + totrz.position(totrz.position() + 4); } if (!filled.get(42)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/instructions/ModexpData.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/instructions/ModexpData.java index 7cdb6dbfd6..c2a2d83360 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/instructions/ModexpData.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/instructions/ModexpData.java @@ -314,7 +314,7 @@ private void middleMicroInstruction( private void lastMicroInstruction(MmuData mmuData) { final int lastMicroInstruction = lastLimbSingleSource ? MMIO_INST_RAM_TO_LIMB_ONE_SOURCE : MMIO_INST_RAM_TO_LIMB_TWO_SOURCE; - final long sourceLimbOffset = middleFirstSourceLimbOffset + initialTotalNonTrivial; + final long sourceLimbOffset = middleFirstSourceLimbOffset + initialTotalNonTrivial - 2; mmuData.mmuToMmioInstruction( MmuToMmioInstruction.builder() @@ -322,7 +322,7 @@ private void lastMicroInstruction(MmuData mmuData) { .size(lastLimbByteSize) .sourceLimbOffset(sourceLimbOffset) .sourceByteOffset(middleSourceByteOffset) - .targetLimbOffset(initialTotalLeftZeroes + initialTotalNonTrivial) + .targetLimbOffset(initialTotalLeftZeroes + initialTotalNonTrivial - 1) .build()); } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mod/Mod.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mod/Mod.java index 63b47150d7..7833df3ac8 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mod/Mod.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mod/Mod.java @@ -15,6 +15,7 @@ package net.consensys.linea.zktracer.module.mod; +import java.math.BigInteger; import java.nio.MappedByteBuffer; import java.util.List; @@ -87,8 +88,9 @@ public List columnsHeaders() { * @param arg1 the divider * @param arg2 the dividend */ - public void callDiv(Bytes32 arg1, Bytes32 arg2) { + public BigInteger callDIV(Bytes32 arg1, Bytes32 arg2) { this.chunks.add(new ModOperation(OpCode.DIV, arg1, arg2)); + return arg1.toUnsignedBigInteger().divide(arg2.toUnsignedBigInteger()); } /** @@ -97,7 +99,8 @@ public void callDiv(Bytes32 arg1, Bytes32 arg2) { * @param arg1 the number * @param arg2 the module */ - public void callMod(Bytes32 arg1, Bytes32 arg2) { + public BigInteger callMOD(Bytes32 arg1, Bytes32 arg2) { this.chunks.add(new ModOperation(OpCode.MOD, arg1, arg2)); + return arg1.toUnsignedBigInteger().mod(arg2.toUnsignedBigInteger()); } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mod/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mod/Trace.java index e2d141d661..e1a65169de 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mod/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mod/Trace.java @@ -103,33 +103,33 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("mod.ACC_1_2", 32, length), - new ColumnHeader("mod.ACC_1_3", 32, length), - new ColumnHeader("mod.ACC_2_2", 32, length), - new ColumnHeader("mod.ACC_2_3", 32, length), - new ColumnHeader("mod.ACC_B_0", 32, length), - new ColumnHeader("mod.ACC_B_1", 32, length), - new ColumnHeader("mod.ACC_B_2", 32, length), - new ColumnHeader("mod.ACC_B_3", 32, length), - new ColumnHeader("mod.ACC_DELTA_0", 32, length), - new ColumnHeader("mod.ACC_DELTA_1", 32, length), - new ColumnHeader("mod.ACC_DELTA_2", 32, length), - new ColumnHeader("mod.ACC_DELTA_3", 32, length), - new ColumnHeader("mod.ACC_H_0", 32, length), - new ColumnHeader("mod.ACC_H_1", 32, length), - new ColumnHeader("mod.ACC_H_2", 32, length), - new ColumnHeader("mod.ACC_Q_0", 32, length), - new ColumnHeader("mod.ACC_Q_1", 32, length), - new ColumnHeader("mod.ACC_Q_2", 32, length), - new ColumnHeader("mod.ACC_Q_3", 32, length), - new ColumnHeader("mod.ACC_R_0", 32, length), - new ColumnHeader("mod.ACC_R_1", 32, length), - new ColumnHeader("mod.ACC_R_2", 32, length), - new ColumnHeader("mod.ACC_R_3", 32, length), - new ColumnHeader("mod.ARG_1_HI", 32, length), - new ColumnHeader("mod.ARG_1_LO", 32, length), - new ColumnHeader("mod.ARG_2_HI", 32, length), - new ColumnHeader("mod.ARG_2_LO", 32, length), + new ColumnHeader("mod.ACC_1_2", 8, length), + new ColumnHeader("mod.ACC_1_3", 8, length), + new ColumnHeader("mod.ACC_2_2", 8, length), + new ColumnHeader("mod.ACC_2_3", 8, length), + new ColumnHeader("mod.ACC_B_0", 8, length), + new ColumnHeader("mod.ACC_B_1", 8, length), + new ColumnHeader("mod.ACC_B_2", 8, length), + new ColumnHeader("mod.ACC_B_3", 8, length), + new ColumnHeader("mod.ACC_DELTA_0", 8, length), + new ColumnHeader("mod.ACC_DELTA_1", 8, length), + new ColumnHeader("mod.ACC_DELTA_2", 8, length), + new ColumnHeader("mod.ACC_DELTA_3", 8, length), + new ColumnHeader("mod.ACC_H_0", 8, length), + new ColumnHeader("mod.ACC_H_1", 8, length), + new ColumnHeader("mod.ACC_H_2", 8, length), + new ColumnHeader("mod.ACC_Q_0", 8, length), + new ColumnHeader("mod.ACC_Q_1", 8, length), + new ColumnHeader("mod.ACC_Q_2", 8, length), + new ColumnHeader("mod.ACC_Q_3", 8, length), + new ColumnHeader("mod.ACC_R_0", 8, length), + new ColumnHeader("mod.ACC_R_1", 8, length), + new ColumnHeader("mod.ACC_R_2", 8, length), + new ColumnHeader("mod.ACC_R_3", 8, length), + new ColumnHeader("mod.ARG_1_HI", 16, length), + new ColumnHeader("mod.ARG_1_LO", 16, length), + new ColumnHeader("mod.ARG_2_HI", 16, length), + new ColumnHeader("mod.ARG_2_LO", 16, length), new ColumnHeader("mod.BYTE_1_2", 1, length), new ColumnHeader("mod.BYTE_1_3", 1, length), new ColumnHeader("mod.BYTE_2_2", 1, length), @@ -155,7 +155,7 @@ static List headers(int length) { new ColumnHeader("mod.BYTE_R_3", 1, length), new ColumnHeader("mod.CMP_1", 1, length), new ColumnHeader("mod.CMP_2", 1, length), - new ColumnHeader("mod.CT", 2, length), + new ColumnHeader("mod.CT", 1, length), new ColumnHeader("mod.INST", 1, length), new ColumnHeader("mod.IS_DIV", 1, length), new ColumnHeader("mod.IS_MOD", 1, length), @@ -165,10 +165,10 @@ static List headers(int length) { new ColumnHeader("mod.MSB_1", 1, length), new ColumnHeader("mod.MSB_2", 1, length), new ColumnHeader("mod.OLI", 1, length), - new ColumnHeader("mod.RES_HI", 32, length), - new ColumnHeader("mod.RES_LO", 32, length), + new ColumnHeader("mod.RES_HI", 16, length), + new ColumnHeader("mod.RES_LO", 16, length), new ColumnHeader("mod.SIGNED", 1, length), - new ColumnHeader("mod.STAMP", 8, length)); + new ColumnHeader("mod.STAMP", 4, length)); } public Trace(List buffers) { @@ -255,11 +255,20 @@ public Trace acc12(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("acc12 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { acc12.put((byte) 0); } - acc12.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc12.put(bs.get(j)); + } return this; } @@ -271,11 +280,20 @@ public Trace acc13(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("acc13 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { acc13.put((byte) 0); } - acc13.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc13.put(bs.get(j)); + } return this; } @@ -287,11 +305,20 @@ public Trace acc22(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("acc22 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { acc22.put((byte) 0); } - acc22.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc22.put(bs.get(j)); + } return this; } @@ -303,11 +330,20 @@ public Trace acc23(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("acc23 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { acc23.put((byte) 0); } - acc23.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc23.put(bs.get(j)); + } return this; } @@ -319,11 +355,20 @@ public Trace accB0(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accB0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accB0.put((byte) 0); } - accB0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB0.put(bs.get(j)); + } return this; } @@ -335,11 +380,20 @@ public Trace accB1(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accB1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accB1.put((byte) 0); } - accB1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB1.put(bs.get(j)); + } return this; } @@ -351,11 +405,20 @@ public Trace accB2(final Bytes b) { filled.set(6); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accB2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accB2.put((byte) 0); } - accB2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB2.put(bs.get(j)); + } return this; } @@ -367,11 +430,20 @@ public Trace accB3(final Bytes b) { filled.set(7); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accB3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accB3.put((byte) 0); } - accB3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB3.put(bs.get(j)); + } return this; } @@ -383,11 +455,21 @@ public Trace accDelta0(final Bytes b) { filled.set(8); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "accDelta0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accDelta0.put((byte) 0); } - accDelta0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accDelta0.put(bs.get(j)); + } return this; } @@ -399,11 +481,21 @@ public Trace accDelta1(final Bytes b) { filled.set(9); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "accDelta1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accDelta1.put((byte) 0); } - accDelta1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accDelta1.put(bs.get(j)); + } return this; } @@ -415,11 +507,21 @@ public Trace accDelta2(final Bytes b) { filled.set(10); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "accDelta2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accDelta2.put((byte) 0); } - accDelta2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accDelta2.put(bs.get(j)); + } return this; } @@ -431,11 +533,21 @@ public Trace accDelta3(final Bytes b) { filled.set(11); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "accDelta3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accDelta3.put((byte) 0); } - accDelta3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accDelta3.put(bs.get(j)); + } return this; } @@ -447,11 +559,20 @@ public Trace accH0(final Bytes b) { filled.set(12); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accH0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accH0.put((byte) 0); } - accH0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH0.put(bs.get(j)); + } return this; } @@ -463,11 +584,20 @@ public Trace accH1(final Bytes b) { filled.set(13); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accH1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accH1.put((byte) 0); } - accH1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH1.put(bs.get(j)); + } return this; } @@ -479,11 +609,20 @@ public Trace accH2(final Bytes b) { filled.set(14); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accH2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accH2.put((byte) 0); } - accH2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH2.put(bs.get(j)); + } return this; } @@ -495,11 +634,20 @@ public Trace accQ0(final Bytes b) { filled.set(15); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accQ0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accQ0.put((byte) 0); } - accQ0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ0.put(bs.get(j)); + } return this; } @@ -511,11 +659,20 @@ public Trace accQ1(final Bytes b) { filled.set(16); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accQ1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accQ1.put((byte) 0); } - accQ1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ1.put(bs.get(j)); + } return this; } @@ -527,11 +684,20 @@ public Trace accQ2(final Bytes b) { filled.set(17); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accQ2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accQ2.put((byte) 0); } - accQ2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ2.put(bs.get(j)); + } return this; } @@ -543,11 +709,20 @@ public Trace accQ3(final Bytes b) { filled.set(18); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accQ3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accQ3.put((byte) 0); } - accQ3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ3.put(bs.get(j)); + } return this; } @@ -559,11 +734,20 @@ public Trace accR0(final Bytes b) { filled.set(19); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accR0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accR0.put((byte) 0); } - accR0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accR0.put(bs.get(j)); + } return this; } @@ -575,11 +759,20 @@ public Trace accR1(final Bytes b) { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accR1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accR1.put((byte) 0); } - accR1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accR1.put(bs.get(j)); + } return this; } @@ -591,11 +784,20 @@ public Trace accR2(final Bytes b) { filled.set(21); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accR2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accR2.put((byte) 0); } - accR2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accR2.put(bs.get(j)); + } return this; } @@ -607,11 +809,20 @@ public Trace accR3(final Bytes b) { filled.set(22); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("accR3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { accR3.put((byte) 0); } - accR3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accR3.put(bs.get(j)); + } return this; } @@ -623,11 +834,20 @@ public Trace arg1Hi(final Bytes b) { filled.set(23); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg1Hi.put((byte) 0); } - arg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Hi.put(bs.get(j)); + } return this; } @@ -639,11 +859,20 @@ public Trace arg1Lo(final Bytes b) { filled.set(24); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg1Lo.put((byte) 0); } - arg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Lo.put(bs.get(j)); + } return this; } @@ -655,11 +884,20 @@ public Trace arg2Hi(final Bytes b) { filled.set(25); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg2Hi.put((byte) 0); } - arg2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg2Hi.put(bs.get(j)); + } return this; } @@ -671,11 +909,20 @@ public Trace arg2Lo(final Bytes b) { filled.set(26); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg2Lo.put((byte) 0); } - arg2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg2Lo.put(bs.get(j)); + } return this; } @@ -980,14 +1227,17 @@ public Trace cmp2(final Boolean b) { return this; } - public Trace ct(final short b) { + public Trace ct(final long b) { if (filled.get(52)) { throw new IllegalStateException("mod.CT already set"); } else { filled.set(52); } - ct.putShort(b); + if (b >= 16L) { + throw new IllegalArgumentException("ct has invalid value (" + b + ")"); + } + ct.put((byte) b); return this; } @@ -1107,11 +1357,20 @@ public Trace resHi(final Bytes b) { filled.set(62); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resHi.put((byte) 0); } - resHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resHi.put(bs.get(j)); + } return this; } @@ -1123,11 +1382,20 @@ public Trace resLo(final Bytes b) { filled.set(63); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resLo.put((byte) 0); } - resLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resLo.put(bs.get(j)); + } return this; } @@ -1151,7 +1419,13 @@ public Trace stamp(final long b) { filled.set(65); } - stamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 24)); + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); return this; } @@ -1429,111 +1703,111 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - acc12.position(acc12.position() + 32); + acc12.position(acc12.position() + 8); } if (!filled.get(1)) { - acc13.position(acc13.position() + 32); + acc13.position(acc13.position() + 8); } if (!filled.get(2)) { - acc22.position(acc22.position() + 32); + acc22.position(acc22.position() + 8); } if (!filled.get(3)) { - acc23.position(acc23.position() + 32); + acc23.position(acc23.position() + 8); } if (!filled.get(4)) { - accB0.position(accB0.position() + 32); + accB0.position(accB0.position() + 8); } if (!filled.get(5)) { - accB1.position(accB1.position() + 32); + accB1.position(accB1.position() + 8); } if (!filled.get(6)) { - accB2.position(accB2.position() + 32); + accB2.position(accB2.position() + 8); } if (!filled.get(7)) { - accB3.position(accB3.position() + 32); + accB3.position(accB3.position() + 8); } if (!filled.get(8)) { - accDelta0.position(accDelta0.position() + 32); + accDelta0.position(accDelta0.position() + 8); } if (!filled.get(9)) { - accDelta1.position(accDelta1.position() + 32); + accDelta1.position(accDelta1.position() + 8); } if (!filled.get(10)) { - accDelta2.position(accDelta2.position() + 32); + accDelta2.position(accDelta2.position() + 8); } if (!filled.get(11)) { - accDelta3.position(accDelta3.position() + 32); + accDelta3.position(accDelta3.position() + 8); } if (!filled.get(12)) { - accH0.position(accH0.position() + 32); + accH0.position(accH0.position() + 8); } if (!filled.get(13)) { - accH1.position(accH1.position() + 32); + accH1.position(accH1.position() + 8); } if (!filled.get(14)) { - accH2.position(accH2.position() + 32); + accH2.position(accH2.position() + 8); } if (!filled.get(15)) { - accQ0.position(accQ0.position() + 32); + accQ0.position(accQ0.position() + 8); } if (!filled.get(16)) { - accQ1.position(accQ1.position() + 32); + accQ1.position(accQ1.position() + 8); } if (!filled.get(17)) { - accQ2.position(accQ2.position() + 32); + accQ2.position(accQ2.position() + 8); } if (!filled.get(18)) { - accQ3.position(accQ3.position() + 32); + accQ3.position(accQ3.position() + 8); } if (!filled.get(19)) { - accR0.position(accR0.position() + 32); + accR0.position(accR0.position() + 8); } if (!filled.get(20)) { - accR1.position(accR1.position() + 32); + accR1.position(accR1.position() + 8); } if (!filled.get(21)) { - accR2.position(accR2.position() + 32); + accR2.position(accR2.position() + 8); } if (!filled.get(22)) { - accR3.position(accR3.position() + 32); + accR3.position(accR3.position() + 8); } if (!filled.get(23)) { - arg1Hi.position(arg1Hi.position() + 32); + arg1Hi.position(arg1Hi.position() + 16); } if (!filled.get(24)) { - arg1Lo.position(arg1Lo.position() + 32); + arg1Lo.position(arg1Lo.position() + 16); } if (!filled.get(25)) { - arg2Hi.position(arg2Hi.position() + 32); + arg2Hi.position(arg2Hi.position() + 16); } if (!filled.get(26)) { - arg2Lo.position(arg2Lo.position() + 32); + arg2Lo.position(arg2Lo.position() + 16); } if (!filled.get(27)) { @@ -1637,7 +1911,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(52)) { - ct.position(ct.position() + 2); + ct.position(ct.position() + 1); } if (!filled.get(53)) { @@ -1677,11 +1951,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(62)) { - resHi.position(resHi.position() + 32); + resHi.position(resHi.position() + 16); } if (!filled.get(63)) { - resLo.position(resLo.position() + 32); + resLo.position(resLo.position() + 16); } if (!filled.get(64)) { @@ -1689,7 +1963,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(65)) { - stamp.position(stamp.position() + 8); + stamp.position(stamp.position() + 4); } filled.clear(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mul/Mul.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mul/Mul.java index 1efcb203cd..b3d31e158a 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mul/Mul.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mul/Mul.java @@ -32,6 +32,7 @@ @RequiredArgsConstructor public class Mul implements Module { private final Hub hub; + /** A set of the operations to trace */ private final StackedSet operations = new StackedSet<>(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mul/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mul/Trace.java index 2a060861d8..9eb516570d 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mul/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mul/Trace.java @@ -104,10 +104,10 @@ static List headers(int length) { new ColumnHeader("mul.ACC_H_1", 32, length), new ColumnHeader("mul.ACC_H_2", 32, length), new ColumnHeader("mul.ACC_H_3", 32, length), - new ColumnHeader("mul.ARG_1_HI", 32, length), - new ColumnHeader("mul.ARG_1_LO", 32, length), - new ColumnHeader("mul.ARG_2_HI", 32, length), - new ColumnHeader("mul.ARG_2_LO", 32, length), + new ColumnHeader("mul.ARG_1_HI", 16, length), + new ColumnHeader("mul.ARG_1_LO", 16, length), + new ColumnHeader("mul.ARG_2_HI", 16, length), + new ColumnHeader("mul.ARG_2_LO", 16, length), new ColumnHeader("mul.BIT_NUM", 1, length), new ColumnHeader("mul.BITS", 1, length), new ColumnHeader("mul.BYTE_A_0", 1, length), @@ -131,10 +131,10 @@ static List headers(int length) { new ColumnHeader("mul.EXPONENT_BIT_ACCUMULATOR", 32, length), new ColumnHeader("mul.EXPONENT_BIT_SOURCE", 1, length), new ColumnHeader("mul.INSTRUCTION", 1, length), - new ColumnHeader("mul.MUL_STAMP", 8, length), + new ColumnHeader("mul.MUL_STAMP", 4, length), new ColumnHeader("mul.OLI", 1, length), - new ColumnHeader("mul.RES_HI", 32, length), - new ColumnHeader("mul.RES_LO", 32, length), + new ColumnHeader("mul.RES_HI", 16, length), + new ColumnHeader("mul.RES_LO", 16, length), new ColumnHeader("mul.RESULT_VANISHES", 1, length), new ColumnHeader("mul.SQUARE_AND_MULTIPLY", 1, length), new ColumnHeader("mul.TINY_BASE", 1, length), @@ -210,11 +210,20 @@ public Trace accA0(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accA0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accA0.put((byte) 0); } - accA0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accA0.put(bs.get(j)); + } return this; } @@ -226,11 +235,20 @@ public Trace accA1(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accA1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accA1.put((byte) 0); } - accA1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accA1.put(bs.get(j)); + } return this; } @@ -242,11 +260,20 @@ public Trace accA2(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accA2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accA2.put((byte) 0); } - accA2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accA2.put(bs.get(j)); + } return this; } @@ -258,11 +285,20 @@ public Trace accA3(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accA3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accA3.put((byte) 0); } - accA3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accA3.put(bs.get(j)); + } return this; } @@ -274,11 +310,20 @@ public Trace accB0(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accB0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accB0.put((byte) 0); } - accB0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB0.put(bs.get(j)); + } return this; } @@ -290,11 +335,20 @@ public Trace accB1(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accB1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accB1.put((byte) 0); } - accB1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB1.put(bs.get(j)); + } return this; } @@ -306,11 +360,20 @@ public Trace accB2(final Bytes b) { filled.set(6); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accB2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accB2.put((byte) 0); } - accB2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB2.put(bs.get(j)); + } return this; } @@ -322,11 +385,20 @@ public Trace accB3(final Bytes b) { filled.set(7); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accB3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accB3.put((byte) 0); } - accB3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accB3.put(bs.get(j)); + } return this; } @@ -338,11 +410,20 @@ public Trace accC0(final Bytes b) { filled.set(8); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accC0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accC0.put((byte) 0); } - accC0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accC0.put(bs.get(j)); + } return this; } @@ -354,11 +435,20 @@ public Trace accC1(final Bytes b) { filled.set(9); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accC1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accC1.put((byte) 0); } - accC1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accC1.put(bs.get(j)); + } return this; } @@ -370,11 +460,20 @@ public Trace accC2(final Bytes b) { filled.set(10); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accC2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accC2.put((byte) 0); } - accC2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accC2.put(bs.get(j)); + } return this; } @@ -386,11 +485,20 @@ public Trace accC3(final Bytes b) { filled.set(11); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accC3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accC3.put((byte) 0); } - accC3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accC3.put(bs.get(j)); + } return this; } @@ -402,11 +510,20 @@ public Trace accH0(final Bytes b) { filled.set(12); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accH0 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accH0.put((byte) 0); } - accH0.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH0.put(bs.get(j)); + } return this; } @@ -418,11 +535,20 @@ public Trace accH1(final Bytes b) { filled.set(13); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accH1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accH1.put((byte) 0); } - accH1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH1.put(bs.get(j)); + } return this; } @@ -434,11 +560,20 @@ public Trace accH2(final Bytes b) { filled.set(14); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accH2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accH2.put((byte) 0); } - accH2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH2.put(bs.get(j)); + } return this; } @@ -450,11 +585,20 @@ public Trace accH3(final Bytes b) { filled.set(15); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("accH3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { accH3.put((byte) 0); } - accH3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accH3.put(bs.get(j)); + } return this; } @@ -466,11 +610,20 @@ public Trace arg1Hi(final Bytes b) { filled.set(16); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg1Hi.put((byte) 0); } - arg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Hi.put(bs.get(j)); + } return this; } @@ -482,11 +635,20 @@ public Trace arg1Lo(final Bytes b) { filled.set(17); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg1Lo.put((byte) 0); } - arg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Lo.put(bs.get(j)); + } return this; } @@ -498,11 +660,20 @@ public Trace arg2Hi(final Bytes b) { filled.set(18); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg2Hi.put((byte) 0); } - arg2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg2Hi.put(bs.get(j)); + } return this; } @@ -514,11 +685,20 @@ public Trace arg2Lo(final Bytes b) { filled.set(19); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg2Lo.put((byte) 0); } - arg2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg2Lo.put(bs.get(j)); + } return this; } @@ -770,11 +950,21 @@ public Trace exponentBitAccumulator(final Bytes b) { filled.set(40); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "exponentBitAccumulator has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { exponentBitAccumulator.put((byte) 0); } - exponentBitAccumulator.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + exponentBitAccumulator.put(bs.get(j)); + } return this; } @@ -810,7 +1000,13 @@ public Trace mulStamp(final long b) { filled.set(43); } - mulStamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("mulStamp has invalid value (" + b + ")"); + } + mulStamp.put((byte) (b >> 24)); + mulStamp.put((byte) (b >> 16)); + mulStamp.put((byte) (b >> 8)); + mulStamp.put((byte) b); return this; } @@ -834,11 +1030,20 @@ public Trace resHi(final Bytes b) { filled.set(46); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resHi.put((byte) 0); } - resHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resHi.put(bs.get(j)); + } return this; } @@ -850,11 +1055,20 @@ public Trace resLo(final Bytes b) { filled.set(47); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resLo.put((byte) 0); } - resLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resLo.put(bs.get(j)); + } return this; } @@ -1184,19 +1398,19 @@ public Trace fillAndValidateRow() { } if (!filled.get(16)) { - arg1Hi.position(arg1Hi.position() + 32); + arg1Hi.position(arg1Hi.position() + 16); } if (!filled.get(17)) { - arg1Lo.position(arg1Lo.position() + 32); + arg1Lo.position(arg1Lo.position() + 16); } if (!filled.get(18)) { - arg2Hi.position(arg2Hi.position() + 32); + arg2Hi.position(arg2Hi.position() + 16); } if (!filled.get(19)) { - arg2Lo.position(arg2Lo.position() + 32); + arg2Lo.position(arg2Lo.position() + 16); } if (!filled.get(21)) { @@ -1292,7 +1506,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(43)) { - mulStamp.position(mulStamp.position() + 8); + mulStamp.position(mulStamp.position() + 4); } if (!filled.get(44)) { @@ -1300,11 +1514,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(46)) { - resHi.position(resHi.position() + 32); + resHi.position(resHi.position() + 16); } if (!filled.get(47)) { - resLo.position(resLo.position() + 32); + resLo.position(resLo.position() + 16); } if (!filled.get(45)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/Mxp.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/Mxp.java index 2a11472a1a..85bd7ffab5 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/Mxp.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/Mxp.java @@ -27,7 +27,7 @@ /** Implementation of a {@link Module} for memory expansion. */ public class Mxp implements Module { /** A list of the operations to trace */ - private final StackedList chunks = new StackedList<>(); + private final StackedList chunks = new StackedList<>(); private Hub hub; @@ -45,7 +45,7 @@ public Mxp() {} @Override public void tracePreOpcode(MessageFrame frame) { // This will be renamed to tracePreOp - this.chunks.add(new MxpData(frame, hub)); + this.chunks.add(new MxpOperation(frame, hub)); } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/MxpData.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/MxpOperation.java similarity index 79% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/MxpData.java rename to arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/MxpOperation.java index 6d8f213450..f3f6120f1c 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/MxpData.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/MxpOperation.java @@ -16,6 +16,9 @@ package net.consensys.linea.zktracer.module.mxp; import static net.consensys.linea.zktracer.module.Util.max; +import static net.consensys.linea.zktracer.module.mxp.Trace.CT_MAX_NON_TRIVIAL; +import static net.consensys.linea.zktracer.module.mxp.Trace.CT_MAX_NON_TRIVIAL_BUT_MXPX; +import static net.consensys.linea.zktracer.module.mxp.Trace.CT_MAX_TRIVIAL; import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; import static org.hyperledger.besu.evm.internal.Words.clampedAdd; import static org.hyperledger.besu.evm.internal.Words.clampedMultiply; @@ -43,12 +46,10 @@ import org.hyperledger.besu.evm.internal.Words; @Getter -public class MxpData extends ModuleOperation { +public class MxpOperation extends ModuleOperation { public static final BigInteger TWO_POW_128 = BigInteger.ONE.shiftLeft(128); public static final BigInteger TWO_POW_32 = BigInteger.ONE.shiftLeft(32); - // constants from protocol_params.go - private final OpCodeData opCodeData; private final int contextNumber; private EWord offset1 = EWord.ZERO; @@ -89,7 +90,7 @@ public class MxpData extends ModuleOperation { private long linCost = 0; private final boolean deploys; - public MxpData(final MessageFrame frame, final Hub hub) { + public MxpOperation(final MessageFrame frame, final Hub hub) { this.opCodeData = hub.opCodeData(); this.contextNumber = hub.currentFrame().contextNumber(); this.typeMxp = opCodeData.billing().type(); @@ -114,7 +115,7 @@ public MxpData(final MessageFrame frame, final Hub hub) { @Override protected int computeLineCount() { - return this.maxCt(); + return this.nRows(); } void compute() { @@ -130,15 +131,16 @@ void compute() { } private void setInitializeByteArrays() { - byte1 = new UnsignedByte[maxCt()]; - byte2 = new UnsignedByte[maxCt()]; - byte3 = new UnsignedByte[maxCt()]; - byte4 = new UnsignedByte[maxCt()]; - byteA = new UnsignedByte[maxCt()]; - byteW = new UnsignedByte[maxCt()]; - byteQ = new UnsignedByte[maxCt()]; - byteQQ = new UnsignedByte[maxCt()]; - byteR = new UnsignedByte[maxCt()]; + int nRows = nRows(); + byte1 = new UnsignedByte[nRows]; + byte2 = new UnsignedByte[nRows]; + byte3 = new UnsignedByte[nRows]; + byte4 = new UnsignedByte[nRows]; + byteA = new UnsignedByte[nRows]; + byteW = new UnsignedByte[nRows]; + byteQ = new UnsignedByte[nRows]; + byteQQ = new UnsignedByte[nRows]; + byteR = new UnsignedByte[nRows]; Arrays.fill(byte1, UnsignedByte.of(0)); Arrays.fill(byte2, UnsignedByte.of(0)); Arrays.fill(byte3, UnsignedByte.of(0)); @@ -190,16 +192,16 @@ private void setOffsetsAndSizes(final MessageFrame frame) { protected void setRoob() { roob = switch (typeMxp) { - case TYPE_2, TYPE_3 -> offset1.toBigInteger().compareTo(TWO_POW_128) >= 0; - case TYPE_4 -> size1.toBigInteger().compareTo(TWO_POW_128) >= 0 - || (offset1.toBigInteger().compareTo(TWO_POW_128) >= 0 - && !size1.toBigInteger().equals(BigInteger.ZERO)); - case TYPE_5 -> size1.toBigInteger().compareTo(TWO_POW_128) >= 0 - || (offset1.toBigInteger().compareTo(TWO_POW_128) >= 0 - && !size1.toBigInteger().equals(BigInteger.ZERO)) - || (size2.toBigInteger().compareTo(TWO_POW_128) >= 0 - || (offset2.toBigInteger().compareTo(TWO_POW_128) >= 0 - && !size2.toBigInteger().equals(BigInteger.ZERO))); + case TYPE_2, TYPE_3 -> offset1.toUnsignedBigInteger().compareTo(TWO_POW_128) >= 0; + case TYPE_4 -> size1.toUnsignedBigInteger().compareTo(TWO_POW_128) >= 0 + || (offset1.toUnsignedBigInteger().compareTo(TWO_POW_128) >= 0 + && !size1.toUnsignedBigInteger().equals(BigInteger.ZERO)); + case TYPE_5 -> size1.toUnsignedBigInteger().compareTo(TWO_POW_128) >= 0 + || (offset1.toUnsignedBigInteger().compareTo(TWO_POW_128) >= 0 + && !size1.toUnsignedBigInteger().equals(BigInteger.ZERO)) + || (size2.toUnsignedBigInteger().compareTo(TWO_POW_128) >= 0 + || (offset2.toUnsignedBigInteger().compareTo(TWO_POW_128) >= 0 + && !size2.toUnsignedBigInteger().equals(BigInteger.ZERO))); default -> false; }; } @@ -226,19 +228,31 @@ private void setMtntop() { protected void setMaxOffset1and2() { if (getMxpExecutionPath() != mxpExecutionPath.TRIVIAL) { switch (typeMxp) { - case TYPE_2 -> maxOffset1 = offset1.toBigInteger().add(BigInteger.valueOf(31)); - case TYPE_3 -> maxOffset1 = offset1.toBigInteger(); + case TYPE_2 -> maxOffset1 = offset1.toUnsignedBigInteger().add(BigInteger.valueOf(31)); + case TYPE_3 -> maxOffset1 = offset1.toUnsignedBigInteger(); case TYPE_4 -> { - if (!size1.toBigInteger().equals(BigInteger.ZERO)) { - maxOffset1 = offset1.toBigInteger().add(size1.toBigInteger()).subtract(BigInteger.ONE); + if (!size1.toUnsignedBigInteger().equals(BigInteger.ZERO)) { + maxOffset1 = + offset1 + .toUnsignedBigInteger() + .add(size1.toUnsignedBigInteger()) + .subtract(BigInteger.ONE); } } case TYPE_5 -> { - if (!size1.toBigInteger().equals(BigInteger.ZERO)) { - maxOffset1 = offset1.toBigInteger().add(size1.toBigInteger()).subtract(BigInteger.ONE); + if (!size1.toUnsignedBigInteger().equals(BigInteger.ZERO)) { + maxOffset1 = + offset1 + .toUnsignedBigInteger() + .add(size1.toUnsignedBigInteger()) + .subtract(BigInteger.ONE); } - if (!size2.toBigInteger().equals(BigInteger.ZERO)) { - maxOffset2 = offset2.toBigInteger().add(size2.toBigInteger()).subtract(BigInteger.ONE); + if (!size2.toUnsignedBigInteger().equals(BigInteger.ZERO)) { + maxOffset2 = + offset2 + .toUnsignedBigInteger() + .add(size2.toUnsignedBigInteger()) + .subtract(BigInteger.ONE); } } } @@ -352,9 +366,10 @@ protected void setAccWAndLastTwoBytesOfByteR() { return; } - accW = size1.toBigInteger().add(BigInteger.valueOf(31)).divide(BigInteger.valueOf(32)); + accW = + size1.toUnsignedBigInteger().add(BigInteger.valueOf(31)).divide(BigInteger.valueOf(32)); - BigInteger r = accW.multiply(BigInteger.valueOf(32)).subtract(size1.toBigInteger()); + BigInteger r = accW.multiply(BigInteger.valueOf(32)).subtract(size1.toUnsignedBigInteger()); // r in [0,31] UnsignedByte rByte = UnsignedByte.of(r.toByteArray()[r.toByteArray().length - 1]); @@ -380,14 +395,18 @@ private mxpExecutionPath getMxpExecutionPath() { return mxpExecutionPath.NON_TRIVIAL; } - public int maxCt() { + public int ctMax() { return switch (this.getMxpExecutionPath()) { - case TRIVIAL -> 1; - case NON_TRIVIAL_BUT_MXPX -> 17; - case NON_TRIVIAL -> 4; + case TRIVIAL -> CT_MAX_TRIVIAL; + case NON_TRIVIAL_BUT_MXPX -> CT_MAX_NON_TRIVIAL_BUT_MXPX; + case NON_TRIVIAL -> CT_MAX_NON_TRIVIAL; }; } + public int nRows() { + return ctMax() + 1; + } + protected void setAccQAndByteQQ() { // accQ and byteQQ all equal to 0 by default if (this.getMxpExecutionPath() == mxpExecutionPath.NON_TRIVIAL) { @@ -413,7 +432,7 @@ protected void setAccQAndByteQQNonTrivialCase() { } protected void setBytes() { - int maxCt = maxCt(); + final int nRows = nRows(); Bytes32 b1 = UInt256.valueOf(acc1); Bytes32 b2 = UInt256.valueOf(acc2); Bytes32 b3 = UInt256.valueOf(acc3); @@ -421,19 +440,19 @@ protected void setBytes() { Bytes32 bA = UInt256.valueOf(accA); Bytes32 bW = UInt256.valueOf(accW); Bytes32 bQ = UInt256.valueOf(accQ); - for (int i = 0; i < maxCt; i++) { - byte1[i] = UnsignedByte.of(b1.get(b1.size() - 1 - maxCt + i)); - byte2[i] = UnsignedByte.of(b2.get(b2.size() - 1 - maxCt + i)); - byte3[i] = UnsignedByte.of(b3.get(b3.size() - 1 - maxCt + i)); - byte4[i] = UnsignedByte.of(b4.get(b4.size() - 1 - maxCt + i)); - byteA[i] = UnsignedByte.of(bA.get(bA.size() - 1 - maxCt + i)); - byteW[i] = UnsignedByte.of(bW.get(bW.size() - 1 - maxCt + i)); - byteQ[i] = UnsignedByte.of(bQ.get(bQ.size() - 1 - maxCt + i)); + for (int i = 0; i < nRows; i++) { + byte1[i] = UnsignedByte.of(b1.get(b1.size() - 1 - nRows + i)); + byte2[i] = UnsignedByte.of(b2.get(b2.size() - 1 - nRows + i)); + byte3[i] = UnsignedByte.of(b3.get(b3.size() - 1 - nRows + i)); + byte4[i] = UnsignedByte.of(b4.get(b4.size() - 1 - nRows + i)); + byteA[i] = UnsignedByte.of(bA.get(bA.size() - 1 - nRows + i)); + byteW[i] = UnsignedByte.of(bW.get(bW.size() - 1 - nRows + i)); + byteQ[i] = UnsignedByte.of(bQ.get(bQ.size() - 1 - nRows + i)); } } private void setWordsNew(final MessageFrame frame) { - if (getMxpExecutionPath() == MxpData.mxpExecutionPath.NON_TRIVIAL && expands) { + if (getMxpExecutionPath() == MxpOperation.mxpExecutionPath.NON_TRIVIAL && expands) { switch (getTypeMxp()) { case TYPE_1 -> wordsNew = frame.calculateMemoryExpansion(Words.clampedToLong(offset1), 0); case TYPE_2 -> wordsNew = frame.calculateMemoryExpansion(Words.clampedToLong(offset1), 32); @@ -455,7 +474,7 @@ private void setWordsNew(final MessageFrame frame) { } private void setCMemNew() { - if (getMxpExecutionPath() == MxpData.mxpExecutionPath.NON_TRIVIAL && expands) { + if (getMxpExecutionPath() == MxpOperation.mxpExecutionPath.NON_TRIVIAL && expands) { cMemNew = memoryCost(wordsNew); } } @@ -494,10 +513,10 @@ final void trace(int stamp, Trace trace) { final EWord eSize1 = EWord.of(this.size1); final EWord eSize2 = EWord.of(this.size2); - int maxCt = this.maxCt(); - int maxCtComplement = 32 - maxCt; + final int nRows = this.nRows(); + final int nRowsComplement = 32 - nRows; - for (int i = 0; i < maxCt; i++) { + for (int i = 0; i < nRows; i++) { trace .stamp(stamp) .cn(Bytes.ofUnsignedLong(this.getContextNumber())) @@ -534,20 +553,20 @@ final void trace(int stamp, Trace trace) { .maxOffset2(bigIntegerToBytes(this.getMaxOffset2())) .maxOffset(bigIntegerToBytes(this.getMaxOffset())) .comp(this.isComp()) - .acc1(acc1Bytes32.slice(maxCtComplement, 1 + i)) - .acc2(acc2Bytes32.slice(maxCtComplement, 1 + i)) - .acc3(acc3Bytes32.slice(maxCtComplement, 1 + i)) - .acc4(acc4Bytes32.slice(maxCtComplement, 1 + i)) - .accA(accABytes32.slice(maxCtComplement, 1 + i)) - .accW(accWBytes32.slice(maxCtComplement, 1 + i)) - .accQ(accQBytes32.slice(maxCtComplement, 1 + i)) - .byte1(UnsignedByte.of(acc1Bytes32.get(maxCtComplement + i))) - .byte2(UnsignedByte.of(acc2Bytes32.get(maxCtComplement + i))) - .byte3(UnsignedByte.of(acc3Bytes32.get(maxCtComplement + i))) - .byte4(UnsignedByte.of(acc4Bytes32.get(maxCtComplement + i))) - .byteA(UnsignedByte.of(accABytes32.get(maxCtComplement + i))) - .byteW(UnsignedByte.of(accWBytes32.get(maxCtComplement + i))) - .byteQ(UnsignedByte.of(accQBytes32.get(maxCtComplement + i))) + .acc1(acc1Bytes32.slice(nRowsComplement, 1 + i)) + .acc2(acc2Bytes32.slice(nRowsComplement, 1 + i)) + .acc3(acc3Bytes32.slice(nRowsComplement, 1 + i)) + .acc4(acc4Bytes32.slice(nRowsComplement, 1 + i)) + .accA(accABytes32.slice(nRowsComplement, 1 + i)) + .accW(accWBytes32.slice(nRowsComplement, 1 + i)) + .accQ(accQBytes32.slice(nRowsComplement, 1 + i)) + .byte1(UnsignedByte.of(acc1Bytes32.get(nRowsComplement + i))) + .byte2(UnsignedByte.of(acc2Bytes32.get(nRowsComplement + i))) + .byte3(UnsignedByte.of(acc3Bytes32.get(nRowsComplement + i))) + .byte4(UnsignedByte.of(acc4Bytes32.get(nRowsComplement + i))) + .byteA(UnsignedByte.of(accABytes32.get(nRowsComplement + i))) + .byteW(UnsignedByte.of(accWBytes32.get(nRowsComplement + i))) + .byteQ(UnsignedByte.of(accQBytes32.get(nRowsComplement + i))) .byteQq(UnsignedByte.of(this.getByteQQ()[i].toInteger())) .byteR(UnsignedByte.of(this.getByteR()[i].toInteger())) .words(Bytes.ofUnsignedLong(this.getWords())) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/Trace.java index 0dc2211f35..e935cfcace 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mxp/Trace.java @@ -30,6 +30,10 @@ * Please DO NOT ATTEMPT TO MODIFY this code directly. */ public class Trace { + public static final int CT_MAX_NON_TRIVIAL = 0x3; + public static final int CT_MAX_NON_TRIVIAL_BUT_MXPX = 0x10; + public static final int CT_MAX_TRIVIAL = 0x0; + public static final long TWO_POW_32 = 0x100000000L; private final BitSet filled = new BitSet(); private int currentLine = 0; @@ -89,13 +93,13 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("mxp.ACC_1", 32, length), - new ColumnHeader("mxp.ACC_2", 32, length), - new ColumnHeader("mxp.ACC_3", 32, length), - new ColumnHeader("mxp.ACC_4", 32, length), - new ColumnHeader("mxp.ACC_A", 32, length), - new ColumnHeader("mxp.ACC_Q", 32, length), - new ColumnHeader("mxp.ACC_W", 32, length), + new ColumnHeader("mxp.ACC_1", 17, length), + new ColumnHeader("mxp.ACC_2", 17, length), + new ColumnHeader("mxp.ACC_3", 17, length), + new ColumnHeader("mxp.ACC_4", 17, length), + new ColumnHeader("mxp.ACC_A", 17, length), + new ColumnHeader("mxp.ACC_Q", 17, length), + new ColumnHeader("mxp.ACC_W", 17, length), new ColumnHeader("mxp.BYTE_1", 1, length), new ColumnHeader("mxp.BYTE_2", 1, length), new ColumnHeader("mxp.BYTE_3", 1, length), @@ -105,18 +109,18 @@ static List headers(int length) { new ColumnHeader("mxp.BYTE_QQ", 1, length), new ColumnHeader("mxp.BYTE_R", 1, length), new ColumnHeader("mxp.BYTE_W", 1, length), - new ColumnHeader("mxp.C_MEM", 32, length), - new ColumnHeader("mxp.C_MEM_NEW", 32, length), - new ColumnHeader("mxp.CN", 32, length), + new ColumnHeader("mxp.C_MEM", 8, length), + new ColumnHeader("mxp.C_MEM_NEW", 8, length), + new ColumnHeader("mxp.CN", 8, length), new ColumnHeader("mxp.COMP", 1, length), - new ColumnHeader("mxp.CT", 2, length), + new ColumnHeader("mxp.CT", 1, length), new ColumnHeader("mxp.DEPLOYS", 1, length), new ColumnHeader("mxp.EXPANDS", 1, length), - new ColumnHeader("mxp.GAS_MXP", 32, length), - new ColumnHeader("mxp.GBYTE", 32, length), - new ColumnHeader("mxp.GWORD", 32, length), + new ColumnHeader("mxp.GAS_MXP", 8, length), + new ColumnHeader("mxp.GBYTE", 8, length), + new ColumnHeader("mxp.GWORD", 8, length), new ColumnHeader("mxp.INST", 1, length), - new ColumnHeader("mxp.LIN_COST", 32, length), + new ColumnHeader("mxp.LIN_COST", 8, length), new ColumnHeader("mxp.MAX_OFFSET", 32, length), new ColumnHeader("mxp.MAX_OFFSET_1", 32, length), new ColumnHeader("mxp.MAX_OFFSET_2", 32, length), @@ -128,19 +132,19 @@ static List headers(int length) { new ColumnHeader("mxp.MXP_TYPE_5", 1, length), new ColumnHeader("mxp.MXPX", 1, length), new ColumnHeader("mxp.NOOP", 1, length), - new ColumnHeader("mxp.OFFSET_1_HI", 32, length), - new ColumnHeader("mxp.OFFSET_1_LO", 32, length), - new ColumnHeader("mxp.OFFSET_2_HI", 32, length), - new ColumnHeader("mxp.OFFSET_2_LO", 32, length), - new ColumnHeader("mxp.QUAD_COST", 32, length), + new ColumnHeader("mxp.OFFSET_1_HI", 16, length), + new ColumnHeader("mxp.OFFSET_1_LO", 16, length), + new ColumnHeader("mxp.OFFSET_2_HI", 16, length), + new ColumnHeader("mxp.OFFSET_2_LO", 16, length), + new ColumnHeader("mxp.QUAD_COST", 8, length), new ColumnHeader("mxp.ROOB", 1, length), - new ColumnHeader("mxp.SIZE_1_HI", 32, length), - new ColumnHeader("mxp.SIZE_1_LO", 32, length), - new ColumnHeader("mxp.SIZE_2_HI", 32, length), - new ColumnHeader("mxp.SIZE_2_LO", 32, length), - new ColumnHeader("mxp.STAMP", 8, length), - new ColumnHeader("mxp.WORDS", 32, length), - new ColumnHeader("mxp.WORDS_NEW", 32, length)); + new ColumnHeader("mxp.SIZE_1_HI", 16, length), + new ColumnHeader("mxp.SIZE_1_LO", 16, length), + new ColumnHeader("mxp.SIZE_2_HI", 16, length), + new ColumnHeader("mxp.SIZE_2_LO", 16, length), + new ColumnHeader("mxp.STAMP", 4, length), + new ColumnHeader("mxp.WORDS", 8, length), + new ColumnHeader("mxp.WORDS_NEW", 8, length)); } public Trace(List buffers) { @@ -213,11 +217,20 @@ public Trace acc1(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 136) { + throw new IllegalArgumentException("acc1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 17; i++) { acc1.put((byte) 0); } - acc1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc1.put(bs.get(j)); + } return this; } @@ -229,11 +242,20 @@ public Trace acc2(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 136) { + throw new IllegalArgumentException("acc2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 17; i++) { acc2.put((byte) 0); } - acc2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc2.put(bs.get(j)); + } return this; } @@ -245,11 +267,20 @@ public Trace acc3(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 136) { + throw new IllegalArgumentException("acc3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 17; i++) { acc3.put((byte) 0); } - acc3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc3.put(bs.get(j)); + } return this; } @@ -261,11 +292,20 @@ public Trace acc4(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 136) { + throw new IllegalArgumentException("acc4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 17; i++) { acc4.put((byte) 0); } - acc4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc4.put(bs.get(j)); + } return this; } @@ -277,11 +317,20 @@ public Trace accA(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 136) { + throw new IllegalArgumentException("accA has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 17; i++) { accA.put((byte) 0); } - accA.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accA.put(bs.get(j)); + } return this; } @@ -293,11 +342,20 @@ public Trace accQ(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 136) { + throw new IllegalArgumentException("accQ has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 17; i++) { accQ.put((byte) 0); } - accQ.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accQ.put(bs.get(j)); + } return this; } @@ -309,11 +367,20 @@ public Trace accW(final Bytes b) { filled.set(6); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 136) { + throw new IllegalArgumentException("accW has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 17; i++) { accW.put((byte) 0); } - accW.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accW.put(bs.get(j)); + } return this; } @@ -433,11 +500,20 @@ public Trace cMem(final Bytes b) { filled.set(19); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("cMem has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { cMem.put((byte) 0); } - cMem.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + cMem.put(bs.get(j)); + } return this; } @@ -449,11 +525,20 @@ public Trace cMemNew(final Bytes b) { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("cMemNew has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { cMemNew.put((byte) 0); } - cMemNew.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + cMemNew.put(bs.get(j)); + } return this; } @@ -465,11 +550,20 @@ public Trace cn(final Bytes b) { filled.set(16); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("cn has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { cn.put((byte) 0); } - cn.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + cn.put(bs.get(j)); + } return this; } @@ -486,14 +580,17 @@ public Trace comp(final Boolean b) { return this; } - public Trace ct(final short b) { + public Trace ct(final long b) { if (filled.get(18)) { throw new IllegalStateException("mxp.CT already set"); } else { filled.set(18); } - ct.putShort(b); + if (b >= 32L) { + throw new IllegalArgumentException("ct has invalid value (" + b + ")"); + } + ct.put((byte) b); return this; } @@ -529,11 +626,20 @@ public Trace gasMxp(final Bytes b) { filled.set(23); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("gasMxp has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { gasMxp.put((byte) 0); } - gasMxp.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasMxp.put(bs.get(j)); + } return this; } @@ -545,11 +651,20 @@ public Trace gbyte(final Bytes b) { filled.set(24); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("gbyte has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { gbyte.put((byte) 0); } - gbyte.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gbyte.put(bs.get(j)); + } return this; } @@ -561,11 +676,20 @@ public Trace gword(final Bytes b) { filled.set(25); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("gword has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { gword.put((byte) 0); } - gword.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gword.put(bs.get(j)); + } return this; } @@ -589,11 +713,20 @@ public Trace linCost(final Bytes b) { filled.set(27); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("linCost has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { linCost.put((byte) 0); } - linCost.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + linCost.put(bs.get(j)); + } return this; } @@ -605,11 +738,21 @@ public Trace maxOffset(final Bytes b) { filled.set(28); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "maxOffset has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { maxOffset.put((byte) 0); } - maxOffset.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + maxOffset.put(bs.get(j)); + } return this; } @@ -621,11 +764,21 @@ public Trace maxOffset1(final Bytes b) { filled.set(29); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "maxOffset1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { maxOffset1.put((byte) 0); } - maxOffset1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + maxOffset1.put(bs.get(j)); + } return this; } @@ -637,11 +790,21 @@ public Trace maxOffset2(final Bytes b) { filled.set(30); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "maxOffset2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { maxOffset2.put((byte) 0); } - maxOffset2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + maxOffset2.put(bs.get(j)); + } return this; } @@ -749,11 +912,21 @@ public Trace offset1Hi(final Bytes b) { filled.set(39); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "offset1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { offset1Hi.put((byte) 0); } - offset1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + offset1Hi.put(bs.get(j)); + } return this; } @@ -765,11 +938,21 @@ public Trace offset1Lo(final Bytes b) { filled.set(40); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "offset1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { offset1Lo.put((byte) 0); } - offset1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + offset1Lo.put(bs.get(j)); + } return this; } @@ -781,11 +964,21 @@ public Trace offset2Hi(final Bytes b) { filled.set(41); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "offset2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { offset2Hi.put((byte) 0); } - offset2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + offset2Hi.put(bs.get(j)); + } return this; } @@ -797,11 +990,21 @@ public Trace offset2Lo(final Bytes b) { filled.set(42); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "offset2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { offset2Lo.put((byte) 0); } - offset2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + offset2Lo.put(bs.get(j)); + } return this; } @@ -813,11 +1016,20 @@ public Trace quadCost(final Bytes b) { filled.set(43); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("quadCost has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { quadCost.put((byte) 0); } - quadCost.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + quadCost.put(bs.get(j)); + } return this; } @@ -841,11 +1053,20 @@ public Trace size1Hi(final Bytes b) { filled.set(45); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("size1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { size1Hi.put((byte) 0); } - size1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + size1Hi.put(bs.get(j)); + } return this; } @@ -857,11 +1078,20 @@ public Trace size1Lo(final Bytes b) { filled.set(46); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("size1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { size1Lo.put((byte) 0); } - size1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + size1Lo.put(bs.get(j)); + } return this; } @@ -873,11 +1103,20 @@ public Trace size2Hi(final Bytes b) { filled.set(47); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("size2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { size2Hi.put((byte) 0); } - size2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + size2Hi.put(bs.get(j)); + } return this; } @@ -889,11 +1128,20 @@ public Trace size2Lo(final Bytes b) { filled.set(48); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("size2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { size2Lo.put((byte) 0); } - size2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + size2Lo.put(bs.get(j)); + } return this; } @@ -905,7 +1153,13 @@ public Trace stamp(final long b) { filled.set(49); } - stamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 24)); + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); return this; } @@ -917,11 +1171,20 @@ public Trace words(final Bytes b) { filled.set(50); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("words has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { words.put((byte) 0); } - words.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + words.put(bs.get(j)); + } return this; } @@ -933,11 +1196,20 @@ public Trace wordsNew(final Bytes b) { filled.set(51); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("wordsNew has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { wordsNew.put((byte) 0); } - wordsNew.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + wordsNew.put(bs.get(j)); + } return this; } @@ -1159,31 +1431,31 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - acc1.position(acc1.position() + 32); + acc1.position(acc1.position() + 17); } if (!filled.get(1)) { - acc2.position(acc2.position() + 32); + acc2.position(acc2.position() + 17); } if (!filled.get(2)) { - acc3.position(acc3.position() + 32); + acc3.position(acc3.position() + 17); } if (!filled.get(3)) { - acc4.position(acc4.position() + 32); + acc4.position(acc4.position() + 17); } if (!filled.get(4)) { - accA.position(accA.position() + 32); + accA.position(accA.position() + 17); } if (!filled.get(5)) { - accQ.position(accQ.position() + 32); + accQ.position(accQ.position() + 17); } if (!filled.get(6)) { - accW.position(accW.position() + 32); + accW.position(accW.position() + 17); } if (!filled.get(7)) { @@ -1223,15 +1495,15 @@ public Trace fillAndValidateRow() { } if (!filled.get(19)) { - cMem.position(cMem.position() + 32); + cMem.position(cMem.position() + 8); } if (!filled.get(20)) { - cMemNew.position(cMemNew.position() + 32); + cMemNew.position(cMemNew.position() + 8); } if (!filled.get(16)) { - cn.position(cn.position() + 32); + cn.position(cn.position() + 8); } if (!filled.get(17)) { @@ -1239,7 +1511,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(18)) { - ct.position(ct.position() + 2); + ct.position(ct.position() + 1); } if (!filled.get(21)) { @@ -1251,15 +1523,15 @@ public Trace fillAndValidateRow() { } if (!filled.get(23)) { - gasMxp.position(gasMxp.position() + 32); + gasMxp.position(gasMxp.position() + 8); } if (!filled.get(24)) { - gbyte.position(gbyte.position() + 32); + gbyte.position(gbyte.position() + 8); } if (!filled.get(25)) { - gword.position(gword.position() + 32); + gword.position(gword.position() + 8); } if (!filled.get(26)) { @@ -1267,7 +1539,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(27)) { - linCost.position(linCost.position() + 32); + linCost.position(linCost.position() + 8); } if (!filled.get(28)) { @@ -1315,23 +1587,23 @@ public Trace fillAndValidateRow() { } if (!filled.get(39)) { - offset1Hi.position(offset1Hi.position() + 32); + offset1Hi.position(offset1Hi.position() + 16); } if (!filled.get(40)) { - offset1Lo.position(offset1Lo.position() + 32); + offset1Lo.position(offset1Lo.position() + 16); } if (!filled.get(41)) { - offset2Hi.position(offset2Hi.position() + 32); + offset2Hi.position(offset2Hi.position() + 16); } if (!filled.get(42)) { - offset2Lo.position(offset2Lo.position() + 32); + offset2Lo.position(offset2Lo.position() + 16); } if (!filled.get(43)) { - quadCost.position(quadCost.position() + 32); + quadCost.position(quadCost.position() + 8); } if (!filled.get(44)) { @@ -1339,31 +1611,31 @@ public Trace fillAndValidateRow() { } if (!filled.get(45)) { - size1Hi.position(size1Hi.position() + 32); + size1Hi.position(size1Hi.position() + 16); } if (!filled.get(46)) { - size1Lo.position(size1Lo.position() + 32); + size1Lo.position(size1Lo.position() + 16); } if (!filled.get(47)) { - size2Hi.position(size2Hi.position() + 32); + size2Hi.position(size2Hi.position() + 16); } if (!filled.get(48)) { - size2Lo.position(size2Lo.position() + 32); + size2Lo.position(size2Lo.position() + 16); } if (!filled.get(49)) { - stamp.position(stamp.position() + 8); + stamp.position(stamp.position() + 4); } if (!filled.get(50)) { - words.position(words.position() + 32); + words.position(words.position() + 8); } if (!filled.get(51)) { - wordsNew.position(wordsNew.position() + 32); + wordsNew.position(wordsNew.position() + 8); } filled.clear(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/Oob.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/Oob.java new file mode 100644 index 0000000000..ab1bb2ac99 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/Oob.java @@ -0,0 +1,169 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; + +import java.math.BigInteger; +import java.nio.MappedByteBuffer; +import java.util.List; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import net.consensys.linea.zktracer.ColumnHeader; +import net.consensys.linea.zktracer.container.stacked.list.StackedList; +import net.consensys.linea.zktracer.module.Module; +import net.consensys.linea.zktracer.module.add.Add; +import net.consensys.linea.zktracer.module.hub.Hub; +import net.consensys.linea.zktracer.module.mod.Mod; +import net.consensys.linea.zktracer.module.wcp.Wcp; +import net.consensys.linea.zktracer.opcode.OpCode; +import org.hyperledger.besu.datatypes.Address; +import org.hyperledger.besu.evm.frame.MessageFrame; +import org.hyperledger.besu.evm.internal.Words; + +@RequiredArgsConstructor +/** Implementation of a {@link Module} for out of bounds. */ +public class Oob implements Module { + + /** A list of the operations to trace */ + @Getter private final StackedList chunks = new StackedList<>(); + + private final Hub hub; + private final Add add; + private final Mod mod; + private final Wcp wcp; + + @Override + public String moduleKey() { + return "OOB"; + } + + static final List
PRECOMPILES_HANDLED_BY_OOB = + List.of( + Address.ECREC, + Address.SHA256, + Address.RIPEMD160, + Address.ID, + Address.ALTBN128_ADD, + Address.ALTBN128_MUL, + Address.ALTBN128_PAIRING, + Address.BLAKE2B_F_COMPRESSION); + + @Override + public void tracePreOpcode(MessageFrame frame) { // This will be renamed to tracePreOp + this.chunks.add(new OobOperation(frame, add, mod, wcp, hub, false, 0, 0)); + OpCode opCode = OpCode.of(frame.getCurrentOperation().getOpcode()); + + if (opCode.isCall()) { + Address target = Words.toAddress(frame.getStackItem(1)); + + if (PRECOMPILES_HANDLED_BY_OOB.contains(target)) { + if (target.equals(Address.BLAKE2B_F_COMPRESSION)) { + OobOperation oobOperation = new OobOperation(frame, add, mod, wcp, hub, true, 1, 0); + this.chunks.add(oobOperation); + boolean validCds = oobOperation.getOutgoingResLo()[0].equals(BigInteger.ONE); + if (validCds) { + this.chunks.add(new OobOperation(frame, add, mod, wcp, hub, true, 2, 0)); + } + } else if (target.equals(Address.MODEXP)) { + for (int i = 1; i <= 7; i++) { + this.chunks.add(new OobOperation(frame, add, mod, wcp, hub, true, 0, i)); + } + } else { + // Other precompiles case + this.chunks.add(new OobOperation(frame, add, mod, wcp, hub, true, 0, 0)); + } + } + } + } + + final void traceChunk(final OobOperation chunk, int stamp, Trace trace) { + int nRows = chunk.nRows(); + + for (int ct = 0; ct < nRows; ct++) { + trace = chunk.getOobParameters().trace(trace); + + // Note: if a value is bigger than 128, do not use Bytes.of and use Bytes.ofUnsignedType + // instead (according to size) + trace + .stamp(stamp) + .ct((short) ct) + .ctMax((short) chunk.maxCt()) + .oobInst(bigIntegerToBytes(chunk.getOobInst())) + .isJump(chunk.isJump()) + .isJumpi(chunk.isJumpi()) + .isRdc(chunk.isRdc()) + .isCdl(chunk.isCdl()) + .isXcall(chunk.isXCall()) + .isCall(chunk.isCall()) + .isCreate(chunk.isCreate()) + .isSstore(chunk.isSstore()) + .isDeployment(chunk.isDeployment()) + .isEcrecover(chunk.isEcRecover()) + .isSha2(chunk.isSha2()) + .isRipemd(chunk.isRipemd()) + .isIdentity(chunk.isIdentity()) + .isEcadd(chunk.isEcadd()) + .isEcmul(chunk.isEcmul()) + .isEcpairing(chunk.isEcpairing()) + .isBlake2FCds(chunk.isBlake2FCds()) + .isBlake2FParams(chunk.isBlake2FParams()) + .isModexpCds(chunk.isModexpCds()) + .isModexpXbs(chunk.isModexpXbs()) + .isModexpLead(chunk.isModexpLead()) + .isModexpPricing(chunk.isPrcModexpPricing()) + .isModexpExtract(chunk.isPrcModexpExtract()) + .addFlag(chunk.getAddFlag()[ct]) + .modFlag(chunk.getModFlag()[ct]) + .wcpFlag(chunk.getWcpFlag()[ct]) + .outgoingInst(chunk.getOutgoingInst()[ct]) + .outgoingData1(bigIntegerToBytes(chunk.getOutgoingData1()[ct])) + .outgoingData2(bigIntegerToBytes(chunk.getOutgoingData2()[ct])) + .outgoingData3(bigIntegerToBytes(chunk.getOutgoingData3()[ct])) + .outgoingData4(bigIntegerToBytes(chunk.getOutgoingData4()[ct])) + .outgoingResLo(bigIntegerToBytes(chunk.getOutgoingResLo()[ct])) + .validateRow(); + } + } + + @Override + public void enterTransaction() { + this.chunks.enter(); + } + + @Override + public void popTransaction() { + this.chunks.pop(); + } + + @Override + public int lineCount() { + return this.chunks.stream().mapToInt(OobOperation::nRows).sum(); + } + + @Override + public void commit(List buffers) { + Trace trace = new Trace(buffers); + for (int i = 0; i < this.chunks.size(); i++) { + this.traceChunk(this.chunks.get(i), i + 1, trace); + } + } + + public List columnsHeaders() { + return Trace.headers(this.lineCount()); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/OobDataChannel.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/OobDataChannel.java index ce8afc46ad..41146c7c33 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/OobDataChannel.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/OobDataChannel.java @@ -26,24 +26,16 @@ public enum OobDataChannel { DATA_8; public static OobDataChannel of(int i) { - if (i == 0) { - return DATA_1; - } else if (i == 1) { - return DATA_2; - } else if (i == 2) { - return DATA_3; - } else if (i == 3) { - return DATA_4; - } else if (i == 4) { - return DATA_5; - } else if (i == 5) { - return DATA_6; - } else if (i == 6) { - return DATA_7; - } else if (i == 7) { - return DATA_8; - } - - throw new IllegalArgumentException("unknown OOB data channel"); + return switch (i) { + case 0 -> DATA_1; + case 1 -> DATA_2; + case 2 -> DATA_3; + case 3 -> DATA_4; + case 4 -> DATA_5; + case 5 -> DATA_6; + case 6 -> DATA_7; + case 7 -> DATA_8; + default -> throw new IllegalArgumentException("unknown OOB data channel: %d".formatted(i)); + }; } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/OobOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/OobOperation.java new file mode 100644 index 0000000000..ab72f871df --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/OobOperation.java @@ -0,0 +1,1349 @@ +/* + * Copyright ConsenSys AG. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob; + +import static com.google.common.math.BigIntegerMath.log2; +import static java.lang.Byte.toUnsignedInt; +import static java.lang.Math.max; +import static java.lang.Math.min; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.GAS_CONST_G_CALL_STIPEND; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_BLAKE2F_CDS; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_BLAKE2F_PARAMS; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_CALL; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_CDL; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_CREATE; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_DEPLOYMENT; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_ECADD; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_ECMUL; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_ECPAIRING; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_ECRECOVER; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_IDENTITY; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_JUMP; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_JUMPI; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_MODEXP_CDS; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_MODEXP_EXTRACT; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_MODEXP_LEAD; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_MODEXP_PRICING; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_MODEXP_XBS; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_RDC; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_RIPEMD; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_SHA2; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_SSTORE; +import static net.consensys.linea.zktracer.module.oob.Trace.CT_MAX_XCALL; +import static net.consensys.linea.zktracer.module.oob.Trace.G_QUADDIVISOR; +import static net.consensys.linea.zktracer.types.AddressUtils.getDeploymentAddress; +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBoolean; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBigInteger; +import static net.consensys.linea.zktracer.types.Conversions.booleanToInt; + +import java.math.BigInteger; +import java.math.RoundingMode; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import net.consensys.linea.zktracer.ZkTracer; +import net.consensys.linea.zktracer.container.ModuleOperation; +import net.consensys.linea.zktracer.module.add.Add; +import net.consensys.linea.zktracer.module.hub.Hub; +import net.consensys.linea.zktracer.module.hub.signals.Exceptions; +import net.consensys.linea.zktracer.module.mod.Mod; +import net.consensys.linea.zktracer.module.oob.parameters.Blake2fCallDataSizeParameters; +import net.consensys.linea.zktracer.module.oob.parameters.Blake2fParamsParameters; +import net.consensys.linea.zktracer.module.oob.parameters.CallDataLoadOobParameters; +import net.consensys.linea.zktracer.module.oob.parameters.CallOobParameters; +import net.consensys.linea.zktracer.module.oob.parameters.CreateOobParameters; +import net.consensys.linea.zktracer.module.oob.parameters.DeploymentOobParameters; +import net.consensys.linea.zktracer.module.oob.parameters.JumpOobParameters; +import net.consensys.linea.zktracer.module.oob.parameters.JumpiOobParameters; +import net.consensys.linea.zktracer.module.oob.parameters.ModexpCallDataSizeParameters; +import net.consensys.linea.zktracer.module.oob.parameters.ModexpExtractParameters; +import net.consensys.linea.zktracer.module.oob.parameters.ModexpLeadParameters; +import net.consensys.linea.zktracer.module.oob.parameters.ModexpPricingParameters; +import net.consensys.linea.zktracer.module.oob.parameters.ModexpXbsParameters; +import net.consensys.linea.zktracer.module.oob.parameters.OobParameters; +import net.consensys.linea.zktracer.module.oob.parameters.PrecompileCommonOobParameters; +import net.consensys.linea.zktracer.module.oob.parameters.ReturnDataCopyOobParameters; +import net.consensys.linea.zktracer.module.oob.parameters.SstoreOobParameters; +import net.consensys.linea.zktracer.module.oob.parameters.XCallOobParameters; +import net.consensys.linea.zktracer.module.wcp.Wcp; +import net.consensys.linea.zktracer.opcode.OpCode; +import net.consensys.linea.zktracer.types.EWord; +import net.consensys.linea.zktracer.types.UnsignedByte; +import org.apache.tuweni.bytes.Bytes; +import org.hyperledger.besu.datatypes.Address; +import org.hyperledger.besu.evm.account.Account; +import org.hyperledger.besu.evm.frame.MessageFrame; +import org.hyperledger.besu.evm.internal.Words; + +@Getter +@EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = false) +public class OobOperation extends ModuleOperation { + @EqualsAndHashCode.Include private BigInteger oobInst; + @EqualsAndHashCode.Include private OobParameters oobParameters; + + private boolean isJump; + private boolean isJumpi; + private boolean isRdc; + private boolean isCdl; + private boolean isXCall; + private boolean isCall; + private boolean isCreate; + private boolean isSstore; + private boolean isDeployment; + + private boolean isEcRecover; + private boolean isSha2; + private boolean isRipemd; + private boolean isIdentity; + private boolean isEcadd; + private boolean isEcmul; + private boolean isEcpairing; + private boolean isBlake2FCds; + private boolean isBlake2FParams; + private boolean isModexpCds; + private boolean isModexpXbs; + private boolean isModexpLead; + private boolean prcModexpPricing; + private boolean prcModexpExtract; + + private boolean isModexpBbs; + private boolean isModexpEbs; + private boolean isModexpMbs; + + private final boolean[] addFlag; + private final boolean[] modFlag; + private final boolean[] wcpFlag; + + private final UnsignedByte[] outgoingInst; + + private final BigInteger[] outgoingData1; + private final BigInteger[] outgoingData2; + private final BigInteger[] outgoingData3; + private final BigInteger[] outgoingData4; + + private final BigInteger[] outgoingResLo; + + private BigInteger wghtSum; + + private BigInteger precompileCost; + + // Modules for lookups + private final Add add; + private final Mod mod; + private final Wcp wcp; + + private final Hub hub; + + private final int blake2FCallNumber; + private final int modexpCallNumber; + + public OobOperation( + final MessageFrame frame, + final Add add, + final Mod mod, + final Wcp wcp, + final Hub hub, + boolean isPrecompile, + int blake2FCallNumber, + int modexpCallNumber) { + this.add = add; + this.mod = mod; + this.wcp = wcp; + this.hub = hub; + + this.blake2FCallNumber = blake2FCallNumber; + this.modexpCallNumber = modexpCallNumber; + + if (isPrecompile) { + setPrecomileFlagsAndWghtSumAndIncomingInst(frame); + } else { + setOpCodeFlagsAndWghtSumAndIncomingInst(frame); + } + + // Init arrays + int nRows = nRows(); + addFlag = new boolean[nRows]; + modFlag = new boolean[nRows]; + wcpFlag = new boolean[nRows]; + + outgoingInst = new UnsignedByte[nRows]; + outgoingData1 = new BigInteger[nRows]; + outgoingData2 = new BigInteger[nRows]; + outgoingData3 = new BigInteger[nRows]; + outgoingData4 = new BigInteger[nRows]; + outgoingResLo = new BigInteger[nRows]; + + // TODO: ensure that the nonce update for CREATE is not already done + populateColumns(frame); + } + + private void setOpCodeFlagsAndWghtSumAndIncomingInst(MessageFrame frame) { + final OpCode opCode = OpCode.of(frame.getCurrentOperation().getOpcode()); + // In the case of CALLs and CREATEs this value will be replaced + wghtSum = BigInteger.valueOf(Byte.toUnsignedInt(opCode.byteValue())); + + switch (opCode) { + case JUMP: + isJump = true; + break; + case JUMPI: + isJumpi = true; + break; + case RETURNDATACOPY: + isRdc = true; + break; + case CALLDATALOAD: + isCdl = true; + break; + case CALL, CALLCODE, DELEGATECALL, STATICCALL: + if (opCode == OpCode.CALL + && !Exceptions.stackUnderflow(hub.pch().exceptions()) + && Exceptions.any(hub.pch().exceptions())) { + isXCall = true; + wghtSum = BigInteger.valueOf(0xCC); + } else { + isCall = true; + wghtSum = BigInteger.valueOf(0xCA); + } + break; + case CREATE, CREATE2: + isCreate = true; + wghtSum = BigInteger.valueOf(0xCE); + break; + case SSTORE: + isSstore = true; + break; + case RETURN: + isDeployment = true; + break; + default: + throw new IllegalArgumentException("OpCode not relevant for Oob"); + } + oobInst = wghtSum; + } + + private void setPrecomileFlagsAndWghtSumAndIncomingInst(MessageFrame frame) { + final Address target = Words.toAddress(frame.getStackItem(1)); + + if (target.equals(Address.ECREC)) { + isEcRecover = true; + wghtSum = Bytes.fromHexString("FF01").toUnsignedBigInteger(); + } else if (target.equals(Address.SHA256)) { + isSha2 = true; + wghtSum = Bytes.fromHexString("FF02").toUnsignedBigInteger(); + } else if (target.equals(Address.RIPEMD160)) { + isRipemd = true; + wghtSum = Bytes.fromHexString("FF03").toUnsignedBigInteger(); + } else if (target.equals(Address.ID)) { + isIdentity = true; + wghtSum = Bytes.fromHexString("FF04").toUnsignedBigInteger(); + } else if (target.equals(Address.ALTBN128_ADD)) { + isEcadd = true; + wghtSum = Bytes.fromHexString("FF06").toUnsignedBigInteger(); + } else if (target.equals(Address.ALTBN128_MUL)) { + isEcmul = true; + wghtSum = Bytes.fromHexString("FF07").toUnsignedBigInteger(); + } else if (target.equals(Address.ALTBN128_PAIRING)) { + isEcpairing = true; + wghtSum = Bytes.fromHexString("FF08").toUnsignedBigInteger(); + } else if (target.equals(Address.BLAKE2B_F_COMPRESSION)) { + if (blake2FCallNumber == 1) { + isBlake2FCds = true; + wghtSum = Bytes.fromHexString("FA09").toUnsignedBigInteger(); + } else if (blake2FCallNumber == 2) { + isBlake2FParams = true; + wghtSum = Bytes.fromHexString("FB09").toUnsignedBigInteger(); + } + } else if (target.equals(Address.MODEXP)) { + switch (modexpCallNumber) { + case 1: + isModexpCds = true; + wghtSum = Bytes.fromHexString("FA05").toUnsignedBigInteger(); + case 2: + isModexpXbs = true; + isModexpBbs = true; + wghtSum = Bytes.fromHexString("FB05").toUnsignedBigInteger(); + case 3: + isModexpXbs = true; + isModexpEbs = true; + wghtSum = Bytes.fromHexString("FB05").toUnsignedBigInteger(); + case 4: + isModexpXbs = true; + isModexpMbs = true; + wghtSum = Bytes.fromHexString("FB05").toUnsignedBigInteger(); + case 5: + isModexpLead = true; + wghtSum = Bytes.fromHexString("FC05").toUnsignedBigInteger(); + case 6: + prcModexpPricing = true; + wghtSum = Bytes.fromHexString("FD05").toUnsignedBigInteger(); + case 7: + prcModexpExtract = true; + wghtSum = Bytes.fromHexString("FE05").toUnsignedBigInteger(); + } + } else { + throw new IllegalArgumentException("Precompile not relevant for Oob"); + } + oobInst = wghtSum; + } + + public boolean isInst() { + return isJump + || isJumpi + || isRdc + || isCdl + || isCall + || isXCall + || isCreate + || isSstore + || isDeployment; + } + + public boolean isCommonPrecompile() { + return isEcRecover || isSha2 || isRipemd || isIdentity || isEcadd || isEcmul || isEcpairing; + } + + public boolean isBlakePrecompile() { + return isBlake2FCds || isBlake2FParams; + } + + public boolean isModexpPrecompile() { + return isModexpCds || isModexpXbs || isModexpLead || prcModexpPricing || prcModexpExtract; + } + + public boolean isPrecompile() { + return isCommonPrecompile() || isBlakePrecompile() || isModexpPrecompile(); + } + + public int maxCt() { + return CT_MAX_JUMP * booleanToInt(isJump) + + CT_MAX_JUMPI * booleanToInt(isJumpi) + + CT_MAX_RDC * booleanToInt(isRdc) + + CT_MAX_CDL * booleanToInt(isCdl) + + CT_MAX_XCALL * booleanToInt(isXCall) + + CT_MAX_CALL * booleanToInt(isCall) + + CT_MAX_CREATE * booleanToInt(isCreate) + + CT_MAX_SSTORE * booleanToInt(isSstore) + + CT_MAX_DEPLOYMENT * booleanToInt(isDeployment) + + CT_MAX_ECRECOVER * booleanToInt(isEcRecover) + + CT_MAX_SHA2 * booleanToInt(isSha2) + + CT_MAX_RIPEMD * booleanToInt(isRipemd) + + CT_MAX_IDENTITY * booleanToInt(isIdentity) + + CT_MAX_ECADD * booleanToInt(isEcadd) + + CT_MAX_ECMUL * booleanToInt(isEcmul) + + CT_MAX_ECPAIRING * booleanToInt(isEcpairing) + + CT_MAX_BLAKE2F_CDS * booleanToInt(isBlake2FCds) + + CT_MAX_BLAKE2F_PARAMS * booleanToInt(isBlake2FParams) + + CT_MAX_MODEXP_CDS * booleanToInt(isModexpCds) + + CT_MAX_MODEXP_XBS * booleanToInt(isModexpXbs) + + CT_MAX_MODEXP_LEAD * booleanToInt(isModexpLead) + + CT_MAX_MODEXP_PRICING * booleanToInt(prcModexpPricing) + + CT_MAX_MODEXP_EXTRACT * booleanToInt(prcModexpExtract); + } + + public int nRows() { + return maxCt() + 1; + } + + private void populateColumns(final MessageFrame frame) { + final OpCode opCode = OpCode.of(frame.getCurrentOperation().getOpcode()); + + if (isInst()) { + if (isJump) { + JumpOobParameters jumpOobParameters = + new JumpOobParameters( + EWord.of(frame.getStackItem(0)), BigInteger.valueOf(frame.getCode().getSize())); + oobParameters = jumpOobParameters; + setJump(jumpOobParameters); + } else if (isJumpi) { + JumpiOobParameters jumpiOobParameters = + new JumpiOobParameters( + EWord.of(frame.getStackItem(0)), + EWord.of(frame.getStackItem(1)), + BigInteger.valueOf(frame.getCode().getSize())); + oobParameters = jumpiOobParameters; + setJumpi(jumpiOobParameters); + } else if (isRdc) { + ReturnDataCopyOobParameters rdcOobParameters = + new ReturnDataCopyOobParameters( + EWord.of(frame.getStackItem(1)), + EWord.of(frame.getStackItem(2)), + BigInteger.valueOf(frame.getReturnData().size())); + oobParameters = rdcOobParameters; + setRdc(rdcOobParameters); + } else if (isCdl) { + CallDataLoadOobParameters cdlOobParameters = + new CallDataLoadOobParameters( + EWord.of(frame.getStackItem(0)), BigInteger.valueOf(frame.getInputData().size())); + oobParameters = cdlOobParameters; + setCdl(cdlOobParameters); + } else if (isSstore) { + final SstoreOobParameters sstoreOobParameters = + new SstoreOobParameters(BigInteger.valueOf(frame.getRemainingGas())); + + oobParameters = sstoreOobParameters; + setSstore(sstoreOobParameters); + } else if (isDeployment) { + final DeploymentOobParameters deploymentOobParameters = + new DeploymentOobParameters(EWord.of(frame.getStackItem(0))); + + oobParameters = deploymentOobParameters; + setDeployment(deploymentOobParameters); + } else if (isXCall) { + XCallOobParameters xCallOobParameters = + new XCallOobParameters(EWord.of(frame.getStackItem(2))); + oobParameters = xCallOobParameters; + setXCall(xCallOobParameters); + } else if (isCall) { + final Account callerAccount = frame.getWorldUpdater().get(frame.getRecipientAddress()); + // DELEGATECALL, STATICCALL cases + EWord value = EWord.ZERO; + boolean nonZeroValue = false; + // CALL, CALLCODE cases + if (opCode == OpCode.CALL || opCode == OpCode.CALLCODE) { + value = EWord.of(frame.getStackItem(2)); + nonZeroValue = !frame.getStackItem(2).isZero(); + } + CallOobParameters callOobParameters = + new CallOobParameters( + value, + callerAccount.getBalance().toUnsignedBigInteger(), // balance (caller address) + BigInteger.valueOf(frame.getDepth())); + oobParameters = callOobParameters; + setCall(callOobParameters); + } else if (isCreate) { + final Account creatorAccount = frame.getWorldUpdater().get(frame.getRecipientAddress()); + final Address deploymentAddress = getDeploymentAddress(frame); + final Account deployedAccount = frame.getWorldUpdater().get(deploymentAddress); + + long nonce = 0; + boolean hasCode = false; + if (deployedAccount != null) { + nonce = deployedAccount.getNonce(); + hasCode = deployedAccount.hasCode(); + } + + final CreateOobParameters createOobParameters = + new CreateOobParameters( + EWord.of(frame.getStackItem(0)), + creatorAccount.getBalance().toUnsignedBigInteger(), // balance (creator address) + BigInteger.valueOf(nonce), // nonce (deployment address) + hasCode, // has_code (deployment address) + BigInteger.valueOf(frame.getDepth())); + + oobParameters = createOobParameters; + setCreate(createOobParameters); + } + } else if (isPrecompile()) { + // DELEGATECALL, STATICCALL cases + int argsOffset = 2; + // this corresponds to argsSize on evm.codes + int cdsIndex = 3; + // this corresponds to retSize on evm.codes + int returnAtCapacityIndex = 5; + // value is not part of the arguments for DELEGATECALL and STATICCALL + boolean transfersValue = false; + // CALL, CALLCODE cases + if (opCode == OpCode.CALL || opCode == OpCode.CALLCODE) { + argsOffset = 3; + cdsIndex = 4; + returnAtCapacityIndex = 6; + transfersValue = !frame.getStackItem(2).isZero(); + } + + final BigInteger callGas = + BigInteger.valueOf( + ZkTracer.gasCalculator.gasAvailableForChildCall( + frame, Words.clampedToLong(frame.getStackItem(0)), transfersValue)); + + final BigInteger cds = EWord.of(frame.getStackItem(cdsIndex)).toUnsignedBigInteger(); + // Note that this check will disappear since it will be the MXP module taking care of it + if (cds.compareTo(EWord.of(frame.getStackItem(cdsIndex)).loBigInt()) > 0) { + throw new IllegalArgumentException("cds hi part is non-zero"); + } + + final BigInteger returnAtCapacity = + EWord.of(frame.getStackItem(returnAtCapacityIndex)).toUnsignedBigInteger(); + + if (isCommonPrecompile()) { + PrecompileCommonOobParameters prcCommonOobParameters = + new PrecompileCommonOobParameters(callGas, cds, returnAtCapacity); + oobParameters = prcCommonOobParameters; + setPrecompile(prcCommonOobParameters); + if (isEcRecover || isEcadd || isEcmul) { + setPrcEcRecoverPrcEcaddPrcEcmul(prcCommonOobParameters); + } else if (isSha2 || isRipemd || isIdentity) { + setPrcSha2PrcRipemdPrcIdentity(prcCommonOobParameters); + } else if (isEcpairing) { + setEcpairing(prcCommonOobParameters); + } + } else if (isModexpPrecompile()) { + final Bytes unpaddedCallData = frame.shadowReadMemory(argsOffset, cds.longValue()); + // pad unpaddedCallData to 96 + final Bytes paddedCallData = + cds.intValue() < 96 + ? Bytes.concatenate(unpaddedCallData, Bytes.repeat((byte) 0, 96 - cds.intValue())) + : unpaddedCallData; + + // cds and the data below can be int when compared (after size check) + final BigInteger bbs = paddedCallData.slice(0, 32).toUnsignedBigInteger(); + final BigInteger ebs = paddedCallData.slice(32, 32).toUnsignedBigInteger(); + final BigInteger mbs = paddedCallData.slice(64, 32).toUnsignedBigInteger(); + + // Check if bbs, ebs and mbs are <= 512 + if (bbs.compareTo(BigInteger.valueOf(512)) > 0 + || ebs.compareTo(BigInteger.valueOf(512)) > 0 + || mbs.compareTo(BigInteger.valueOf(512)) > 0) { + throw new IllegalArgumentException("byte sizes are too big"); + } + + // pad paddedCallData to 96 + bbs + ebs + final Bytes doublePaddedCallData = + cds.intValue() < 96 + bbs.intValue() + ebs.intValue() + ? Bytes.concatenate( + paddedCallData, + Bytes.repeat((byte) 0, 96 + bbs.intValue() + ebs.intValue() - cds.intValue())) + : paddedCallData; + + final BigInteger leadingBytesOfExponent = + doublePaddedCallData + .slice(96 + bbs.intValue(), min(ebs.intValue(), 32)) + .toUnsignedBigInteger(); + + BigInteger exponentLog; + if (ebs.intValue() <= 32 && leadingBytesOfExponent.signum() == 0) { + exponentLog = BigInteger.ZERO; + } else if (ebs.intValue() <= 32 && leadingBytesOfExponent.signum() != 0) { + exponentLog = BigInteger.valueOf(log2(leadingBytesOfExponent, RoundingMode.FLOOR)); + } else if (ebs.intValue() > 32 && leadingBytesOfExponent.signum() != 0) { + exponentLog = + BigInteger.valueOf(8) + .multiply(ebs.subtract(BigInteger.valueOf(32))) + .add(BigInteger.valueOf(log2(leadingBytesOfExponent, RoundingMode.FLOOR))); + } else { + exponentLog = BigInteger.valueOf(8).multiply(ebs.subtract(BigInteger.valueOf(32))); + } + if (isModexpCds) { + final ModexpCallDataSizeParameters prcModexpCdsParameters = + new ModexpCallDataSizeParameters(cds); + oobParameters = prcModexpCdsParameters; + setModexpCds(prcModexpCdsParameters); + } else if (isModexpXbs) { + final ModexpXbsParameters prcModexpXbsParameters; + if (isModexpBbs) { + prcModexpXbsParameters = + new ModexpXbsParameters( + EWord.of(bbs).hiBigInt(), EWord.of(bbs).loBigInt(), BigInteger.ZERO, false); + } else if (isModexpEbs) { + prcModexpXbsParameters = + new ModexpXbsParameters( + EWord.of(ebs).hiBigInt(), EWord.of(ebs).loBigInt(), BigInteger.ZERO, false); + } else { + // isModexpMbs + prcModexpXbsParameters = + new ModexpXbsParameters( + EWord.of(mbs).hiBigInt(), + EWord.of(mbs).loBigInt(), + EWord.of(bbs).loBigInt(), + true); + } + oobParameters = prcModexpXbsParameters; + setModexpXbs(prcModexpXbsParameters); + } else if (isModexpLead) { + final ModexpLeadParameters prcModexpLeadParameters = + new ModexpLeadParameters(bbs, cds, ebs); + + oobParameters = prcModexpLeadParameters; + setModexpLead(prcModexpLeadParameters); + } else if (prcModexpPricing) { + int maxMbsBbs = max(mbs.intValue(), bbs.intValue()); + final ModexpPricingParameters prcModexpPricingParameters = + new ModexpPricingParameters(callGas, returnAtCapacity, exponentLog, maxMbsBbs); + + oobParameters = prcModexpPricingParameters; + setPrcModexpPricing(prcModexpPricingParameters); + } else if (prcModexpExtract) { + final ModexpExtractParameters prcModexpExtractParameters = + new ModexpExtractParameters(cds, bbs, ebs, mbs); + + oobParameters = prcModexpExtractParameters; + setPrcModexpExtract(prcModexpExtractParameters); + } + } else if (isBlakePrecompile()) { + if (isBlake2FCds) { + final Blake2fCallDataSizeParameters prcBlake2FCdsParameters = + new Blake2fCallDataSizeParameters(cds, returnAtCapacity); + + oobParameters = prcBlake2FCdsParameters; + setBlake2FCds(prcBlake2FCdsParameters); + } else if (isBlake2FParams) { + final BigInteger blakeR = + frame + .shadowReadMemory(argsOffset, cds.longValue()) + .slice(0, 4) + .toUnsignedBigInteger(); + + final BigInteger blakeF = + BigInteger.valueOf( + toUnsignedInt(frame.shadowReadMemory(argsOffset, cds.longValue()).get(212))); + + final Blake2fParamsParameters prcBlake2FParamsParameters = + new Blake2fParamsParameters(callGas, blakeR, blakeF); + + oobParameters = prcBlake2FParamsParameters; + setBlake2FParams(prcBlake2FParamsParameters); + } + } else { + throw new RuntimeException("no opcode or precompile flag was set to true"); + } + } + } + + // Constraint systems for populating lookups + private void callToADD( + int k, BigInteger arg1Hi, BigInteger arg1Lo, BigInteger arg2Hi, BigInteger arg2Lo) { + final EWord arg1 = EWord.of(arg1Hi, arg1Lo); + final EWord arg2 = EWord.of(arg2Hi, arg2Lo); + addFlag[k] = true; + modFlag[k] = false; + wcpFlag[k] = false; + outgoingInst[k] = UnsignedByte.of(OpCode.ADD.byteValue()); + outgoingData1[k] = arg1Hi; + outgoingData2[k] = arg1Lo; + outgoingData3[k] = arg2Hi; + outgoingData4[k] = arg2Lo; + outgoingResLo[k] = + BigInteger.ZERO; // This value is never used and BigInteger.ZERO is a dummy one + + // lookup + add.callADD(arg1, arg2); + } + + private BigInteger callToDIV( + int k, BigInteger arg1Hi, BigInteger arg1Lo, BigInteger arg2Hi, BigInteger arg2Lo) { + final EWord arg1 = EWord.of(arg1Hi, arg1Lo); + final EWord arg2 = EWord.of(arg2Hi, arg2Lo); + addFlag[k] = false; + modFlag[k] = true; + wcpFlag[k] = false; + outgoingInst[k] = UnsignedByte.of(OpCode.DIV.byteValue()); + outgoingData1[k] = arg1Hi; + outgoingData2[k] = arg1Lo; + outgoingData3[k] = arg2Hi; + outgoingData4[k] = arg2Lo; + outgoingResLo[k] = mod.callDIV(arg1, arg2); + return outgoingResLo[k]; + } + + private BigInteger callToMOD( + int k, BigInteger arg1Hi, BigInteger arg1Lo, BigInteger arg2Hi, BigInteger arg2Lo) { + final EWord arg1 = EWord.of(arg1Hi, arg1Lo); + final EWord arg2 = EWord.of(arg2Hi, arg2Lo); + addFlag[k] = false; + modFlag[k] = true; + wcpFlag[k] = false; + outgoingInst[k] = UnsignedByte.of(OpCode.MOD.byteValue()); + outgoingData1[k] = arg1Hi; + outgoingData2[k] = arg1Lo; + outgoingData3[k] = arg2Hi; + outgoingData4[k] = arg2Lo; + outgoingResLo[k] = mod.callMOD(arg1, arg2); + return outgoingResLo[k]; + } + + private boolean callToLT( + int k, BigInteger arg1Hi, BigInteger arg1Lo, BigInteger arg2Hi, BigInteger arg2Lo) { + final EWord arg1 = EWord.of(arg1Hi, arg1Lo); + final EWord arg2 = EWord.of(arg2Hi, arg2Lo); + addFlag[k] = false; + modFlag[k] = false; + wcpFlag[k] = true; + outgoingInst[k] = UnsignedByte.of(OpCode.LT.byteValue()); + outgoingData1[k] = arg1Hi; + outgoingData2[k] = arg1Lo; + outgoingData3[k] = arg2Hi; + outgoingData4[k] = arg2Lo; + boolean r = wcp.callLT(arg1, arg2); + outgoingResLo[k] = booleanToBigInteger(r); + return r; + } + + private boolean callToGT( + int k, BigInteger arg1Hi, BigInteger arg1Lo, BigInteger arg2Hi, BigInteger arg2Lo) { + final EWord arg1 = EWord.of(arg1Hi, arg1Lo); + final EWord arg2 = EWord.of(arg2Hi, arg2Lo); + addFlag[k] = false; + modFlag[k] = false; + wcpFlag[k] = true; + outgoingInst[k] = UnsignedByte.of(OpCode.GT.byteValue()); + outgoingData1[k] = arg1Hi; + outgoingData2[k] = arg1Lo; + outgoingData3[k] = arg2Hi; + outgoingData4[k] = arg2Lo; + boolean r = wcp.callGT(arg1, arg2); + outgoingResLo[k] = booleanToBigInteger(r); + return r; + } + + private boolean callToISZERO(int k, BigInteger arg1Hi, BigInteger arg1Lo) { + final EWord arg1 = EWord.of(arg1Hi, arg1Lo); + addFlag[k] = false; + modFlag[k] = false; + wcpFlag[k] = true; + outgoingInst[k] = UnsignedByte.of(OpCode.ISZERO.byteValue()); + outgoingData1[k] = arg1Hi; + outgoingData2[k] = arg1Lo; + outgoingData3[k] = BigInteger.ZERO; + outgoingData4[k] = BigInteger.ZERO; + boolean r = wcp.callISZERO(arg1); + outgoingResLo[k] = booleanToBigInteger(r); + return r; + } + + private boolean callToEQ( + int k, BigInteger arg1Hi, BigInteger arg1Lo, BigInteger arg2Hi, BigInteger arg2Lo) { + final EWord arg1 = EWord.of(arg1Hi, arg1Lo); + final EWord arg2 = EWord.of(arg2Hi, arg2Lo); + addFlag[k] = false; + modFlag[k] = false; + wcpFlag[k] = true; + outgoingInst[k] = UnsignedByte.of(OpCode.EQ.byteValue()); + outgoingData1[k] = arg1Hi; + outgoingData2[k] = arg1Lo; + outgoingData3[k] = arg2Hi; + outgoingData4[k] = arg2Lo; + boolean r = wcp.callEQ(arg1, arg2); + outgoingResLo[k] = booleanToBigInteger(r); + return r; + } + + private void noCall(int k) { + addFlag[k] = false; + modFlag[k] = false; + wcpFlag[k] = false; + outgoingInst[k] = UnsignedByte.of(0); + outgoingData1[k] = BigInteger.ZERO; + outgoingData2[k] = BigInteger.ZERO; + outgoingData3[k] = BigInteger.ZERO; + outgoingData4[k] = BigInteger.ZERO; + outgoingResLo[k] = BigInteger.ZERO; + } + + // Methods to populate columns + private void setJump(JumpOobParameters jumpOobParameters) { + // row i + final boolean validPcNew = + callToLT( + 0, + jumpOobParameters.pcNewHi(), + jumpOobParameters.pcNewLo(), + BigInteger.ZERO, + jumpOobParameters.getCodeSize()); + + // Set jumpGuaranteedException + jumpOobParameters.setJumpGuaranteedException(!validPcNew); + + // Set jumpMustBeAttempted + jumpOobParameters.setJumpMustBeAttempted(validPcNew); + } + + private void setJumpi(JumpiOobParameters jumpiOobParameters) { + // row i + final boolean validPcNew = + callToLT( + 0, + jumpiOobParameters.pcNewHi(), + jumpiOobParameters.pcNewLo(), + BigInteger.ZERO, + jumpiOobParameters.getCodeSize()); + + // row i + 1 + final boolean jumpCondIsZero = + callToISZERO(1, jumpiOobParameters.jumpConditionHi(), jumpiOobParameters.jumpConditionLo()); + + // Set jumpNotAttempted + jumpiOobParameters.setJumpNotAttempted(jumpCondIsZero); + + // Set jumpGuaranteedException + jumpiOobParameters.setJumpGuanranteedException(!jumpCondIsZero && !validPcNew); + + // Set jumpMustBeAttempted + jumpiOobParameters.setJumpMustBeAttempted(!jumpCondIsZero && validPcNew); + } + + private void setRdc(ReturnDataCopyOobParameters rdcOobParameters) { + // row i + final boolean rdcRoob = + !callToISZERO(0, rdcOobParameters.offsetHi(), rdcOobParameters.sizeHi()); + + // row i + 1 + if (!rdcRoob) { + callToADD( + 1, + BigInteger.ZERO, + rdcOobParameters.offsetLo(), + BigInteger.ZERO, + rdcOobParameters.sizeLo()); + } else { + noCall(1); + } + final BigInteger sum = + addFlag[1] ? rdcOobParameters.offsetLo().add(rdcOobParameters.sizeLo()) : BigInteger.ZERO; + + // row i + 2 + boolean rdcSoob = false; + if (!rdcRoob) { + rdcSoob = + callToGT( + 2, + EWord.of(sum).hiBigInt(), + EWord.of(sum).loBigInt(), + BigInteger.ZERO, + rdcOobParameters.getRds()); + } else { + noCall(2); + } + + // Set rdcx + rdcOobParameters.setRdcx(rdcRoob || rdcSoob); + } + + private void setCdl(CallDataLoadOobParameters cdlOobParameters) { + // row i + final boolean touchesRam = + callToLT( + 0, + cdlOobParameters.offsetHi(), + cdlOobParameters.offsetLo(), + BigInteger.ZERO, + cdlOobParameters.getCds()); + + // Set cdlOutOfBounds + cdlOobParameters.setCdlOutOfBounds(!touchesRam); + } + + private void setSstore(SstoreOobParameters sstoreOobParameters) { + // row i + final boolean sufficientGas = + callToLT( + 0, + BigInteger.ZERO, + BigInteger.valueOf(GAS_CONST_G_CALL_STIPEND), + BigInteger.ZERO, + sstoreOobParameters.getGas()); + + // Set sstorex + sstoreOobParameters.setSstorex(!sufficientGas); + } + + private void setDeployment(DeploymentOobParameters deploymentOobParameters) { + // row i + final boolean exceedsMaxCodeSize = + callToLT( + 0, + BigInteger.ZERO, + BigInteger.valueOf(24576), + deploymentOobParameters.sizeHi(), + deploymentOobParameters.sizeLo()); + + // Set maxCodeSizeException + deploymentOobParameters.setMaxCodeSizeException(exceedsMaxCodeSize); + } + + private void setXCall(XCallOobParameters xCallOobParameters) { + // row i + boolean valueIsZero = + callToISZERO(0, xCallOobParameters.valueHi(), xCallOobParameters.valueLo()); + + // Set valueIsNonzero + xCallOobParameters.setValueIsNonzero(!valueIsZero); + + // Set valueIsZero + xCallOobParameters.setValueIsZero(valueIsZero); + } + + private void setCall(CallOobParameters callOobParameters) { + // row i + boolean insufficientBalanceAbort = + callToLT( + 0, + BigInteger.ZERO, + callOobParameters.getBalance(), + callOobParameters.valueHi(), + callOobParameters.valueLo()); + + // row i + 1 + final boolean callStackDepthAbort = + !callToLT( + 1, + BigInteger.ZERO, + callOobParameters.getCallStackDepth(), + BigInteger.ZERO, + BigInteger.valueOf(1024)); + + // row i + 2 + boolean valueIsZero = callToISZERO(2, callOobParameters.valueHi(), callOobParameters.valueLo()); + + // Set valueIsNonzero + callOobParameters.setValueIsNonzero(!valueIsZero); + + // Set abortingCondition + callOobParameters.setAbortingCondition(insufficientBalanceAbort || callStackDepthAbort); + } + + private void setCreate(CreateOobParameters createOobParameters) { + // row i + final boolean insufficientBalanceAbort = + callToLT( + 0, + BigInteger.ZERO, + createOobParameters.getBalance(), + createOobParameters.valueHi(), + createOobParameters.valueLo()); + + // row i + 1 + final boolean callStackDepthAbort = + !callToLT( + 1, + BigInteger.ZERO, + createOobParameters.getCallStackDepth(), + BigInteger.ZERO, + BigInteger.valueOf(1024)); + + // row i + 2 + final boolean nonzeroNonce = !callToISZERO(2, BigInteger.ZERO, createOobParameters.getNonce()); + + // Set aborting condition + createOobParameters.setAbortingCondition(insufficientBalanceAbort || callStackDepthAbort); + + // Set failureCondition + createOobParameters.setFailureCondition( + !createOobParameters.isAbortingCondition() + && (createOobParameters.isHasCode() || nonzeroNonce)); + } + + private void setPrecompile(PrecompileCommonOobParameters prcOobParameters) { + // row i + final boolean cdsIsZero = callToISZERO(0, BigInteger.ZERO, prcOobParameters.getCds()); + + // row i + 1 + final boolean returnAtCapacityIsZero = + callToISZERO(1, BigInteger.ZERO, prcOobParameters.getReturnAtCapacity()); + + // Set cdsIsZero + prcOobParameters.setCdsIsZero(cdsIsZero); + + // Set returnAtCapacityIsZero + prcOobParameters.setReturnAtCapacityNonZero(!returnAtCapacityIsZero); + } + + private void setPrcEcRecoverPrcEcaddPrcEcmul( + PrecompileCommonOobParameters prcCommonOobParameters) { + precompileCost = + BigInteger.valueOf( + 3000L * booleanToInt(isEcRecover) + + 150L * booleanToInt(isEcadd) + + 6000L * booleanToInt(isEcmul)); + + // row i + 2 + final boolean insufficientGas = + callToLT( + 2, + BigInteger.ZERO, + prcCommonOobParameters.getCallGas(), + BigInteger.ZERO, + precompileCost); + + // Set hubSuccess + final boolean hubSuccess = !insufficientGas; + prcCommonOobParameters.setSuccess(hubSuccess); + + // Set returnGas + final BigInteger returnGas = + hubSuccess ? prcCommonOobParameters.getCallGas().subtract(precompileCost) : BigInteger.ZERO; + prcCommonOobParameters.setReturnGas(returnGas); + } + + private void setPrcSha2PrcRipemdPrcIdentity( + PrecompileCommonOobParameters prcCommonOobParameters) { + // row i + 2 + final BigInteger ceil = + callToDIV( + 2, + BigInteger.ZERO, + prcCommonOobParameters.getCds().add(BigInteger.valueOf(31)), + BigInteger.ZERO, + BigInteger.valueOf(32)); + + precompileCost = + (BigInteger.valueOf(5).add(ceil)) + .multiply( + BigInteger.valueOf( + 12L * booleanToInt(isSha2) + + 120L * booleanToInt(isRipemd) + + 3L * booleanToInt(isIdentity))); + + // row i + 3 + final boolean insufficientGas = + callToLT( + 3, + BigInteger.ZERO, + prcCommonOobParameters.getCallGas(), + BigInteger.ZERO, + precompileCost); + + // Set hubSuccess + final boolean hubSuccess = !insufficientGas; + prcCommonOobParameters.setSuccess(hubSuccess); + + // Set returnGas + final BigInteger returnGas = + hubSuccess ? prcCommonOobParameters.getCallGas().subtract(precompileCost) : BigInteger.ZERO; + prcCommonOobParameters.setReturnGas(returnGas); + } + + private void setEcpairing(PrecompileCommonOobParameters prcCommonOobParameters) { + // row i + 2 + final BigInteger remainder = + callToMOD( + 2, + BigInteger.ZERO, + prcCommonOobParameters.getCds(), + BigInteger.ZERO, + BigInteger.valueOf(192)); + + // row i + 3 + final boolean isMultipleOf192 = callToISZERO(3, BigInteger.ZERO, remainder); + + precompileCost = BigInteger.ZERO; + if (isMultipleOf192) { + precompileCost = + BigInteger.valueOf(45000) + .add( + BigInteger.valueOf(34000) + .multiply(prcCommonOobParameters.getCds().divide(BigInteger.valueOf(192)))); + } + + // row i + 4 + boolean insufficientGas = false; + if (isMultipleOf192) { + insufficientGas = + callToLT( + 4, + BigInteger.ZERO, + prcCommonOobParameters.getCallGas(), + BigInteger.ZERO, + precompileCost); + } else { + noCall(4); + } + + // Set hubSuccess + final boolean hubSuccess = isMultipleOf192 && !insufficientGas; + prcCommonOobParameters.setSuccess(hubSuccess); + + // Set returnGas + final BigInteger returnGas = + hubSuccess ? prcCommonOobParameters.getCallGas().subtract(precompileCost) : BigInteger.ZERO; + prcCommonOobParameters.setReturnGas(returnGas); + } + + private void setModexpCds(ModexpCallDataSizeParameters prcModexpCdsParameters) { + // row i + final boolean extractBbs = + callToLT( + 0, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, prcModexpCdsParameters.getCds()); + + // row i + 1 + final boolean extractEbs = + callToLT( + 1, + BigInteger.ZERO, + prcModexpCdsParameters.getCds(), + BigInteger.ZERO, + BigInteger.valueOf(32)); + + // row i + 2 + final boolean extractMbs = + callToLT( + 2, + BigInteger.ZERO, + prcModexpCdsParameters.getCds(), + BigInteger.ZERO, + BigInteger.valueOf(64)); + + // Set extractBbs + prcModexpCdsParameters.setExtractBbs(extractBbs); + + // Set extractEbs + prcModexpCdsParameters.setExtractEbs(extractEbs); + + // Set extractMbs + prcModexpCdsParameters.setExtractMbs(extractMbs); + } + + private void setModexpXbs(ModexpXbsParameters prcModexpXbsParameters) { + // row i + final boolean compTo512 = + callToLT( + 0, + prcModexpXbsParameters.getXbsHi(), + prcModexpXbsParameters.getXbsLo(), + BigInteger.ZERO, + BigInteger.valueOf(513)); + + // row i + 1 + final boolean comp = + callToLT( + 1, + BigInteger.ZERO, + prcModexpXbsParameters.getXbsLo(), + BigInteger.ZERO, + prcModexpXbsParameters.getYbsLo()); + + // row i + 2 + callToISZERO(2, BigInteger.ZERO, prcModexpXbsParameters.getXbsLo()); + + // Set maxXbsYbs and xbsNonZero + if (!prcModexpXbsParameters.isComputeMax()) { + prcModexpXbsParameters.setMaxXbsYbs(BigInteger.ZERO); + prcModexpXbsParameters.setXbsNonZero(false); + } else { + prcModexpXbsParameters.setMaxXbsYbs( + comp ? prcModexpXbsParameters.getYbsLo() : prcModexpXbsParameters.getXbsLo()); + prcModexpXbsParameters.setXbsNonZero(!bigIntegerToBoolean(outgoingResLo[2])); + } + } + + private void setModexpLead(ModexpLeadParameters prcModexpLeadParameters) { + // row i + final boolean ebsIsZero = callToISZERO(0, BigInteger.ZERO, prcModexpLeadParameters.getEbs()); + + // row i + 1 + final boolean ebsLessThan32 = + callToLT( + 1, + BigInteger.ZERO, + prcModexpLeadParameters.getEbs(), + BigInteger.ZERO, + BigInteger.valueOf(32)); + + // row i + 2 + final boolean callDataContainsExponentBytes = + callToLT( + 2, + BigInteger.ZERO, + BigInteger.valueOf(96).add(prcModexpLeadParameters.getBbs()), + BigInteger.ZERO, + prcModexpLeadParameters.getCds()); + + // row i + 3 + boolean comp = false; + if (callDataContainsExponentBytes) { + comp = + callToLT( + 3, + BigInteger.ZERO, + prcModexpLeadParameters + .getCds() + .subtract(BigInteger.valueOf(96).add(prcModexpLeadParameters.getBbs())), + BigInteger.ZERO, + BigInteger.valueOf(32)); + } else { + noCall(3); + } + + // Set loadLead + final boolean loadLead = callDataContainsExponentBytes && !ebsIsZero; + prcModexpLeadParameters.setLoadLead(loadLead); + + // Set cdsCutoff + if (!callDataContainsExponentBytes) { + prcModexpLeadParameters.setCdsCutoff(0); + } else { + prcModexpLeadParameters.setCdsCutoff( + comp + ? (prcModexpLeadParameters + .getCds() + .subtract(BigInteger.valueOf(96).add(prcModexpLeadParameters.getBbs())) + .intValue()) + : 32); + } + // Set ebsCutoff + prcModexpLeadParameters.setEbsCutoff( + ebsLessThan32 ? prcModexpLeadParameters.getEbs().intValue() : 32); + + // Set subEbs32 + prcModexpLeadParameters.setSubEbs32( + ebsLessThan32 ? 0 : prcModexpLeadParameters.getEbs().intValue() - 32); + } + + private void setPrcModexpPricing(ModexpPricingParameters prcModexpPricingParameters) { + // row i + final boolean returnAtCapacityIsZero = + callToISZERO(0, BigInteger.ZERO, prcModexpPricingParameters.getReturnAtCapacity()); + + // row i + 1 + final boolean exponentLogIsZero = + callToISZERO(1, BigInteger.ZERO, prcModexpPricingParameters.getExponentLog()); + + // row i + 2 + final BigInteger fOfMax = + callToDIV( + 2, + BigInteger.ZERO, + BigInteger.valueOf( + (long) prcModexpPricingParameters.getMaxMbsBbs() + * prcModexpPricingParameters.getMaxMbsBbs() + + 7), + BigInteger.ZERO, + BigInteger.valueOf(8)); + + // row i + 3 + BigInteger bigNumerator; + if (!exponentLogIsZero) { + bigNumerator = fOfMax.multiply(prcModexpPricingParameters.getExponentLog()); + } else { + bigNumerator = fOfMax; + } + final BigInteger bigQuotient = + callToDIV( + 3, BigInteger.ZERO, bigNumerator, BigInteger.ZERO, BigInteger.valueOf(G_QUADDIVISOR)); + + // row i + 4 + final boolean bigQuotientLT200 = + callToLT(4, BigInteger.ZERO, bigQuotient, BigInteger.ZERO, BigInteger.valueOf(200)); + + // row i + 5 + precompileCost = bigQuotientLT200 ? BigInteger.valueOf(200) : bigQuotient; + + final boolean ramSuccess = + !callToLT( + 5, + BigInteger.ZERO, + prcModexpPricingParameters.getCallGas(), + BigInteger.ZERO, + precompileCost); + + // Set ramSuccess + prcModexpPricingParameters.setSuccess(ramSuccess); + + // Set returnGas + final BigInteger returnGas = + ramSuccess + ? prcModexpPricingParameters.getCallGas().subtract(precompileCost) + : BigInteger.ZERO; + prcModexpPricingParameters.setReturnGas(returnGas); + + // Set returnAtCapacityNonZero + prcModexpPricingParameters.setReturnAtCapacityNonZero(!returnAtCapacityIsZero); + } + + private void setPrcModexpExtract(ModexpExtractParameters prcModexpExtractParameters) { + // row i + final boolean bbsIsZero = callToISZERO(0, BigInteger.ZERO, prcModexpExtractParameters.getBbs()); + + // row i + 1 + final boolean ebsIsZero = callToISZERO(1, BigInteger.ZERO, prcModexpExtractParameters.getEbs()); + + // row i + 2 + final boolean mbsIsZero = callToISZERO(2, BigInteger.ZERO, prcModexpExtractParameters.getMbs()); + + // row i + 3 + final boolean callDataExtendsBeyondExponent = + callToLT( + 3, + BigInteger.ZERO, + BigInteger.valueOf(96) + .add(prcModexpExtractParameters.getBbs().add(prcModexpExtractParameters.getEbs())), + BigInteger.ZERO, + prcModexpExtractParameters.getCds()); + + // Set extractModulus + final boolean extractModulus = callDataExtendsBeyondExponent && !mbsIsZero; + prcModexpExtractParameters.setExtractModulus(extractModulus); + + // Set extractBase + final boolean extractBase = extractModulus && !bbsIsZero; + prcModexpExtractParameters.setExtractBase(extractBase); + + // Set extractExponent + final boolean extractExponent = extractModulus && !ebsIsZero; + prcModexpExtractParameters.setExtractExponent(extractExponent); + } + + private void setBlake2FCds(Blake2fCallDataSizeParameters prcBlake2FCdsParameters) { + // row i + final boolean validCds = + callToEQ( + 0, + BigInteger.ZERO, + prcBlake2FCdsParameters.getCds(), + BigInteger.ZERO, + BigInteger.valueOf(213)); + + // row i + 1 + final boolean returnAtCapacityIsZero = + callToISZERO(1, BigInteger.ZERO, prcBlake2FCdsParameters.getReturnAtCapacity()); + + // Set hubSuccess + prcBlake2FCdsParameters.setSuccess(validCds); + + // Set returnAtCapacityNonZero + prcBlake2FCdsParameters.setReturnAtCapacityNonZero(!returnAtCapacityIsZero); + } + + private void setBlake2FParams(Blake2fParamsParameters prcBlake2FParamsParameters) { + // row i + final boolean sufficientGas = + !callToLT( + 0, + BigInteger.ZERO, + prcBlake2FParamsParameters.getCallGas(), + BigInteger.ZERO, + prcBlake2FParamsParameters.getBlakeR()); // = ramSuccess + + // row i + 1 + final boolean fIsABit = + callToEQ( + 1, + BigInteger.ZERO, + prcBlake2FParamsParameters.getBlakeF(), + BigInteger.ZERO, + prcBlake2FParamsParameters + .getBlakeF() + .multiply(prcBlake2FParamsParameters.getBlakeF())); + + // Set ramSuccess + final boolean ramSuccess = sufficientGas && fIsABit; + prcBlake2FParamsParameters.setSuccess(ramSuccess); + + // Set returnGas + final BigInteger returnGas = + ramSuccess + ? (prcBlake2FParamsParameters + .getCallGas() + .subtract(prcBlake2FParamsParameters.getBlakeR())) + : BigInteger.ZERO; + + prcBlake2FParamsParameters.setReturnGas(returnGas); + } + + @Override + protected int computeLineCount() { + return this.nRows(); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/Trace.java index e0539edda0..89a912c747 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/Trace.java @@ -30,9 +30,8 @@ * Please DO NOT ATTEMPT TO MODIFY this code directly. */ public class Trace { - public static final int ADD = 0x1; - public static final int CT_MAX_BLAKE2F_cds = 0x1; - public static final int CT_MAX_BLAKE2F_params = 0x1; + public static final int CT_MAX_BLAKE2F_CDS = 0x1; + public static final int CT_MAX_BLAKE2F_PARAMS = 0x1; public static final int CT_MAX_CALL = 0x2; public static final int CT_MAX_CDL = 0x0; public static final int CT_MAX_CREATE = 0x2; @@ -44,24 +43,17 @@ public class Trace { public static final int CT_MAX_IDENTITY = 0x3; public static final int CT_MAX_JUMP = 0x0; public static final int CT_MAX_JUMPI = 0x1; - public static final int CT_MAX_MODEXP_cds = 0x2; - public static final int CT_MAX_MODEXP_extract = 0x3; - public static final int CT_MAX_MODEXP_lead = 0x3; - public static final int CT_MAX_MODEXP_pricing = 0x5; - public static final int CT_MAX_MODEXP_xbs = 0x2; + public static final int CT_MAX_MODEXP_CDS = 0x2; + public static final int CT_MAX_MODEXP_EXTRACT = 0x3; + public static final int CT_MAX_MODEXP_LEAD = 0x3; + public static final int CT_MAX_MODEXP_PRICING = 0x5; + public static final int CT_MAX_MODEXP_XBS = 0x2; public static final int CT_MAX_RDC = 0x2; public static final int CT_MAX_RIPEMD = 0x3; public static final int CT_MAX_SHA2 = 0x3; public static final int CT_MAX_SSTORE = 0x0; public static final int CT_MAX_XCALL = 0x0; - public static final int DIV = 0x4; - public static final int EQ = 0x14; - public static final int GT = 0x11; - public static final int G_CALLSTIPEND = 0x8fc; public static final int G_QUADDIVISOR = 0x3; - public static final int ISZERO = 0x15; - public static final int LT = 0x10; - public static final int MOD = 0x6; private final BitSet filled = new BitSet(); private int currentLine = 0; @@ -114,8 +106,8 @@ public class Trace { static List headers(int length) { return List.of( new ColumnHeader("oob.ADD_FLAG", 1, length), - new ColumnHeader("oob.CT", 2, length), - new ColumnHeader("oob.CT_MAX", 2, length), + new ColumnHeader("oob.CT", 1, length), + new ColumnHeader("oob.CT_MAX", 1, length), new ColumnHeader("oob.DATA_1", 32, length), new ColumnHeader("oob.DATA_2", 32, length), new ColumnHeader("oob.DATA_3", 32, length), @@ -124,8 +116,8 @@ static List headers(int length) { new ColumnHeader("oob.DATA_6", 32, length), new ColumnHeader("oob.DATA_7", 32, length), new ColumnHeader("oob.DATA_8", 32, length), - new ColumnHeader("oob.IS_BLAKE2F_cds", 1, length), - new ColumnHeader("oob.IS_BLAKE2F_params", 1, length), + new ColumnHeader("oob.IS_BLAKE2F_CDS", 1, length), + new ColumnHeader("oob.IS_BLAKE2F_PARAMS", 1, length), new ColumnHeader("oob.IS_CALL", 1, length), new ColumnHeader("oob.IS_CDL", 1, length), new ColumnHeader("oob.IS_CREATE", 1, length), @@ -137,11 +129,11 @@ static List headers(int length) { new ColumnHeader("oob.IS_IDENTITY", 1, length), new ColumnHeader("oob.IS_JUMP", 1, length), new ColumnHeader("oob.IS_JUMPI", 1, length), - new ColumnHeader("oob.IS_MODEXP_cds", 1, length), - new ColumnHeader("oob.IS_MODEXP_extract", 1, length), - new ColumnHeader("oob.IS_MODEXP_lead", 1, length), - new ColumnHeader("oob.IS_MODEXP_pricing", 1, length), - new ColumnHeader("oob.IS_MODEXP_xbs", 1, length), + new ColumnHeader("oob.IS_MODEXP_CDS", 1, length), + new ColumnHeader("oob.IS_MODEXP_EXTRACT", 1, length), + new ColumnHeader("oob.IS_MODEXP_LEAD", 1, length), + new ColumnHeader("oob.IS_MODEXP_PRICING", 1, length), + new ColumnHeader("oob.IS_MODEXP_XBS", 1, length), new ColumnHeader("oob.IS_RDC", 1, length), new ColumnHeader("oob.IS_RIPEMD", 1, length), new ColumnHeader("oob.IS_SHA2", 1, length), @@ -155,7 +147,7 @@ static List headers(int length) { new ColumnHeader("oob.OUTGOING_DATA_4", 32, length), new ColumnHeader("oob.OUTGOING_INST", 1, length), new ColumnHeader("oob.OUTGOING_RES_LO", 32, length), - new ColumnHeader("oob.STAMP", 8, length), + new ColumnHeader("oob.STAMP", 4, length), new ColumnHeader("oob.WCP_FLAG", 1, length)); } @@ -226,26 +218,32 @@ public Trace addFlag(final Boolean b) { return this; } - public Trace ct(final short b) { + public Trace ct(final long b) { if (filled.get(1)) { throw new IllegalStateException("oob.CT already set"); } else { filled.set(1); } - ct.putShort(b); + if (b >= 8L) { + throw new IllegalArgumentException("ct has invalid value (" + b + ")"); + } + ct.put((byte) b); return this; } - public Trace ctMax(final short b) { + public Trace ctMax(final long b) { if (filled.get(2)) { throw new IllegalStateException("oob.CT_MAX already set"); } else { filled.set(2); } - ctMax.putShort(b); + if (b >= 8L) { + throw new IllegalArgumentException("ctMax has invalid value (" + b + ")"); + } + ctMax.put((byte) b); return this; } @@ -257,11 +255,20 @@ public Trace data1(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("data1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { data1.put((byte) 0); } - data1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data1.put(bs.get(j)); + } return this; } @@ -273,11 +280,20 @@ public Trace data2(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("data2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { data2.put((byte) 0); } - data2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data2.put(bs.get(j)); + } return this; } @@ -289,11 +305,20 @@ public Trace data3(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("data3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { data3.put((byte) 0); } - data3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data3.put(bs.get(j)); + } return this; } @@ -305,11 +330,20 @@ public Trace data4(final Bytes b) { filled.set(6); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("data4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { data4.put((byte) 0); } - data4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data4.put(bs.get(j)); + } return this; } @@ -321,11 +355,20 @@ public Trace data5(final Bytes b) { filled.set(7); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("data5 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { data5.put((byte) 0); } - data5.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data5.put(bs.get(j)); + } return this; } @@ -337,11 +380,20 @@ public Trace data6(final Bytes b) { filled.set(8); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("data6 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { data6.put((byte) 0); } - data6.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data6.put(bs.get(j)); + } return this; } @@ -353,11 +405,20 @@ public Trace data7(final Bytes b) { filled.set(9); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("data7 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { data7.put((byte) 0); } - data7.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data7.put(bs.get(j)); + } return this; } @@ -369,18 +430,27 @@ public Trace data8(final Bytes b) { filled.set(10); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("data8 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { data8.put((byte) 0); } - data8.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + data8.put(bs.get(j)); + } return this; } public Trace isBlake2FCds(final Boolean b) { if (filled.get(11)) { - throw new IllegalStateException("oob.IS_BLAKE2F_cds already set"); + throw new IllegalStateException("oob.IS_BLAKE2F_CDS already set"); } else { filled.set(11); } @@ -392,7 +462,7 @@ public Trace isBlake2FCds(final Boolean b) { public Trace isBlake2FParams(final Boolean b) { if (filled.get(12)) { - throw new IllegalStateException("oob.IS_BLAKE2F_params already set"); + throw new IllegalStateException("oob.IS_BLAKE2F_PARAMS already set"); } else { filled.set(12); } @@ -536,7 +606,7 @@ public Trace isJumpi(final Boolean b) { public Trace isModexpCds(final Boolean b) { if (filled.get(24)) { - throw new IllegalStateException("oob.IS_MODEXP_cds already set"); + throw new IllegalStateException("oob.IS_MODEXP_CDS already set"); } else { filled.set(24); } @@ -548,7 +618,7 @@ public Trace isModexpCds(final Boolean b) { public Trace isModexpExtract(final Boolean b) { if (filled.get(25)) { - throw new IllegalStateException("oob.IS_MODEXP_extract already set"); + throw new IllegalStateException("oob.IS_MODEXP_EXTRACT already set"); } else { filled.set(25); } @@ -560,7 +630,7 @@ public Trace isModexpExtract(final Boolean b) { public Trace isModexpLead(final Boolean b) { if (filled.get(26)) { - throw new IllegalStateException("oob.IS_MODEXP_lead already set"); + throw new IllegalStateException("oob.IS_MODEXP_LEAD already set"); } else { filled.set(26); } @@ -572,7 +642,7 @@ public Trace isModexpLead(final Boolean b) { public Trace isModexpPricing(final Boolean b) { if (filled.get(27)) { - throw new IllegalStateException("oob.IS_MODEXP_pricing already set"); + throw new IllegalStateException("oob.IS_MODEXP_PRICING already set"); } else { filled.set(27); } @@ -584,7 +654,7 @@ public Trace isModexpPricing(final Boolean b) { public Trace isModexpXbs(final Boolean b) { if (filled.get(28)) { - throw new IllegalStateException("oob.IS_MODEXP_xbs already set"); + throw new IllegalStateException("oob.IS_MODEXP_XBS already set"); } else { filled.set(28); } @@ -673,11 +743,20 @@ public Trace oobInst(final Bytes b) { filled.set(35); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("oobInst has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { oobInst.put((byte) 0); } - oobInst.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + oobInst.put(bs.get(j)); + } return this; } @@ -689,11 +768,21 @@ public Trace outgoingData1(final Bytes b) { filled.set(36); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "outgoingData1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { outgoingData1.put((byte) 0); } - outgoingData1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + outgoingData1.put(bs.get(j)); + } return this; } @@ -705,11 +794,21 @@ public Trace outgoingData2(final Bytes b) { filled.set(37); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "outgoingData2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { outgoingData2.put((byte) 0); } - outgoingData2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + outgoingData2.put(bs.get(j)); + } return this; } @@ -721,11 +820,21 @@ public Trace outgoingData3(final Bytes b) { filled.set(38); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "outgoingData3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { outgoingData3.put((byte) 0); } - outgoingData3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + outgoingData3.put(bs.get(j)); + } return this; } @@ -737,11 +846,21 @@ public Trace outgoingData4(final Bytes b) { filled.set(39); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "outgoingData4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { outgoingData4.put((byte) 0); } - outgoingData4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + outgoingData4.put(bs.get(j)); + } return this; } @@ -765,11 +884,21 @@ public Trace outgoingResLo(final Bytes b) { filled.set(41); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "outgoingResLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { outgoingResLo.put((byte) 0); } - outgoingResLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + outgoingResLo.put(bs.get(j)); + } return this; } @@ -781,7 +910,13 @@ public Trace stamp(final long b) { filled.set(42); } - stamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 24)); + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); return this; } @@ -844,11 +979,11 @@ public Trace validateRow() { } if (!filled.get(11)) { - throw new IllegalStateException("oob.IS_BLAKE2F_cds has not been filled"); + throw new IllegalStateException("oob.IS_BLAKE2F_CDS has not been filled"); } if (!filled.get(12)) { - throw new IllegalStateException("oob.IS_BLAKE2F_params has not been filled"); + throw new IllegalStateException("oob.IS_BLAKE2F_PARAMS has not been filled"); } if (!filled.get(13)) { @@ -896,23 +1031,23 @@ public Trace validateRow() { } if (!filled.get(24)) { - throw new IllegalStateException("oob.IS_MODEXP_cds has not been filled"); + throw new IllegalStateException("oob.IS_MODEXP_CDS has not been filled"); } if (!filled.get(25)) { - throw new IllegalStateException("oob.IS_MODEXP_extract has not been filled"); + throw new IllegalStateException("oob.IS_MODEXP_EXTRACT has not been filled"); } if (!filled.get(26)) { - throw new IllegalStateException("oob.IS_MODEXP_lead has not been filled"); + throw new IllegalStateException("oob.IS_MODEXP_LEAD has not been filled"); } if (!filled.get(27)) { - throw new IllegalStateException("oob.IS_MODEXP_pricing has not been filled"); + throw new IllegalStateException("oob.IS_MODEXP_PRICING has not been filled"); } if (!filled.get(28)) { - throw new IllegalStateException("oob.IS_MODEXP_xbs has not been filled"); + throw new IllegalStateException("oob.IS_MODEXP_XBS has not been filled"); } if (!filled.get(29)) { @@ -987,11 +1122,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(1)) { - ct.position(ct.position() + 2); + ct.position(ct.position() + 1); } if (!filled.get(2)) { - ctMax.position(ctMax.position() + 2); + ctMax.position(ctMax.position() + 1); } if (!filled.get(3)) { @@ -1151,7 +1286,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(42)) { - stamp.position(stamp.position() + 8); + stamp.position(stamp.position() + 4); } if (!filled.get(43)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/Blake2fCallDataSizeParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/Blake2fCallDataSizeParameters.java new file mode 100644 index 0000000000..f3e96b8a82 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/Blake2fCallDataSizeParameters.java @@ -0,0 +1,50 @@ +/* + * Copyright ConsenSys AG. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; +import org.apache.tuweni.bytes.Bytes; + +@Getter +@RequiredArgsConstructor +public class Blake2fCallDataSizeParameters implements OobParameters { + private final BigInteger cds; + private final BigInteger returnAtCapacity; + + @Setter private boolean success; + @Setter private boolean returnAtCapacityNonZero; + + @Override + public Trace trace(Trace trace) { + return trace + .data1(ZERO) + .data2(bigIntegerToBytes(cds)) + .data3(bigIntegerToBytes(returnAtCapacity)) + .data4(booleanToBytes(success)) // Set after the constructor + .data5(ZERO) + .data6(Bytes.of(0)) + .data7(Bytes.of(0)) + .data8(booleanToBytes(returnAtCapacityNonZero)); // Set after the constructor + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/Blake2fParamsParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/Blake2fParamsParameters.java new file mode 100644 index 0000000000..305aba4638 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/Blake2fParamsParameters.java @@ -0,0 +1,50 @@ +/* + * Copyright ConsenSys AG. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; + +@Getter +@RequiredArgsConstructor +public class Blake2fParamsParameters implements OobParameters { + private final BigInteger callGas; + private final BigInteger blakeR; + private final BigInteger blakeF; + + @Setter private boolean success; + @Setter private BigInteger returnGas; + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(callGas)) + .data2(ZERO) + .data3(ZERO) + .data4(booleanToBytes(success)) // Set after the constructor + .data5(bigIntegerToBytes(returnGas)) // Set after the constructor + .data6(bigIntegerToBytes(blakeR)) + .data7(bigIntegerToBytes(blakeF)) + .data8(ZERO); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/CallDataLoadOobParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/CallDataLoadOobParameters.java new file mode 100644 index 0000000000..16fff69463 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/CallDataLoadOobParameters.java @@ -0,0 +1,56 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; +import net.consensys.linea.zktracer.types.EWord; + +@Getter +@RequiredArgsConstructor +public class CallDataLoadOobParameters implements OobParameters { + private final EWord offset; + private final BigInteger cds; + @Setter boolean cdlOutOfBounds; + + public BigInteger offsetHi() { + return offset.hiBigInt(); + } + + public BigInteger offsetLo() { + return offset.loBigInt(); + } + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(offsetHi())) + .data2(bigIntegerToBytes(offsetLo())) + .data3(ZERO) + .data4(ZERO) + .data5(bigIntegerToBytes(cds)) + .data6(ZERO) + .data7(booleanToBytes(cdlOutOfBounds)) + .data8(ZERO); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/CallOobParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/CallOobParameters.java new file mode 100644 index 0000000000..0951606053 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/CallOobParameters.java @@ -0,0 +1,58 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; +import net.consensys.linea.zktracer.types.EWord; + +@Getter +@RequiredArgsConstructor +public class CallOobParameters implements OobParameters { + private final EWord value; + private final BigInteger balance; + private final BigInteger callStackDepth; + @Setter boolean valueIsNonzero; + @Setter boolean abortingCondition; + + public BigInteger valueHi() { + return value.hiBigInt(); + } + + public BigInteger valueLo() { + return value.loBigInt(); + } + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(valueHi())) + .data2(bigIntegerToBytes(valueLo())) + .data3(bigIntegerToBytes(balance)) + .data4(ZERO) + .data5(ZERO) + .data6(bigIntegerToBytes(callStackDepth)) + .data7(booleanToBytes(valueIsNonzero)) + .data8(booleanToBytes(abortingCondition)); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/CreateOobParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/CreateOobParameters.java new file mode 100644 index 0000000000..7f5e62fa62 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/CreateOobParameters.java @@ -0,0 +1,60 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; +import net.consensys.linea.zktracer.types.EWord; + +@Getter +@RequiredArgsConstructor +public class CreateOobParameters implements OobParameters { + private final EWord value; + private final BigInteger balance; + private final BigInteger nonce; + private final boolean hasCode; + private final BigInteger callStackDepth; + @Setter boolean abortingCondition; + @Setter boolean failureCondition; + + public BigInteger valueHi() { + return value.hiBigInt(); + } + + public BigInteger valueLo() { + return value.loBigInt(); + } + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(valueHi())) + .data2(bigIntegerToBytes(valueLo())) + .data3(bigIntegerToBytes(balance)) + .data4(bigIntegerToBytes(nonce)) + .data5(booleanToBytes(hasCode)) + .data6(bigIntegerToBytes(callStackDepth)) + .data7(booleanToBytes(abortingCondition)) + .data8(booleanToBytes(failureCondition)); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/DeploymentOobParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/DeploymentOobParameters.java new file mode 100644 index 0000000000..f3d332bd9e --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/DeploymentOobParameters.java @@ -0,0 +1,55 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; +import net.consensys.linea.zktracer.types.EWord; + +@Getter +@RequiredArgsConstructor +public class DeploymentOobParameters implements OobParameters { + private final EWord size; + @Setter boolean maxCodeSizeException; + + public BigInteger sizeHi() { + return size.hiBigInt(); + } + + public BigInteger sizeLo() { + return size.loBigInt(); + } + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(sizeHi())) + .data2(bigIntegerToBytes(sizeLo())) + .data3(ZERO) + .data4(ZERO) + .data5(ZERO) + .data6(ZERO) + .data7(booleanToBytes(maxCodeSizeException)) + .data8(ZERO); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/JumpOobParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/JumpOobParameters.java new file mode 100644 index 0000000000..cd1970125d --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/JumpOobParameters.java @@ -0,0 +1,57 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; +import net.consensys.linea.zktracer.types.EWord; + +@Getter +@RequiredArgsConstructor +public class JumpOobParameters implements OobParameters { + private final EWord pcNew; + private final BigInteger codeSize; + @Setter boolean jumpGuaranteedException; + @Setter boolean jumpMustBeAttempted; + + public BigInteger pcNewHi() { + return pcNew.hiBigInt(); + } + + public BigInteger pcNewLo() { + return pcNew.loBigInt(); + } + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(pcNewHi())) + .data2(bigIntegerToBytes(pcNewLo())) + .data3(ZERO) + .data4(ZERO) + .data5(bigIntegerToBytes(codeSize)) + .data6(ZERO) + .data7(booleanToBytes(jumpGuaranteedException)) + .data8(booleanToBytes(jumpMustBeAttempted)); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/JumpiOobParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/JumpiOobParameters.java new file mode 100644 index 0000000000..652f3ec444 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/JumpiOobParameters.java @@ -0,0 +1,67 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; +import net.consensys.linea.zktracer.types.EWord; + +@Getter +@RequiredArgsConstructor +public class JumpiOobParameters implements OobParameters { + private final EWord pcNew; + private final EWord jumpCondition; + private final BigInteger codeSize; + @Setter boolean jumpNotAttempted; + @Setter boolean jumpGuanranteedException; + @Setter boolean jumpMustBeAttempted; + + public BigInteger pcNewHi() { + return pcNew.hiBigInt(); + } + + public BigInteger pcNewLo() { + return pcNew.loBigInt(); + } + + public BigInteger jumpConditionHi() { + return jumpCondition.hiBigInt(); + } + + public BigInteger jumpConditionLo() { + return jumpCondition.loBigInt(); + } + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(pcNewHi())) + .data2(bigIntegerToBytes(pcNewLo())) + .data3(bigIntegerToBytes(jumpConditionHi())) + .data4(bigIntegerToBytes(jumpConditionLo())) + .data5(bigIntegerToBytes(codeSize)) + .data6(booleanToBytes(jumpNotAttempted)) + .data7(booleanToBytes(jumpGuanranteedException)) + .data8(booleanToBytes(jumpMustBeAttempted)); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpCallDataSizeParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpCallDataSizeParameters.java new file mode 100644 index 0000000000..b75222e75b --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpCallDataSizeParameters.java @@ -0,0 +1,49 @@ +/* + * Copyright ConsenSys AG. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; + +@Getter +@RequiredArgsConstructor +public class ModexpCallDataSizeParameters implements OobParameters { + private final BigInteger cds; + + @Setter private boolean extractBbs; + @Setter private boolean extractEbs; + @Setter private boolean extractMbs; + + @Override + public Trace trace(Trace trace) { + return trace + .data1(ZERO) + .data2(bigIntegerToBytes(cds)) + .data3(booleanToBytes(extractBbs)) + .data4(booleanToBytes(extractEbs)) + .data5(booleanToBytes(extractMbs)) + .data6(ZERO) + .data7(ZERO) + .data8(ZERO); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpExtractParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpExtractParameters.java new file mode 100644 index 0000000000..c5db01cdc4 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpExtractParameters.java @@ -0,0 +1,52 @@ +/* + * Copyright ConsenSys AG. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; + +@Getter +@RequiredArgsConstructor +public class ModexpExtractParameters implements OobParameters { + private final BigInteger cds; + private final BigInteger bbs; + private final BigInteger ebs; + private final BigInteger mbs; + + @Setter private boolean extractBase; + @Setter private boolean extractExponent; + @Setter private boolean extractModulus; + + @Override + public Trace trace(Trace trace) { + return trace + .data1(ZERO) + .data2(bigIntegerToBytes(cds)) + .data3(bigIntegerToBytes(bbs)) + .data4(bigIntegerToBytes(ebs)) + .data5(bigIntegerToBytes(mbs)) + .data6(booleanToBytes(extractBase)) + .data7(booleanToBytes(extractExponent)) + .data8(booleanToBytes(extractModulus)); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpLeadParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpLeadParameters.java new file mode 100644 index 0000000000..78d86c5039 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpLeadParameters.java @@ -0,0 +1,53 @@ +/* + * Copyright ConsenSys AG. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; +import org.apache.tuweni.bytes.Bytes; + +@Getter +@RequiredArgsConstructor +public class ModexpLeadParameters implements OobParameters { + private final BigInteger bbs; + private final BigInteger cds; + private final BigInteger ebs; + + @Setter boolean loadLead; + @Setter int cdsCutoff; + @Setter int ebsCutoff; + @Setter int subEbs32; + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(bbs)) + .data2(bigIntegerToBytes(cds)) + .data3(bigIntegerToBytes(ebs)) + .data4(booleanToBytes(loadLead)) + .data5(ZERO) + .data6(Bytes.of(cdsCutoff)) + .data7(Bytes.of(ebsCutoff)) + .data8(Bytes.of(subEbs32)); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpPricingParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpPricingParameters.java new file mode 100644 index 0000000000..6d65d0327f --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpPricingParameters.java @@ -0,0 +1,53 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; +import org.apache.tuweni.bytes.Bytes; + +@Getter +@RequiredArgsConstructor +public class ModexpPricingParameters implements OobParameters { + private final BigInteger callGas; + private final BigInteger returnAtCapacity; + @Setter private boolean success; + private final BigInteger exponentLog; + private final int maxMbsBbs; + + @Setter private BigInteger returnGas; + @Setter private boolean returnAtCapacityNonZero; + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(callGas)) + .data2(ZERO) + .data3(bigIntegerToBytes(returnAtCapacity)) + .data4(booleanToBytes(success)) + .data5(bigIntegerToBytes(returnGas)) + .data6(bigIntegerToBytes(exponentLog)) + .data7(Bytes.of(maxMbsBbs)) + .data8(booleanToBytes(returnAtCapacityNonZero)); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpXbsParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpXbsParameters.java new file mode 100644 index 0000000000..b0c5ee18d8 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ModexpXbsParameters.java @@ -0,0 +1,51 @@ +/* + * Copyright ConsenSys AG. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; + +@Getter +@RequiredArgsConstructor +public class ModexpXbsParameters implements OobParameters { + private final BigInteger xbsHi; + private final BigInteger xbsLo; + private final BigInteger ybsLo; + private final boolean computeMax; + + @Setter private BigInteger maxXbsYbs; + @Setter private boolean xbsNonZero; + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(xbsHi)) + .data2(bigIntegerToBytes(xbsLo)) + .data3(bigIntegerToBytes(ybsLo)) + .data4(booleanToBytes(computeMax)) + .data5(ZERO) + .data6(ZERO) + .data7(bigIntegerToBytes(maxXbsYbs)) + .data8(booleanToBytes(xbsNonZero)); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/OobParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/OobParameters.java new file mode 100644 index 0000000000..9ac37260f3 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/OobParameters.java @@ -0,0 +1,26 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import net.consensys.linea.zktracer.module.oob.Trace; +import org.apache.tuweni.bytes.Bytes; + +public interface OobParameters { + Bytes ZERO = Bytes.EMPTY; + Bytes ONE = Bytes.of(1); + + Trace trace(Trace trace); +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/PrecompileCommonOobParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/PrecompileCommonOobParameters.java new file mode 100644 index 0000000000..f6df85e656 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/PrecompileCommonOobParameters.java @@ -0,0 +1,59 @@ +/* + * Copyright ConsenSys AG. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; + +@Getter +public class PrecompileCommonOobParameters implements OobParameters { + + private BigInteger callGas; + private BigInteger cds; + private BigInteger returnAtCapacity; + @Setter private boolean success; + @Setter private BigInteger returnGas; + @Setter private boolean returnAtCapacityNonZero; + @Setter private boolean cdsIsZero; // Necessary to compute extractCallData and emptyCallData + + public PrecompileCommonOobParameters( + BigInteger callGas, BigInteger cds, BigInteger returnAtCapacity) { + this.callGas = callGas; + this.cds = cds; + this.returnAtCapacity = returnAtCapacity; + } + + @Override + public Trace trace(Trace trace) { + boolean extractCallData = success && !cdsIsZero; + boolean emptyCallData = success && cdsIsZero; + return trace + .data1(bigIntegerToBytes(callGas)) + .data2(bigIntegerToBytes(cds)) + .data3(bigIntegerToBytes(returnAtCapacity)) + .data4(booleanToBytes(success)) // Set after the constructor + .data5(bigIntegerToBytes(returnGas)) // Set after the constructor + .data6(booleanToBytes(extractCallData)) // Derived from other parameters + .data7(booleanToBytes(emptyCallData)) // Derived from other parameters + .data8(booleanToBytes(returnAtCapacityNonZero)); // Set after the constructor + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ReturnDataCopyOobParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ReturnDataCopyOobParameters.java new file mode 100644 index 0000000000..cadf241f60 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/ReturnDataCopyOobParameters.java @@ -0,0 +1,65 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; +import net.consensys.linea.zktracer.types.EWord; + +@Getter +@RequiredArgsConstructor +public class ReturnDataCopyOobParameters implements OobParameters { + private final EWord offset; + private final EWord size; + private final BigInteger rds; + @Setter private boolean rdcx; + + public BigInteger offsetHi() { + return offset.hiBigInt(); + } + + public BigInteger offsetLo() { + return offset.loBigInt(); + } + + public BigInteger sizeHi() { + return size.hiBigInt(); + } + + public BigInteger sizeLo() { + return size.loBigInt(); + } + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(offsetHi())) + .data2(bigIntegerToBytes(offsetLo())) + .data3(bigIntegerToBytes(sizeHi())) + .data4(bigIntegerToBytes(sizeLo())) + .data5(bigIntegerToBytes(rds)) + .data6(ZERO) + .data7(booleanToBytes(rdcx)) + .data8(ZERO); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/SstoreOobParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/SstoreOobParameters.java new file mode 100644 index 0000000000..cd54b25e77 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/SstoreOobParameters.java @@ -0,0 +1,46 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; + +@Getter +@RequiredArgsConstructor +public class SstoreOobParameters implements OobParameters { + private final BigInteger gas; + @Setter boolean sstorex; + + @Override + public Trace trace(Trace trace) { + return trace + .data1(ZERO) + .data2(ZERO) + .data3(ZERO) + .data4(ZERO) + .data5(bigIntegerToBytes(gas)) + .data6(ZERO) + .data7(booleanToBytes(sstorex)) + .data8(ZERO); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/XCallOobParameters.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/XCallOobParameters.java new file mode 100644 index 0000000000..52e01774d2 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/oob/parameters/XCallOobParameters.java @@ -0,0 +1,56 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob.parameters; + +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; +import static net.consensys.linea.zktracer.types.Conversions.booleanToBytes; + +import java.math.BigInteger; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.consensys.linea.zktracer.module.oob.Trace; +import net.consensys.linea.zktracer.types.EWord; + +@Getter +@RequiredArgsConstructor +public class XCallOobParameters implements OobParameters { + private final EWord value; + @Setter boolean valueIsNonzero; + @Setter boolean valueIsZero; + + public BigInteger valueHi() { + return value.hiBigInt(); + } + + public BigInteger valueLo() { + return value.loBigInt(); + } + + @Override + public Trace trace(Trace trace) { + return trace + .data1(bigIntegerToBytes(valueHi())) + .data2(bigIntegerToBytes(valueLo())) + .data3(ZERO) + .data4(ZERO) + .data5(ZERO) + .data6(ZERO) + .data7(booleanToBytes(valueIsNonzero)) + .data8(booleanToBytes(valueIsZero)); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/RlpAddr.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/RlpAddr.java index 31abd0f93e..44eedf9dd5 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/RlpAddr.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/RlpAddr.java @@ -41,6 +41,7 @@ import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.container.stacked.list.StackedList; import net.consensys.linea.zktracer.module.Module; +import net.consensys.linea.zktracer.module.constants.GlobalConstants; import net.consensys.linea.zktracer.module.hub.Hub; import net.consensys.linea.zktracer.module.rlputils.ByteCountAndPowerOutput; import net.consensys.linea.zktracer.module.trm.Trm; @@ -56,13 +57,14 @@ @RequiredArgsConstructor public class RlpAddr implements Module { - private static final Bytes CREATE2_SHIFT = Bytes.minimalBytes(Trace.CREATE2_SHIFT); - private static final Bytes INT_SHORT = Bytes.ofUnsignedShort(RLP_PREFIX_INT_SHORT); + private static final Bytes CREATE2_SHIFT = Bytes.minimalBytes(GlobalConstants.CREATE2_SHIFT); + private static final Bytes INT_SHORT = Bytes.minimalBytes(RLP_PREFIX_INT_SHORT); private static final UnsignedByte BYTES_LLARGE = UnsignedByte.of(LLARGE); + final int recipe1NbRows = MAX_CT_CREATE + 1; private final Hub hub; private final Trm trm; - private final StackedList chunkList = new StackedList<>(); + private final StackedList chunkList = new StackedList<>(); @Override public String moduleKey() { @@ -85,8 +87,9 @@ public void traceStartTx(WorldView world, Transaction tx) { final Address senderAddress = tx.getSender(); final long nonce = tx.getNonce(); final Bytes32 rawTo = getCreateRawAddress(senderAddress, nonce); - RlpAddrChunk chunk = - new RlpAddrChunk(rawTo, OpCode.CREATE, longToUnsignedBigInteger(nonce), senderAddress); + RlpAddrOperation chunk = + new RlpAddrOperation( + rawTo, OpCode.CREATE, longToUnsignedBigInteger(nonce), senderAddress); this.chunkList.add(chunk); this.trm.callTrimming(rawTo); } @@ -99,8 +102,8 @@ public void tracePreOpcode(MessageFrame frame) { case CREATE -> { final Address currentAddress = frame.getRecipientAddress(); final Bytes32 rawCreateAddress = getCreateRawAddress(frame); - RlpAddrChunk chunk = - new RlpAddrChunk( + RlpAddrOperation chunk = + new RlpAddrOperation( rawCreateAddress, OpCode.CREATE, longToUnsignedBigInteger(frame.getWorldUpdater().get(currentAddress).getNonce()), @@ -120,15 +123,15 @@ public void tracePreOpcode(MessageFrame frame) { final Bytes32 rawCreate2Address = getCreate2RawAddress(sender, salt, hash); - RlpAddrChunk chunk = - new RlpAddrChunk(rawCreate2Address, OpCode.CREATE2, sender, salt, hash); + RlpAddrOperation chunk = + new RlpAddrOperation(rawCreate2Address, OpCode.CREATE2, sender, salt, hash); this.chunkList.add(chunk); this.trm.callTrimming(rawCreate2Address); } } } - private void traceCreate2(int stamp, RlpAddrChunk chunk, Trace trace) { + private void traceCreate2(int stamp, RlpAddrOperation chunk, Trace trace) { final Bytes rawAddressHi = chunk.rawHash().slice(0, LLARGE); final long depAddressHi = rawAddressHi.slice(12, 4).toLong(); final Bytes depAddressLo = chunk.rawHash().slice(LLARGE, LLARGE); @@ -156,34 +159,36 @@ private void traceCreate2(int stamp, RlpAddrChunk chunk, Trace trace) { case 0 -> { trace.limb( rightPadTo(Bytes.concatenate(CREATE2_SHIFT, chunk.address().slice(0, 4)), LLARGE)); - trace.nBytes(UnsignedByte.of(5)); + trace.nBytes(UnsignedByte.of(5)).selectorKeccakRes(true); } - case 1 -> trace.limb(chunk.address().slice(4, LLARGE)).nBytes(BYTES_LLARGE); - case 2 -> trace.limb(chunk.salt().orElseThrow().slice(0, LLARGE)).nBytes(BYTES_LLARGE); - case 3 -> trace.limb(chunk.salt().orElseThrow().slice(LLARGE, LLARGE)).nBytes(BYTES_LLARGE); - case 4 -> trace.limb(chunk.keccak().orElseThrow().slice(0, LLARGE)).nBytes(BYTES_LLARGE); + case 1 -> trace + .limb(chunk.address().slice(4, LLARGE)) + .nBytes(BYTES_LLARGE) + .selectorKeccakRes(false); + case 2 -> trace + .limb(chunk.salt().orElseThrow().slice(0, LLARGE)) + .nBytes(BYTES_LLARGE) + .selectorKeccakRes(false); + case 3 -> trace + .limb(chunk.salt().orElseThrow().slice(LLARGE, LLARGE)) + .nBytes(BYTES_LLARGE) + .selectorKeccakRes(false); + case 4 -> trace + .limb(chunk.keccak().orElseThrow().slice(0, LLARGE)) + .nBytes(BYTES_LLARGE) + .selectorKeccakRes(false); case 5 -> trace .limb(chunk.keccak().orElseThrow().slice(LLARGE, LLARGE)) - .nBytes(BYTES_LLARGE); + .nBytes(BYTES_LLARGE) + .selectorKeccakRes(false); } // Columns unused for Recipe2 - trace - .nonce(Bytes.EMPTY) - .byte1(UnsignedByte.ZERO) - .acc(Bytes.EMPTY) - .accBytesize(UnsignedByte.ZERO) - .power(Bytes.EMPTY) - .bit1(false) - .bitAcc(UnsignedByte.ZERO) - .tinyNonZeroNonce(false); - - trace.validateRow(); + trace.fillAndValidateRow(); } } - private void traceCreate(int stamp, RlpAddrChunk chunk, Trace trace) { - final int recipe1NbRows = MAX_CT_CREATE + 1; + private void traceCreate(int stamp, RlpAddrOperation chunk, Trace trace) { final BigInteger nonce = chunk.nonce().orElseThrow(); Bytes nonceShifted = leftPadTo(bigIntegerToBytes(nonce), recipe1NbRows); @@ -256,7 +261,8 @@ private void traceCreate(int stamp, RlpAddrChunk chunk, Trace trace) { .lc(false) .limb(Bytes.EMPTY) .nBytes(UnsignedByte.ZERO) - .index(UnsignedByte.ZERO); + .index(UnsignedByte.ZERO) + .selectorKeccakRes(ct == 0); case 4 -> trace .lc(true) .limb( @@ -267,7 +273,8 @@ private void traceCreate(int stamp, RlpAddrChunk chunk, Trace trace) { .add(BigInteger.valueOf(size_rlp_nonce))), LLARGE)) .nBytes(UnsignedByte.of(1)) - .index(UnsignedByte.ZERO); + .index(UnsignedByte.ZERO) + .selectorKeccakRes(false); case 5 -> trace .lc(true) .limb( @@ -276,30 +283,28 @@ private void traceCreate(int stamp, RlpAddrChunk chunk, Trace trace) { bigIntegerToBytes(BigInteger.valueOf(148)), chunk.address().slice(0, 4)), LLARGE)) .nBytes(UnsignedByte.of(5)) - .index(UnsignedByte.of(1)); + .index(UnsignedByte.of(1)) + .selectorKeccakRes(false); case 6 -> trace .lc(true) .limb(chunk.address().slice(4, LLARGE)) .nBytes(UnsignedByte.of(LLARGE)) - .index(UnsignedByte.of(2)); + .index(UnsignedByte.of(2)) + .selectorKeccakRes(false); case 7 -> trace .lc(true) .limb(rightPadTo(rlpNonce, LLARGE)) .nBytes(UnsignedByte.of(size_rlp_nonce)) - .index(UnsignedByte.of(3)); + .index(UnsignedByte.of(3)) + .selectorKeccakRes(false); } // Column not used fo recipe 1: - trace - .saltHi(Bytes.EMPTY) - .saltLo(Bytes.EMPTY) - .kecHi(Bytes.EMPTY) - .kecLo(Bytes.EMPTY) - .validateRow(); + trace.fillAndValidateRow(); } } - private void traceChunks(RlpAddrChunk chunk, int stamp, Trace trace) { + private void traceChunks(RlpAddrOperation chunk, int stamp, Trace trace) { if (chunk.opCode().equals(OpCode.CREATE)) { traceCreate(stamp, chunk, trace); } else { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/RlpAddrChunk.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/RlpAddrOperation.java similarity index 87% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/RlpAddrChunk.java rename to arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/RlpAddrOperation.java index 9aea9f64ac..74490d3e74 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/RlpAddrChunk.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/RlpAddrOperation.java @@ -32,7 +32,7 @@ @RequiredArgsConstructor @Getter @Accessors(fluent = true) -public final class RlpAddrChunk extends ModuleOperation { +public final class RlpAddrOperation extends ModuleOperation { private final Bytes32 rawHash; private final OpCode opCode; private final Optional nonce; @@ -41,12 +41,13 @@ public final class RlpAddrChunk extends ModuleOperation { private final Optional keccak; // CREATE operation - public RlpAddrChunk(Bytes32 rawDepAddress, OpCode opCode, BigInteger nonce, Address address) { + public RlpAddrOperation(Bytes32 rawDepAddress, OpCode opCode, BigInteger nonce, Address address) { this(rawDepAddress, opCode, Optional.of(nonce), address, Optional.empty(), Optional.empty()); } // CREATE2 operation - public RlpAddrChunk(Bytes32 rawHash, OpCode opCode, Address address, Bytes32 salt, Bytes32 kec) { + public RlpAddrOperation( + Bytes32 rawHash, OpCode opCode, Address address, Bytes32 salt, Bytes32 kec) { this(rawHash, opCode, Optional.empty(), address, Optional.of(salt), Optional.of(kec)); } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/Trace.java index 1bf5b7a279..53cf884bf6 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlpaddr/Trace.java @@ -30,7 +30,6 @@ * Please DO NOT ATTEMPT TO MODIFY this code directly. */ public class Trace { - public static final int CREATE2_SHIFT = 0xff; public static final int MAX_CT_CREATE = 0x7; public static final int MAX_CT_CREATE2 = 0x5; @@ -61,36 +60,38 @@ public class Trace { private final MappedByteBuffer recipe2; private final MappedByteBuffer saltHi; private final MappedByteBuffer saltLo; + private final MappedByteBuffer selectorKeccakRes; private final MappedByteBuffer stamp; private final MappedByteBuffer tinyNonZeroNonce; static List headers(int length) { return List.of( - new ColumnHeader("rlpaddr.ACC", 32, length), + new ColumnHeader("rlpaddr.ACC", 8, length), new ColumnHeader("rlpaddr.ACC_BYTESIZE", 1, length), - new ColumnHeader("rlpaddr.ADDR_HI", 8, length), - new ColumnHeader("rlpaddr.ADDR_LO", 32, length), + new ColumnHeader("rlpaddr.ADDR_HI", 4, length), + new ColumnHeader("rlpaddr.ADDR_LO", 16, length), new ColumnHeader("rlpaddr.BIT1", 1, length), new ColumnHeader("rlpaddr.BIT_ACC", 1, length), new ColumnHeader("rlpaddr.BYTE1", 1, length), new ColumnHeader("rlpaddr.COUNTER", 1, length), - new ColumnHeader("rlpaddr.DEP_ADDR_HI", 8, length), - new ColumnHeader("rlpaddr.DEP_ADDR_LO", 32, length), + new ColumnHeader("rlpaddr.DEP_ADDR_HI", 4, length), + new ColumnHeader("rlpaddr.DEP_ADDR_LO", 16, length), new ColumnHeader("rlpaddr.INDEX", 1, length), - new ColumnHeader("rlpaddr.KEC_HI", 32, length), - new ColumnHeader("rlpaddr.KEC_LO", 32, length), + new ColumnHeader("rlpaddr.KEC_HI", 16, length), + new ColumnHeader("rlpaddr.KEC_LO", 16, length), new ColumnHeader("rlpaddr.LC", 1, length), - new ColumnHeader("rlpaddr.LIMB", 32, length), + new ColumnHeader("rlpaddr.LIMB", 16, length), new ColumnHeader("rlpaddr.nBYTES", 1, length), - new ColumnHeader("rlpaddr.NONCE", 32, length), - new ColumnHeader("rlpaddr.POWER", 32, length), - new ColumnHeader("rlpaddr.RAW_ADDR_HI", 32, length), + new ColumnHeader("rlpaddr.NONCE", 8, length), + new ColumnHeader("rlpaddr.POWER", 16, length), + new ColumnHeader("rlpaddr.RAW_ADDR_HI", 16, length), new ColumnHeader("rlpaddr.RECIPE", 1, length), new ColumnHeader("rlpaddr.RECIPE_1", 1, length), new ColumnHeader("rlpaddr.RECIPE_2", 1, length), - new ColumnHeader("rlpaddr.SALT_HI", 32, length), - new ColumnHeader("rlpaddr.SALT_LO", 32, length), - new ColumnHeader("rlpaddr.STAMP", 4, length), + new ColumnHeader("rlpaddr.SALT_HI", 16, length), + new ColumnHeader("rlpaddr.SALT_LO", 16, length), + new ColumnHeader("rlpaddr.SELECTOR_KECCAK_RES", 1, length), + new ColumnHeader("rlpaddr.STAMP", 3, length), new ColumnHeader("rlpaddr.TINY_NON_ZERO_NONCE", 1, length)); } @@ -119,8 +120,9 @@ public Trace(List buffers) { this.recipe2 = buffers.get(21); this.saltHi = buffers.get(22); this.saltLo = buffers.get(23); - this.stamp = buffers.get(24); - this.tinyNonZeroNonce = buffers.get(25); + this.selectorKeccakRes = buffers.get(24); + this.stamp = buffers.get(25); + this.tinyNonZeroNonce = buffers.get(26); } public int size() { @@ -138,11 +140,20 @@ public Trace acc(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("acc has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { acc.put((byte) 0); } - acc.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc.put(bs.get(j)); + } return this; } @@ -166,7 +177,13 @@ public Trace addrHi(final long b) { filled.set(2); } - addrHi.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("addrHi has invalid value (" + b + ")"); + } + addrHi.put((byte) (b >> 24)); + addrHi.put((byte) (b >> 16)); + addrHi.put((byte) (b >> 8)); + addrHi.put((byte) b); return this; } @@ -178,11 +195,20 @@ public Trace addrLo(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("addrLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { addrLo.put((byte) 0); } - addrLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + addrLo.put(bs.get(j)); + } return this; } @@ -242,7 +268,13 @@ public Trace depAddrHi(final long b) { filled.set(8); } - depAddrHi.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("depAddrHi has invalid value (" + b + ")"); + } + depAddrHi.put((byte) (b >> 24)); + depAddrHi.put((byte) (b >> 16)); + depAddrHi.put((byte) (b >> 8)); + depAddrHi.put((byte) b); return this; } @@ -254,11 +286,21 @@ public Trace depAddrLo(final Bytes b) { filled.set(9); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "depAddrLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { depAddrLo.put((byte) 0); } - depAddrLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + depAddrLo.put(bs.get(j)); + } return this; } @@ -282,11 +324,20 @@ public Trace kecHi(final Bytes b) { filled.set(11); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("kecHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { kecHi.put((byte) 0); } - kecHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + kecHi.put(bs.get(j)); + } return this; } @@ -298,11 +349,20 @@ public Trace kecLo(final Bytes b) { filled.set(12); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("kecLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { kecLo.put((byte) 0); } - kecLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + kecLo.put(bs.get(j)); + } return this; } @@ -326,20 +386,29 @@ public Trace limb(final Bytes b) { filled.set(14); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("limb has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb.put((byte) 0); } - limb.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb.put(bs.get(j)); + } return this; } public Trace nBytes(final UnsignedByte b) { - if (filled.get(25)) { + if (filled.get(26)) { throw new IllegalStateException("rlpaddr.nBYTES already set"); } else { - filled.set(25); + filled.set(26); } nBytes.put(b.toByte()); @@ -354,11 +423,20 @@ public Trace nonce(final Bytes b) { filled.set(15); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("nonce has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { nonce.put((byte) 0); } - nonce.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + nonce.put(bs.get(j)); + } return this; } @@ -370,11 +448,20 @@ public Trace power(final Bytes b) { filled.set(16); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("power has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { power.put((byte) 0); } - power.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + power.put(bs.get(j)); + } return this; } @@ -386,11 +473,21 @@ public Trace rawAddrHi(final Bytes b) { filled.set(17); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "rawAddrHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { rawAddrHi.put((byte) 0); } - rawAddrHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + rawAddrHi.put(bs.get(j)); + } return this; } @@ -438,11 +535,20 @@ public Trace saltHi(final Bytes b) { filled.set(21); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("saltHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { saltHi.put((byte) 0); } - saltHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + saltHi.put(bs.get(j)); + } return this; } @@ -454,34 +560,60 @@ public Trace saltLo(final Bytes b) { filled.set(22); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("saltLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { saltLo.put((byte) 0); } - saltLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + saltLo.put(bs.get(j)); + } return this; } - public Trace stamp(final int b) { + public Trace selectorKeccakRes(final Boolean b) { if (filled.get(23)) { - throw new IllegalStateException("rlpaddr.STAMP already set"); + throw new IllegalStateException("rlpaddr.SELECTOR_KECCAK_RES already set"); } else { filled.set(23); } - stamp.putInt(b); + selectorKeccakRes.put((byte) (b ? 1 : 0)); return this; } - public Trace tinyNonZeroNonce(final Boolean b) { + public Trace stamp(final long b) { if (filled.get(24)) { - throw new IllegalStateException("rlpaddr.TINY_NON_ZERO_NONCE already set"); + throw new IllegalStateException("rlpaddr.STAMP already set"); } else { filled.set(24); } + if (b >= 16777216L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); + + return this; + } + + public Trace tinyNonZeroNonce(final Boolean b) { + if (filled.get(25)) { + throw new IllegalStateException("rlpaddr.TINY_NON_ZERO_NONCE already set"); + } else { + filled.set(25); + } + tinyNonZeroNonce.put((byte) (b ? 1 : 0)); return this; @@ -548,7 +680,7 @@ public Trace validateRow() { throw new IllegalStateException("rlpaddr.LIMB has not been filled"); } - if (!filled.get(25)) { + if (!filled.get(26)) { throw new IllegalStateException("rlpaddr.nBYTES has not been filled"); } @@ -585,10 +717,14 @@ public Trace validateRow() { } if (!filled.get(23)) { - throw new IllegalStateException("rlpaddr.STAMP has not been filled"); + throw new IllegalStateException("rlpaddr.SELECTOR_KECCAK_RES has not been filled"); } if (!filled.get(24)) { + throw new IllegalStateException("rlpaddr.STAMP has not been filled"); + } + + if (!filled.get(25)) { throw new IllegalStateException("rlpaddr.TINY_NON_ZERO_NONCE has not been filled"); } @@ -600,7 +736,7 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - acc.position(acc.position() + 32); + acc.position(acc.position() + 8); } if (!filled.get(1)) { @@ -608,11 +744,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(2)) { - addrHi.position(addrHi.position() + 8); + addrHi.position(addrHi.position() + 4); } if (!filled.get(3)) { - addrLo.position(addrLo.position() + 32); + addrLo.position(addrLo.position() + 16); } if (!filled.get(4)) { @@ -632,11 +768,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(8)) { - depAddrHi.position(depAddrHi.position() + 8); + depAddrHi.position(depAddrHi.position() + 4); } if (!filled.get(9)) { - depAddrLo.position(depAddrLo.position() + 32); + depAddrLo.position(depAddrLo.position() + 16); } if (!filled.get(10)) { @@ -644,11 +780,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(11)) { - kecHi.position(kecHi.position() + 32); + kecHi.position(kecHi.position() + 16); } if (!filled.get(12)) { - kecLo.position(kecLo.position() + 32); + kecLo.position(kecLo.position() + 16); } if (!filled.get(13)) { @@ -656,23 +792,23 @@ public Trace fillAndValidateRow() { } if (!filled.get(14)) { - limb.position(limb.position() + 32); + limb.position(limb.position() + 16); } - if (!filled.get(25)) { + if (!filled.get(26)) { nBytes.position(nBytes.position() + 1); } if (!filled.get(15)) { - nonce.position(nonce.position() + 32); + nonce.position(nonce.position() + 8); } if (!filled.get(16)) { - power.position(power.position() + 32); + power.position(power.position() + 16); } if (!filled.get(17)) { - rawAddrHi.position(rawAddrHi.position() + 32); + rawAddrHi.position(rawAddrHi.position() + 16); } if (!filled.get(18)) { @@ -688,18 +824,22 @@ public Trace fillAndValidateRow() { } if (!filled.get(21)) { - saltHi.position(saltHi.position() + 32); + saltHi.position(saltHi.position() + 16); } if (!filled.get(22)) { - saltLo.position(saltLo.position() + 32); + saltLo.position(saltLo.position() + 16); } if (!filled.get(23)) { - stamp.position(stamp.position() + 4); + selectorKeccakRes.position(selectorKeccakRes.position() + 1); } if (!filled.get(24)) { + stamp.position(stamp.position() + 3); + } + + if (!filled.get(25)) { tinyNonZeroNonce.position(tinyNonZeroNonce.position() + 1); } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxn/RlpTxn.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxn/RlpTxn.java index 4c2bed32f0..7f5f2dbd1b 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxn/RlpTxn.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxn/RlpTxn.java @@ -88,7 +88,7 @@ public RlpTxn(RomLex _romLex) { @Override public String moduleKey() { - return "TX_RLP"; + return "RLP_TXN"; } public static final Bytes BYTES_PREFIX_SHORT_INT = Bytes.of(RLP_PREFIX_INT_SHORT); @@ -140,7 +140,7 @@ public void traceChunk(RlpTxnChunk chunk, int absTxNum, Trace trace) { traceValue.requiresEvmExecution = chunk.requireEvmExecution(); traceValue.codeFragmentIndex = chunk.tx().getTo().isEmpty() && chunk.requireEvmExecution() - ? this.romLex.getCfiByMetadata( + ? this.romLex.getCodeFragmentIndexByMetadata( ContractMetadata.underDeployment( Address.contractAddress(chunk.tx().getSender(), chunk.tx().getNonce()), 1)) : 0; @@ -1065,6 +1065,7 @@ private void traceVoidList( traceValue.phaseEnd = phaseEnd; traceRow(traceValue, trace); } + // Define the Tracer private void traceRow(RlpTxnColumnsValue traceValue, Trace builder) { // Decrements RLP_BYTESIZE diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxn/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxn/Trace.java index ada36cd2f2..cee22b7e2b 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxn/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxn/Trace.java @@ -97,31 +97,31 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("rlptxn.ABS_TX_NUM", 4, length), - new ColumnHeader("rlptxn.ABS_TX_NUM_INFINY", 4, length), - new ColumnHeader("rlptxn.ACC_1", 32, length), - new ColumnHeader("rlptxn.ACC_2", 32, length), - new ColumnHeader("rlptxn.ACC_BYTESIZE", 2, length), - new ColumnHeader("rlptxn.ACCESS_TUPLE_BYTESIZE", 4, length), - new ColumnHeader("rlptxn.ADDR_HI", 8, length), - new ColumnHeader("rlptxn.ADDR_LO", 32, length), + new ColumnHeader("rlptxn.ABS_TX_NUM", 2, length), + new ColumnHeader("rlptxn.ABS_TX_NUM_INFINY", 2, length), + new ColumnHeader("rlptxn.ACC_1", 16, length), + new ColumnHeader("rlptxn.ACC_2", 16, length), + new ColumnHeader("rlptxn.ACC_BYTESIZE", 1, length), + new ColumnHeader("rlptxn.ACCESS_TUPLE_BYTESIZE", 3, length), + new ColumnHeader("rlptxn.ADDR_HI", 4, length), + new ColumnHeader("rlptxn.ADDR_LO", 16, length), new ColumnHeader("rlptxn.BIT", 1, length), new ColumnHeader("rlptxn.BIT_ACC", 1, length), new ColumnHeader("rlptxn.BYTE_1", 1, length), new ColumnHeader("rlptxn.BYTE_2", 1, length), - new ColumnHeader("rlptxn.CODE_FRAGMENT_INDEX", 8, length), - new ColumnHeader("rlptxn.COUNTER", 2, length), - new ColumnHeader("rlptxn.DATA_GAS_COST", 8, length), - new ColumnHeader("rlptxn.DATA_HI", 32, length), - new ColumnHeader("rlptxn.DATA_LO", 32, length), + new ColumnHeader("rlptxn.CODE_FRAGMENT_INDEX", 4, length), + new ColumnHeader("rlptxn.COUNTER", 1, length), + new ColumnHeader("rlptxn.DATA_GAS_COST", 4, length), + new ColumnHeader("rlptxn.DATA_HI", 16, length), + new ColumnHeader("rlptxn.DATA_LO", 16, length), new ColumnHeader("rlptxn.DEPTH_1", 1, length), new ColumnHeader("rlptxn.DEPTH_2", 1, length), new ColumnHeader("rlptxn.DONE", 1, length), - new ColumnHeader("rlptxn.INDEX_DATA", 8, length), - new ColumnHeader("rlptxn.INDEX_LT", 8, length), - new ColumnHeader("rlptxn.INDEX_LX", 8, length), - new ColumnHeader("rlptxn.INPUT_1", 32, length), - new ColumnHeader("rlptxn.INPUT_2", 32, length), + new ColumnHeader("rlptxn.INDEX_DATA", 4, length), + new ColumnHeader("rlptxn.INDEX_LT", 4, length), + new ColumnHeader("rlptxn.INDEX_LX", 4, length), + new ColumnHeader("rlptxn.INPUT_1", 16, length), + new ColumnHeader("rlptxn.INPUT_2", 16, length), new ColumnHeader("rlptxn.IS_PHASE_ACCESS_LIST", 1, length), new ColumnHeader("rlptxn.IS_PHASE_BETA", 1, length), new ColumnHeader("rlptxn.IS_PHASE_CHAIN_ID", 1, length), @@ -139,24 +139,24 @@ static List headers(int length) { new ColumnHeader("rlptxn.IS_PHASE_Y", 1, length), new ColumnHeader("rlptxn.IS_PREFIX", 1, length), new ColumnHeader("rlptxn.LC_CORRECTION", 1, length), - new ColumnHeader("rlptxn.LIMB", 32, length), + new ColumnHeader("rlptxn.LIMB", 16, length), new ColumnHeader("rlptxn.LIMB_CONSTRUCTED", 1, length), new ColumnHeader("rlptxn.LT", 1, length), new ColumnHeader("rlptxn.LX", 1, length), - new ColumnHeader("rlptxn.nADDR", 4, length), - new ColumnHeader("rlptxn.nBYTES", 2, length), - new ColumnHeader("rlptxn.nKEYS", 4, length), - new ColumnHeader("rlptxn.nKEYS_PER_ADDR", 4, length), - new ColumnHeader("rlptxn.nSTEP", 2, length), - new ColumnHeader("rlptxn.PHASE", 2, length), + new ColumnHeader("rlptxn.nADDR", 2, length), + new ColumnHeader("rlptxn.nBYTES", 1, length), + new ColumnHeader("rlptxn.nKEYS", 2, length), + new ColumnHeader("rlptxn.nKEYS_PER_ADDR", 2, length), + new ColumnHeader("rlptxn.nSTEP", 1, length), + new ColumnHeader("rlptxn.PHASE", 1, length), new ColumnHeader("rlptxn.PHASE_END", 1, length), - new ColumnHeader("rlptxn.PHASE_SIZE", 8, length), - new ColumnHeader("rlptxn.POWER", 32, length), + new ColumnHeader("rlptxn.PHASE_SIZE", 4, length), + new ColumnHeader("rlptxn.POWER", 16, length), new ColumnHeader("rlptxn.REQUIRES_EVM_EXECUTION", 1, length), - new ColumnHeader("rlptxn.RLP_LT_BYTESIZE", 4, length), - new ColumnHeader("rlptxn.RLP_LX_BYTESIZE", 4, length), + new ColumnHeader("rlptxn.RLP_LT_BYTESIZE", 3, length), + new ColumnHeader("rlptxn.RLP_LX_BYTESIZE", 3, length), new ColumnHeader("rlptxn.TO_HASH_BY_PROVER", 1, length), - new ColumnHeader("rlptxn.TYPE", 2, length)); + new ColumnHeader("rlptxn.TYPE", 1, length)); } public Trace(List buffers) { @@ -230,26 +230,34 @@ public int size() { return this.currentLine; } - public Trace absTxNum(final int b) { + public Trace absTxNum(final long b) { if (filled.get(0)) { throw new IllegalStateException("rlptxn.ABS_TX_NUM already set"); } else { filled.set(0); } - absTxNum.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("absTxNum has invalid value (" + b + ")"); + } + absTxNum.put((byte) (b >> 8)); + absTxNum.put((byte) b); return this; } - public Trace absTxNumInfiny(final int b) { + public Trace absTxNumInfiny(final long b) { if (filled.get(1)) { throw new IllegalStateException("rlptxn.ABS_TX_NUM_INFINY already set"); } else { filled.set(1); } - absTxNumInfiny.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("absTxNumInfiny has invalid value (" + b + ")"); + } + absTxNumInfiny.put((byte) (b >> 8)); + absTxNumInfiny.put((byte) b); return this; } @@ -261,11 +269,20 @@ public Trace acc1(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc1.put((byte) 0); } - acc1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc1.put(bs.get(j)); + } return this; } @@ -277,35 +294,52 @@ public Trace acc2(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc2.put((byte) 0); } - acc2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc2.put(bs.get(j)); + } return this; } - public Trace accBytesize(final short b) { + public Trace accBytesize(final long b) { if (filled.get(5)) { throw new IllegalStateException("rlptxn.ACC_BYTESIZE already set"); } else { filled.set(5); } - accBytesize.putShort(b); + if (b >= 32L) { + throw new IllegalArgumentException("accBytesize has invalid value (" + b + ")"); + } + accBytesize.put((byte) b); return this; } - public Trace accessTupleBytesize(final int b) { + public Trace accessTupleBytesize(final long b) { if (filled.get(2)) { throw new IllegalStateException("rlptxn.ACCESS_TUPLE_BYTESIZE already set"); } else { filled.set(2); } - accessTupleBytesize.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("accessTupleBytesize has invalid value (" + b + ")"); + } + accessTupleBytesize.put((byte) (b >> 16)); + accessTupleBytesize.put((byte) (b >> 8)); + accessTupleBytesize.put((byte) b); return this; } @@ -317,7 +351,13 @@ public Trace addrHi(final long b) { filled.set(6); } - addrHi.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("addrHi has invalid value (" + b + ")"); + } + addrHi.put((byte) (b >> 24)); + addrHi.put((byte) (b >> 16)); + addrHi.put((byte) (b >> 8)); + addrHi.put((byte) b); return this; } @@ -329,11 +369,20 @@ public Trace addrLo(final Bytes b) { filled.set(7); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("addrLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { addrLo.put((byte) 0); } - addrLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + addrLo.put(bs.get(j)); + } return this; } @@ -393,19 +442,28 @@ public Trace codeFragmentIndex(final long b) { filled.set(12); } - codeFragmentIndex.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("codeFragmentIndex has invalid value (" + b + ")"); + } + codeFragmentIndex.put((byte) (b >> 24)); + codeFragmentIndex.put((byte) (b >> 16)); + codeFragmentIndex.put((byte) (b >> 8)); + codeFragmentIndex.put((byte) b); return this; } - public Trace counter(final short b) { + public Trace counter(final long b) { if (filled.get(13)) { throw new IllegalStateException("rlptxn.COUNTER already set"); } else { filled.set(13); } - counter.putShort(b); + if (b >= 32L) { + throw new IllegalArgumentException("counter has invalid value (" + b + ")"); + } + counter.put((byte) b); return this; } @@ -417,7 +475,13 @@ public Trace dataGasCost(final long b) { filled.set(14); } - dataGasCost.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("dataGasCost has invalid value (" + b + ")"); + } + dataGasCost.put((byte) (b >> 24)); + dataGasCost.put((byte) (b >> 16)); + dataGasCost.put((byte) (b >> 8)); + dataGasCost.put((byte) b); return this; } @@ -429,11 +493,20 @@ public Trace dataHi(final Bytes b) { filled.set(15); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("dataHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { dataHi.put((byte) 0); } - dataHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + dataHi.put(bs.get(j)); + } return this; } @@ -445,11 +518,20 @@ public Trace dataLo(final Bytes b) { filled.set(16); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("dataLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { dataLo.put((byte) 0); } - dataLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + dataLo.put(bs.get(j)); + } return this; } @@ -497,7 +579,13 @@ public Trace indexData(final long b) { filled.set(20); } - indexData.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("indexData has invalid value (" + b + ")"); + } + indexData.put((byte) (b >> 24)); + indexData.put((byte) (b >> 16)); + indexData.put((byte) (b >> 8)); + indexData.put((byte) b); return this; } @@ -509,7 +597,13 @@ public Trace indexLt(final long b) { filled.set(21); } - indexLt.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("indexLt has invalid value (" + b + ")"); + } + indexLt.put((byte) (b >> 24)); + indexLt.put((byte) (b >> 16)); + indexLt.put((byte) (b >> 8)); + indexLt.put((byte) b); return this; } @@ -521,7 +615,13 @@ public Trace indexLx(final long b) { filled.set(22); } - indexLx.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("indexLx has invalid value (" + b + ")"); + } + indexLx.put((byte) (b >> 24)); + indexLx.put((byte) (b >> 16)); + indexLx.put((byte) (b >> 8)); + indexLx.put((byte) b); return this; } @@ -533,11 +633,20 @@ public Trace input1(final Bytes b) { filled.set(23); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("input1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { input1.put((byte) 0); } - input1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + input1.put(bs.get(j)); + } return this; } @@ -549,11 +658,20 @@ public Trace input2(final Bytes b) { filled.set(24); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("input2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { input2.put((byte) 0); } - input2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + input2.put(bs.get(j)); + } return this; } @@ -769,11 +887,20 @@ public Trace limb(final Bytes b) { filled.set(42); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("limb has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb.put((byte) 0); } - limb.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb.put(bs.get(j)); + } return this; } @@ -814,74 +941,95 @@ public Trace lx(final Boolean b) { return this; } - public Trace nAddr(final int b) { + public Trace nAddr(final long b) { if (filled.get(55)) { throw new IllegalStateException("rlptxn.nADDR already set"); } else { filled.set(55); } - nAddr.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("nAddr has invalid value (" + b + ")"); + } + nAddr.put((byte) (b >> 8)); + nAddr.put((byte) b); return this; } - public Trace nBytes(final short b) { + public Trace nBytes(final long b) { if (filled.get(56)) { throw new IllegalStateException("rlptxn.nBYTES already set"); } else { filled.set(56); } - nBytes.putShort(b); + if (b >= 32L) { + throw new IllegalArgumentException("nBytes has invalid value (" + b + ")"); + } + nBytes.put((byte) b); return this; } - public Trace nKeys(final int b) { + public Trace nKeys(final long b) { if (filled.get(57)) { throw new IllegalStateException("rlptxn.nKEYS already set"); } else { filled.set(57); } - nKeys.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("nKeys has invalid value (" + b + ")"); + } + nKeys.put((byte) (b >> 8)); + nKeys.put((byte) b); return this; } - public Trace nKeysPerAddr(final int b) { + public Trace nKeysPerAddr(final long b) { if (filled.get(58)) { throw new IllegalStateException("rlptxn.nKEYS_PER_ADDR already set"); } else { filled.set(58); } - nKeysPerAddr.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("nKeysPerAddr has invalid value (" + b + ")"); + } + nKeysPerAddr.put((byte) (b >> 8)); + nKeysPerAddr.put((byte) b); return this; } - public Trace nStep(final short b) { + public Trace nStep(final long b) { if (filled.get(59)) { throw new IllegalStateException("rlptxn.nSTEP already set"); } else { filled.set(59); } - nStep.putShort(b); + if (b >= 32L) { + throw new IllegalArgumentException("nStep has invalid value (" + b + ")"); + } + nStep.put((byte) b); return this; } - public Trace phase(final short b) { + public Trace phase(final long b) { if (filled.get(46)) { throw new IllegalStateException("rlptxn.PHASE already set"); } else { filled.set(46); } - phase.putShort(b); + if (b >= 32L) { + throw new IllegalArgumentException("phase has invalid value (" + b + ")"); + } + phase.put((byte) b); return this; } @@ -905,7 +1053,13 @@ public Trace phaseSize(final long b) { filled.set(48); } - phaseSize.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("phaseSize has invalid value (" + b + ")"); + } + phaseSize.put((byte) (b >> 24)); + phaseSize.put((byte) (b >> 16)); + phaseSize.put((byte) (b >> 8)); + phaseSize.put((byte) b); return this; } @@ -917,11 +1071,20 @@ public Trace power(final Bytes b) { filled.set(49); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("power has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { power.put((byte) 0); } - power.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + power.put(bs.get(j)); + } return this; } @@ -938,26 +1101,36 @@ public Trace requiresEvmExecution(final Boolean b) { return this; } - public Trace rlpLtBytesize(final int b) { + public Trace rlpLtBytesize(final long b) { if (filled.get(51)) { throw new IllegalStateException("rlptxn.RLP_LT_BYTESIZE already set"); } else { filled.set(51); } - rlpLtBytesize.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("rlpLtBytesize has invalid value (" + b + ")"); + } + rlpLtBytesize.put((byte) (b >> 16)); + rlpLtBytesize.put((byte) (b >> 8)); + rlpLtBytesize.put((byte) b); return this; } - public Trace rlpLxBytesize(final int b) { + public Trace rlpLxBytesize(final long b) { if (filled.get(52)) { throw new IllegalStateException("rlptxn.RLP_LX_BYTESIZE already set"); } else { filled.set(52); } - rlpLxBytesize.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("rlpLxBytesize has invalid value (" + b + ")"); + } + rlpLxBytesize.put((byte) (b >> 16)); + rlpLxBytesize.put((byte) (b >> 8)); + rlpLxBytesize.put((byte) b); return this; } @@ -974,14 +1147,17 @@ public Trace toHashByProver(final Boolean b) { return this; } - public Trace type(final short b) { + public Trace type(final long b) { if (filled.get(54)) { throw new IllegalStateException("rlptxn.TYPE already set"); } else { filled.set(54); } - type.putShort(b); + if (b >= 8L) { + throw new IllegalArgumentException("type has invalid value (" + b + ")"); + } + type.put((byte) b); return this; } @@ -1236,35 +1412,35 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - absTxNum.position(absTxNum.position() + 4); + absTxNum.position(absTxNum.position() + 2); } if (!filled.get(1)) { - absTxNumInfiny.position(absTxNumInfiny.position() + 4); + absTxNumInfiny.position(absTxNumInfiny.position() + 2); } if (!filled.get(3)) { - acc1.position(acc1.position() + 32); + acc1.position(acc1.position() + 16); } if (!filled.get(4)) { - acc2.position(acc2.position() + 32); + acc2.position(acc2.position() + 16); } if (!filled.get(5)) { - accBytesize.position(accBytesize.position() + 2); + accBytesize.position(accBytesize.position() + 1); } if (!filled.get(2)) { - accessTupleBytesize.position(accessTupleBytesize.position() + 4); + accessTupleBytesize.position(accessTupleBytesize.position() + 3); } if (!filled.get(6)) { - addrHi.position(addrHi.position() + 8); + addrHi.position(addrHi.position() + 4); } if (!filled.get(7)) { - addrLo.position(addrLo.position() + 32); + addrLo.position(addrLo.position() + 16); } if (!filled.get(8)) { @@ -1284,23 +1460,23 @@ public Trace fillAndValidateRow() { } if (!filled.get(12)) { - codeFragmentIndex.position(codeFragmentIndex.position() + 8); + codeFragmentIndex.position(codeFragmentIndex.position() + 4); } if (!filled.get(13)) { - counter.position(counter.position() + 2); + counter.position(counter.position() + 1); } if (!filled.get(14)) { - dataGasCost.position(dataGasCost.position() + 8); + dataGasCost.position(dataGasCost.position() + 4); } if (!filled.get(15)) { - dataHi.position(dataHi.position() + 32); + dataHi.position(dataHi.position() + 16); } if (!filled.get(16)) { - dataLo.position(dataLo.position() + 32); + dataLo.position(dataLo.position() + 16); } if (!filled.get(17)) { @@ -1316,23 +1492,23 @@ public Trace fillAndValidateRow() { } if (!filled.get(20)) { - indexData.position(indexData.position() + 8); + indexData.position(indexData.position() + 4); } if (!filled.get(21)) { - indexLt.position(indexLt.position() + 8); + indexLt.position(indexLt.position() + 4); } if (!filled.get(22)) { - indexLx.position(indexLx.position() + 8); + indexLx.position(indexLx.position() + 4); } if (!filled.get(23)) { - input1.position(input1.position() + 32); + input1.position(input1.position() + 16); } if (!filled.get(24)) { - input2.position(input2.position() + 32); + input2.position(input2.position() + 16); } if (!filled.get(25)) { @@ -1404,7 +1580,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(42)) { - limb.position(limb.position() + 32); + limb.position(limb.position() + 16); } if (!filled.get(43)) { @@ -1420,27 +1596,27 @@ public Trace fillAndValidateRow() { } if (!filled.get(55)) { - nAddr.position(nAddr.position() + 4); + nAddr.position(nAddr.position() + 2); } if (!filled.get(56)) { - nBytes.position(nBytes.position() + 2); + nBytes.position(nBytes.position() + 1); } if (!filled.get(57)) { - nKeys.position(nKeys.position() + 4); + nKeys.position(nKeys.position() + 2); } if (!filled.get(58)) { - nKeysPerAddr.position(nKeysPerAddr.position() + 4); + nKeysPerAddr.position(nKeysPerAddr.position() + 2); } if (!filled.get(59)) { - nStep.position(nStep.position() + 2); + nStep.position(nStep.position() + 1); } if (!filled.get(46)) { - phase.position(phase.position() + 2); + phase.position(phase.position() + 1); } if (!filled.get(47)) { @@ -1448,11 +1624,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(48)) { - phaseSize.position(phaseSize.position() + 8); + phaseSize.position(phaseSize.position() + 4); } if (!filled.get(49)) { - power.position(power.position() + 32); + power.position(power.position() + 16); } if (!filled.get(50)) { @@ -1460,11 +1636,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(51)) { - rlpLtBytesize.position(rlpLtBytesize.position() + 4); + rlpLtBytesize.position(rlpLtBytesize.position() + 3); } if (!filled.get(52)) { - rlpLxBytesize.position(rlpLxBytesize.position() + 4); + rlpLxBytesize.position(rlpLxBytesize.position() + 3); } if (!filled.get(53)) { @@ -1472,7 +1648,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(54)) { - type.position(type.position() + 2); + type.position(type.position() + 1); } filled.clear(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxrcpt/RlpTxrcpt.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxrcpt/RlpTxnRcpt.java similarity index 99% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxrcpt/RlpTxrcpt.java rename to arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxrcpt/RlpTxnRcpt.java index 76c0c58c4e..7b2b8ddc7f 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxrcpt/RlpTxrcpt.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxrcpt/RlpTxnRcpt.java @@ -47,7 +47,7 @@ import org.hyperledger.besu.evm.log.LogsBloomFilter; import org.hyperledger.besu.evm.worldstate.WorldView; -public class RlpTxrcpt implements Module { +public class RlpTxnRcpt implements Module { private final TxnData txnData; private static final Bytes BYTES_RLP_INT_SHORT = Bytes.minimalBytes(RLP_PREFIX_INT_SHORT); private static final Bytes BYTES_RLP_LIST_SHORT = Bytes.minimalBytes(RLP_PREFIX_LIST_SHORT); @@ -55,13 +55,13 @@ public class RlpTxrcpt implements Module { private int absLogNum = 0; @Getter public StackedList chunkList = new StackedList<>(); - public RlpTxrcpt(TxnData txnData) { + public RlpTxnRcpt(TxnData txnData) { this.txnData = txnData; } @Override public String moduleKey() { - return "RLP_TXRCPT"; + return "RLP_TXN_RCPT"; } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxrcpt/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxrcpt/Trace.java index 7f6cd21c1b..d1859b1d0e 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxrcpt/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rlptxrcpt/Trace.java @@ -86,50 +86,50 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("rlptxrcpt.ABS_LOG_NUM", 8, length), - new ColumnHeader("rlptxrcpt.ABS_LOG_NUM_MAX", 8, length), - new ColumnHeader("rlptxrcpt.ABS_TX_NUM", 8, length), - new ColumnHeader("rlptxrcpt.ABS_TX_NUM_MAX", 8, length), - new ColumnHeader("rlptxrcpt.ACC_1", 32, length), - new ColumnHeader("rlptxrcpt.ACC_2", 32, length), - new ColumnHeader("rlptxrcpt.ACC_3", 32, length), - new ColumnHeader("rlptxrcpt.ACC_4", 32, length), - new ColumnHeader("rlptxrcpt.ACC_SIZE", 2, length), + new ColumnHeader("rlptxrcpt.ABS_LOG_NUM", 4, length), + new ColumnHeader("rlptxrcpt.ABS_LOG_NUM_MAX", 4, length), + new ColumnHeader("rlptxrcpt.ABS_TX_NUM", 4, length), + new ColumnHeader("rlptxrcpt.ABS_TX_NUM_MAX", 4, length), + new ColumnHeader("rlptxrcpt.ACC_1", 16, length), + new ColumnHeader("rlptxrcpt.ACC_2", 16, length), + new ColumnHeader("rlptxrcpt.ACC_3", 16, length), + new ColumnHeader("rlptxrcpt.ACC_4", 16, length), + new ColumnHeader("rlptxrcpt.ACC_SIZE", 1, length), new ColumnHeader("rlptxrcpt.BIT", 1, length), new ColumnHeader("rlptxrcpt.BIT_ACC", 1, length), new ColumnHeader("rlptxrcpt.BYTE_1", 1, length), new ColumnHeader("rlptxrcpt.BYTE_2", 1, length), new ColumnHeader("rlptxrcpt.BYTE_3", 1, length), new ColumnHeader("rlptxrcpt.BYTE_4", 1, length), - new ColumnHeader("rlptxrcpt.COUNTER", 8, length), + new ColumnHeader("rlptxrcpt.COUNTER", 4, length), new ColumnHeader("rlptxrcpt.DEPTH_1", 1, length), new ColumnHeader("rlptxrcpt.DONE", 1, length), - new ColumnHeader("rlptxrcpt.INDEX", 4, length), - new ColumnHeader("rlptxrcpt.INDEX_LOCAL", 4, length), - new ColumnHeader("rlptxrcpt.INPUT_1", 32, length), - new ColumnHeader("rlptxrcpt.INPUT_2", 32, length), - new ColumnHeader("rlptxrcpt.INPUT_3", 32, length), - new ColumnHeader("rlptxrcpt.INPUT_4", 32, length), + new ColumnHeader("rlptxrcpt.INDEX", 3, length), + new ColumnHeader("rlptxrcpt.INDEX_LOCAL", 2, length), + new ColumnHeader("rlptxrcpt.INPUT_1", 16, length), + new ColumnHeader("rlptxrcpt.INPUT_2", 16, length), + new ColumnHeader("rlptxrcpt.INPUT_3", 16, length), + new ColumnHeader("rlptxrcpt.INPUT_4", 16, length), new ColumnHeader("rlptxrcpt.IS_DATA", 1, length), new ColumnHeader("rlptxrcpt.IS_PREFIX", 1, length), new ColumnHeader("rlptxrcpt.IS_TOPIC", 1, length), new ColumnHeader("rlptxrcpt.LC_CORRECTION", 1, length), - new ColumnHeader("rlptxrcpt.LIMB", 32, length), + new ColumnHeader("rlptxrcpt.LIMB", 16, length), new ColumnHeader("rlptxrcpt.LIMB_CONSTRUCTED", 1, length), - new ColumnHeader("rlptxrcpt.LOCAL_SIZE", 8, length), - new ColumnHeader("rlptxrcpt.LOG_ENTRY_SIZE", 8, length), - new ColumnHeader("rlptxrcpt.nBYTES", 2, length), - new ColumnHeader("rlptxrcpt.nSTEP", 8, length), + new ColumnHeader("rlptxrcpt.LOCAL_SIZE", 4, length), + new ColumnHeader("rlptxrcpt.LOG_ENTRY_SIZE", 4, length), + new ColumnHeader("rlptxrcpt.nBYTES", 1, length), + new ColumnHeader("rlptxrcpt.nSTEP", 4, length), new ColumnHeader("rlptxrcpt.PHASE_1", 1, length), new ColumnHeader("rlptxrcpt.PHASE_2", 1, length), new ColumnHeader("rlptxrcpt.PHASE_3", 1, length), new ColumnHeader("rlptxrcpt.PHASE_4", 1, length), new ColumnHeader("rlptxrcpt.PHASE_5", 1, length), new ColumnHeader("rlptxrcpt.PHASE_END", 1, length), - new ColumnHeader("rlptxrcpt.PHASE_ID", 4, length), - new ColumnHeader("rlptxrcpt.PHASE_SIZE", 8, length), - new ColumnHeader("rlptxrcpt.POWER", 32, length), - new ColumnHeader("rlptxrcpt.TXRCPT_SIZE", 8, length)); + new ColumnHeader("rlptxrcpt.PHASE_ID", 2, length), + new ColumnHeader("rlptxrcpt.PHASE_SIZE", 4, length), + new ColumnHeader("rlptxrcpt.POWER", 16, length), + new ColumnHeader("rlptxrcpt.TXRCPT_SIZE", 4, length)); } public Trace(List buffers) { @@ -194,7 +194,13 @@ public Trace absLogNum(final long b) { filled.set(0); } - absLogNum.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("absLogNum has invalid value (" + b + ")"); + } + absLogNum.put((byte) (b >> 24)); + absLogNum.put((byte) (b >> 16)); + absLogNum.put((byte) (b >> 8)); + absLogNum.put((byte) b); return this; } @@ -206,7 +212,13 @@ public Trace absLogNumMax(final long b) { filled.set(1); } - absLogNumMax.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("absLogNumMax has invalid value (" + b + ")"); + } + absLogNumMax.put((byte) (b >> 24)); + absLogNumMax.put((byte) (b >> 16)); + absLogNumMax.put((byte) (b >> 8)); + absLogNumMax.put((byte) b); return this; } @@ -218,7 +230,13 @@ public Trace absTxNum(final long b) { filled.set(2); } - absTxNum.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("absTxNum has invalid value (" + b + ")"); + } + absTxNum.put((byte) (b >> 24)); + absTxNum.put((byte) (b >> 16)); + absTxNum.put((byte) (b >> 8)); + absTxNum.put((byte) b); return this; } @@ -230,7 +248,13 @@ public Trace absTxNumMax(final long b) { filled.set(3); } - absTxNumMax.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("absTxNumMax has invalid value (" + b + ")"); + } + absTxNumMax.put((byte) (b >> 24)); + absTxNumMax.put((byte) (b >> 16)); + absTxNumMax.put((byte) (b >> 8)); + absTxNumMax.put((byte) b); return this; } @@ -242,11 +266,20 @@ public Trace acc1(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc1.put((byte) 0); } - acc1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc1.put(bs.get(j)); + } return this; } @@ -258,11 +291,20 @@ public Trace acc2(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc2.put((byte) 0); } - acc2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc2.put(bs.get(j)); + } return this; } @@ -274,11 +316,20 @@ public Trace acc3(final Bytes b) { filled.set(6); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc3.put((byte) 0); } - acc3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc3.put(bs.get(j)); + } return this; } @@ -290,23 +341,35 @@ public Trace acc4(final Bytes b) { filled.set(7); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc4.put((byte) 0); } - acc4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc4.put(bs.get(j)); + } return this; } - public Trace accSize(final short b) { + public Trace accSize(final long b) { if (filled.get(8)) { throw new IllegalStateException("rlptxrcpt.ACC_SIZE already set"); } else { filled.set(8); } - accSize.putShort(b); + if (b >= 32L) { + throw new IllegalArgumentException("accSize has invalid value (" + b + ")"); + } + accSize.put((byte) b); return this; } @@ -390,7 +453,13 @@ public Trace counter(final long b) { filled.set(15); } - counter.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("counter has invalid value (" + b + ")"); + } + counter.put((byte) (b >> 24)); + counter.put((byte) (b >> 16)); + counter.put((byte) (b >> 8)); + counter.put((byte) b); return this; } @@ -419,26 +488,35 @@ public Trace done(final Boolean b) { return this; } - public Trace index(final int b) { + public Trace index(final long b) { if (filled.get(18)) { throw new IllegalStateException("rlptxrcpt.INDEX already set"); } else { filled.set(18); } - index.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("index has invalid value (" + b + ")"); + } + index.put((byte) (b >> 16)); + index.put((byte) (b >> 8)); + index.put((byte) b); return this; } - public Trace indexLocal(final int b) { + public Trace indexLocal(final long b) { if (filled.get(19)) { throw new IllegalStateException("rlptxrcpt.INDEX_LOCAL already set"); } else { filled.set(19); } - indexLocal.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("indexLocal has invalid value (" + b + ")"); + } + indexLocal.put((byte) (b >> 8)); + indexLocal.put((byte) b); return this; } @@ -450,11 +528,20 @@ public Trace input1(final Bytes b) { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("input1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { input1.put((byte) 0); } - input1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + input1.put(bs.get(j)); + } return this; } @@ -466,11 +553,20 @@ public Trace input2(final Bytes b) { filled.set(21); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("input2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { input2.put((byte) 0); } - input2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + input2.put(bs.get(j)); + } return this; } @@ -482,11 +578,20 @@ public Trace input3(final Bytes b) { filled.set(22); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("input3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { input3.put((byte) 0); } - input3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + input3.put(bs.get(j)); + } return this; } @@ -498,11 +603,20 @@ public Trace input4(final Bytes b) { filled.set(23); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("input4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { input4.put((byte) 0); } - input4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + input4.put(bs.get(j)); + } return this; } @@ -562,11 +676,20 @@ public Trace limb(final Bytes b) { filled.set(28); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("limb has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb.put((byte) 0); } - limb.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb.put(bs.get(j)); + } return this; } @@ -590,7 +713,13 @@ public Trace localSize(final long b) { filled.set(30); } - localSize.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("localSize has invalid value (" + b + ")"); + } + localSize.put((byte) (b >> 24)); + localSize.put((byte) (b >> 16)); + localSize.put((byte) (b >> 8)); + localSize.put((byte) b); return this; } @@ -602,19 +731,28 @@ public Trace logEntrySize(final long b) { filled.set(31); } - logEntrySize.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("logEntrySize has invalid value (" + b + ")"); + } + logEntrySize.put((byte) (b >> 24)); + logEntrySize.put((byte) (b >> 16)); + logEntrySize.put((byte) (b >> 8)); + logEntrySize.put((byte) b); return this; } - public Trace nBytes(final short b) { + public Trace nBytes(final long b) { if (filled.get(42)) { throw new IllegalStateException("rlptxrcpt.nBYTES already set"); } else { filled.set(42); } - nBytes.putShort(b); + if (b >= 32L) { + throw new IllegalArgumentException("nBytes has invalid value (" + b + ")"); + } + nBytes.put((byte) b); return this; } @@ -626,7 +764,13 @@ public Trace nStep(final long b) { filled.set(43); } - nStep.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("nStep has invalid value (" + b + ")"); + } + nStep.put((byte) (b >> 24)); + nStep.put((byte) (b >> 16)); + nStep.put((byte) (b >> 8)); + nStep.put((byte) b); return this; } @@ -703,14 +847,18 @@ public Trace phaseEnd(final Boolean b) { return this; } - public Trace phaseId(final int b) { + public Trace phaseId(final long b) { if (filled.get(38)) { throw new IllegalStateException("rlptxrcpt.PHASE_ID already set"); } else { filled.set(38); } - phaseId.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("phaseId has invalid value (" + b + ")"); + } + phaseId.put((byte) (b >> 8)); + phaseId.put((byte) b); return this; } @@ -722,7 +870,13 @@ public Trace phaseSize(final long b) { filled.set(39); } - phaseSize.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("phaseSize has invalid value (" + b + ")"); + } + phaseSize.put((byte) (b >> 24)); + phaseSize.put((byte) (b >> 16)); + phaseSize.put((byte) (b >> 8)); + phaseSize.put((byte) b); return this; } @@ -734,11 +888,20 @@ public Trace power(final Bytes b) { filled.set(40); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("power has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { power.put((byte) 0); } - power.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + power.put(bs.get(j)); + } return this; } @@ -750,7 +913,13 @@ public Trace txrcptSize(final long b) { filled.set(41); } - txrcptSize.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("txrcptSize has invalid value (" + b + ")"); + } + txrcptSize.put((byte) (b >> 24)); + txrcptSize.put((byte) (b >> 16)); + txrcptSize.put((byte) (b >> 8)); + txrcptSize.put((byte) b); return this; } @@ -940,39 +1109,39 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - absLogNum.position(absLogNum.position() + 8); + absLogNum.position(absLogNum.position() + 4); } if (!filled.get(1)) { - absLogNumMax.position(absLogNumMax.position() + 8); + absLogNumMax.position(absLogNumMax.position() + 4); } if (!filled.get(2)) { - absTxNum.position(absTxNum.position() + 8); + absTxNum.position(absTxNum.position() + 4); } if (!filled.get(3)) { - absTxNumMax.position(absTxNumMax.position() + 8); + absTxNumMax.position(absTxNumMax.position() + 4); } if (!filled.get(4)) { - acc1.position(acc1.position() + 32); + acc1.position(acc1.position() + 16); } if (!filled.get(5)) { - acc2.position(acc2.position() + 32); + acc2.position(acc2.position() + 16); } if (!filled.get(6)) { - acc3.position(acc3.position() + 32); + acc3.position(acc3.position() + 16); } if (!filled.get(7)) { - acc4.position(acc4.position() + 32); + acc4.position(acc4.position() + 16); } if (!filled.get(8)) { - accSize.position(accSize.position() + 2); + accSize.position(accSize.position() + 1); } if (!filled.get(9)) { @@ -1000,7 +1169,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(15)) { - counter.position(counter.position() + 8); + counter.position(counter.position() + 4); } if (!filled.get(16)) { @@ -1012,27 +1181,27 @@ public Trace fillAndValidateRow() { } if (!filled.get(18)) { - index.position(index.position() + 4); + index.position(index.position() + 3); } if (!filled.get(19)) { - indexLocal.position(indexLocal.position() + 4); + indexLocal.position(indexLocal.position() + 2); } if (!filled.get(20)) { - input1.position(input1.position() + 32); + input1.position(input1.position() + 16); } if (!filled.get(21)) { - input2.position(input2.position() + 32); + input2.position(input2.position() + 16); } if (!filled.get(22)) { - input3.position(input3.position() + 32); + input3.position(input3.position() + 16); } if (!filled.get(23)) { - input4.position(input4.position() + 32); + input4.position(input4.position() + 16); } if (!filled.get(24)) { @@ -1052,7 +1221,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(28)) { - limb.position(limb.position() + 32); + limb.position(limb.position() + 16); } if (!filled.get(29)) { @@ -1060,19 +1229,19 @@ public Trace fillAndValidateRow() { } if (!filled.get(30)) { - localSize.position(localSize.position() + 8); + localSize.position(localSize.position() + 4); } if (!filled.get(31)) { - logEntrySize.position(logEntrySize.position() + 8); + logEntrySize.position(logEntrySize.position() + 4); } if (!filled.get(42)) { - nBytes.position(nBytes.position() + 2); + nBytes.position(nBytes.position() + 1); } if (!filled.get(43)) { - nStep.position(nStep.position() + 8); + nStep.position(nStep.position() + 4); } if (!filled.get(32)) { @@ -1100,19 +1269,19 @@ public Trace fillAndValidateRow() { } if (!filled.get(38)) { - phaseId.position(phaseId.position() + 4); + phaseId.position(phaseId.position() + 2); } if (!filled.get(39)) { - phaseSize.position(phaseSize.position() + 8); + phaseSize.position(phaseSize.position() + 4); } if (!filled.get(40)) { - power.position(power.position() + 32); + power.position(power.position() + 16); } if (!filled.get(41)) { - txrcptSize.position(txrcptSize.position() + 8); + txrcptSize.position(txrcptSize.position() + 4); } filled.clear(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rom/Rom.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rom/Rom.java index 1aadfe882d..8fc7e21896 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rom/Rom.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rom/Rom.java @@ -53,11 +53,11 @@ public List columnsHeaders() { public void commit(List buffers) { final Trace trace = new Trace(buffers); - int cfi = 0; - final int cfiInfty = this.romLex.sortedChunks().size(); + int codeFragmentIndex = 0; + final int codeFragmentIndexInfinity = this.romLex.sortedChunks().size(); for (RomChunk chunk : this.romLex.sortedChunks()) { - cfi += 1; - chunk.trace(trace, cfi, cfiInfty); + codeFragmentIndex += 1; + chunk.trace(trace, codeFragmentIndex, codeFragmentIndexInfinity); } } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rom/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rom/Trace.java index 65ff0bfc05..b85d84fcd0 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rom/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/rom/Trace.java @@ -60,29 +60,29 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("rom.ACC", 32, length), - new ColumnHeader("rom.CODE_FRAGMENT_INDEX", 8, length), - new ColumnHeader("rom.CODE_FRAGMENT_INDEX_INFTY", 8, length), - new ColumnHeader("rom.CODE_SIZE", 8, length), + new ColumnHeader("rom.ACC", 16, length), + new ColumnHeader("rom.CODE_FRAGMENT_INDEX", 4, length), + new ColumnHeader("rom.CODE_FRAGMENT_INDEX_INFTY", 4, length), + new ColumnHeader("rom.CODE_SIZE", 4, length), new ColumnHeader("rom.CODESIZE_REACHED", 1, length), new ColumnHeader("rom.COUNTER", 1, length), new ColumnHeader("rom.COUNTER_MAX", 1, length), new ColumnHeader("rom.COUNTER_PUSH", 1, length), - new ColumnHeader("rom.INDEX", 8, length), + new ColumnHeader("rom.INDEX", 4, length), new ColumnHeader("rom.IS_JUMPDEST", 1, length), new ColumnHeader("rom.IS_PUSH", 1, length), new ColumnHeader("rom.IS_PUSH_DATA", 1, length), - new ColumnHeader("rom.LIMB", 32, length), + new ColumnHeader("rom.LIMB", 16, length), new ColumnHeader("rom.nBYTES", 1, length), new ColumnHeader("rom.nBYTES_ACC", 1, length), new ColumnHeader("rom.OPCODE", 1, length), new ColumnHeader("rom.PADDED_BYTECODE_BYTE", 1, length), - new ColumnHeader("rom.PROGRAM_COUNTER", 8, length), + new ColumnHeader("rom.PROGRAM_COUNTER", 4, length), new ColumnHeader("rom.PUSH_FUNNEL_BIT", 1, length), new ColumnHeader("rom.PUSH_PARAMETER", 1, length), - new ColumnHeader("rom.PUSH_VALUE_ACC", 32, length), - new ColumnHeader("rom.PUSH_VALUE_HI", 32, length), - new ColumnHeader("rom.PUSH_VALUE_LO", 32, length)); + new ColumnHeader("rom.PUSH_VALUE_ACC", 16, length), + new ColumnHeader("rom.PUSH_VALUE_HI", 16, length), + new ColumnHeader("rom.PUSH_VALUE_LO", 16, length)); } public Trace(List buffers) { @@ -126,11 +126,20 @@ public Trace acc(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc.put((byte) 0); } - acc.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc.put(bs.get(j)); + } return this; } @@ -142,7 +151,13 @@ public Trace codeFragmentIndex(final long b) { filled.set(2); } - codeFragmentIndex.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("codeFragmentIndex has invalid value (" + b + ")"); + } + codeFragmentIndex.put((byte) (b >> 24)); + codeFragmentIndex.put((byte) (b >> 16)); + codeFragmentIndex.put((byte) (b >> 8)); + codeFragmentIndex.put((byte) b); return this; } @@ -154,7 +169,13 @@ public Trace codeFragmentIndexInfty(final long b) { filled.set(3); } - codeFragmentIndexInfty.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("codeFragmentIndexInfty has invalid value (" + b + ")"); + } + codeFragmentIndexInfty.put((byte) (b >> 24)); + codeFragmentIndexInfty.put((byte) (b >> 16)); + codeFragmentIndexInfty.put((byte) (b >> 8)); + codeFragmentIndexInfty.put((byte) b); return this; } @@ -166,7 +187,13 @@ public Trace codeSize(final long b) { filled.set(4); } - codeSize.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("codeSize has invalid value (" + b + ")"); + } + codeSize.put((byte) (b >> 24)); + codeSize.put((byte) (b >> 16)); + codeSize.put((byte) (b >> 8)); + codeSize.put((byte) b); return this; } @@ -226,7 +253,13 @@ public Trace index(final long b) { filled.set(8); } - index.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("index has invalid value (" + b + ")"); + } + index.put((byte) (b >> 24)); + index.put((byte) (b >> 16)); + index.put((byte) (b >> 8)); + index.put((byte) b); return this; } @@ -274,11 +307,20 @@ public Trace limb(final Bytes b) { filled.set(12); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("limb has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { limb.put((byte) 0); } - limb.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb.put(bs.get(j)); + } return this; } @@ -338,7 +380,13 @@ public Trace programCounter(final long b) { filled.set(15); } - programCounter.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("programCounter has invalid value (" + b + ")"); + } + programCounter.put((byte) (b >> 24)); + programCounter.put((byte) (b >> 16)); + programCounter.put((byte) (b >> 8)); + programCounter.put((byte) b); return this; } @@ -374,11 +422,21 @@ public Trace pushValueAcc(final Bytes b) { filled.set(18); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "pushValueAcc has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { pushValueAcc.put((byte) 0); } - pushValueAcc.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + pushValueAcc.put(bs.get(j)); + } return this; } @@ -390,11 +448,21 @@ public Trace pushValueHi(final Bytes b) { filled.set(19); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "pushValueHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { pushValueHi.put((byte) 0); } - pushValueHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + pushValueHi.put(bs.get(j)); + } return this; } @@ -406,11 +474,21 @@ public Trace pushValueLo(final Bytes b) { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "pushValueLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { pushValueLo.put((byte) 0); } - pushValueLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + pushValueLo.put(bs.get(j)); + } return this; } @@ -516,19 +594,19 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - acc.position(acc.position() + 32); + acc.position(acc.position() + 16); } if (!filled.get(2)) { - codeFragmentIndex.position(codeFragmentIndex.position() + 8); + codeFragmentIndex.position(codeFragmentIndex.position() + 4); } if (!filled.get(3)) { - codeFragmentIndexInfty.position(codeFragmentIndexInfty.position() + 8); + codeFragmentIndexInfty.position(codeFragmentIndexInfty.position() + 4); } if (!filled.get(4)) { - codeSize.position(codeSize.position() + 8); + codeSize.position(codeSize.position() + 4); } if (!filled.get(1)) { @@ -548,7 +626,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(8)) { - index.position(index.position() + 8); + index.position(index.position() + 4); } if (!filled.get(9)) { @@ -564,7 +642,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(12)) { - limb.position(limb.position() + 32); + limb.position(limb.position() + 16); } if (!filled.get(21)) { @@ -584,7 +662,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(15)) { - programCounter.position(programCounter.position() + 8); + programCounter.position(programCounter.position() + 4); } if (!filled.get(16)) { @@ -596,15 +674,15 @@ public Trace fillAndValidateRow() { } if (!filled.get(18)) { - pushValueAcc.position(pushValueAcc.position() + 32); + pushValueAcc.position(pushValueAcc.position() + 16); } if (!filled.get(19)) { - pushValueHi.position(pushValueHi.position() + 32); + pushValueHi.position(pushValueHi.position() + 16); } if (!filled.get(20)) { - pushValueLo.position(pushValueLo.position() + 32); + pushValueLo.position(pushValueLo.position() + 16); } filled.clear(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/RomChunk.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/RomChunk.java index 2a0ec1dc30..637c2d2540 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/RomChunk.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/RomChunk.java @@ -21,6 +21,7 @@ import static net.consensys.linea.zktracer.module.constants.GlobalConstants.EVM_INST_PUSH32; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.LLARGE; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.LLARGEMO; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.WORD_SIZE; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.WORD_SIZE_MO; import static net.consensys.linea.zktracer.types.Utils.rightPadTo; @@ -41,12 +42,9 @@ public final class RomChunk extends ModuleOperation { private static final UnsignedByte UB_LLARGE = UnsignedByte.of(LLARGE); private static final UnsignedByte UB_LLARGE_MO = UnsignedByte.of(LLARGEMO); private static final UnsignedByte UB_EVW_WORD_MO = UnsignedByte.of(WORD_SIZE_MO); - private static final int PUSH_1 = 0x60; - private static final int PUSH_32 = 0x7f; - private static final UnsignedByte INVALID = UnsignedByte.of(0xFE); - private static final int JUMPDEST = 0x5b; + private static final UnsignedByte INVALID = UnsignedByte.of(EVM_INST_INVALID); - @EqualsAndHashCode.Include private final ContractMetadata metadata; + @Getter @EqualsAndHashCode.Include private final ContractMetadata metadata; private final boolean readFromTheState; private final boolean commitToTheState; private final Bytes byteCode; @@ -69,7 +67,7 @@ public void trace(Trace trace, int cfi, int cfiInfty) { for (int i = 0; i < chunkRowSize; i++) { boolean codeSizeReached = i >= codeSize; - int sliceNumber = i / 16; + int sliceNumber = i / LLARGE; // Fill Generic columns trace @@ -171,7 +169,7 @@ public void trace(Trace trace, int cfi, int cfiInfty) { @Override protected int computeLineCount() { // WARN this is the line count used by the ROM, not by the ROMLEX - final int nPaddingRow = 32; + final int nPaddingRow = WORD_SIZE; final int codeSize = this.byteCode.size(); final int nbSlice = (codeSize + (LLARGE - 1)) / LLARGE; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/RomLex.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/RomLex.java index 961c0e719a..757141c57e 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/RomLex.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/RomLex.java @@ -15,6 +15,7 @@ package net.consensys.linea.zktracer.module.romlex; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.LLARGE; import static net.consensys.linea.zktracer.types.AddressUtils.getCreate2Address; import static net.consensys.linea.zktracer.types.AddressUtils.getCreateAddress; @@ -30,10 +31,10 @@ import net.consensys.linea.zktracer.ColumnHeader; import net.consensys.linea.zktracer.container.stacked.set.StackedSet; import net.consensys.linea.zktracer.module.Module; -import net.consensys.linea.zktracer.module.constants.GlobalConstants; import net.consensys.linea.zktracer.module.hub.Hub; import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.datatypes.Address; +import org.hyperledger.besu.datatypes.Hash; import org.hyperledger.besu.datatypes.Transaction; import org.hyperledger.besu.evm.account.AccountState; import org.hyperledger.besu.evm.frame.MessageFrame; @@ -73,7 +74,7 @@ public void popTransaction() { this.chunks.pop(); } - public int getCfiByMetadata(final ContractMetadata metadata) { + public int getCodeFragmentIndexByMetadata(final ContractMetadata metadata) { if (this.sortedChunks.isEmpty()) { throw new RuntimeException("Chunks have not been sorted yet"); } @@ -105,7 +106,7 @@ public Optional getChunkByMetadata(final ContractMetadata metadata) { @Override public void traceStartTx(WorldView worldView, Transaction tx) { // Contract creation with InitCode - if (tx.getInit().isPresent() && !tx.getInit().orElseThrow().isEmpty()) { + if (tx.getInit().isPresent() && !tx.getInit().get().isEmpty()) { final Address calledAddress = Address.contractAddress(tx.getSender(), tx.getNonce()); final RomChunk chunk = new RomChunk( @@ -121,20 +122,24 @@ public void traceStartTx(WorldView worldView, Transaction tx) { .map(AccountState::getCode) .ifPresent( code -> { - final Address calledAddress = tx.getTo().get(); - int depNumber = hub.transients().conflation().deploymentInfo().number(calledAddress); - boolean depStatus = - hub.transients().conflation().deploymentInfo().isDeploying(calledAddress); - - final RomChunk chunk = - new RomChunk( - ContractMetadata.make(calledAddress, depNumber, depStatus), - true, - false, - code); - - this.chunks.add(chunk); - this.addressRomChunkMap.put(calledAddress, chunk); + if (!code.isEmpty()) { + + final Address calledAddress = tx.getTo().get(); + int depNumber = + hub.transients().conflation().deploymentInfo().number(calledAddress); + boolean depStatus = + hub.transients().conflation().deploymentInfo().isDeploying(calledAddress); + + final RomChunk chunk = + new RomChunk( + ContractMetadata.make(calledAddress, depNumber, depStatus), + true, + false, + code); + + this.chunks.add(chunk); + this.addressRomChunkMap.put(calledAddress, chunk); + } }); } @@ -142,8 +147,10 @@ public void traceStartTx(WorldView worldView, Transaction tx) { public void tracePreOpcode(MessageFrame frame) { switch (this.hub.opCode()) { case CREATE -> { - this.address = getCreateAddress(frame); this.byteCode = this.hub.transients().op().callData(); + if (!this.byteCode.isEmpty()) { + this.address = getCreateAddress(frame); + } } case CREATE2 -> { this.byteCode = this.hub.transients().op().callData(); @@ -153,9 +160,14 @@ public void tracePreOpcode(MessageFrame frame) { } case RETURN -> { final Bytes code = hub.transients().op().returnData(); + + if (code.isEmpty()) { + return; + } + final boolean depStatus = hub.transients().conflation().deploymentInfo().isDeploying(frame.getContractAddress()); - if (!code.isEmpty() && depStatus) { + if (depStatus) { int depNumber = hub.transients().conflation().deploymentInfo().number(frame.getContractAddress()); final ContractMetadata contractMetadata = @@ -163,7 +175,7 @@ public void tracePreOpcode(MessageFrame frame) { final RomChunk chunk = new RomChunk(contractMetadata, true, false, code); this.chunks.add(chunk); - this.addressRomChunkMap.put(frame.getContractAddress(), chunk); + this.addressRomChunkMap.put(contractMetadata.address(), chunk); } } @@ -174,13 +186,21 @@ public void tracePreOpcode(MessageFrame frame) { final int depNumber = hub.transients().conflation().deploymentInfo().number(frame.getContractAddress()); - final RomChunk chunk = - new RomChunk( - ContractMetadata.make(calledAddress, depNumber, depStatus), true, false, byteCode); Optional.ofNullable(frame.getWorldUpdater().get(calledAddress)) .map(AccountState::getCode) - .ifPresent(byteCode -> this.chunks.add(chunk)); - this.addressRomChunkMap.put(calledAddress, chunk); + .ifPresent( + byteCode -> { + if (!byteCode.isEmpty()) { + final RomChunk chunk = + new RomChunk( + ContractMetadata.make(calledAddress, depNumber, depStatus), + true, + false, + byteCode); + chunks.add(chunk); + this.addressRomChunkMap.put(calledAddress, chunk); + } + }); } case EXTCODECOPY -> { @@ -193,12 +213,13 @@ public void tracePreOpcode(MessageFrame frame) { } final int depNumber = hub.transients().conflation().deploymentInfo().number(frame.getContractAddress()); + Optional.ofNullable(frame.getWorldUpdater().get(calledAddress)) .map(AccountState::getCode) .ifPresent( byteCode -> { if (!byteCode.isEmpty()) { - RomChunk chunk = + final RomChunk chunk = new RomChunk( ContractMetadata.make(calledAddress, depNumber, false), true, @@ -215,6 +236,9 @@ public void tracePreOpcode(MessageFrame frame) { @Override public void tracePostOpcode(MessageFrame frame) { + if (byteCode.isEmpty()) { + return; + } switch (hub.opCode()) { case CREATE, CREATE2 -> { final int depNumber = hub.transients().conflation().deploymentInfo().number(this.address); @@ -231,18 +255,23 @@ public void tracePostOpcode(MessageFrame frame) { } } + // This is the tracing for ROMLEX module private void traceChunk( - final RomChunk chunk, int cfi, int codeFragmentIndexInfinity, Trace trace) { + final RomChunk chunk, final int cfi, final int codeFragmentIndexInfinity, Trace trace) { + final Hash codeHash = + chunk.metadata().underDeployment() ? Hash.EMPTY : Hash.hash(chunk.byteCode()); trace .codeFragmentIndex(cfi) .codeFragmentIndexInfty(codeFragmentIndexInfinity) .codeSize(chunk.byteCode().size()) .addressHi(chunk.metadata().address().slice(0, 4).toLong()) - .addressLo(chunk.metadata().address().slice(4, GlobalConstants.LLARGE)) + .addressLo(chunk.metadata().address().slice(4, LLARGE)) .commitToState(chunk.commitToTheState()) .deploymentNumber(chunk.metadata().deploymentNumber()) .deploymentStatus(chunk.metadata().underDeployment()) .readFromState(chunk.readFromTheState()) + .codeHashHi(codeHash.slice(0, LLARGE)) + .codeHashLo(codeHash.slice(LLARGE, LLARGE)) .validateRow(); } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/Trace.java index 702a049dcb..6ea8806f62 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/romlex/Trace.java @@ -37,6 +37,8 @@ public class Trace { private final MappedByteBuffer addressLo; private final MappedByteBuffer codeFragmentIndex; private final MappedByteBuffer codeFragmentIndexInfty; + private final MappedByteBuffer codeHashHi; + private final MappedByteBuffer codeHashLo; private final MappedByteBuffer codeSize; private final MappedByteBuffer commitToState; private final MappedByteBuffer deploymentNumber; @@ -45,13 +47,15 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("romlex.ADDRESS_HI", 8, length), - new ColumnHeader("romlex.ADDRESS_LO", 32, length), - new ColumnHeader("romlex.CODE_FRAGMENT_INDEX", 8, length), - new ColumnHeader("romlex.CODE_FRAGMENT_INDEX_INFTY", 8, length), - new ColumnHeader("romlex.CODE_SIZE", 8, length), + new ColumnHeader("romlex.ADDRESS_HI", 4, length), + new ColumnHeader("romlex.ADDRESS_LO", 16, length), + new ColumnHeader("romlex.CODE_FRAGMENT_INDEX", 4, length), + new ColumnHeader("romlex.CODE_FRAGMENT_INDEX_INFTY", 4, length), + new ColumnHeader("romlex.CODE_HASH_HI", 16, length), + new ColumnHeader("romlex.CODE_HASH_LO", 16, length), + new ColumnHeader("romlex.CODE_SIZE", 4, length), new ColumnHeader("romlex.COMMIT_TO_STATE", 1, length), - new ColumnHeader("romlex.DEPLOYMENT_NUMBER", 4, length), + new ColumnHeader("romlex.DEPLOYMENT_NUMBER", 2, length), new ColumnHeader("romlex.DEPLOYMENT_STATUS", 1, length), new ColumnHeader("romlex.READ_FROM_STATE", 1, length)); } @@ -61,11 +65,13 @@ public Trace(List buffers) { this.addressLo = buffers.get(1); this.codeFragmentIndex = buffers.get(2); this.codeFragmentIndexInfty = buffers.get(3); - this.codeSize = buffers.get(4); - this.commitToState = buffers.get(5); - this.deploymentNumber = buffers.get(6); - this.deploymentStatus = buffers.get(7); - this.readFromState = buffers.get(8); + this.codeHashHi = buffers.get(4); + this.codeHashLo = buffers.get(5); + this.codeSize = buffers.get(6); + this.commitToState = buffers.get(7); + this.deploymentNumber = buffers.get(8); + this.deploymentStatus = buffers.get(9); + this.readFromState = buffers.get(10); } public int size() { @@ -83,7 +89,13 @@ public Trace addressHi(final long b) { filled.set(0); } - addressHi.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("addressHi has invalid value (" + b + ")"); + } + addressHi.put((byte) (b >> 24)); + addressHi.put((byte) (b >> 16)); + addressHi.put((byte) (b >> 8)); + addressHi.put((byte) b); return this; } @@ -95,11 +107,21 @@ public Trace addressLo(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "addressLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { addressLo.put((byte) 0); } - addressLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + addressLo.put(bs.get(j)); + } return this; } @@ -111,7 +133,13 @@ public Trace codeFragmentIndex(final long b) { filled.set(2); } - codeFragmentIndex.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("codeFragmentIndex has invalid value (" + b + ")"); + } + codeFragmentIndex.put((byte) (b >> 24)); + codeFragmentIndex.put((byte) (b >> 16)); + codeFragmentIndex.put((byte) (b >> 8)); + codeFragmentIndex.put((byte) b); return this; } @@ -123,64 +151,132 @@ public Trace codeFragmentIndexInfty(final long b) { filled.set(3); } - codeFragmentIndexInfty.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("codeFragmentIndexInfty has invalid value (" + b + ")"); + } + codeFragmentIndexInfty.put((byte) (b >> 24)); + codeFragmentIndexInfty.put((byte) (b >> 16)); + codeFragmentIndexInfty.put((byte) (b >> 8)); + codeFragmentIndexInfty.put((byte) b); return this; } - public Trace codeSize(final long b) { + public Trace codeHashHi(final Bytes b) { if (filled.get(4)) { - throw new IllegalStateException("romlex.CODE_SIZE already set"); + throw new IllegalStateException("romlex.CODE_HASH_HI already set"); } else { filled.set(4); } - codeSize.putLong(b); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "codeHashHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + codeHashHi.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + codeHashHi.put(bs.get(j)); + } return this; } - public Trace commitToState(final Boolean b) { + public Trace codeHashLo(final Bytes b) { if (filled.get(5)) { - throw new IllegalStateException("romlex.COMMIT_TO_STATE already set"); + throw new IllegalStateException("romlex.CODE_HASH_LO already set"); } else { filled.set(5); } - commitToState.put((byte) (b ? 1 : 0)); + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "codeHashLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + codeHashLo.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + codeHashLo.put(bs.get(j)); + } return this; } - public Trace deploymentNumber(final int b) { + public Trace codeSize(final long b) { if (filled.get(6)) { - throw new IllegalStateException("romlex.DEPLOYMENT_NUMBER already set"); + throw new IllegalStateException("romlex.CODE_SIZE already set"); } else { filled.set(6); } - deploymentNumber.putInt(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("codeSize has invalid value (" + b + ")"); + } + codeSize.put((byte) (b >> 24)); + codeSize.put((byte) (b >> 16)); + codeSize.put((byte) (b >> 8)); + codeSize.put((byte) b); return this; } - public Trace deploymentStatus(final Boolean b) { + public Trace commitToState(final Boolean b) { if (filled.get(7)) { - throw new IllegalStateException("romlex.DEPLOYMENT_STATUS already set"); + throw new IllegalStateException("romlex.COMMIT_TO_STATE already set"); } else { filled.set(7); } + commitToState.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace deploymentNumber(final long b) { + if (filled.get(8)) { + throw new IllegalStateException("romlex.DEPLOYMENT_NUMBER already set"); + } else { + filled.set(8); + } + + if (b >= 65536L) { + throw new IllegalArgumentException("deploymentNumber has invalid value (" + b + ")"); + } + deploymentNumber.put((byte) (b >> 8)); + deploymentNumber.put((byte) b); + + return this; + } + + public Trace deploymentStatus(final Boolean b) { + if (filled.get(9)) { + throw new IllegalStateException("romlex.DEPLOYMENT_STATUS already set"); + } else { + filled.set(9); + } + deploymentStatus.put((byte) (b ? 1 : 0)); return this; } public Trace readFromState(final Boolean b) { - if (filled.get(8)) { + if (filled.get(10)) { throw new IllegalStateException("romlex.READ_FROM_STATE already set"); } else { - filled.set(8); + filled.set(10); } readFromState.put((byte) (b ? 1 : 0)); @@ -206,22 +302,30 @@ public Trace validateRow() { } if (!filled.get(4)) { - throw new IllegalStateException("romlex.CODE_SIZE has not been filled"); + throw new IllegalStateException("romlex.CODE_HASH_HI has not been filled"); } if (!filled.get(5)) { - throw new IllegalStateException("romlex.COMMIT_TO_STATE has not been filled"); + throw new IllegalStateException("romlex.CODE_HASH_LO has not been filled"); } if (!filled.get(6)) { - throw new IllegalStateException("romlex.DEPLOYMENT_NUMBER has not been filled"); + throw new IllegalStateException("romlex.CODE_SIZE has not been filled"); } if (!filled.get(7)) { - throw new IllegalStateException("romlex.DEPLOYMENT_STATUS has not been filled"); + throw new IllegalStateException("romlex.COMMIT_TO_STATE has not been filled"); } if (!filled.get(8)) { + throw new IllegalStateException("romlex.DEPLOYMENT_NUMBER has not been filled"); + } + + if (!filled.get(9)) { + throw new IllegalStateException("romlex.DEPLOYMENT_STATUS has not been filled"); + } + + if (!filled.get(10)) { throw new IllegalStateException("romlex.READ_FROM_STATE has not been filled"); } @@ -233,38 +337,46 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - addressHi.position(addressHi.position() + 8); + addressHi.position(addressHi.position() + 4); } if (!filled.get(1)) { - addressLo.position(addressLo.position() + 32); + addressLo.position(addressLo.position() + 16); } if (!filled.get(2)) { - codeFragmentIndex.position(codeFragmentIndex.position() + 8); + codeFragmentIndex.position(codeFragmentIndex.position() + 4); } if (!filled.get(3)) { - codeFragmentIndexInfty.position(codeFragmentIndexInfty.position() + 8); + codeFragmentIndexInfty.position(codeFragmentIndexInfty.position() + 4); } if (!filled.get(4)) { - codeSize.position(codeSize.position() + 8); + codeHashHi.position(codeHashHi.position() + 16); } if (!filled.get(5)) { - commitToState.position(commitToState.position() + 1); + codeHashLo.position(codeHashLo.position() + 16); } if (!filled.get(6)) { - deploymentNumber.position(deploymentNumber.position() + 4); + codeSize.position(codeSize.position() + 4); } if (!filled.get(7)) { - deploymentStatus.position(deploymentStatus.position() + 1); + commitToState.position(commitToState.position() + 1); } if (!filled.get(8)) { + deploymentNumber.position(deploymentNumber.position() + 2); + } + + if (!filled.get(9)) { + deploymentStatus.position(deploymentStatus.position() + 1); + } + + if (!filled.get(10)) { readFromState.position(readFromState.position() + 1); } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraData.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraData.java new file mode 100644 index 0000000000..03f62ce17a --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraData.java @@ -0,0 +1,112 @@ +/* + * Copyright ConsenSys Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.shakiradata; + +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.LLARGE; + +import java.nio.MappedByteBuffer; +import java.util.ArrayList; +import java.util.List; + +import lombok.RequiredArgsConstructor; +import net.consensys.linea.zktracer.ColumnHeader; +import net.consensys.linea.zktracer.container.stacked.set.StackedSet; +import net.consensys.linea.zktracer.module.Module; +import net.consensys.linea.zktracer.module.wcp.Wcp; +import org.apache.tuweni.bytes.Bytes; +import org.hyperledger.besu.datatypes.Transaction; +import org.hyperledger.besu.evm.log.Log; +import org.hyperledger.besu.evm.worldstate.WorldView; + +@RequiredArgsConstructor +public class ShakiraData implements Module { + private final Wcp wcp; + private final StackedSet operations = new StackedSet<>(); + private final List sortedOperations = new ArrayList<>(); + private int numberOfOperationsAtStartTx = 0; + private final ShakiraDataComparator comparator = new ShakiraDataComparator(); + + @Override + public String moduleKey() { + return "SHAKIRA_DATA"; + } + + @Override + public void enterTransaction() { + this.operations.enter(); + } + + @Override + public void popTransaction() { + this.sortedOperations.removeAll(this.operations.sets.getLast()); + this.operations.pop(); + } + + @Override + public int lineCount() { + return this.operations.lineCount() + + 1; /*because the lookup HUB -> SHAKIRA requires at least two padding rows. TODO: should be done by Corset */ + } + + @Override + public List columnsHeaders() { + return Trace.headers(this.lineCount()); + } + + public void call(final ShakiraDataOperation operation) { + this.operations.add(operation); + this.wcp.callGT(operation.lastNBytes(), 0); + this.wcp.callLEQ(operation.lastNBytes(), LLARGE); + } + + @Override + public void traceStartTx(WorldView worldView, Transaction tx) { + this.numberOfOperationsAtStartTx = operations.size(); + } + + @Override + public void traceEndTx( + WorldView worldView, + Transaction tx, + boolean isSuccessful, + Bytes output, + List logs, + long gasUsed) { + final List newOperations = + new ArrayList<>(this.operations.sets.getLast()); + newOperations.sort(comparator); + this.sortedOperations.addAll(newOperations); + final int numberOfOperationsAtEndTx = sortedOperations.size(); + for (int i = numberOfOperationsAtStartTx; i < numberOfOperationsAtEndTx; i++) { + final long previousID = i == 0 ? 0 : sortedOperations.get(i - 1).ID(); + this.wcp.callLT(previousID, sortedOperations.get(i).ID()); + } + } + + @Override + public void commit(List buffers) { + final Trace trace = new Trace(buffers); + + /* WARN: do not remove, the lookup HUB -> SHAKIRA requires at least two padding rows. TODO: should be done by Corset*/ + trace.fillAndValidateRow(); + + int stamp = 0; + for (ShakiraDataOperation operation : sortedOperations) { + stamp++; + operation.trace(trace, stamp); + } + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraDataComparator.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraDataComparator.java new file mode 100644 index 0000000000..5a515185b9 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraDataComparator.java @@ -0,0 +1,25 @@ +/* + * Copyright ConsenSys Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.shakiradata; + +import java.util.Comparator; + +class ShakiraDataComparator implements Comparator { + @Override + public int compare(ShakiraDataOperation o1, ShakiraDataOperation o2) { + return (int) (o1.ID() - o2.ID()); + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraDataOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraDataOperation.java new file mode 100644 index 0000000000..6426bec648 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraDataOperation.java @@ -0,0 +1,167 @@ +/* + * Copyright ConsenSys Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.shakiradata; + +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.LLARGE; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.LLARGEMO; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_KECCAK_DATA; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_KECCAK_RESULT; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_RIPEMD_DATA; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_RIPEMD_RESULT; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_SHA2_DATA; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.PHASE_SHA2_RESULT; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.WORD_SIZE; +import static net.consensys.linea.zktracer.module.shakiradata.ShakiraPrecompileType.KECCAK; +import static net.consensys.linea.zktracer.module.shakiradata.ShakiraPrecompileType.RIPEMD; +import static net.consensys.linea.zktracer.module.shakiradata.ShakiraPrecompileType.SHA256; +import static net.consensys.linea.zktracer.module.shakiradata.Trace.INDEX_MAX_RESULT; +import static net.consensys.linea.zktracer.types.Utils.rightPadTo; + +import lombok.Getter; +import lombok.experimental.Accessors; +import net.consensys.linea.zktracer.container.ModuleOperation; +import net.consensys.linea.zktracer.types.UnsignedByte; +import org.apache.tuweni.bytes.Bytes; +import org.apache.tuweni.bytes.Bytes32; +import org.hyperledger.besu.crypto.Hash; + +@Accessors(fluent = true) +public class ShakiraDataOperation extends ModuleOperation { + + private final ShakiraPrecompileType precompileType; + private final Bytes hashInput; + @Getter private final long ID; + private final int inputSize; + @Getter private final short lastNBytes; + private final int indexMaxData; + private Bytes32 result; + + public ShakiraDataOperation( + final long hubStamp, final ShakiraPrecompileType precompileType, final Bytes hashInput) { + this.precompileType = precompileType; + this.ID = hubStamp + 1; + this.hashInput = hashInput; + this.inputSize = hashInput.size(); + this.lastNBytes = (short) (inputSize % LLARGE == 0 ? LLARGE : inputSize % LLARGE); + // this.indexMaxData = Math.ceilDiv(inputSize, LLARGE) - 1; + this.indexMaxData = (inputSize + LLARGEMO) / LLARGE - 1; + } + + @Override + protected int computeLineCount() { + return indexMaxData + 1 + INDEX_MAX_RESULT + 1; + } + + void trace(Trace trace, final int stamp) { + + this.result = Bytes32.leftPad(this.computeResult()); + traceData(trace, stamp); + traceResult(trace, stamp); + } + + private void traceData(Trace trace, final int stamp) { + final boolean isShaData = precompileType == SHA256; + final boolean isKecData = precompileType == KECCAK; + final boolean isRipData = precompileType == RIPEMD; + final UnsignedByte phase = + switch (precompileType) { + case SHA256 -> UnsignedByte.of(PHASE_SHA2_DATA); + case KECCAK -> UnsignedByte.of(PHASE_KECCAK_DATA); + case RIPEMD -> UnsignedByte.of(PHASE_RIPEMD_DATA); + }; + + for (int ct = 0; ct <= indexMaxData; ct++) { + final boolean lastDataRow = ct == indexMaxData; + trace + .ripshaStamp(stamp) + .id(ID) + .phase(phase) + .index(ct) + .indexMax(indexMaxData) + .limb( + lastDataRow + ? rightPadTo(hashInput.slice(ct * LLARGE), LLARGE) + : hashInput.slice(ct * LLARGE, LLARGE)) + .nBytes(lastDataRow ? lastNBytes : LLARGE) + .nBytesAcc(lastDataRow ? inputSize : (long) LLARGE * (ct + 1)) + .totalSize(inputSize) + .isSha2Data(isShaData) + .isKeccakData(isKecData) + .isRipemdData(isRipData) + .isSha2Result(false) + .isKeccakResult(false) + .isRipemdResult(false) + .selectorKeccakResHi(false) + .selectorSha2ResHi(false) + .selectorRipemdResHi(false) + .validateRow(); + } + } + + private void traceResult(Trace trace, final int stamp) { + final boolean isShaResult = precompileType == SHA256; + final boolean isKecResult = precompileType == KECCAK; + final boolean isRipResult = precompileType == RIPEMD; + final UnsignedByte phase = + switch (precompileType) { + case SHA256 -> UnsignedByte.of(PHASE_SHA2_RESULT); + case KECCAK -> UnsignedByte.of(PHASE_KECCAK_RESULT); + case RIPEMD -> UnsignedByte.of(PHASE_RIPEMD_RESULT); + }; + + for (int ct = 0; ct <= INDEX_MAX_RESULT; ct++) { + trace + .ripshaStamp(stamp) + .id(ID) + .phase(phase) + .index(ct) + .indexMax(INDEX_MAX_RESULT) + .isSha2Data(false) + .isKeccakData(false) + .isRipemdData(false) + .isSha2Result(isShaResult) + .isKeccakResult(isKecResult) + .isRipemdResult(isRipResult) + .nBytes((short) LLARGE) + .totalSize(WORD_SIZE); + + switch (ct) { + case 0 -> trace + .limb(result.slice(0, LLARGE)) + .nBytesAcc(LLARGE) + .selectorKeccakResHi(precompileType == KECCAK) + .selectorSha2ResHi(precompileType == SHA256) + .selectorRipemdResHi(precompileType == RIPEMD) + .validateRow(); + case 1 -> trace + .limb(result.slice(LLARGE, LLARGE)) + .nBytesAcc(WORD_SIZE) + .selectorKeccakResHi(false) + .selectorSha2ResHi(false) + .selectorRipemdResHi(false) + .validateRow(); + } + } + } + + private Bytes computeResult() { + return switch (precompileType) { + case SHA256 -> Hash.sha256(hashInput); + case KECCAK -> Hash.keccak256(hashInput); + case RIPEMD -> Hash.ripemd160(hashInput); + }; + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/PhaseInfo.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraPrecompileType.java similarity index 83% rename from arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/PhaseInfo.java rename to arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraPrecompileType.java index c6a0be0c7b..a9502c06b3 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/blake2fmodexpdata/PhaseInfo.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/ShakiraPrecompileType.java @@ -13,6 +13,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package net.consensys.linea.zktracer.module.blake2fmodexpdata; +package net.consensys.linea.zktracer.module.shakiradata; -record PhaseInfo(int id, int indexMax) {} +public enum ShakiraPrecompileType { + SHA256, + KECCAK, + RIPEMD +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/Trace.java new file mode 100644 index 0000000000..a9f354a822 --- /dev/null +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shakiradata/Trace.java @@ -0,0 +1,539 @@ +/* + * Copyright ConsenSys Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.shakiradata; + +import java.nio.MappedByteBuffer; +import java.util.BitSet; +import java.util.List; + +import net.consensys.linea.zktracer.ColumnHeader; +import net.consensys.linea.zktracer.types.UnsignedByte; +import org.apache.tuweni.bytes.Bytes; + +/** + * WARNING: This code is generated automatically. + * + *

Any modifications to this code may be overwritten and could lead to unexpected behavior. + * Please DO NOT ATTEMPT TO MODIFY this code directly. + */ +public class Trace { + public static final int INDEX_MAX_RESULT = 0x1; + + private final BitSet filled = new BitSet(); + private int currentLine = 0; + + private final MappedByteBuffer id; + private final MappedByteBuffer index; + private final MappedByteBuffer indexMax; + private final MappedByteBuffer isKeccakData; + private final MappedByteBuffer isKeccakResult; + private final MappedByteBuffer isRipemdData; + private final MappedByteBuffer isRipemdResult; + private final MappedByteBuffer isSha2Data; + private final MappedByteBuffer isSha2Result; + private final MappedByteBuffer limb; + private final MappedByteBuffer nBytes; + private final MappedByteBuffer nBytesAcc; + private final MappedByteBuffer phase; + private final MappedByteBuffer ripshaStamp; + private final MappedByteBuffer selectorKeccakResHi; + private final MappedByteBuffer selectorRipemdResHi; + private final MappedByteBuffer selectorSha2ResHi; + private final MappedByteBuffer totalSize; + + static List headers(int length) { + return List.of( + new ColumnHeader("shakiradata.ID", 4, length), + new ColumnHeader("shakiradata.INDEX", 4, length), + new ColumnHeader("shakiradata.INDEX_MAX", 4, length), + new ColumnHeader("shakiradata.IS_KECCAK_DATA", 1, length), + new ColumnHeader("shakiradata.IS_KECCAK_RESULT", 1, length), + new ColumnHeader("shakiradata.IS_RIPEMD_DATA", 1, length), + new ColumnHeader("shakiradata.IS_RIPEMD_RESULT", 1, length), + new ColumnHeader("shakiradata.IS_SHA2_DATA", 1, length), + new ColumnHeader("shakiradata.IS_SHA2_RESULT", 1, length), + new ColumnHeader("shakiradata.LIMB", 16, length), + new ColumnHeader("shakiradata.nBYTES", 1, length), + new ColumnHeader("shakiradata.nBYTES_ACC", 4, length), + new ColumnHeader("shakiradata.PHASE", 1, length), + new ColumnHeader("shakiradata.RIPSHA_STAMP", 4, length), + new ColumnHeader("shakiradata.SELECTOR_KECCAK_RES_HI", 1, length), + new ColumnHeader("shakiradata.SELECTOR_RIPEMD_RES_HI", 1, length), + new ColumnHeader("shakiradata.SELECTOR_SHA2_RES_HI", 1, length), + new ColumnHeader("shakiradata.TOTAL_SIZE", 4, length)); + } + + public Trace(List buffers) { + this.id = buffers.get(0); + this.index = buffers.get(1); + this.indexMax = buffers.get(2); + this.isKeccakData = buffers.get(3); + this.isKeccakResult = buffers.get(4); + this.isRipemdData = buffers.get(5); + this.isRipemdResult = buffers.get(6); + this.isSha2Data = buffers.get(7); + this.isSha2Result = buffers.get(8); + this.limb = buffers.get(9); + this.nBytes = buffers.get(10); + this.nBytesAcc = buffers.get(11); + this.phase = buffers.get(12); + this.ripshaStamp = buffers.get(13); + this.selectorKeccakResHi = buffers.get(14); + this.selectorRipemdResHi = buffers.get(15); + this.selectorSha2ResHi = buffers.get(16); + this.totalSize = buffers.get(17); + } + + public int size() { + if (!filled.isEmpty()) { + throw new RuntimeException("Cannot measure a trace with a non-validated row."); + } + + return this.currentLine; + } + + public Trace id(final long b) { + if (filled.get(0)) { + throw new IllegalStateException("shakiradata.ID already set"); + } else { + filled.set(0); + } + + if (b >= 4294967296L) { + throw new IllegalArgumentException("id has invalid value (" + b + ")"); + } + id.put((byte) (b >> 24)); + id.put((byte) (b >> 16)); + id.put((byte) (b >> 8)); + id.put((byte) b); + + return this; + } + + public Trace index(final long b) { + if (filled.get(1)) { + throw new IllegalStateException("shakiradata.INDEX already set"); + } else { + filled.set(1); + } + + if (b >= 4294967296L) { + throw new IllegalArgumentException("index has invalid value (" + b + ")"); + } + index.put((byte) (b >> 24)); + index.put((byte) (b >> 16)); + index.put((byte) (b >> 8)); + index.put((byte) b); + + return this; + } + + public Trace indexMax(final long b) { + if (filled.get(2)) { + throw new IllegalStateException("shakiradata.INDEX_MAX already set"); + } else { + filled.set(2); + } + + if (b >= 4294967296L) { + throw new IllegalArgumentException("indexMax has invalid value (" + b + ")"); + } + indexMax.put((byte) (b >> 24)); + indexMax.put((byte) (b >> 16)); + indexMax.put((byte) (b >> 8)); + indexMax.put((byte) b); + + return this; + } + + public Trace isKeccakData(final Boolean b) { + if (filled.get(3)) { + throw new IllegalStateException("shakiradata.IS_KECCAK_DATA already set"); + } else { + filled.set(3); + } + + isKeccakData.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace isKeccakResult(final Boolean b) { + if (filled.get(4)) { + throw new IllegalStateException("shakiradata.IS_KECCAK_RESULT already set"); + } else { + filled.set(4); + } + + isKeccakResult.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace isRipemdData(final Boolean b) { + if (filled.get(5)) { + throw new IllegalStateException("shakiradata.IS_RIPEMD_DATA already set"); + } else { + filled.set(5); + } + + isRipemdData.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace isRipemdResult(final Boolean b) { + if (filled.get(6)) { + throw new IllegalStateException("shakiradata.IS_RIPEMD_RESULT already set"); + } else { + filled.set(6); + } + + isRipemdResult.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace isSha2Data(final Boolean b) { + if (filled.get(7)) { + throw new IllegalStateException("shakiradata.IS_SHA2_DATA already set"); + } else { + filled.set(7); + } + + isSha2Data.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace isSha2Result(final Boolean b) { + if (filled.get(8)) { + throw new IllegalStateException("shakiradata.IS_SHA2_RESULT already set"); + } else { + filled.set(8); + } + + isSha2Result.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace limb(final Bytes b) { + if (filled.get(9)) { + throw new IllegalStateException("shakiradata.LIMB already set"); + } else { + filled.set(9); + } + + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("limb has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { + limb.put((byte) 0); + } + // Write bytes + for (int j = 0; j < bs.size(); j++) { + limb.put(bs.get(j)); + } + + return this; + } + + public Trace nBytes(final long b) { + if (filled.get(16)) { + throw new IllegalStateException("shakiradata.nBYTES already set"); + } else { + filled.set(16); + } + + if (b >= 256L) { + throw new IllegalArgumentException("nBytes has invalid value (" + b + ")"); + } + nBytes.put((byte) b); + + return this; + } + + public Trace nBytesAcc(final long b) { + if (filled.get(17)) { + throw new IllegalStateException("shakiradata.nBYTES_ACC already set"); + } else { + filled.set(17); + } + + if (b >= 4294967296L) { + throw new IllegalArgumentException("nBytesAcc has invalid value (" + b + ")"); + } + nBytesAcc.put((byte) (b >> 24)); + nBytesAcc.put((byte) (b >> 16)); + nBytesAcc.put((byte) (b >> 8)); + nBytesAcc.put((byte) b); + + return this; + } + + public Trace phase(final UnsignedByte b) { + if (filled.get(10)) { + throw new IllegalStateException("shakiradata.PHASE already set"); + } else { + filled.set(10); + } + + phase.put(b.toByte()); + + return this; + } + + public Trace ripshaStamp(final long b) { + if (filled.get(11)) { + throw new IllegalStateException("shakiradata.RIPSHA_STAMP already set"); + } else { + filled.set(11); + } + + if (b >= 4294967296L) { + throw new IllegalArgumentException("ripshaStamp has invalid value (" + b + ")"); + } + ripshaStamp.put((byte) (b >> 24)); + ripshaStamp.put((byte) (b >> 16)); + ripshaStamp.put((byte) (b >> 8)); + ripshaStamp.put((byte) b); + + return this; + } + + public Trace selectorKeccakResHi(final Boolean b) { + if (filled.get(12)) { + throw new IllegalStateException("shakiradata.SELECTOR_KECCAK_RES_HI already set"); + } else { + filled.set(12); + } + + selectorKeccakResHi.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace selectorRipemdResHi(final Boolean b) { + if (filled.get(13)) { + throw new IllegalStateException("shakiradata.SELECTOR_RIPEMD_RES_HI already set"); + } else { + filled.set(13); + } + + selectorRipemdResHi.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace selectorSha2ResHi(final Boolean b) { + if (filled.get(14)) { + throw new IllegalStateException("shakiradata.SELECTOR_SHA2_RES_HI already set"); + } else { + filled.set(14); + } + + selectorSha2ResHi.put((byte) (b ? 1 : 0)); + + return this; + } + + public Trace totalSize(final long b) { + if (filled.get(15)) { + throw new IllegalStateException("shakiradata.TOTAL_SIZE already set"); + } else { + filled.set(15); + } + + if (b >= 4294967296L) { + throw new IllegalArgumentException("totalSize has invalid value (" + b + ")"); + } + totalSize.put((byte) (b >> 24)); + totalSize.put((byte) (b >> 16)); + totalSize.put((byte) (b >> 8)); + totalSize.put((byte) b); + + return this; + } + + public Trace validateRow() { + if (!filled.get(0)) { + throw new IllegalStateException("shakiradata.ID has not been filled"); + } + + if (!filled.get(1)) { + throw new IllegalStateException("shakiradata.INDEX has not been filled"); + } + + if (!filled.get(2)) { + throw new IllegalStateException("shakiradata.INDEX_MAX has not been filled"); + } + + if (!filled.get(3)) { + throw new IllegalStateException("shakiradata.IS_KECCAK_DATA has not been filled"); + } + + if (!filled.get(4)) { + throw new IllegalStateException("shakiradata.IS_KECCAK_RESULT has not been filled"); + } + + if (!filled.get(5)) { + throw new IllegalStateException("shakiradata.IS_RIPEMD_DATA has not been filled"); + } + + if (!filled.get(6)) { + throw new IllegalStateException("shakiradata.IS_RIPEMD_RESULT has not been filled"); + } + + if (!filled.get(7)) { + throw new IllegalStateException("shakiradata.IS_SHA2_DATA has not been filled"); + } + + if (!filled.get(8)) { + throw new IllegalStateException("shakiradata.IS_SHA2_RESULT has not been filled"); + } + + if (!filled.get(9)) { + throw new IllegalStateException("shakiradata.LIMB has not been filled"); + } + + if (!filled.get(16)) { + throw new IllegalStateException("shakiradata.nBYTES has not been filled"); + } + + if (!filled.get(17)) { + throw new IllegalStateException("shakiradata.nBYTES_ACC has not been filled"); + } + + if (!filled.get(10)) { + throw new IllegalStateException("shakiradata.PHASE has not been filled"); + } + + if (!filled.get(11)) { + throw new IllegalStateException("shakiradata.RIPSHA_STAMP has not been filled"); + } + + if (!filled.get(12)) { + throw new IllegalStateException("shakiradata.SELECTOR_KECCAK_RES_HI has not been filled"); + } + + if (!filled.get(13)) { + throw new IllegalStateException("shakiradata.SELECTOR_RIPEMD_RES_HI has not been filled"); + } + + if (!filled.get(14)) { + throw new IllegalStateException("shakiradata.SELECTOR_SHA2_RES_HI has not been filled"); + } + + if (!filled.get(15)) { + throw new IllegalStateException("shakiradata.TOTAL_SIZE has not been filled"); + } + + filled.clear(); + this.currentLine++; + + return this; + } + + public Trace fillAndValidateRow() { + if (!filled.get(0)) { + id.position(id.position() + 4); + } + + if (!filled.get(1)) { + index.position(index.position() + 4); + } + + if (!filled.get(2)) { + indexMax.position(indexMax.position() + 4); + } + + if (!filled.get(3)) { + isKeccakData.position(isKeccakData.position() + 1); + } + + if (!filled.get(4)) { + isKeccakResult.position(isKeccakResult.position() + 1); + } + + if (!filled.get(5)) { + isRipemdData.position(isRipemdData.position() + 1); + } + + if (!filled.get(6)) { + isRipemdResult.position(isRipemdResult.position() + 1); + } + + if (!filled.get(7)) { + isSha2Data.position(isSha2Data.position() + 1); + } + + if (!filled.get(8)) { + isSha2Result.position(isSha2Result.position() + 1); + } + + if (!filled.get(9)) { + limb.position(limb.position() + 16); + } + + if (!filled.get(16)) { + nBytes.position(nBytes.position() + 1); + } + + if (!filled.get(17)) { + nBytesAcc.position(nBytesAcc.position() + 4); + } + + if (!filled.get(10)) { + phase.position(phase.position() + 1); + } + + if (!filled.get(11)) { + ripshaStamp.position(ripshaStamp.position() + 4); + } + + if (!filled.get(12)) { + selectorKeccakResHi.position(selectorKeccakResHi.position() + 1); + } + + if (!filled.get(13)) { + selectorRipemdResHi.position(selectorRipemdResHi.position() + 1); + } + + if (!filled.get(14)) { + selectorSha2ResHi.position(selectorSha2ResHi.position() + 1); + } + + if (!filled.get(15)) { + totalSize.position(totalSize.position() + 4); + } + + filled.clear(); + this.currentLine++; + + return this; + } + + public void build() { + if (!filled.isEmpty()) { + throw new IllegalStateException("Cannot build trace with a non-validated row."); + } + } +} diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shf/Res.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shf/Res.java index 478b95a036..9a5be69b75 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shf/Res.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shf/Res.java @@ -28,7 +28,6 @@ public class Res { public static Res create(final OpCode opCode, final Bytes32 arg1, final Bytes32 arg2) { final Bytes32 result = Shifter.shift(opCode, arg2, shiftBy(arg1)); - return new Res(Bytes16.wrap(result.slice(0, 16)), Bytes16.wrap(result.slice(16))); } @@ -38,6 +37,7 @@ private static int shiftBy(final Bytes32 arg) { private static boolean allButLastByteZero(final Bytes32 bytes) { for (int i = 0; i < 31; i++) { + // careful: bytes are signed if (bytes.get(i) != 0) { return false; } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shf/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shf/Trace.java index 1129b3c51c..1e340e42d3 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shf/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/shf/Trace.java @@ -88,15 +88,15 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("shf.ACC_1", 32, length), - new ColumnHeader("shf.ACC_2", 32, length), - new ColumnHeader("shf.ACC_3", 32, length), - new ColumnHeader("shf.ACC_4", 32, length), - new ColumnHeader("shf.ACC_5", 32, length), - new ColumnHeader("shf.ARG_1_HI", 32, length), - new ColumnHeader("shf.ARG_1_LO", 32, length), - new ColumnHeader("shf.ARG_2_HI", 32, length), - new ColumnHeader("shf.ARG_2_LO", 32, length), + new ColumnHeader("shf.ACC_1", 16, length), + new ColumnHeader("shf.ACC_2", 16, length), + new ColumnHeader("shf.ACC_3", 16, length), + new ColumnHeader("shf.ACC_4", 16, length), + new ColumnHeader("shf.ACC_5", 16, length), + new ColumnHeader("shf.ARG_1_HI", 16, length), + new ColumnHeader("shf.ARG_1_LO", 16, length), + new ColumnHeader("shf.ARG_2_HI", 16, length), + new ColumnHeader("shf.ARG_2_LO", 16, length), new ColumnHeader("shf.BIT_1", 1, length), new ColumnHeader("shf.BIT_2", 1, length), new ColumnHeader("shf.BIT_3", 1, length), @@ -112,33 +112,33 @@ static List headers(int length) { new ColumnHeader("shf.BYTE_3", 1, length), new ColumnHeader("shf.BYTE_4", 1, length), new ColumnHeader("shf.BYTE_5", 1, length), - new ColumnHeader("shf.COUNTER", 2, length), + new ColumnHeader("shf.COUNTER", 1, length), new ColumnHeader("shf.INST", 1, length), new ColumnHeader("shf.IOMF", 1, length), new ColumnHeader("shf.KNOWN", 1, length), new ColumnHeader("shf.LEFT_ALIGNED_SUFFIX_HIGH", 1, length), new ColumnHeader("shf.LEFT_ALIGNED_SUFFIX_LOW", 1, length), - new ColumnHeader("shf.LOW_3", 32, length), - new ColumnHeader("shf.MICRO_SHIFT_PARAMETER", 2, length), + new ColumnHeader("shf.LOW_3", 16, length), + new ColumnHeader("shf.MICRO_SHIFT_PARAMETER", 1, length), new ColumnHeader("shf.NEG", 1, length), new ColumnHeader("shf.ONE_LINE_INSTRUCTION", 1, length), new ColumnHeader("shf.ONES", 1, length), - new ColumnHeader("shf.RES_HI", 32, length), - new ColumnHeader("shf.RES_LO", 32, length), + new ColumnHeader("shf.RES_HI", 16, length), + new ColumnHeader("shf.RES_LO", 16, length), new ColumnHeader("shf.RIGHT_ALIGNED_PREFIX_HIGH", 1, length), new ColumnHeader("shf.RIGHT_ALIGNED_PREFIX_LOW", 1, length), - new ColumnHeader("shf.SHB_3_HI", 32, length), - new ColumnHeader("shf.SHB_3_LO", 32, length), - new ColumnHeader("shf.SHB_4_HI", 32, length), - new ColumnHeader("shf.SHB_4_LO", 32, length), - new ColumnHeader("shf.SHB_5_HI", 32, length), - new ColumnHeader("shf.SHB_5_LO", 32, length), - new ColumnHeader("shf.SHB_6_HI", 32, length), - new ColumnHeader("shf.SHB_6_LO", 32, length), - new ColumnHeader("shf.SHB_7_HI", 32, length), - new ColumnHeader("shf.SHB_7_LO", 32, length), + new ColumnHeader("shf.SHB_3_HI", 16, length), + new ColumnHeader("shf.SHB_3_LO", 16, length), + new ColumnHeader("shf.SHB_4_HI", 16, length), + new ColumnHeader("shf.SHB_4_LO", 16, length), + new ColumnHeader("shf.SHB_5_HI", 16, length), + new ColumnHeader("shf.SHB_5_LO", 16, length), + new ColumnHeader("shf.SHB_6_HI", 16, length), + new ColumnHeader("shf.SHB_6_LO", 16, length), + new ColumnHeader("shf.SHB_7_HI", 16, length), + new ColumnHeader("shf.SHB_7_LO", 16, length), new ColumnHeader("shf.SHIFT_DIRECTION", 1, length), - new ColumnHeader("shf.SHIFT_STAMP", 8, length)); + new ColumnHeader("shf.SHIFT_STAMP", 4, length)); } public Trace(List buffers) { @@ -210,11 +210,20 @@ public Trace acc1(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc1.put((byte) 0); } - acc1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc1.put(bs.get(j)); + } return this; } @@ -226,11 +235,20 @@ public Trace acc2(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc2.put((byte) 0); } - acc2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc2.put(bs.get(j)); + } return this; } @@ -242,11 +260,20 @@ public Trace acc3(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc3.put((byte) 0); } - acc3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc3.put(bs.get(j)); + } return this; } @@ -258,11 +285,20 @@ public Trace acc4(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc4.put((byte) 0); } - acc4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc4.put(bs.get(j)); + } return this; } @@ -274,11 +310,20 @@ public Trace acc5(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc5 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc5.put((byte) 0); } - acc5.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc5.put(bs.get(j)); + } return this; } @@ -290,11 +335,20 @@ public Trace arg1Hi(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg1Hi.put((byte) 0); } - arg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Hi.put(bs.get(j)); + } return this; } @@ -306,11 +360,20 @@ public Trace arg1Lo(final Bytes b) { filled.set(6); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg1Lo.put((byte) 0); } - arg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Lo.put(bs.get(j)); + } return this; } @@ -322,11 +385,20 @@ public Trace arg2Hi(final Bytes b) { filled.set(7); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg2Hi.put((byte) 0); } - arg2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg2Hi.put(bs.get(j)); + } return this; } @@ -338,11 +410,20 @@ public Trace arg2Lo(final Bytes b) { filled.set(8); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg2Lo.put((byte) 0); } - arg2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg2Lo.put(bs.get(j)); + } return this; } @@ -527,14 +608,17 @@ public Trace byte5(final UnsignedByte b) { return this; } - public Trace counter(final short b) { + public Trace counter(final long b) { if (filled.get(24)) { throw new IllegalStateException("shf.COUNTER already set"); } else { filled.set(24); } - counter.putShort(b); + if (b >= 256L) { + throw new IllegalArgumentException("counter has invalid value (" + b + ")"); + } + counter.put((byte) b); return this; } @@ -606,23 +690,35 @@ public Trace low3(final Bytes b) { filled.set(30); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("low3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { low3.put((byte) 0); } - low3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + low3.put(bs.get(j)); + } return this; } - public Trace microShiftParameter(final short b) { + public Trace microShiftParameter(final long b) { if (filled.get(31)) { throw new IllegalStateException("shf.MICRO_SHIFT_PARAMETER already set"); } else { filled.set(31); } - microShiftParameter.putShort(b); + if (b >= 256L) { + throw new IllegalArgumentException("microShiftParameter has invalid value (" + b + ")"); + } + microShiftParameter.put((byte) b); return this; } @@ -670,11 +766,20 @@ public Trace resHi(final Bytes b) { filled.set(35); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resHi.put((byte) 0); } - resHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resHi.put(bs.get(j)); + } return this; } @@ -686,11 +791,20 @@ public Trace resLo(final Bytes b) { filled.set(36); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resLo.put((byte) 0); } - resLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resLo.put(bs.get(j)); + } return this; } @@ -726,11 +840,20 @@ public Trace shb3Hi(final Bytes b) { filled.set(39); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("shb3Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { shb3Hi.put((byte) 0); } - shb3Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + shb3Hi.put(bs.get(j)); + } return this; } @@ -742,11 +865,20 @@ public Trace shb3Lo(final Bytes b) { filled.set(40); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("shb3Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { shb3Lo.put((byte) 0); } - shb3Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + shb3Lo.put(bs.get(j)); + } return this; } @@ -758,11 +890,20 @@ public Trace shb4Hi(final Bytes b) { filled.set(41); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("shb4Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { shb4Hi.put((byte) 0); } - shb4Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + shb4Hi.put(bs.get(j)); + } return this; } @@ -774,11 +915,20 @@ public Trace shb4Lo(final Bytes b) { filled.set(42); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("shb4Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { shb4Lo.put((byte) 0); } - shb4Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + shb4Lo.put(bs.get(j)); + } return this; } @@ -790,11 +940,20 @@ public Trace shb5Hi(final Bytes b) { filled.set(43); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("shb5Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { shb5Hi.put((byte) 0); } - shb5Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + shb5Hi.put(bs.get(j)); + } return this; } @@ -806,11 +965,20 @@ public Trace shb5Lo(final Bytes b) { filled.set(44); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("shb5Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { shb5Lo.put((byte) 0); } - shb5Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + shb5Lo.put(bs.get(j)); + } return this; } @@ -822,11 +990,20 @@ public Trace shb6Hi(final Bytes b) { filled.set(45); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("shb6Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { shb6Hi.put((byte) 0); } - shb6Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + shb6Hi.put(bs.get(j)); + } return this; } @@ -838,11 +1015,20 @@ public Trace shb6Lo(final Bytes b) { filled.set(46); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("shb6Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { shb6Lo.put((byte) 0); } - shb6Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + shb6Lo.put(bs.get(j)); + } return this; } @@ -854,11 +1040,20 @@ public Trace shb7Hi(final Bytes b) { filled.set(47); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("shb7Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { shb7Hi.put((byte) 0); } - shb7Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + shb7Hi.put(bs.get(j)); + } return this; } @@ -870,11 +1065,20 @@ public Trace shb7Lo(final Bytes b) { filled.set(48); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("shb7Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { shb7Lo.put((byte) 0); } - shb7Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + shb7Lo.put(bs.get(j)); + } return this; } @@ -898,7 +1102,13 @@ public Trace shiftStamp(final long b) { filled.set(50); } - shiftStamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("shiftStamp has invalid value (" + b + ")"); + } + shiftStamp.put((byte) (b >> 24)); + shiftStamp.put((byte) (b >> 16)); + shiftStamp.put((byte) (b >> 8)); + shiftStamp.put((byte) b); return this; } @@ -1116,39 +1326,39 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - acc1.position(acc1.position() + 32); + acc1.position(acc1.position() + 16); } if (!filled.get(1)) { - acc2.position(acc2.position() + 32); + acc2.position(acc2.position() + 16); } if (!filled.get(2)) { - acc3.position(acc3.position() + 32); + acc3.position(acc3.position() + 16); } if (!filled.get(3)) { - acc4.position(acc4.position() + 32); + acc4.position(acc4.position() + 16); } if (!filled.get(4)) { - acc5.position(acc5.position() + 32); + acc5.position(acc5.position() + 16); } if (!filled.get(5)) { - arg1Hi.position(arg1Hi.position() + 32); + arg1Hi.position(arg1Hi.position() + 16); } if (!filled.get(6)) { - arg1Lo.position(arg1Lo.position() + 32); + arg1Lo.position(arg1Lo.position() + 16); } if (!filled.get(7)) { - arg2Hi.position(arg2Hi.position() + 32); + arg2Hi.position(arg2Hi.position() + 16); } if (!filled.get(8)) { - arg2Lo.position(arg2Lo.position() + 32); + arg2Lo.position(arg2Lo.position() + 16); } if (!filled.get(10)) { @@ -1212,7 +1422,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(24)) { - counter.position(counter.position() + 2); + counter.position(counter.position() + 1); } if (!filled.get(25)) { @@ -1236,11 +1446,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(30)) { - low3.position(low3.position() + 32); + low3.position(low3.position() + 16); } if (!filled.get(31)) { - microShiftParameter.position(microShiftParameter.position() + 2); + microShiftParameter.position(microShiftParameter.position() + 1); } if (!filled.get(32)) { @@ -1256,11 +1466,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(35)) { - resHi.position(resHi.position() + 32); + resHi.position(resHi.position() + 16); } if (!filled.get(36)) { - resLo.position(resLo.position() + 32); + resLo.position(resLo.position() + 16); } if (!filled.get(37)) { @@ -1272,43 +1482,43 @@ public Trace fillAndValidateRow() { } if (!filled.get(39)) { - shb3Hi.position(shb3Hi.position() + 32); + shb3Hi.position(shb3Hi.position() + 16); } if (!filled.get(40)) { - shb3Lo.position(shb3Lo.position() + 32); + shb3Lo.position(shb3Lo.position() + 16); } if (!filled.get(41)) { - shb4Hi.position(shb4Hi.position() + 32); + shb4Hi.position(shb4Hi.position() + 16); } if (!filled.get(42)) { - shb4Lo.position(shb4Lo.position() + 32); + shb4Lo.position(shb4Lo.position() + 16); } if (!filled.get(43)) { - shb5Hi.position(shb5Hi.position() + 32); + shb5Hi.position(shb5Hi.position() + 16); } if (!filled.get(44)) { - shb5Lo.position(shb5Lo.position() + 32); + shb5Lo.position(shb5Lo.position() + 16); } if (!filled.get(45)) { - shb6Hi.position(shb6Hi.position() + 32); + shb6Hi.position(shb6Hi.position() + 16); } if (!filled.get(46)) { - shb6Lo.position(shb6Lo.position() + 32); + shb6Lo.position(shb6Lo.position() + 16); } if (!filled.get(47)) { - shb7Hi.position(shb7Hi.position() + 32); + shb7Hi.position(shb7Hi.position() + 16); } if (!filled.get(48)) { - shb7Lo.position(shb7Lo.position() + 32); + shb7Lo.position(shb7Lo.position() + 16); } if (!filled.get(49)) { @@ -1316,7 +1526,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(50)) { - shiftStamp.position(shiftStamp.position() + 8); + shiftStamp.position(shiftStamp.position() + 4); } filled.clear(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/stp/Stp.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/stp/Stp.java index 2ba1cee782..26fcde80a4 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/stp/Stp.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/stp/Stp.java @@ -80,7 +80,7 @@ public void tracePreOpcode(final MessageFrame frame) { this.wcp.callLT(longToBytes32(chunk.gasActual()), Bytes32.ZERO); this.wcp.callLT(longToBytes32(chunk.gasActual()), longToBytes32(chunk.gasPrelim())); if (!chunk.oogx()) { - this.mod.callDiv(longToBytes32(chunk.getGDiff()), longToBytes32(64L)); + this.mod.callDIV(longToBytes32(chunk.getGDiff()), longToBytes32(64L)); } } case CALL, CALLCODE, DELEGATECALL, STATICCALL -> { @@ -92,7 +92,7 @@ public void tracePreOpcode(final MessageFrame frame) { } this.wcp.callLT(longToBytes32(chunk.gasActual()), longToBytes32(chunk.gasPrelim())); if (!chunk.oogx()) { - this.mod.callDiv(longToBytes32(chunk.getGDiff()), longToBytes32(64L)); + this.mod.callDIV(longToBytes32(chunk.getGDiff()), longToBytes32(64L)); this.wcp.callLT(chunk.gas().orElseThrow(), longToBytes32(chunk.get63of64GDiff())); } } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/stp/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/stp/Trace.java index c566cb4204..f902e6dfd0 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/stp/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/stp/Trace.java @@ -66,16 +66,16 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("stp.ARG_1_HI", 32, length), - new ColumnHeader("stp.ARG_1_LO", 32, length), - new ColumnHeader("stp.ARG_2_LO", 32, length), + new ColumnHeader("stp.ARG_1_HI", 16, length), + new ColumnHeader("stp.ARG_1_LO", 16, length), + new ColumnHeader("stp.ARG_2_LO", 16, length), new ColumnHeader("stp.CT", 1, length), new ColumnHeader("stp.CT_MAX", 1, length), new ColumnHeader("stp.EXISTS", 1, length), new ColumnHeader("stp.EXOGENOUS_MODULE_INSTRUCTION", 1, length), new ColumnHeader("stp.GAS_ACTUAL", 32, length), - new ColumnHeader("stp.GAS_HI", 32, length), - new ColumnHeader("stp.GAS_LO", 32, length), + new ColumnHeader("stp.GAS_HI", 16, length), + new ColumnHeader("stp.GAS_LO", 16, length), new ColumnHeader("stp.GAS_MXP", 32, length), new ColumnHeader("stp.GAS_OUT_OF_POCKET", 32, length), new ColumnHeader("stp.GAS_STIPEND", 32, length), @@ -89,10 +89,10 @@ static List headers(int length) { new ColumnHeader("stp.IS_STATICCALL", 1, length), new ColumnHeader("stp.MOD_FLAG", 1, length), new ColumnHeader("stp.OUT_OF_GAS_EXCEPTION", 1, length), - new ColumnHeader("stp.RES_LO", 32, length), - new ColumnHeader("stp.STAMP", 4, length), - new ColumnHeader("stp.VAL_HI", 32, length), - new ColumnHeader("stp.VAL_LO", 32, length), + new ColumnHeader("stp.RES_LO", 16, length), + new ColumnHeader("stp.STAMP", 3, length), + new ColumnHeader("stp.VAL_HI", 16, length), + new ColumnHeader("stp.VAL_LO", 16, length), new ColumnHeader("stp.WARM", 1, length), new ColumnHeader("stp.WCP_FLAG", 1, length)); } @@ -144,11 +144,20 @@ public Trace arg1Hi(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg1Hi.put((byte) 0); } - arg1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Hi.put(bs.get(j)); + } return this; } @@ -160,11 +169,20 @@ public Trace arg1Lo(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg1Lo.put((byte) 0); } - arg1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg1Lo.put(bs.get(j)); + } return this; } @@ -176,11 +194,20 @@ public Trace arg2Lo(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("arg2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { arg2Lo.put((byte) 0); } - arg2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + arg2Lo.put(bs.get(j)); + } return this; } @@ -240,11 +267,21 @@ public Trace gasActual(final Bytes b) { filled.set(7); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "gasActual has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { gasActual.put((byte) 0); } - gasActual.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasActual.put(bs.get(j)); + } return this; } @@ -256,11 +293,20 @@ public Trace gasHi(final Bytes b) { filled.set(8); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("gasHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { gasHi.put((byte) 0); } - gasHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasHi.put(bs.get(j)); + } return this; } @@ -272,11 +318,20 @@ public Trace gasLo(final Bytes b) { filled.set(9); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("gasLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { gasLo.put((byte) 0); } - gasLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasLo.put(bs.get(j)); + } return this; } @@ -288,11 +343,20 @@ public Trace gasMxp(final Bytes b) { filled.set(10); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException("gasMxp has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { gasMxp.put((byte) 0); } - gasMxp.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasMxp.put(bs.get(j)); + } return this; } @@ -304,11 +368,21 @@ public Trace gasOutOfPocket(final Bytes b) { filled.set(11); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "gasOutOfPocket has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { gasOutOfPocket.put((byte) 0); } - gasOutOfPocket.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasOutOfPocket.put(bs.get(j)); + } return this; } @@ -320,11 +394,21 @@ public Trace gasStipend(final Bytes b) { filled.set(12); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "gasStipend has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { gasStipend.put((byte) 0); } - gasStipend.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasStipend.put(bs.get(j)); + } return this; } @@ -336,11 +420,21 @@ public Trace gasUpfront(final Bytes b) { filled.set(13); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 256) { + throw new IllegalArgumentException( + "gasUpfront has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 32; i++) { gasUpfront.put((byte) 0); } - gasUpfront.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasUpfront.put(bs.get(j)); + } return this; } @@ -460,23 +554,37 @@ public Trace resLo(final Bytes b) { filled.set(23); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("resLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { resLo.put((byte) 0); } - resLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + resLo.put(bs.get(j)); + } return this; } - public Trace stamp(final int b) { + public Trace stamp(final long b) { if (filled.get(24)) { throw new IllegalStateException("stp.STAMP already set"); } else { filled.set(24); } - stamp.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); return this; } @@ -488,11 +596,20 @@ public Trace valHi(final Bytes b) { filled.set(25); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("valHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { valHi.put((byte) 0); } - valHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + valHi.put(bs.get(j)); + } return this; } @@ -504,11 +621,20 @@ public Trace valLo(final Bytes b) { filled.set(26); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("valLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { valLo.put((byte) 0); } - valLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + valLo.put(bs.get(j)); + } return this; } @@ -662,15 +788,15 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - arg1Hi.position(arg1Hi.position() + 32); + arg1Hi.position(arg1Hi.position() + 16); } if (!filled.get(1)) { - arg1Lo.position(arg1Lo.position() + 32); + arg1Lo.position(arg1Lo.position() + 16); } if (!filled.get(2)) { - arg2Lo.position(arg2Lo.position() + 32); + arg2Lo.position(arg2Lo.position() + 16); } if (!filled.get(3)) { @@ -694,11 +820,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(8)) { - gasHi.position(gasHi.position() + 32); + gasHi.position(gasHi.position() + 16); } if (!filled.get(9)) { - gasLo.position(gasLo.position() + 32); + gasLo.position(gasLo.position() + 16); } if (!filled.get(10)) { @@ -754,19 +880,19 @@ public Trace fillAndValidateRow() { } if (!filled.get(23)) { - resLo.position(resLo.position() + 32); + resLo.position(resLo.position() + 16); } if (!filled.get(24)) { - stamp.position(stamp.position() + 4); + stamp.position(stamp.position() + 3); } if (!filled.get(25)) { - valHi.position(valHi.position() + 32); + valHi.position(valHi.position() + 16); } if (!filled.get(26)) { - valLo.position(valLo.position() + 32); + valLo.position(valLo.position() + 16); } if (!filled.get(27)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/bin/BinRt.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/bin/BinRt.java index fac919769b..78b5469d43 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/bin/BinRt.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/bin/BinRt.java @@ -27,7 +27,7 @@ public class BinRt implements Module { @Override public String moduleKey() { - return "binRT"; + return "BIN_REFERENCE_TABLE"; } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/instructionDecoder/InstructionDecoder.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/instructionDecoder/InstructionDecoder.java index 7e4da41263..e68badd1f4 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/instructionDecoder/InstructionDecoder.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/instructionDecoder/InstructionDecoder.java @@ -141,7 +141,7 @@ private static void traceBillingSettings(OpCodeData op, Trace trace) { @Override public String moduleKey() { - return "instruction-decoder"; + return "INSTRUCTION_DECODER"; } @Override diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/shf/ShfRt.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/shf/ShfRt.java index e4606627b5..8dfc7918a3 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/shf/ShfRt.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/shf/ShfRt.java @@ -26,7 +26,7 @@ public record ShfRt() implements Module { @Override public String moduleKey() { - return "shfRT"; + return "SHF_REFERENCE_TABLE"; } @Override @@ -53,7 +53,7 @@ public void commit(List buffers) { trace .byte1(UnsignedByte.of(a)) .las(unsignedByteA.shiftLeft(8 - uShp)) - .mshp((short) uShp) + .mshp(UnsignedByte.of(uShp)) .rap(unsignedByteA.shiftRight(uShp)) .ones(UnsignedByte.of((Bytes.fromHexString("0xFF").shiftRight(uShp)).not().toInt())) .iomf(true) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/shf/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/shf/Trace.java index a3de92152a..41b3513a03 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/shf/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/tables/shf/Trace.java @@ -45,7 +45,7 @@ static List headers(int length) { new ColumnHeader("shfreftable.BYTE1", 1, length), new ColumnHeader("shfreftable.IOMF", 1, length), new ColumnHeader("shfreftable.LAS", 1, length), - new ColumnHeader("shfreftable.MSHP", 2, length), + new ColumnHeader("shfreftable.MSHP", 1, length), new ColumnHeader("shfreftable.ONES", 1, length), new ColumnHeader("shfreftable.RAP", 1, length)); } @@ -103,14 +103,14 @@ public Trace las(final UnsignedByte b) { return this; } - public Trace mshp(final short b) { + public Trace mshp(final UnsignedByte b) { if (filled.get(3)) { throw new IllegalStateException("shfreftable.MSHP already set"); } else { filled.set(3); } - mshp.putShort(b); + mshp.put(b.toByte()); return this; } @@ -184,7 +184,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(3)) { - mshp.position(mshp.position() + 2); + mshp.position(mshp.position() + 1); } if (!filled.get(4)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/trm/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/trm/Trace.java index f27d03249a..23a1d4cd1f 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/trm/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/trm/Trace.java @@ -50,19 +50,19 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("trm.ACC_HI", 32, length), - new ColumnHeader("trm.ACC_LO", 32, length), - new ColumnHeader("trm.ACC_T", 8, length), + new ColumnHeader("trm.ACC_HI", 16, length), + new ColumnHeader("trm.ACC_LO", 16, length), + new ColumnHeader("trm.ACC_T", 4, length), new ColumnHeader("trm.BYTE_HI", 1, length), new ColumnHeader("trm.BYTE_LO", 1, length), new ColumnHeader("trm.CT", 1, length), new ColumnHeader("trm.IS_PRECOMPILE", 1, length), new ColumnHeader("trm.ONE", 1, length), new ColumnHeader("trm.PBIT", 1, length), - new ColumnHeader("trm.RAW_ADDRESS_HI", 32, length), - new ColumnHeader("trm.RAW_ADDRESS_LO", 32, length), - new ColumnHeader("trm.STAMP", 4, length), - new ColumnHeader("trm.TRM_ADDRESS_HI", 8, length)); + new ColumnHeader("trm.RAW_ADDRESS_HI", 16, length), + new ColumnHeader("trm.RAW_ADDRESS_LO", 16, length), + new ColumnHeader("trm.STAMP", 3, length), + new ColumnHeader("trm.TRM_ADDRESS_HI", 4, length)); } public Trace(List buffers) { @@ -96,11 +96,20 @@ public Trace accHi(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("accHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { accHi.put((byte) 0); } - accHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accHi.put(bs.get(j)); + } return this; } @@ -112,11 +121,20 @@ public Trace accLo(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("accLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { accLo.put((byte) 0); } - accLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + accLo.put(bs.get(j)); + } return this; } @@ -128,7 +146,13 @@ public Trace accT(final long b) { filled.set(2); } - accT.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("accT has invalid value (" + b + ")"); + } + accT.put((byte) (b >> 24)); + accT.put((byte) (b >> 16)); + accT.put((byte) (b >> 8)); + accT.put((byte) b); return this; } @@ -212,11 +236,21 @@ public Trace rawAddressHi(final Bytes b) { filled.set(9); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "rawAddressHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { rawAddressHi.put((byte) 0); } - rawAddressHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + rawAddressHi.put(bs.get(j)); + } return this; } @@ -228,23 +262,38 @@ public Trace rawAddressLo(final Bytes b) { filled.set(10); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "rawAddressLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { rawAddressLo.put((byte) 0); } - rawAddressLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + rawAddressLo.put(bs.get(j)); + } return this; } - public Trace stamp(final int b) { + public Trace stamp(final long b) { if (filled.get(11)) { throw new IllegalStateException("trm.STAMP already set"); } else { filled.set(11); } - stamp.putInt(b); + if (b >= 16777216L) { + throw new IllegalArgumentException("stamp has invalid value (" + b + ")"); + } + stamp.put((byte) (b >> 16)); + stamp.put((byte) (b >> 8)); + stamp.put((byte) b); return this; } @@ -256,7 +305,13 @@ public Trace trmAddressHi(final long b) { filled.set(12); } - trmAddressHi.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("trmAddressHi has invalid value (" + b + ")"); + } + trmAddressHi.put((byte) (b >> 24)); + trmAddressHi.put((byte) (b >> 16)); + trmAddressHi.put((byte) (b >> 8)); + trmAddressHi.put((byte) b); return this; } @@ -322,15 +377,15 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - accHi.position(accHi.position() + 32); + accHi.position(accHi.position() + 16); } if (!filled.get(1)) { - accLo.position(accLo.position() + 32); + accLo.position(accLo.position() + 16); } if (!filled.get(2)) { - accT.position(accT.position() + 8); + accT.position(accT.position() + 4); } if (!filled.get(3)) { @@ -358,19 +413,19 @@ public Trace fillAndValidateRow() { } if (!filled.get(9)) { - rawAddressHi.position(rawAddressHi.position() + 32); + rawAddressHi.position(rawAddressHi.position() + 16); } if (!filled.get(10)) { - rawAddressLo.position(rawAddressLo.position() + 32); + rawAddressLo.position(rawAddressLo.position() + 16); } if (!filled.get(11)) { - stamp.position(stamp.position() + 4); + stamp.position(stamp.position() + 3); } if (!filled.get(12)) { - trmAddressHi.position(trmAddressHi.position() + 8); + trmAddressHi.position(trmAddressHi.position() + 4); } filled.clear(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/BlockSnapshot.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/BlockSnapshot.java index 6ed6458a8d..17bad7217b 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/BlockSnapshot.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/BlockSnapshot.java @@ -35,10 +35,13 @@ public class BlockSnapshot { /** Sequential ID of this block within a conflation */ int id; + /** A list of {@link TransactionSnapshot} contained in this block */ private final StackedList txs = new StackedList<>(); + /** The base fee of this block */ private final Optional baseFee; + /** The coinbase of this block */ private final Address coinbaseAddress; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/Trace.java index 6b476a51c0..6b79e1009c 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/Trace.java @@ -31,24 +31,26 @@ * Please DO NOT ATTEMPT TO MODIFY this code directly. */ public class Trace { + public static final int BLOCKHASH_MAX_HISTORY = 0x100; public static final int COMMON_RLP_TXN_PHASE_NUMBER_0 = 0x1; public static final int COMMON_RLP_TXN_PHASE_NUMBER_1 = 0x8; public static final int COMMON_RLP_TXN_PHASE_NUMBER_2 = 0x3; public static final int COMMON_RLP_TXN_PHASE_NUMBER_3 = 0x9; public static final int COMMON_RLP_TXN_PHASE_NUMBER_4 = 0xa; public static final int COMMON_RLP_TXN_PHASE_NUMBER_5 = 0x7; + public static final int CREATE2_SHIFT = 0xff; public static final int EIP_3541_MARKER = 0xef; public static final BigInteger EMPTY_KECCAK_HI = - new BigInteger("16434357337474432580558001204043214908"); + new BigInteger("262949717399590921288928019264691438528"); public static final BigInteger EMPTY_KECCAK_LO = - new BigInteger("19024806816994025362060938983270537799"); - public static final int EMPTY_RIPEMD_HI = 0x9c1185a; + new BigInteger("304396909071904405792975023732328604784"); + public static final int EMPTY_RIPEMD_HI = 0x9c1185a5; public static final BigInteger EMPTY_RIPEMD_LO = - new BigInteger("16442052386882578548602430796343695571"); + new BigInteger("263072838190121256777638892741499129137"); public static final BigInteger EMPTY_SHA2_HI = - new BigInteger("18915786244935348617899154533661473682"); + new BigInteger("302652579918965577886386472538583578916"); public static final BigInteger EMPTY_SHA2_LO = - new BigInteger("3296542996298665609207448061432114053"); + new BigInteger("52744687940778649747319168982913824853"); public static final int EVM_INST_ADD = 0x1; public static final int EVM_INST_ADDMOD = 0x8; public static final int EVM_INST_ADDRESS = 0x30; @@ -56,7 +58,6 @@ public class Trace { public static final int EVM_INST_BALANCE = 0x31; public static final int EVM_INST_BASEFEE = 0x48; public static final int EVM_INST_BLOCKHASH = 0x40; - public static final int EVM_INST_BLOCKHASH_MAX_HISTORY = 0x100; public static final int EVM_INST_BYTE = 0x1a; public static final int EVM_INST_CALL = 0xf1; public static final int EVM_INST_CALLCODE = 0xf2; @@ -252,6 +253,7 @@ public class Trace { public static final int LLARGE = 0x10; public static final int LLARGEMO = 0xf; public static final int LLARGEPO = 0x11; + public static final int MAX_CODE_SIZE = 0x6000; public static final int MAX_REFUND_QUOTIENT = 0x5; public static final int MISC_WEIGHT_EXP = 0x1; public static final int MISC_WEIGHT_MMU = 0x2; @@ -427,52 +429,52 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("txndata.ABS_TX_NUM", 4, length), - new ColumnHeader("txndata.ABS_TX_NUM_MAX", 4, length), - new ColumnHeader("txndata.ARG_ONE_LO", 32, length), - new ColumnHeader("txndata.ARG_TWO_LO", 32, length), - new ColumnHeader("txndata.BASEFEE", 32, length), - new ColumnHeader("txndata.BLOCK_GAS_LIMIT", 32, length), - new ColumnHeader("txndata.CALL_DATA_SIZE", 8, length), - new ColumnHeader("txndata.CODE_FRAGMENT_INDEX", 8, length), - new ColumnHeader("txndata.COINBASE_HI", 8, length), - new ColumnHeader("txndata.COINBASE_LO", 32, length), + new ColumnHeader("txndata.ABS_TX_NUM", 2, length), + new ColumnHeader("txndata.ABS_TX_NUM_MAX", 2, length), + new ColumnHeader("txndata.ARG_ONE_LO", 16, length), + new ColumnHeader("txndata.ARG_TWO_LO", 16, length), + new ColumnHeader("txndata.BASEFEE", 16, length), + new ColumnHeader("txndata.BLOCK_GAS_LIMIT", 8, length), + new ColumnHeader("txndata.CALL_DATA_SIZE", 4, length), + new ColumnHeader("txndata.CODE_FRAGMENT_INDEX", 4, length), + new ColumnHeader("txndata.COINBASE_HI", 4, length), + new ColumnHeader("txndata.COINBASE_LO", 16, length), new ColumnHeader("txndata.COPY_TXCD", 1, length), new ColumnHeader("txndata.CT", 1, length), new ColumnHeader("txndata.EUC_FLAG", 1, length), - new ColumnHeader("txndata.FROM_HI", 8, length), - new ColumnHeader("txndata.FROM_LO", 32, length), - new ColumnHeader("txndata.GAS_CUMULATIVE", 32, length), - new ColumnHeader("txndata.GAS_INITIALLY_AVAILABLE", 32, length), - new ColumnHeader("txndata.GAS_LEFTOVER", 32, length), - new ColumnHeader("txndata.GAS_LIMIT", 32, length), - new ColumnHeader("txndata.GAS_PRICE", 32, length), - new ColumnHeader("txndata.INIT_CODE_SIZE", 8, length), - new ColumnHeader("txndata.INITIAL_BALANCE", 32, length), + new ColumnHeader("txndata.FROM_HI", 4, length), + new ColumnHeader("txndata.FROM_LO", 16, length), + new ColumnHeader("txndata.GAS_CUMULATIVE", 16, length), + new ColumnHeader("txndata.GAS_INITIALLY_AVAILABLE", 16, length), + new ColumnHeader("txndata.GAS_LEFTOVER", 16, length), + new ColumnHeader("txndata.GAS_LIMIT", 8, length), + new ColumnHeader("txndata.GAS_PRICE", 8, length), + new ColumnHeader("txndata.INIT_CODE_SIZE", 4, length), + new ColumnHeader("txndata.INITIAL_BALANCE", 16, length), new ColumnHeader("txndata.INST", 1, length), new ColumnHeader("txndata.IS_DEP", 1, length), new ColumnHeader("txndata.IS_LAST_TX_OF_BLOCK", 1, length), - new ColumnHeader("txndata.NONCE", 32, length), - new ColumnHeader("txndata.OUTGOING_HI", 32, length), - new ColumnHeader("txndata.OUTGOING_LO", 32, length), - new ColumnHeader("txndata.OUTGOING_RLP_TXNRCPT", 32, length), + new ColumnHeader("txndata.NONCE", 8, length), + new ColumnHeader("txndata.OUTGOING_HI", 8, length), + new ColumnHeader("txndata.OUTGOING_LO", 16, length), + new ColumnHeader("txndata.OUTGOING_RLP_TXNRCPT", 16, length), new ColumnHeader("txndata.PHASE_RLP_TXN", 1, length), new ColumnHeader("txndata.PHASE_RLP_TXNRCPT", 1, length), - new ColumnHeader("txndata.PRIORITY_FEE_PER_GAS", 32, length), - new ColumnHeader("txndata.REFUND_COUNTER", 32, length), - new ColumnHeader("txndata.REFUND_EFFECTIVE", 32, length), - new ColumnHeader("txndata.REL_BLOCK", 4, length), - new ColumnHeader("txndata.REL_TX_NUM", 4, length), - new ColumnHeader("txndata.REL_TX_NUM_MAX", 4, length), + new ColumnHeader("txndata.PRIORITY_FEE_PER_GAS", 16, length), + new ColumnHeader("txndata.REFUND_COUNTER", 16, length), + new ColumnHeader("txndata.REFUND_EFFECTIVE", 16, length), + new ColumnHeader("txndata.REL_BLOCK", 2, length), + new ColumnHeader("txndata.REL_TX_NUM", 2, length), + new ColumnHeader("txndata.REL_TX_NUM_MAX", 2, length), new ColumnHeader("txndata.REQUIRES_EVM_EXECUTION", 1, length), - new ColumnHeader("txndata.RES", 32, length), + new ColumnHeader("txndata.RES", 8, length), new ColumnHeader("txndata.STATUS_CODE", 1, length), - new ColumnHeader("txndata.TO_HI", 8, length), - new ColumnHeader("txndata.TO_LO", 32, length), + new ColumnHeader("txndata.TO_HI", 4, length), + new ColumnHeader("txndata.TO_LO", 16, length), new ColumnHeader("txndata.TYPE0", 1, length), new ColumnHeader("txndata.TYPE1", 1, length), new ColumnHeader("txndata.TYPE2", 1, length), - new ColumnHeader("txndata.VALUE", 32, length), + new ColumnHeader("txndata.VALUE", 16, length), new ColumnHeader("txndata.WCP_FLAG", 1, length)); } @@ -534,26 +536,34 @@ public int size() { return this.currentLine; } - public Trace absTxNum(final int b) { + public Trace absTxNum(final long b) { if (filled.get(0)) { throw new IllegalStateException("txndata.ABS_TX_NUM already set"); } else { filled.set(0); } - absTxNum.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("absTxNum has invalid value (" + b + ")"); + } + absTxNum.put((byte) (b >> 8)); + absTxNum.put((byte) b); return this; } - public Trace absTxNumMax(final int b) { + public Trace absTxNumMax(final long b) { if (filled.get(1)) { throw new IllegalStateException("txndata.ABS_TX_NUM_MAX already set"); } else { filled.set(1); } - absTxNumMax.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("absTxNumMax has invalid value (" + b + ")"); + } + absTxNumMax.put((byte) (b >> 8)); + absTxNumMax.put((byte) b); return this; } @@ -565,11 +575,20 @@ public Trace argOneLo(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("argOneLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { argOneLo.put((byte) 0); } - argOneLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + argOneLo.put(bs.get(j)); + } return this; } @@ -581,11 +600,20 @@ public Trace argTwoLo(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("argTwoLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { argTwoLo.put((byte) 0); } - argTwoLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + argTwoLo.put(bs.get(j)); + } return this; } @@ -597,11 +625,20 @@ public Trace basefee(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("basefee has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { basefee.put((byte) 0); } - basefee.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + basefee.put(bs.get(j)); + } return this; } @@ -613,11 +650,21 @@ public Trace blockGasLimit(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "blockGasLimit has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { blockGasLimit.put((byte) 0); } - blockGasLimit.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + blockGasLimit.put(bs.get(j)); + } return this; } @@ -629,7 +676,13 @@ public Trace callDataSize(final long b) { filled.set(6); } - callDataSize.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("callDataSize has invalid value (" + b + ")"); + } + callDataSize.put((byte) (b >> 24)); + callDataSize.put((byte) (b >> 16)); + callDataSize.put((byte) (b >> 8)); + callDataSize.put((byte) b); return this; } @@ -641,7 +694,13 @@ public Trace codeFragmentIndex(final long b) { filled.set(7); } - codeFragmentIndex.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("codeFragmentIndex has invalid value (" + b + ")"); + } + codeFragmentIndex.put((byte) (b >> 24)); + codeFragmentIndex.put((byte) (b >> 16)); + codeFragmentIndex.put((byte) (b >> 8)); + codeFragmentIndex.put((byte) b); return this; } @@ -653,7 +712,13 @@ public Trace coinbaseHi(final long b) { filled.set(8); } - coinbaseHi.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("coinbaseHi has invalid value (" + b + ")"); + } + coinbaseHi.put((byte) (b >> 24)); + coinbaseHi.put((byte) (b >> 16)); + coinbaseHi.put((byte) (b >> 8)); + coinbaseHi.put((byte) b); return this; } @@ -665,11 +730,21 @@ public Trace coinbaseLo(final Bytes b) { filled.set(9); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "coinbaseLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { coinbaseLo.put((byte) 0); } - coinbaseLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + coinbaseLo.put(bs.get(j)); + } return this; } @@ -717,7 +792,13 @@ public Trace fromHi(final long b) { filled.set(13); } - fromHi.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("fromHi has invalid value (" + b + ")"); + } + fromHi.put((byte) (b >> 24)); + fromHi.put((byte) (b >> 16)); + fromHi.put((byte) (b >> 8)); + fromHi.put((byte) b); return this; } @@ -729,11 +810,20 @@ public Trace fromLo(final Bytes b) { filled.set(14); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("fromLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { fromLo.put((byte) 0); } - fromLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + fromLo.put(bs.get(j)); + } return this; } @@ -745,11 +835,21 @@ public Trace gasCumulative(final Bytes b) { filled.set(15); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "gasCumulative has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { gasCumulative.put((byte) 0); } - gasCumulative.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasCumulative.put(bs.get(j)); + } return this; } @@ -761,11 +861,21 @@ public Trace gasInitiallyAvailable(final Bytes b) { filled.set(16); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "gasInitiallyAvailable has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { gasInitiallyAvailable.put((byte) 0); } - gasInitiallyAvailable.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasInitiallyAvailable.put(bs.get(j)); + } return this; } @@ -777,11 +887,21 @@ public Trace gasLeftover(final Bytes b) { filled.set(17); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "gasLeftover has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { gasLeftover.put((byte) 0); } - gasLeftover.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasLeftover.put(bs.get(j)); + } return this; } @@ -793,11 +913,20 @@ public Trace gasLimit(final Bytes b) { filled.set(18); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("gasLimit has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { gasLimit.put((byte) 0); } - gasLimit.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasLimit.put(bs.get(j)); + } return this; } @@ -809,11 +938,20 @@ public Trace gasPrice(final Bytes b) { filled.set(19); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("gasPrice has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { gasPrice.put((byte) 0); } - gasPrice.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + gasPrice.put(bs.get(j)); + } return this; } @@ -825,7 +963,13 @@ public Trace initCodeSize(final long b) { filled.set(21); } - initCodeSize.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("initCodeSize has invalid value (" + b + ")"); + } + initCodeSize.put((byte) (b >> 24)); + initCodeSize.put((byte) (b >> 16)); + initCodeSize.put((byte) (b >> 8)); + initCodeSize.put((byte) b); return this; } @@ -837,11 +981,21 @@ public Trace initialBalance(final Bytes b) { filled.set(20); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "initialBalance has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { initialBalance.put((byte) 0); } - initialBalance.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + initialBalance.put(bs.get(j)); + } return this; } @@ -889,11 +1043,20 @@ public Trace nonce(final Bytes b) { filled.set(25); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("nonce has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { nonce.put((byte) 0); } - nonce.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + nonce.put(bs.get(j)); + } return this; } @@ -905,11 +1068,21 @@ public Trace outgoingHi(final Bytes b) { filled.set(26); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException( + "outgoingHi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { outgoingHi.put((byte) 0); } - outgoingHi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + outgoingHi.put(bs.get(j)); + } return this; } @@ -921,11 +1094,21 @@ public Trace outgoingLo(final Bytes b) { filled.set(27); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "outgoingLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { outgoingLo.put((byte) 0); } - outgoingLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + outgoingLo.put(bs.get(j)); + } return this; } @@ -937,11 +1120,21 @@ public Trace outgoingRlpTxnrcpt(final Bytes b) { filled.set(28); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "outgoingRlpTxnrcpt has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { outgoingRlpTxnrcpt.put((byte) 0); } - outgoingRlpTxnrcpt.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + outgoingRlpTxnrcpt.put(bs.get(j)); + } return this; } @@ -977,11 +1170,21 @@ public Trace priorityFeePerGas(final Bytes b) { filled.set(31); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "priorityFeePerGas has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { priorityFeePerGas.put((byte) 0); } - priorityFeePerGas.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + priorityFeePerGas.put(bs.get(j)); + } return this; } @@ -993,11 +1196,21 @@ public Trace refundCounter(final Bytes b) { filled.set(32); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "refundCounter has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { refundCounter.put((byte) 0); } - refundCounter.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + refundCounter.put(bs.get(j)); + } return this; } @@ -1009,47 +1222,69 @@ public Trace refundEffective(final Bytes b) { filled.set(33); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "refundEffective has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { refundEffective.put((byte) 0); } - refundEffective.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + refundEffective.put(bs.get(j)); + } return this; } - public Trace relBlock(final int b) { + public Trace relBlock(final long b) { if (filled.get(34)) { throw new IllegalStateException("txndata.REL_BLOCK already set"); } else { filled.set(34); } - relBlock.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("relBlock has invalid value (" + b + ")"); + } + relBlock.put((byte) (b >> 8)); + relBlock.put((byte) b); return this; } - public Trace relTxNum(final int b) { + public Trace relTxNum(final long b) { if (filled.get(35)) { throw new IllegalStateException("txndata.REL_TX_NUM already set"); } else { filled.set(35); } - relTxNum.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("relTxNum has invalid value (" + b + ")"); + } + relTxNum.put((byte) (b >> 8)); + relTxNum.put((byte) b); return this; } - public Trace relTxNumMax(final int b) { + public Trace relTxNumMax(final long b) { if (filled.get(36)) { throw new IllegalStateException("txndata.REL_TX_NUM_MAX already set"); } else { filled.set(36); } - relTxNumMax.putInt(b); + if (b >= 65536L) { + throw new IllegalArgumentException("relTxNumMax has invalid value (" + b + ")"); + } + relTxNumMax.put((byte) (b >> 8)); + relTxNumMax.put((byte) b); return this; } @@ -1073,11 +1308,20 @@ public Trace res(final Bytes b) { filled.set(38); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 64) { + throw new IllegalArgumentException("res has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 8; i++) { res.put((byte) 0); } - res.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + res.put(bs.get(j)); + } return this; } @@ -1101,7 +1345,13 @@ public Trace toHi(final long b) { filled.set(40); } - toHi.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("toHi has invalid value (" + b + ")"); + } + toHi.put((byte) (b >> 24)); + toHi.put((byte) (b >> 16)); + toHi.put((byte) (b >> 8)); + toHi.put((byte) b); return this; } @@ -1113,11 +1363,20 @@ public Trace toLo(final Bytes b) { filled.set(41); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("toLo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { toLo.put((byte) 0); } - toLo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + toLo.put(bs.get(j)); + } return this; } @@ -1165,11 +1424,20 @@ public Trace value(final Bytes b) { filled.set(45); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("value has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { value.put((byte) 0); } - value.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + value.put(bs.get(j)); + } return this; } @@ -1383,43 +1651,43 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - absTxNum.position(absTxNum.position() + 4); + absTxNum.position(absTxNum.position() + 2); } if (!filled.get(1)) { - absTxNumMax.position(absTxNumMax.position() + 4); + absTxNumMax.position(absTxNumMax.position() + 2); } if (!filled.get(2)) { - argOneLo.position(argOneLo.position() + 32); + argOneLo.position(argOneLo.position() + 16); } if (!filled.get(3)) { - argTwoLo.position(argTwoLo.position() + 32); + argTwoLo.position(argTwoLo.position() + 16); } if (!filled.get(4)) { - basefee.position(basefee.position() + 32); + basefee.position(basefee.position() + 16); } if (!filled.get(5)) { - blockGasLimit.position(blockGasLimit.position() + 32); + blockGasLimit.position(blockGasLimit.position() + 8); } if (!filled.get(6)) { - callDataSize.position(callDataSize.position() + 8); + callDataSize.position(callDataSize.position() + 4); } if (!filled.get(7)) { - codeFragmentIndex.position(codeFragmentIndex.position() + 8); + codeFragmentIndex.position(codeFragmentIndex.position() + 4); } if (!filled.get(8)) { - coinbaseHi.position(coinbaseHi.position() + 8); + coinbaseHi.position(coinbaseHi.position() + 4); } if (!filled.get(9)) { - coinbaseLo.position(coinbaseLo.position() + 32); + coinbaseLo.position(coinbaseLo.position() + 16); } if (!filled.get(10)) { @@ -1435,39 +1703,39 @@ public Trace fillAndValidateRow() { } if (!filled.get(13)) { - fromHi.position(fromHi.position() + 8); + fromHi.position(fromHi.position() + 4); } if (!filled.get(14)) { - fromLo.position(fromLo.position() + 32); + fromLo.position(fromLo.position() + 16); } if (!filled.get(15)) { - gasCumulative.position(gasCumulative.position() + 32); + gasCumulative.position(gasCumulative.position() + 16); } if (!filled.get(16)) { - gasInitiallyAvailable.position(gasInitiallyAvailable.position() + 32); + gasInitiallyAvailable.position(gasInitiallyAvailable.position() + 16); } if (!filled.get(17)) { - gasLeftover.position(gasLeftover.position() + 32); + gasLeftover.position(gasLeftover.position() + 16); } if (!filled.get(18)) { - gasLimit.position(gasLimit.position() + 32); + gasLimit.position(gasLimit.position() + 8); } if (!filled.get(19)) { - gasPrice.position(gasPrice.position() + 32); + gasPrice.position(gasPrice.position() + 8); } if (!filled.get(21)) { - initCodeSize.position(initCodeSize.position() + 8); + initCodeSize.position(initCodeSize.position() + 4); } if (!filled.get(20)) { - initialBalance.position(initialBalance.position() + 32); + initialBalance.position(initialBalance.position() + 16); } if (!filled.get(22)) { @@ -1483,19 +1751,19 @@ public Trace fillAndValidateRow() { } if (!filled.get(25)) { - nonce.position(nonce.position() + 32); + nonce.position(nonce.position() + 8); } if (!filled.get(26)) { - outgoingHi.position(outgoingHi.position() + 32); + outgoingHi.position(outgoingHi.position() + 8); } if (!filled.get(27)) { - outgoingLo.position(outgoingLo.position() + 32); + outgoingLo.position(outgoingLo.position() + 16); } if (!filled.get(28)) { - outgoingRlpTxnrcpt.position(outgoingRlpTxnrcpt.position() + 32); + outgoingRlpTxnrcpt.position(outgoingRlpTxnrcpt.position() + 16); } if (!filled.get(29)) { @@ -1507,27 +1775,27 @@ public Trace fillAndValidateRow() { } if (!filled.get(31)) { - priorityFeePerGas.position(priorityFeePerGas.position() + 32); + priorityFeePerGas.position(priorityFeePerGas.position() + 16); } if (!filled.get(32)) { - refundCounter.position(refundCounter.position() + 32); + refundCounter.position(refundCounter.position() + 16); } if (!filled.get(33)) { - refundEffective.position(refundEffective.position() + 32); + refundEffective.position(refundEffective.position() + 16); } if (!filled.get(34)) { - relBlock.position(relBlock.position() + 4); + relBlock.position(relBlock.position() + 2); } if (!filled.get(35)) { - relTxNum.position(relTxNum.position() + 4); + relTxNum.position(relTxNum.position() + 2); } if (!filled.get(36)) { - relTxNumMax.position(relTxNumMax.position() + 4); + relTxNumMax.position(relTxNumMax.position() + 2); } if (!filled.get(37)) { @@ -1535,7 +1803,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(38)) { - res.position(res.position() + 32); + res.position(res.position() + 8); } if (!filled.get(39)) { @@ -1543,11 +1811,11 @@ public Trace fillAndValidateRow() { } if (!filled.get(40)) { - toHi.position(toHi.position() + 8); + toHi.position(toHi.position() + 4); } if (!filled.get(41)) { - toLo.position(toLo.position() + 32); + toLo.position(toLo.position() + 16); } if (!filled.get(42)) { @@ -1563,7 +1831,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(45)) { - value.position(value.position() + 32); + value.position(value.position() + 16); } if (!filled.get(46)) { diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/TransactionSnapshot.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/TransactionSnapshot.java index 661e8048f1..6a55a8d66f 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/TransactionSnapshot.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/TransactionSnapshot.java @@ -78,24 +78,34 @@ public final class TransactionSnapshot extends ModuleOperation { /** Value moved by the transaction */ private final BigInteger value; + /** Sender address */ private final Address from; + /** Receiver or contract deployment address */ private final Address to; + /** Sender nonce */ private final long nonce; + /** Number of addresses to pre-warm */ private final int prewarmedAddressesCount; + /** Number of storage slots to pre-warm */ private final int prewarmedStorageKeysCount; + /** Whether this transaction is a smart contract deployment */ private final boolean isDeployment; + /** Whether this transaction triggers the EVM */ private final boolean requiresEvmExecution; + /** The transaction {@link TransactionType} */ private final TransactionType type; + /** The sender balance when it sent the transaction */ private final BigInteger initialSenderBalance; + /** The payload of the transaction, calldata or initcode */ private final Bytes payload; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/TxnData.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/TxnData.java index f875377e48..1221e465d1 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/TxnData.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/txndata/TxnData.java @@ -62,6 +62,7 @@ public String moduleKey() { } public final List blocks = new ArrayList<>(); + /** accumulate the gas used since the beginning of the current block */ public final Deque cumulatedGasUsed = new ArrayDeque<>(); @@ -160,7 +161,8 @@ private void traceTx( final long coinbaseLo = coinbase.hi().trimLeadingZeros().toLong(); final int codeFragmentIndex = tx.isDeployment() && tx.requiresEvmExecution() - ? this.romLex.getCfiByMetadata(ContractMetadata.underDeployment(tx.to(), 1)) + ? this.romLex.getCodeFragmentIndexByMetadata( + ContractMetadata.underDeployment(tx.to(), 1)) : 0; final boolean copyTxCd = tx.requiresEvmExecution() && tx.callDataSize() != 0; final long fromHi = from.hi().slice(12, 4).toLong(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/wcp/Trace.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/wcp/Trace.java index 456c187e3c..953e119166 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/wcp/Trace.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/wcp/Trace.java @@ -75,16 +75,16 @@ public class Trace { static List headers(int length) { return List.of( - new ColumnHeader("wcp.ACC_1", 32, length), - new ColumnHeader("wcp.ACC_2", 32, length), - new ColumnHeader("wcp.ACC_3", 32, length), - new ColumnHeader("wcp.ACC_4", 32, length), - new ColumnHeader("wcp.ACC_5", 32, length), - new ColumnHeader("wcp.ACC_6", 32, length), - new ColumnHeader("wcp.ARGUMENT_1_HI", 32, length), - new ColumnHeader("wcp.ARGUMENT_1_LO", 32, length), - new ColumnHeader("wcp.ARGUMENT_2_HI", 32, length), - new ColumnHeader("wcp.ARGUMENT_2_LO", 32, length), + new ColumnHeader("wcp.ACC_1", 16, length), + new ColumnHeader("wcp.ACC_2", 16, length), + new ColumnHeader("wcp.ACC_3", 16, length), + new ColumnHeader("wcp.ACC_4", 16, length), + new ColumnHeader("wcp.ACC_5", 16, length), + new ColumnHeader("wcp.ACC_6", 16, length), + new ColumnHeader("wcp.ARGUMENT_1_HI", 16, length), + new ColumnHeader("wcp.ARGUMENT_1_LO", 16, length), + new ColumnHeader("wcp.ARGUMENT_2_HI", 16, length), + new ColumnHeader("wcp.ARGUMENT_2_LO", 16, length), new ColumnHeader("wcp.BIT_1", 1, length), new ColumnHeader("wcp.BIT_2", 1, length), new ColumnHeader("wcp.BIT_3", 1, length), @@ -112,7 +112,7 @@ static List headers(int length) { new ColumnHeader("wcp.ONE_LINE_INSTRUCTION", 1, length), new ColumnHeader("wcp.RESULT", 1, length), new ColumnHeader("wcp.VARIABLE_LENGTH_INSTRUCTION", 1, length), - new ColumnHeader("wcp.WORD_COMPARISON_STAMP", 8, length)); + new ColumnHeader("wcp.WORD_COMPARISON_STAMP", 4, length)); } public Trace(List buffers) { @@ -171,11 +171,20 @@ public Trace acc1(final Bytes b) { filled.set(0); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc1 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc1.put((byte) 0); } - acc1.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc1.put(bs.get(j)); + } return this; } @@ -187,11 +196,20 @@ public Trace acc2(final Bytes b) { filled.set(1); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc2 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc2.put((byte) 0); } - acc2.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc2.put(bs.get(j)); + } return this; } @@ -203,11 +221,20 @@ public Trace acc3(final Bytes b) { filled.set(2); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc3 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc3.put((byte) 0); } - acc3.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc3.put(bs.get(j)); + } return this; } @@ -219,11 +246,20 @@ public Trace acc4(final Bytes b) { filled.set(3); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc4 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc4.put((byte) 0); } - acc4.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc4.put(bs.get(j)); + } return this; } @@ -235,11 +271,20 @@ public Trace acc5(final Bytes b) { filled.set(4); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc5 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc5.put((byte) 0); } - acc5.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc5.put(bs.get(j)); + } return this; } @@ -251,11 +296,20 @@ public Trace acc6(final Bytes b) { filled.set(5); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException("acc6 has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { acc6.put((byte) 0); } - acc6.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + acc6.put(bs.get(j)); + } return this; } @@ -267,11 +321,21 @@ public Trace argument1Hi(final Bytes b) { filled.set(6); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "argument1Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { argument1Hi.put((byte) 0); } - argument1Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + argument1Hi.put(bs.get(j)); + } return this; } @@ -283,11 +347,21 @@ public Trace argument1Lo(final Bytes b) { filled.set(7); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "argument1Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { argument1Lo.put((byte) 0); } - argument1Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + argument1Lo.put(bs.get(j)); + } return this; } @@ -299,11 +373,21 @@ public Trace argument2Hi(final Bytes b) { filled.set(8); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "argument2Hi has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { argument2Hi.put((byte) 0); } - argument2Hi.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + argument2Hi.put(bs.get(j)); + } return this; } @@ -315,11 +399,21 @@ public Trace argument2Lo(final Bytes b) { filled.set(9); } - final byte[] bs = b.toArrayUnsafe(); - for (int i = bs.length; i < 32; i++) { + // Trim array to size + Bytes bs = b.trimLeadingZeros(); + // Sanity check against expected width + if (bs.bitLength() > 128) { + throw new IllegalArgumentException( + "argument2Lo has invalid width (" + bs.bitLength() + "bits)"); + } + // Write padding (if necessary) + for (int i = bs.size(); i < 16; i++) { argument2Lo.put((byte) 0); } - argument2Lo.put(b.toArrayUnsafe()); + // Write bytes + for (int j = 0; j < bs.size(); j++) { + argument2Lo.put(bs.get(j)); + } return this; } @@ -655,7 +749,13 @@ public Trace wordComparisonStamp(final long b) { filled.set(37); } - wordComparisonStamp.putLong(b); + if (b >= 4294967296L) { + throw new IllegalArgumentException("wordComparisonStamp has invalid value (" + b + ")"); + } + wordComparisonStamp.put((byte) (b >> 24)); + wordComparisonStamp.put((byte) (b >> 16)); + wordComparisonStamp.put((byte) (b >> 8)); + wordComparisonStamp.put((byte) b); return this; } @@ -821,43 +921,43 @@ public Trace validateRow() { public Trace fillAndValidateRow() { if (!filled.get(0)) { - acc1.position(acc1.position() + 32); + acc1.position(acc1.position() + 16); } if (!filled.get(1)) { - acc2.position(acc2.position() + 32); + acc2.position(acc2.position() + 16); } if (!filled.get(2)) { - acc3.position(acc3.position() + 32); + acc3.position(acc3.position() + 16); } if (!filled.get(3)) { - acc4.position(acc4.position() + 32); + acc4.position(acc4.position() + 16); } if (!filled.get(4)) { - acc5.position(acc5.position() + 32); + acc5.position(acc5.position() + 16); } if (!filled.get(5)) { - acc6.position(acc6.position() + 32); + acc6.position(acc6.position() + 16); } if (!filled.get(6)) { - argument1Hi.position(argument1Hi.position() + 32); + argument1Hi.position(argument1Hi.position() + 16); } if (!filled.get(7)) { - argument1Lo.position(argument1Lo.position() + 32); + argument1Lo.position(argument1Lo.position() + 16); } if (!filled.get(8)) { - argument2Hi.position(argument2Hi.position() + 32); + argument2Hi.position(argument2Hi.position() + 16); } if (!filled.get(9)) { - argument2Lo.position(argument2Lo.position() + 32); + argument2Lo.position(argument2Lo.position() + 16); } if (!filled.get(11)) { @@ -969,7 +1069,7 @@ public Trace fillAndValidateRow() { } if (!filled.get(37)) { - wordComparisonStamp.position(wordComparisonStamp.position() + 8); + wordComparisonStamp.position(wordComparisonStamp.position() + 4); } filled.clear(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/wcp/Wcp.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/wcp/Wcp.java index daed8f2aaf..9ad4597551 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/wcp/Wcp.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/wcp/Wcp.java @@ -39,6 +39,7 @@ public class Wcp implements Module { private final StackedSet operations = new StackedSet<>(); + /** count the number of rows that could be added after the sequencer counts the number of line */ public final Deque additionalRows = new ArrayDeque<>(); @@ -119,7 +120,7 @@ public boolean callLT(final Bytes arg1, final Bytes arg2) { return this.callLT(Bytes32.leftPad(arg1), Bytes32.leftPad(arg2)); } - public boolean callLT(final int arg1, final int arg2) { + public boolean callLT(final long arg1, final long arg2) { return this.callLT(Bytes.ofUnsignedLong(arg1), Bytes.ofUnsignedLong(arg2)); } @@ -159,6 +160,10 @@ public boolean callLEQ(final Bytes32 arg1, final Bytes32 arg2) { return arg1.compareTo(arg2) <= 0; } + public boolean callLEQ(final long arg1, final long arg2) { + return this.callLEQ(Bytes.ofUnsignedLong(arg1), Bytes.ofUnsignedLong(arg2)); + } + public boolean callLEQ(final Bytes arg1, final Bytes arg2) { return this.callLEQ(Bytes32.leftPad(arg1), Bytes32.leftPad(arg2)); } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/GasConstants.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/GasConstants.java index f17fed675e..20c9d357a0 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/GasConstants.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/GasConstants.java @@ -82,6 +82,7 @@ public int cost() { private static class Constants { /** Base price for a LOGx call. */ private static final int LOG = 375; + /** Additional price per topic for a LOGx call. */ private static final int LOG_TOPIC = 375; } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/projector/SLoad.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/projector/SLoad.java index 07e769dc1c..db7da82f30 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/projector/SLoad.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/projector/SLoad.java @@ -35,7 +35,7 @@ public long storageWarmth() { if (key == null) { return 0; } else { - if (frame.isStorageWarm(frame.getRecipientAddress(), key)) { + if (frame.getWarmedUpStorage().contains(frame.getRecipientAddress(), key)) { return GasConstants.G_WARM_ACCESS.cost(); } else { return GasConstants.G_COLD_S_LOAD.cost(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/projector/SStore.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/projector/SStore.java index c9f95f106b..dd42700c75 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/projector/SStore.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/opcode/gas/projector/SStore.java @@ -44,7 +44,7 @@ public SStore(MessageFrame frame) { @Override public long storageWarmth() { - if (frame.isStorageWarm(frame.getRecipientAddress(), key)) { + if (frame.getWarmedUpStorage().contains(frame.getRecipientAddress(), key)) { return 0L; } else { return GasConstants.G_COLD_S_LOAD.cost(); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/callstack/CallFrame.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/callstack/CallFrame.java index 56506999e1..aa8a2a3d0d 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/callstack/CallFrame.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/callstack/CallFrame.java @@ -45,30 +45,39 @@ public class CallFrame { /** the position of this {@link CallFrame} in the {@link CallStack}. */ @Getter private int id; + /** the context number of the frame, i.e. the hub stamp at its creation */ @Getter private final int contextNumber; + /** the depth of this CallFrame within its call hierarchy. */ @Getter private int depth; + /** */ @Getter private int accountDeploymentNumber; + /** */ @Getter private int codeDeploymentNumber; + /** */ @Getter private boolean underDeployment; - @Getter @Setter private TraceSection needsUnlatchingAtReEntry = null; + @Getter @Setter private TraceSection sectionToUnlatch = null; /** the ID of this {@link CallFrame} parent in the {@link CallStack}. */ @Getter private int parentFrame; + /** all the {@link CallFrame} that have been called by this frame. */ @Getter private final List childFrames = new ArrayList<>(); /** the {@link Address} of the account executing this {@link CallFrame}. */ @Getter private final Address address; + /** A memoized {@link EWord} conversion of `address` */ private EWord eAddress = null; + /** the {@link Address} of the code executed in this {@link CallFrame}. */ @Getter private Address codeAddress = Address.ZERO; + /** A memoized {@link EWord} conversion of `codeAddress` */ private EWord eCodeAddress = null; @@ -77,6 +86,7 @@ public class CallFrame { /** the {@link Bytecode} executing within this frame. */ @Getter private Bytecode code = Bytecode.EMPTY; + /** the CFI of this frame bytecode if applicable */ @Getter private int codeFragmentIndex = -1; @@ -87,6 +97,7 @@ public class CallFrame { /** the ether amount given to this frame. */ @Getter private Wei value = Wei.fromHexString("0xBadF00d"); // Marker for debugging + /** the gas given to this frame. */ @Getter private long gasEndowment; @@ -95,13 +106,16 @@ public class CallFrame { /** the data returned by the latest callee. */ @Getter @Setter private Bytes latestReturnData = Bytes.EMPTY; + /** returnData position within the latest callee memory space. */ @Getter @Setter private MemorySpan latestReturnDataSource = new MemorySpan(0, 0); /** the return data provided by this frame */ @Getter @Setter private Bytes returnData = Bytes.EMPTY; + /** where this frame store its return data in its own RAM */ @Getter @Setter private MemorySpan returnDataSource; + /** where this frame is expected to write its returnData within its parent's memory space. */ @Getter private MemorySpan requestedReturnDataTarget = MemorySpan.empty(); @@ -113,6 +127,7 @@ public class CallFrame { /** this frame {@link Stack}. */ @Getter private final Stack stack = new Stack(); + /** the latched context of this callframe stack. */ @Getter @Setter private StackContext pending; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/callstack/CallStack.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/callstack/CallStack.java index 9c30e2a3be..723a95025c 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/callstack/CallStack.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/callstack/CallStack.java @@ -39,10 +39,13 @@ public final class CallStack { /** the maximal depth of the call stack (as defined by Ethereum) */ static final int MAX_CALLSTACK_SIZE = 1024; + /** a never-pruned-tree of the {@link CallFrame} executed by the {@link Hub} */ private final List frames = new ArrayList<>(); + /** the current depth of the call stack. */ @Getter private int depth; + /** a "pointer" to the current {@link CallFrame} in frames. */ private int current; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/stack/StackContext.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/stack/StackContext.java index 7cc3c35cc8..65705b47fd 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/stack/StackContext.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/stack/StackContext.java @@ -36,8 +36,10 @@ @Accessors(fluent = true) public final class StackContext { @Getter @Setter MemorySegmentSnapshot memorySegmentSnapshot; + /** The opcode that triggered the stack operations. */ OpCode opCode; + /** One or two lines to be traced, representing the stack operations performed by the opcode. */ @Getter final List lines = new ArrayList<>(4); diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/stack/StackOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/stack/StackOperation.java index 946ff4aaea..e99cc7f5a9 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/stack/StackOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/runtime/stack/StackOperation.java @@ -31,15 +31,19 @@ @Accessors(fluent = true) public final class StackOperation { private static final Bytes MARKER = Bytes.fromHexString("0xDEADBEEF"); + /** * The relative height of the element with regard to the stack height just before executing the * linked EVM instruction. */ @Getter private final int height; + /** The value having been popped from/pushed on the stack. */ @Getter @Setter private Bytes value; + /** whether this action is a push or a pop. */ @Getter private final Action action; + /** * The stamp of this operation relative to the stack stamp before executing the linked EVM * instruction. diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/AddressUtils.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/AddressUtils.java index 6cded5f74b..cefba7d4c2 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/AddressUtils.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/AddressUtils.java @@ -29,7 +29,7 @@ public class AddressUtils { private static final Bytes CREATE2_PREFIX = Bytes.of(0xff); - private static final List

precompileAddress = + public static final List
precompileAddress = List.of( Address.ECREC, Address.SHA256, @@ -57,6 +57,9 @@ public static Address effectiveToAddress(Transaction tx) { .orElse(Address.contractAddress(tx.getSender(), tx.getNonce())); } + /* Warning: this method uses the nonce as currently found in the state + however, CREATE raises the nonce and so this method should only be called + pre OpCode and pre transaction for deployment */ public static Address getCreateAddress(final MessageFrame frame) { return Address.extract(getCreateRawAddress(frame)); } @@ -92,7 +95,7 @@ public static Address getCreate2Address(final MessageFrame frame) { } public static Address getDeploymentAddress(final MessageFrame frame) { - OpCode opcode = OpCode.of(frame.getCurrentOperation().getOpcode()); + final OpCode opcode = OpCode.of(frame.getCurrentOperation().getOpcode()); if (!opcode.equals(OpCode.CREATE2) && !opcode.equals(OpCode.CREATE)) { throw new IllegalArgumentException("Must be called only for CREATE/CREATE2 opcode"); } diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecode.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecode.java index 81e50b5913..627a23ef86 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecode.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecode.java @@ -28,6 +28,7 @@ public final class Bytecode { /** The bytecode. */ private final Bytes bytecode; + /** The bytecode hash; is null by default and computed & memoized on the fly when required. */ private Hash hash; diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Conversions.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Conversions.java index b1ab3d3dff..9904f4737e 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Conversions.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Conversions.java @@ -101,7 +101,7 @@ public static BigInteger booleanToBigInteger(final boolean input) { public static int booleanToInt(final boolean input) { return input ? 1 : 0; } - // Also implemented in oob branch (remove it after merge) + public static boolean bigIntegerToBoolean(BigInteger n) { if (!n.equals(BigInteger.ONE) && !n.equals(BigInteger.ZERO)) { throw new IllegalArgumentException( diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/EWord.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/EWord.java index 0e06be7aed..27015b65f8 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/EWord.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/EWord.java @@ -15,6 +15,8 @@ package net.consensys.linea.zktracer.types; +import static net.consensys.linea.zktracer.types.Conversions.bigIntegerToBytes; + import java.math.BigInteger; import org.apache.tuweni.bytes.Bytes; @@ -117,6 +119,20 @@ public static EWord ofHexString(final String str) { return new EWord(str); } + /** + * From hi and lo BigIntegers to EVM word. + * + * @param hiBigInt the high half of the EWord + * @param loBigInt the low half of the EWord + * @return the EVM word + */ + public static EWord of(final BigInteger hiBigInt, final BigInteger loBigInt) { + return EWord.of( + Bytes.concatenate( + Bytes16.leftPad(bigIntegerToBytes(hiBigInt)), + Bytes16.leftPad(bigIntegerToBytes(loBigInt)))); + } + @Override public Number getValue() { return getAsBigInteger(); diff --git a/arithmetization/src/main/resources/spillings.toml b/arithmetization/src/main/resources/spillings.toml index 0e3fa7d654..db471c5268 100644 --- a/arithmetization/src/main/resources/spillings.toml +++ b/arithmetization/src/main/resources/spillings.toml @@ -1,46 +1,55 @@ # These values should be set from `corset debug -s zkevm.bin` [spillings] -ADD = 2 -BLOCKDATA = 6 -BLOCKHASH = 1 -BIN = 16 -EC_DATA = 12 +ADD = 1 +BIN = 15 +BLAKE_MODEXP_DATA = 1 +BLOCK_DATA = 6 +BLOCK_HASH = 1 +EC_DATA = 11 EUC = 1 EXP = 5 -EXT = 8 -PUB_HASH = 0 -PUB_HASH_INFO = 0 -HUB = 2 -PUB_LOG = 1 -PUB_LOG_INFO = 5 -MOD = 8 -MUL = 9 -MXP = 4 +EXT = 7 +GAS = 1 +HUB = 12 +LOG_DATA = 1 +LOG_INFO = 5 +MMIO = 0 MMU = 10 -MMIO = 16 # TODO +MOD = 7 +MUL = 8 +MXP = 3 +OOB = 5 RLP_ADDR = 7 -TX_RLP = 7 -RLP_TXRCPT = 7 -ROM = 2 +RLP_TXN = 7 +RLP_TXN_RCPT = 7 +ROM = 1 ROM_LEX = 1 -TXN_DATA = 15 -SHF = 16 +SHAKIRA_DATA = 1 +SHF = 15 STP = 4 TRM = 7 -WCP = 16 +TXN_DATA = 8 +WCP = 15 -PRECOMPILE_ECRECOVER_EFFECTIVE_CALL = 0 +BIN_REFERENCE_TABLE = 0 +SHF_REFERENCE_TABLE = 0 +INSTRUCTION_DECODER = 0 + +PRECOMPILE_ECRECOVER_EFFECTIVE_CALLS = 0 PRECOMPILE_SHA2_BLOCKS = 0 PRECOMPILE_RIPEMD_BLOCKS = 0 -PRECOMPILE_IDENTITY = 0 -PRECOMPILE_MODEXP_EFFECTIVE_CALL = 0 -PRECOMPILE_ECADD_EFFECTIVE_CALL = 0 -PRECOMPILE_ECMUL_EFFECTIVE_CALL = 0 -PRECOMPILE_ECPAIRING_EFFECTIVE_CALL = 0 -PRECOMPILE_ECPAIRING_MILLER_LOOP = 0 -PRECOMPILE_BLAKE2F_ROUNDS = 0 +PRECOMPILE_MODEXP_EFFECTIVE_CALLS = 0 +PRECOMPILE_ECADD_EFFECTIVE_CALLS = 0 +PRECOMPILE_ECMUL_EFFECTIVE_CALLS = 0 +PRECOMPILE_ECPAIRING_FINAL_EXPONENTIATIONS = 0 +PRECOMPILE_ECPAIRING_G2_MEMBERSHIP_CALLS = 0 +PRECOMPILE_ECPAIRING_MILLER_LOOPS = 0 +PRECOMPILE_BLAKE_EFFECTIVE_CALLS = 0 +PRECOMPILE_BLAKE_ROUNDS = 0 -BLOCK_TX = 0 -BLOCK_L2L1LOGS = 0 -BLOCK_KECCAK = 0 -BLOCK_L1SIZE = 0 +# PRECOMPILE_SHA2_EFFECTIVE_CALLS = ? # deprecated +# PRECOMPILE_RIPEMD_EFFECTIVE_CALLS = ? # deprecated +BLOCK_KECCAK = 0 +BLOCK_L1_SIZE = 0 +BLOCK_L2_L1_LOGS = 0 +BLOCK_TRANSACTIONS = 0 diff --git a/arithmetization/src/test/java/net/consensys/linea/continoustracing/ContinuousTracerTest.java b/arithmetization/src/test/java/net/consensys/linea/continoustracing/ContinuousTracerTest.java new file mode 100644 index 0000000000..05d4fe3b17 --- /dev/null +++ b/arithmetization/src/test/java/net/consensys/linea/continoustracing/ContinuousTracerTest.java @@ -0,0 +1,115 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package net.consensys.linea.continoustracing; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.matches; +import static org.mockito.Mockito.when; + +import java.nio.file.Path; +import java.util.List; + +import net.consensys.linea.corset.CorsetValidator; +import net.consensys.linea.plugins.continoustracing.ContinuousTracer; +import net.consensys.linea.plugins.continoustracing.ContinuousTracingConfiguration; +import net.consensys.linea.plugins.exception.InvalidBlockTraceException; +import net.consensys.linea.plugins.exception.TraceVerificationException; +import net.consensys.linea.zktracer.ZkTracer; +import org.hyperledger.besu.datatypes.Hash; +import org.hyperledger.besu.plugin.data.BlockTraceResult; +import org.hyperledger.besu.plugin.data.TransactionTraceResult; +import org.hyperledger.besu.plugin.services.TraceService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; +import org.mockito.ArgumentMatchers; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class ContinuousTracerTest { + private static final Hash BLOCK_HASH = + Hash.fromHexString("0x0000000000000000000000000000000000000000000000000000000000000042"); + + private ContinuousTracer continuousTracer; + private ContinuousTracingConfiguration continuousTracingConfiguration; + + @Mock TraceService traceServiceMock; + @Mock CorsetValidator corsetValidatorMock; + @Mock ZkTracer zkTracerMock; + + @TempDir Path tracesOutputPath; + + @BeforeEach + void setUp() { + continuousTracingConfiguration = + new ContinuousTracingConfiguration(true, "testZkEvmBin", tracesOutputPath.toString()); + continuousTracer = + new ContinuousTracer(traceServiceMock, corsetValidatorMock, continuousTracingConfiguration); + } + + @Test + void shouldReturnSuccessIfVerificationIsSuccessful() + throws InvalidBlockTraceException, TraceVerificationException { + final List transactionTraceResults = + List.of(TransactionTraceResult.success(Hash.ZERO)); + final BlockTraceResult blockTraceResult = new BlockTraceResult(transactionTraceResults); + when(traceServiceMock.traceBlock(ArgumentMatchers.any(), ArgumentMatchers.any())) + .thenReturn(blockTraceResult); + + when(corsetValidatorMock.validate(ArgumentMatchers.any(), matches("testZkEvmBin"))) + .thenReturn( + new CorsetValidator.Result( + true, Path.of("testTraceFile").toFile(), "testCorsetOutput")); + + final CorsetValidator.Result validationResult = + continuousTracer.verifyTraceOfBlock(BLOCK_HASH, zkTracerMock); + assertThat(validationResult.isValid()).isTrue(); + } + + @Test + void shouldReturnFailureIfVerificationIsNotSuccessful() + throws InvalidBlockTraceException, TraceVerificationException { + final List transactionTraceResults = + List.of(TransactionTraceResult.success(Hash.ZERO)); + final BlockTraceResult blockTraceResult = new BlockTraceResult(transactionTraceResults); + when(traceServiceMock.traceBlock(ArgumentMatchers.any(), ArgumentMatchers.any())) + .thenReturn(blockTraceResult); + + when(corsetValidatorMock.validate(ArgumentMatchers.any(), matches("testZkEvmBin"))) + .thenReturn( + new CorsetValidator.Result( + false, Path.of("testTraceFile").toFile(), "testCorsetOutput")); + + final CorsetValidator.Result validationResult = + continuousTracer.verifyTraceOfBlock(BLOCK_HASH, zkTracerMock); + assertThat(validationResult.isValid()).isFalse(); + } + + @Test + void shouldThrowInvalidBlockTraceExceptionIfTracingHasInternalError() { + final List transactionTraceResults = + List.of(TransactionTraceResult.error(Hash.ZERO, "errorMessage")); + final BlockTraceResult blockTraceResult = new BlockTraceResult(transactionTraceResults); + when(traceServiceMock.traceBlock(ArgumentMatchers.any(), ArgumentMatchers.any())) + .thenReturn(blockTraceResult); + + assertThrows( + InvalidBlockTraceException.class, + () -> continuousTracer.verifyTraceOfBlock(BLOCK_HASH, new ZkTracer())); + } +} diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/ReplayTests.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/ReplayTests.java index 3b265d6c0a..aa8dc45eff 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/ReplayTests.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/ReplayTests.java @@ -40,6 +40,8 @@ * | jq '.result.capture' -r * | gzip > arithmetization/src/test/resources/replays/my-test-case.json.gz * } + * + * One can run this command: scripts/capture.pl --start xxx --end yyy --output my-test-case.json.gz */ @Slf4j public class ReplayTests { @@ -77,4 +79,19 @@ void traceTxStartNotTheSameAsTxPrepare() { void fatMxp() { replay("2492975-2492977.json.gz"); } + + @Test + void failingMmuModexp() { + replay("5995162.json.gz"); + } + + @Test + void failRlpAddress() { + replay("5995097.json.gz"); + } + + @Test + void rlprcptManyTopicsWoLogData() { + replay("6569423.json.gz"); + } } diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/ecdata/EcDataTest.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/ecdata/EcDataTest.java new file mode 100644 index 0000000000..01dc6e1e32 --- /dev/null +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/ecdata/EcDataTest.java @@ -0,0 +1,316 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.ecdata; + +import static net.consensys.linea.zktracer.module.ecdata.EcDataOperation.SECP256K1N; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; + +import net.consensys.linea.zktracer.opcode.OpCode; +import net.consensys.linea.zktracer.testing.BytecodeCompiler; +import net.consensys.linea.zktracer.testing.BytecodeRunner; +import net.consensys.linea.zktracer.types.EWord; +import org.apache.tuweni.bytes.Bytes; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +public class EcDataTest { + @Test + void testEcData() { + BytecodeRunner.of( + Bytes.fromHexString( + "608060405234801561001057600080fd5b5061004a6001601b6001620f00007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe610b9760201b60201c565b61005757610056610e05565b5b61006f60016019600060016000610b9760201b60201c565b61007c5761007b610e05565b5b6100936001601e6001806000610b9760201b60201c565b6100a05761009f610e05565b5b6100d76001601b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000610b9760201b60201c565b6100e4576100e3610e05565b5b610152600160027f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476101169190610e6d565b600160027f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476101459190610e6d565b6003610bd260201b60201c565b61015f5761015e610e05565b5b610176600080600160026000610bd260201b60201c565b61018357610182610e05565b5b6101c5600060018060027f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476101b89190610e6d565b6000610bd260201b60201c565b156101d3576101d2610e05565b5b6102146000806001807f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476102079190610ea1565b6000610bd260201b60201c565b1561022257610221610e05565b5b610283600160027f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476102549190610e6d565b610f007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610c0c60201b60201c565b6102905761028f610e05565b5b6102d0600160027f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476102c29190610e6d565b600080610c0c60201b60201c565b6102dd576102dc610e05565b5b6102f260008060036000610c0c60201b60201c565b6102ff576102fe610e05565b5b6103156000600460036000610c0c60201b60201c565b1561032357610322610e05565b5b61033860006004600080610c0c60201b60201c565b1561034657610345610e05565b5b60006040518060c001604052806001815260200160027f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476103879190610e6d565b81526020016000815260200160008152602001600081526020016000815250905060006040518060c001604052806001815260200160027f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476103e99190610e6d565b81526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905060006040518060c0016040528060008152602001600081526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905060006040518060c001604052806000815260200160008152602001600181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905060006040518060c0016040528060008152602001600c81526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905060008067ffffffffffffffff81111561069c5761069b610ed5565b5b6040519080825280602002602001820160405280156106d557816020015b6106c2610dcf565b8152602001906001900390816106ba5790505b5090506106e9816000610c4060201b60201c565b6106f6576106f5610e05565b5b600167ffffffffffffffff81111561071157610710610ed5565b5b60405190808252806020026020018201604052801561074a57816020015b610737610dcf565b81526020019060019003908161072f5790505b509050858160008151811061076257610761610f04565b5b602002602001018190525061077e816000610c4060201b60201c565b61078b5761078a610e05565b5b85816000815181106107a05761079f610f04565b5b6020026020010181905250600267ffffffffffffffff8111156107c6576107c5610ed5565b5b6040519080825280602002602001820160405280156107ff57816020015b6107ec610dcf565b8152602001906001900390816107e45790505b509050858160008151811061081757610816610f04565b5b6020026020010181905250848160018151811061083757610836610f04565b5b6020026020010181905250610853816000610c4060201b60201c565b6108605761085f610e05565b5b61087181600a610c4060201b60201c565b1561087f5761087e610e05565b5b828160018151811061089457610893610f04565b5b60200260200101819052506108b0816000610c4060201b60201c565b156108be576108bd610e05565b5b600367ffffffffffffffff8111156108d9576108d8610ed5565b5b60405190808252806020026020018201604052801561091257816020015b6108ff610dcf565b8152602001906001900390816108f75790505b509050858160008151811061092a57610929610f04565b5b6020026020010181905250848160018151811061094a57610949610f04565b5b6020026020010181905250838160028151811061096a57610969610f04565b5b6020026020010181905250610986816000610c4060201b60201c565b61099357610992610e05565b5b6109a4816001610c4060201b60201c565b156109b2576109b1610e05565b5b6109e2817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610c4060201b60201c565b156109f0576109ef610e05565b5b8181600281518110610a0557610a04610f04565b5b6020026020010181905250610a21816000610c4060201b60201c565b15610a2f57610a2e610e05565b5b600a67ffffffffffffffff811115610a4a57610a49610ed5565b5b604051908082528060200260200182016040528015610a8357816020015b610a70610dcf565b815260200190600190039081610a685790505b50905060005b8151811015610b36576000600382610aa19190610f62565b03610aca5786828281518110610aba57610ab9610f04565b5b6020026020010181905250610b23565b6001600382610ad99190610f62565b03610b025785828281518110610af257610af1610f04565b5b6020026020010181905250610b22565b84828281518110610b1657610b15610f04565b5b60200260200101819052505b5b8080610b2e90610f93565b915050610a89565b50610b48816000610c4060201b60201c565b610b5557610b54610e05565b5b60006040518060400160405280600e81526020017f7a6b2d65766d206973206c6966650000000000000000000000000000000000008152509050805160208201f35b600060405186815285602082015284604082015283606082015260008084608001836001610bb8fa9150608081016040525095945050505050565b6000604051868152856020820152846040820152836060820152600080846080018360066096fa9150608081016040525095945050505050565b600060405185815284602082015283604082015260008084606001836007611770fa91506060810160405250949350505050565b60008061afc884516184d0610c559190610fdb565b610c5f9190610ea1565b90506000604051905060005b8551811015610d91576000868281518110610c8957610c88610f04565b5b60200260200101516000015190506000878381518110610cac57610cab610f04565b5b60200260200101516020015190506000888481518110610ccf57610cce610f04565b5b60200260200101516040015190506000898581518110610cf257610cf1610f04565b5b602002602001015160600151905060008a8681518110610d1557610d14610f04565b5b602002602001015160800151905060008b8781518110610d3857610d37610f04565b5b602002602001015160a0015190508660c00286818a015285602082018a015283604082018a015284606082018a015281608082018a01528260a082018a0152505050505050508080610d8990610f93565b915050610c6b565b50600060c08651610da29190610fdb565b905060008183610db29190610ea1565b905060008087840185600888fa9450806040525050505092915050565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e7882610e34565b9150610e8383610e34565b9250828203905081811115610e9b57610e9a610e3e565b5b92915050565b6000610eac82610e34565b9150610eb783610e34565b9250828201905080821115610ecf57610ece610e3e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000610f6d82610e34565b9150610f7883610e34565b925082610f8857610f87610f33565b5b828206905092915050565b6000610f9e82610e34565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610fd057610fcf610e3e565b5b600182019050919050565b6000610fe682610e34565b9150610ff183610e34565b9250828202610fff81610e34565b9150828204841483151761101657611015610e3e565b5b509291505056fe")) + .run(); + } + + @Test + void testEcRecoverWithEmptyExt() { + BytecodeRunner.of( + Bytes.fromHexString( + "6080604052348015600f57600080fd5b5060476001601b6001620f00007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe609360201b60201c565b605157605060ce565b5b60006040518060400160405280600e81526020017f7a6b2d65766d206973206c6966650000000000000000000000000000000000008152509050805160208201f35b600060405186815285602082015284604082015283606082015260008084608001836001610bb8fa9150608081016040525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfe")) + .run(); + } + + private static Stream ecRecoverSource() { + EWord h = + EWord.ofHexString("0x456e9aea5e197a1f1af7a3e85a3212fa4049a3ba34c2289b4c860fc0b0c64ef3"); + List v = + List.of( + EWord.of(28), + EWord.ZERO, + EWord.of(BigInteger.ONE, BigInteger.valueOf(27)), + EWord.of(BigInteger.ONE, BigInteger.valueOf(28))); + List r = + List.of( + EWord.ofHexString("0x9242685bf161793cc25603c231bc2f568eb630ea16aa137d2664ac8038825608"), + EWord.ZERO, + SECP256K1N, + SECP256K1N.add(EWord.of(1))); + List s = + List.of( + EWord.ofHexString("0x4f8ae3bd7535248d0bd448298cc2e2071e56992d0774dc340c368ae950852ada"), + EWord.ZERO, + SECP256K1N, + SECP256K1N.add(EWord.of(1))); + + List arguments = new ArrayList<>(); + + // Test cases where ICP = successBit = 1 (first one) or ICP = successBit = 0 (all the others) + for (int i = 0; i < v.size(); i++) { + for (int j = 0; j < r.size(); j++) { + for (int k = 0; k < s.size(); k++) { + arguments.add( + Arguments.of( + i + j + k == 0 ? "[ICP = 1, successBit = 1]" : "[ICP = 0, successBit = 0]", + h, + v.get(i), + r.get(j), + s.get(k), + i + j + k == 0, + i + j + k == 0)); + } + } + } + + // Test cases where ICP = successBit = 1 + arguments.add( + argumentsFromStrings( + "[ICP = 1, successBit = 1]", + "0x279d94621558f755796898fc4bd36b6d407cae77537865afe523b79c74cc680b", + "0x1b", + "0xc2ff96feed8749a5ad1c0714f950b5ac939d8acedbedcbc2949614ab8af06312", + "0x1feecd50adc6273fdd5d11c6da18c8cfe14e2787f5a90af7c7c1328e7d0a2c42", + true, + true)); + + arguments.add( + argumentsFromStrings( + "[ICP = 1, successBit = 1]", + "0x4be146e06cc1b37342b6b7b1fa8542ae58a62103b8af0f7d58f8a1ffffcf7914", + "0x1b", + "0xa7b0f504b652b3a621921c78c587fdf80a3ab590e22c304b0b0930e90c4e081d", + "0x5428459ef7e6bd079fbbb7c6fd95cc6c7fe68c93ed4ae75cee36810e79e8a0e5", + true, + true)); + + arguments.add( + argumentsFromStrings( + "[ICP = 1, successBit = 1]", + "0xca3e75570aea0e3dd8e7a9d38c2efa866f5ee2b18bf527a0f4e3248b7c7cf376", + "0x1c", + "0xf1136900c2cd16eacc676f2c7b70f3dfec13fd16a426aab4eda5d8047c30a9e9", + "0x4dad8f009ebe31bdc38133bc5fa60e9dca59d0366bd90e2ef12b465982c696aa", + true, + true)); + + arguments.add( + argumentsFromStrings( + "[ICP = 1, successBit = 1]", + "0x9a3fa82837622a34408888b40af937f21f4e6d051f04326d3d7717848c434448", + "0x1b", + "0x52a734f01d14d161795ba3b38ce329eba468e109b4f2e330af671649ffef4e0e", + "0xe3e2a22b830edf61554ab6c18c7efb9e37e1953c913784db0ef74e1e07c227d3", + true, + true)); + + // Test cases where ICP = 1 but successBit = 0 + // Failing reason QNR + arguments.add( + argumentsFromStrings( + "[ICP = 1, successBit = 0 due to QNR]", + "0x94f66d57fb0a3854a44d94956447e01f8b3f09845860f18856e792c821359162", + "0x1c", + "0x000000000000000000000000000000014551231950b75fc4402da1722fc9baed", + "0x44c819d6b971e456562fefc2408536bdfd9567ee1c6c7dd2a7076625953a1859", + true, + false)); + + // Failing reason INFINITY + arguments.add( + argumentsFromStrings( + "[ICP = 1, successBit = 0 due to INFINITY]", + "0xd33cfae367f4f7413985ff82dc7db3ffbf7a027fb5dad7097b4a15cc85ab6580", + "0x1c", + "0xa12b54d413c4ffaaecd59468de6a7d414d2fa7f2ba700d8e0753ca226410c806", + "0xe9956ef412dceeda0016fe0edfc4746452a8f4d02f21e28cfa6019ee1a8976e8", + true, + false)); + + // Failing reason INFINITY + arguments.add( + argumentsFromStrings( + "[ICP = 1, successBit = 0 due to INFINITY]", + "0x6ec17edf5cecd83ed50c08adfeba8146f69769231f4b7903eba38c2e7e98e173", + "0x1b", + "0xaeb8ffe3655e07edd6bde0ab79edd92d4e7a155385c3d8c8ca117bfd13633516", + "0x4da31701c798fe3078ee9de6e4d892242e235dc078df76b15a9ad82137c6250e", + true, + false)); + + return arguments.stream(); + } + + private static Arguments argumentsFromStrings( + String description, + String h, + String v, + String r, + String s, + boolean expectedInternalChecksPassed, + boolean expectedSuccessBit) { + return Arguments.of(description, h, v, r, s, expectedInternalChecksPassed, expectedSuccessBit); + } + + @ParameterizedTest + @MethodSource("ecRecoverSource") + void testEcRecover( + String description, + EWord h, + EWord v, + EWord r, + EWord s, + boolean expectedInternalChecksPassed, + boolean expectedSuccessBit) { + BytecodeCompiler program = + BytecodeCompiler.newProgram() + // First place the parameters in memory + .push(h) + .push(0) + .op(OpCode.MSTORE) + .push(v) // v + .push(0x20) + .op(OpCode.MSTORE) + .push(r) // r + .push(0x40) + .op(OpCode.MSTORE) + .push(s) // s + .push(0x60) + .op(OpCode.MSTORE) + // Do the call + .push(32) // retSize + .push(0x80) // retOffset + .push(0x80) // argSize + .push(0) // argOffset + .push(1) // address + .push(Bytes.fromHexStringLenient("0xFFFFFFFF")) // gas + .op(OpCode.STATICCALL); + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + // Retrieve recoveredAddress, internalChecksPassed, successBit + // Assert internalChecksPassed and successBit are what expected + EcDataOperation ecDataOperation = + bytecodeRunner.getHub().ecData().getOperations().stream().toList().get(0); + EWord recoveredAddress = + EWord.of( + ecDataOperation.limb().get(8).toUnsignedBigInteger(), + ecDataOperation.limb().get(9).toUnsignedBigInteger()); + boolean internalChecksPassed = ecDataOperation.internalChecksPassed(); + boolean successBit = ecDataOperation.successBit(); + + assertEquals(internalChecksPassed, expectedInternalChecksPassed); + assertEquals(successBit, expectedSuccessBit); + + System.out.println("recoveredAddress: " + recoveredAddress); + System.out.println("internalChecksPassed: " + internalChecksPassed); + System.out.println("successBit: " + successBit); + } + + // TODO: continue testing the other precompiles in a more structured way + @Test + void testEcAddGeneric() { + // TODO: The same inputs in failingMmuModexp return 0x, debug it! + BytecodeCompiler program = + BytecodeCompiler.newProgram() + // First place the parameters in memory + .push("070375d4eec4f22aa3ad39cb40ccd73d2dbab6de316e75f81dc2948a996795d5") // pX + .push(0) + .op(OpCode.MSTORE) + .push("041b98f07f44aa55ce8bd97e32cacf55f1e42229d540d5e7a767d1138a5da656") // pY + .push(0x20) + .op(OpCode.MSTORE) + .push("185f6f5cf93c8afa0461a948c2da7c403b6f8477c488155dfa8d2da1c62517b8") // qX + .push(0x40) + .op(OpCode.MSTORE) + .push("13d83d7a51eb18fdb51225873c87d44f883e770ce2ca56c305d02d6cb99ca5b8") // qY + .push(0x60) + .op(OpCode.MSTORE) + // Do the call + .push(0x40) // retSize + .push(0x80) // retOffset + .push(0x80) // argSize + .push(0) // argOffset + .push(6) // address + .push(Bytes.fromHexStringLenient("0xFFFFFFFF")) // gas + .op(OpCode.STATICCALL); + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + } + + @Test + void testEcAddWithPointAtInfinityAsResult() { + BytecodeCompiler program = + BytecodeCompiler.newProgram() + // First place the parameters in memory + .push(1) // pX + .push(0) + .op(OpCode.MSTORE) + .push(2) // pY + .push(0x20) + .op(OpCode.MSTORE) + .push(1) // qX + .push(0x40) + .op(OpCode.MSTORE) + .push("30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45") // qY + .push(0x60) + .op(OpCode.MSTORE) + // Do the call + .push(0x40) // retSize + .push(0x80) // retOffset + .push(0x80) // argSize + .push(0) // argOffset + .push(6) // address + .push(Bytes.fromHexStringLenient("0xFFFFFFFF")) // gas + .op(OpCode.STATICCALL); + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + } + + @Test + void testEcPairingWithTrivialPairing() { + BytecodeCompiler program = + BytecodeCompiler.newProgram() + .push(0x20) // retSize + .push(0) // retOffset + .push(192) // argSize + .push(0) // argOffset + .push(8) // address + .push(Bytes.fromHexStringLenient("0xFFFFFFFF")) // gas + .op(OpCode.STATICCALL); + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + } +} diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/ext/TestDuplicatedOperations.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/ext/TestDuplicatedOperations.java index 3053321356..9537c2ab6e 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/ext/TestDuplicatedOperations.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/ext/TestDuplicatedOperations.java @@ -43,7 +43,7 @@ void testDuplicate() { .compile()) .zkTracerValidator( zkTracer -> { - assertThat(zkTracer.getModulesLineCount().get("EXT")).isEqualTo(9); + assertThat(zkTracer.getModulesLineCount().get("EXT")).isEqualTo(8); }) .run(); } diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/hub/TestTwoPlusTwo.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/hub/TestTwoPlusTwo.java index c9b0dae20d..16d716b4cf 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/hub/TestTwoPlusTwo.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/hub/TestTwoPlusTwo.java @@ -18,6 +18,7 @@ import net.consensys.linea.zktracer.opcode.OpCode; import net.consensys.linea.zktracer.testing.BytecodeCompiler; import net.consensys.linea.zktracer.testing.BytecodeRunner; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; public class TestTwoPlusTwo { @@ -61,8 +62,9 @@ void ensureCorrectReturnDataInModexp() { .run(); } - @Test + @Disabled void testBreakingCall() { + // TODO: This test is disabled because it will throw an exception BytecodeRunner.of(BytecodeCompiler.newProgram().push(32).op(OpCode.CALL).compile()).run(); } } diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/mxp/MxpTest.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/mxp/MxpTest.java index a44995b0e9..b1546de473 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/mxp/MxpTest.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/mxp/MxpTest.java @@ -71,6 +71,11 @@ public class MxpTest { final OpCode[] opCodesHalting = new OpCode[] {OpCode.RETURN, OpCode.REVERT}; + @Test + void testMxpMinimalNonEmptyReturn() { + BytecodeRunner.of(Bytes.fromHexString("6101006000f3")).run(); + } + @Test void testMxpSimple() { BytecodeRunner.of( @@ -271,6 +276,7 @@ void testCall() { .run(); } + // Support methods private Bytes getRandomINITForCreate() { final int INSTRUCTION_COUNT_INIT = 256; BytecodeCompiler INIT = BytecodeCompiler.newProgram(); @@ -588,4 +594,28 @@ private OpCode getRandomOpCodeByType(MxpType mxpType) { default -> OpCode.MSIZE; // We never enter the default case since we skip MxpType.NONE }; } + + @Test + void testSeveralKeccaks() { + BytecodeRunner.of( + BytecodeCompiler.newProgram() + .push(0) + .push(0) + .op(OpCode.SHA3) + .op(OpCode.POP) + .push(64) + .push(13) + .op(OpCode.SHA3) + .op(OpCode.POP) + .push(11) + .push(75) + .op(OpCode.SHA3) + .op(OpCode.POP) + .push(32) + .push(32) + .op(OpCode.SHA3) + .op(OpCode.POP) + .compile()) + .run(); + } } diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobCallTest.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobCallTest.java new file mode 100644 index 0000000000..666ca1c925 --- /dev/null +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobCallTest.java @@ -0,0 +1,238 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.math.BigInteger; +import java.util.List; + +import net.consensys.linea.zktracer.module.hub.Hub; +import net.consensys.linea.zktracer.module.hub.signals.Exceptions; +import net.consensys.linea.zktracer.testing.BytecodeRunner; +import net.consensys.linea.zktracer.testing.ToyAccount; +import net.consensys.linea.zktracer.testing.ToyExecutionEnvironment; +import net.consensys.linea.zktracer.testing.ToyTransaction; +import net.consensys.linea.zktracer.testing.ToyWorld; +import net.consensys.linea.zktracer.types.EWord; +import org.apache.tuweni.bytes.Bytes; +import org.hyperledger.besu.crypto.KeyPair; +import org.hyperledger.besu.crypto.SECP256K1; +import org.hyperledger.besu.datatypes.Address; +import org.hyperledger.besu.datatypes.Hash; +import org.hyperledger.besu.datatypes.TransactionType; +import org.hyperledger.besu.datatypes.Wei; +import org.hyperledger.besu.ethereum.core.Transaction; +import org.junit.jupiter.api.Test; + +public class OobCallTest { + + @Test + void TestCallSendValueGreaterThanBalanceHiNonZero() { + EWord balanceOfCaller = EWord.of(BigInteger.ONE); + EWord amountToSend = EWord.of(BigInteger.ONE, BigInteger.ZERO); + + testCallSendValue(balanceOfCaller, amountToSend, 1); + } + + @Test + void TestCallSendValueGreaterThanBalanceLoNonZero() { + EWord balanceOfCaller = EWord.of(BigInteger.ONE); + EWord amountToSend = EWord.of(BigInteger.ZERO, BigInteger.TWO); + + testCallSendValue(balanceOfCaller, amountToSend, 1); + } + + @Test + void TestCallSendValueGreaterThanBalanceHiLoNonZero() { + EWord balanceOfCaller = EWord.of(BigInteger.ONE); + EWord amountToSend = EWord.of(BigInteger.TWO, BigInteger.TWO); + + testCallSendValue(balanceOfCaller, amountToSend, 1); + } + + @Test + void TestCallSendValueSmallerThanBalanceLoNonZero() { + EWord balanceOfCaller = EWord.of(BigInteger.TWO); + EWord amountToSend = EWord.of(BigInteger.ZERO, BigInteger.ONE); + + testCallSendValue(balanceOfCaller, amountToSend); + } + + /* + The two tests below may fail because of java.lang.OutOfMemoryError: Java heap space + unless maxHeapSize is adjusted in tests.gradle + */ + @Test + void testRecursiveCalls1024() { + EWord iterations = EWord.of(BigInteger.valueOf(1024)); + + testRecursiveCalls(iterations); + } + + @Test + void testRecursiveCalls1025() { + EWord iterations = EWord.of(BigInteger.valueOf(1025)); + + testRecursiveCalls(iterations, 1); + } + + @Test + void TestRecursiveCallsWithBytecode() { + BytecodeRunner bytecodeRunner = + BytecodeRunner.of(Bytes.fromHexString("60006000600060006000305af1")); + bytecodeRunner.run(Wei.fromEth(400), 0xfffffffffffL); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.none(hub.pch().exceptions())); + + // assertNumberOfOnesInOobEvent1(bytecodeRunner.getHub().oob(), 1); + } + + // Support methods + private void testCallSendValue(EWord balanceOfCaller, EWord amountToSend) { + testCallSendValue(balanceOfCaller, amountToSend, 0); + } + + private void testCallSendValue( + EWord balanceOfCaller, EWord amountToSend, int numberOfOnesInOobEvent1) { + /* NOTE: The contracts in this method are compiled by using + solc *.sol --bin-runtime --evm-version london -o compiledContracts + i.e., we do not include the init code of the contracts in the bytecode + */ + + // User address + KeyPair keyPair = new SECP256K1().generateKeyPair(); + Address userAddress = Address.extract(Hash.hash(keyPair.getPublicKey().getEncodedBytes())); + ToyAccount userAccount = + ToyAccount.builder().balance(Wei.fromEth(1)).nonce(1).address(userAddress).build(); + + // Caller + ToyAccount contractCallerAccount = + ToyAccount.builder() + .balance(Wei.of(balanceOfCaller.toBigInteger())) + .nonce(2) + .address(Address.fromHexString("0xd9145CCE52D386f254917e481eB44e9943F39138")) + .code( + Bytes.fromHexString( + "60806040526004361061002d5760003560e01c806363acac8e14610039578063ff277a621461006257610034565b3661003457005b600080fd5b34801561004557600080fd5b50610060600480360381019061005b91906101b5565b61008b565b005b34801561006e57600080fd5b5061008960048036038101906100849190610240565b61010f565b005b600081111561010c573073ffffffffffffffffffffffffffffffffffffffff166363acac8e6001836100bd91906102af565b6040518263ffffffff1660e01b81526004016100d991906102f2565b600060405180830381600087803b1580156100f357600080fd5b505af1158015610107573d6000803e3d6000fd5b505050505b50565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663671dcbd7836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561015c57600080fd5b505af1158015610170573d6000803e3d6000fd5b5050505050505050565b600080fd5b6000819050919050565b6101928161017f565b811461019d57600080fd5b50565b6000813590506101af81610189565b92915050565b6000602082840312156101cb576101ca61017a565b5b60006101d9848285016101a0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061020d826101e2565b9050919050565b61021d81610202565b811461022857600080fd5b50565b60008135905061023a81610214565b92915050565b600080604083850312156102575761025661017a565b5b60006102658582860161022b565b9250506020610276858286016101a0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006102ba8261017f565b91506102c58361017f565b92508282039050818111156102dd576102dc610280565b5b92915050565b6102ec8161017f565b82525050565b600060208201905061030760008301846102e3565b9291505056fea2646970667358221220eeda6cd078a1e0b43b7e0e6267949ef02a8119de7d68431781e3b1ef33a616d464736f6c63430008150033")) + .build(); + + // Callee + ToyAccount contractCalleeAccount = + ToyAccount.builder() + .balance(Wei.fromEth(1)) + .nonce(3) + .address(Address.fromHexString("0xd8b934580fcE35a11B58C6D73aDeE468a2833fa8")) + .code( + Bytes.fromHexString( + "60806040526004361061002d5760003560e01c806363acac8e14610039578063ff277a621461006257610034565b3661003457005b600080fd5b34801561004557600080fd5b50610060600480360381019061005b91906101b5565b61008b565b005b34801561006e57600080fd5b5061008960048036038101906100849190610240565b61010f565b005b600081111561010c573073ffffffffffffffffffffffffffffffffffffffff166363acac8e6001836100bd91906102af565b6040518263ffffffff1660e01b81526004016100d991906102f2565b600060405180830381600087803b1580156100f357600080fd5b505af1158015610107573d6000803e3d6000fd5b505050505b50565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663671dcbd7836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561015c57600080fd5b505af1158015610170573d6000803e3d6000fd5b5050505050505050565b600080fd5b6000819050919050565b6101928161017f565b811461019d57600080fd5b50565b6000813590506101af81610189565b92915050565b6000602082840312156101cb576101ca61017a565b5b60006101d9848285016101a0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061020d826101e2565b9050919050565b61021d81610202565b811461022857600080fd5b50565b60008135905061023a81610214565b92915050565b600080604083850312156102575761025661017a565b5b60006102658582860161022b565b9250506020610276858286016101a0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006102ba8261017f565b91506102c58361017f565b92508282039050818111156102dd576102dc610280565b5b92915050565b6102ec8161017f565b82525050565b600060208201905061030760008301846102e3565b9291505056fea2646970667358221220eeda6cd078a1e0b43b7e0e6267949ef02a8119de7d68431781e3b1ef33a616d464736f6c63430008150033")) + .build(); + + Transaction tx = + ToyTransaction.builder() + .sender(userAccount) + .to(contractCallerAccount) + .payload( + Bytes.fromHexString( + "0xff277a62000000000000000000000000d8b934580fce35a11b58c6d73adee468a2833fa8" + + amountToSend.toString().substring(2))) + .transactionType(TransactionType.FRONTIER) + .gasLimit(0xffffffffL) + .value(Wei.ZERO) + .keyPair(keyPair) + .build(); + + ToyWorld toyWorld = + ToyWorld.builder() + .accounts(List.of(userAccount, contractCallerAccount, contractCalleeAccount)) + .build(); + + ToyExecutionEnvironment toyExecutionEnvironment = + ToyExecutionEnvironment.builder() + .toyWorld(toyWorld) + .transaction(tx) + .testValidator(x -> {}) + .build(); + + toyExecutionEnvironment.run(); + + Hub hub = toyExecutionEnvironment.getHub(); + + assertTrue(Exceptions.none(hub.pch().exceptions())); + + // assertNumberOfOnesInOobEvent1(toyExecutionEnvironment.getHub().oob(), + // numberOfOnesInOobEvent1); + } + + private void testRecursiveCalls(EWord iterations) { + testRecursiveCalls(iterations, 0); + } + + private void testRecursiveCalls(EWord iterations, int numberOfOnesInOobEvent1) { + /* NOTE: The contracts in this method are compiled by using + solc *.sol --bin-runtime --evm-version london -o compiledContracts + i.e., we do not include the init code of the contracts in the bytecode + */ + // User address + KeyPair keyPair = new SECP256K1().generateKeyPair(); + Address userAddress = Address.extract(Hash.hash(keyPair.getPublicKey().getEncodedBytes())); + ToyAccount userAccount = + ToyAccount.builder().balance(Wei.fromEth(25)).nonce(1).address(userAddress).build(); + + // Caller + ToyAccount contractCallerAccount = + ToyAccount.builder() + .balance(Wei.fromEth(1)) + .nonce(2) + .address(Address.fromHexString("0xd9145CCE52D386f254917e481eB44e9943F39138")) + .code( + Bytes.fromHexString( + "60806040526004361061002d5760003560e01c806363acac8e14610039578063ff277a621461006257610034565b3661003457005b600080fd5b34801561004557600080fd5b50610060600480360381019061005b91906101b5565b61008b565b005b34801561006e57600080fd5b5061008960048036038101906100849190610240565b61010f565b005b600081111561010c573073ffffffffffffffffffffffffffffffffffffffff166363acac8e6001836100bd91906102af565b6040518263ffffffff1660e01b81526004016100d991906102f2565b600060405180830381600087803b1580156100f357600080fd5b505af1158015610107573d6000803e3d6000fd5b505050505b50565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663671dcbd7836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561015c57600080fd5b505af1158015610170573d6000803e3d6000fd5b5050505050505050565b600080fd5b6000819050919050565b6101928161017f565b811461019d57600080fd5b50565b6000813590506101af81610189565b92915050565b6000602082840312156101cb576101ca61017a565b5b60006101d9848285016101a0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061020d826101e2565b9050919050565b61021d81610202565b811461022857600080fd5b50565b60008135905061023a81610214565b92915050565b600080604083850312156102575761025661017a565b5b60006102658582860161022b565b9250506020610276858286016101a0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006102ba8261017f565b91506102c58361017f565b92508282039050818111156102dd576102dc610280565b5b92915050565b6102ec8161017f565b82525050565b600060208201905061030760008301846102e3565b9291505056fea2646970667358221220eeda6cd078a1e0b43b7e0e6267949ef02a8119de7d68431781e3b1ef33a616d464736f6c63430008150033")) + .build(); + + Transaction tx = + ToyTransaction.builder() + .sender(userAccount) + .to(contractCallerAccount) + .payload(Bytes.fromHexString("0x63acac8e" + iterations.toString().substring(2))) + .transactionType(TransactionType.FRONTIER) + .gasLimit(0xffffffffffL) + .value(Wei.ZERO) + .keyPair(keyPair) + .build(); + + ToyWorld toyWorld = + ToyWorld.builder().accounts(List.of(userAccount, contractCallerAccount)).build(); + + ToyExecutionEnvironment toyExecutionEnvironment = + ToyExecutionEnvironment.builder() + .toyWorld(toyWorld) + .transaction(tx) + .testValidator(x -> {}) + .build(); + + toyExecutionEnvironment.run(); + + Hub hub = toyExecutionEnvironment.getHub(); + + assertTrue(Exceptions.none(hub.pch().exceptions())); + + // assertNumberOfOnesInOobEvent1(toyExecutionEnvironment.getHub().oob(), + // numberOfOnesInOobEvent1); + } +} diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobJumpAndJumpiTest.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobJumpAndJumpiTest.java new file mode 100644 index 0000000000..4c05d59579 --- /dev/null +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobJumpAndJumpiTest.java @@ -0,0 +1,622 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import net.consensys.linea.zktracer.module.hub.Hub; +import net.consensys.linea.zktracer.module.hub.signals.Exceptions; +import net.consensys.linea.zktracer.opcode.OpCode; +import net.consensys.linea.zktracer.testing.BytecodeCompiler; +import net.consensys.linea.zktracer.testing.BytecodeRunner; +import net.consensys.linea.zktracer.types.EWord; +import org.apache.tuweni.bytes.Bytes; +import org.junit.jupiter.api.Test; + +public class OobJumpAndJumpiTest { + + public static final BigInteger TWO_POW_128_MINUS_ONE = + BigInteger.ONE.shiftLeft(128).subtract(BigInteger.ONE); + + @Test + void TestJumpSequenceSuccessTrivial() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + appendJump(EWord.of(35), program); + appendStop(program); + + appendJumpDest(program); // PC = 35 + appendJump(EWord.of(71), program); + appendStop(program); + + appendJumpDest(program); // PC = 71 + appendJump(EWord.of(107), program); + appendStop(program); + + appendJumpDest(program); // PC = 107 + appendStop(program); + + // codesize = 109 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpSequenceSuccessBackAndForth() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + appendJump(EWord.of(71), program); + appendStop(program); + + appendJumpDest(program); // PC = 35 + appendJump(EWord.of(107), program); + appendStop(program); + + appendJumpDest(program); // PC = 71 + appendJump(EWord.of(35), program); + appendStop(program); + + appendJumpDest(program); // PC = 107 + appendStop(program); + + // codesize = 109 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpSequenceFailingNoJumpdestTrivial() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + appendJump(EWord.of(35), program); + appendStop(program); + + appendJumpDest(program); // PC = 35 + appendJump(EWord.of(71), program); + appendStop(program); + + appendJumpDest(program); // PC = 71 + appendJump(EWord.of(106), program); // It fails because 106 is not a JUMPDEST + appendStop(program); + + appendJumpDest(program); // PC = 107 + + // codesize = 108 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpSequenceFailingOobTrivial() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + appendJump(EWord.of(35), program); + appendStop(program); + + appendJumpDest(program); // PC = 35 + appendJump(EWord.of(71), program); + appendStop(program); + + appendJumpDest(program); // PC = 71 + appendJump(EWord.of(108), program); // It fails because pc_new = 108 >= codesize = 108 + appendStop(program); + + appendJumpDest(program); // PC = 107 + + // codesize = 108 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpSequenceSuccessRandom() { + final int N_JUMPS = 200; + final int MAX_JUMPDESTINATION = 256; + final int SPREADING_FACTOR = 256; + + // Generate N_JUMPS random jump destinations + List jumpDestinations = + generateJumpDestinations(N_JUMPS, MAX_JUMPDESTINATION, SPREADING_FACTOR); + + // Compute the PC of each jump destination + Map jumpDestinationsToPC = computeJumpDestinationsToPCForJUMP(jumpDestinations); + + // Init a byteCode with all STOPs (0x00) + int byteCodeNumberOfElements = jumpDestinations.get(jumpDestinations.size() - 1) + 1; + List byteCode = initByteCode(byteCodeNumberOfElements); + + // First jump + byteCode.set(0, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set(1, jumpDestinationsToPC.get(jumpDestinations.get(0))); + byteCode.set(2, Bytes.of(OpCode.JUMP.byteValue())); + + // Jumps in the middle + for (int i = 0; i < jumpDestinations.size() - 1; i++) { + int jumpSource = jumpDestinations.get(i); + byteCode.set(jumpSource, Bytes.of(OpCode.JUMPDEST.byteValue())); + byteCode.set(jumpSource + 1, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set( + jumpSource + 2, + jumpDestinationsToPC.get( + jumpDestinations.get(i + 1))); // Jump to the next jump destination + byteCode.set(jumpSource + 3, Bytes.of(OpCode.JUMP.byteValue())); + } + + // Last jump destination + byteCode.set( + jumpDestinations.get(jumpDestinations.size() - 1), Bytes.of(OpCode.JUMPDEST.byteValue())); + + // Run the generated bytecode + BytecodeRunner bytecodeRunner = BytecodeRunner.of(Bytes.concatenate(byteCode)); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpSequenceSuccessRandomBackAndForth() { + final int N_JUMPS = 200; + final int MAX_JUMPDESTINATION = 256; + final int SPREADING_FACTOR = 256; + + // Generate N_JUMPS random jump destinations + List jumpDestinations = + generateJumpDestinations(N_JUMPS, MAX_JUMPDESTINATION, SPREADING_FACTOR); + + // Compute the PC of each jump destination + Map jumpDestinationsToPC = computeJumpDestinationsToPCForJUMP(jumpDestinations); + + // Init a byteCode with all STOPs (0x00) + int byteCodeNumberOfElements = jumpDestinations.get(jumpDestinations.size() - 1) + 1; + List byteCode = initByteCode(byteCodeNumberOfElements); + + // Define a permutation of the order of the jump destinations + List permutation = generatePermutation(jumpDestinations.size()); + + // First jump + byteCode.set(0, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set(1, jumpDestinationsToPC.get(jumpDestinations.get(permutation.get(0)))); + byteCode.set(2, Bytes.of(OpCode.JUMP.byteValue())); + + // Jumps in the middle + for (int i = 0; i < jumpDestinations.size() - 1; i++) { + int jumpSource = jumpDestinations.get(permutation.get(i)); + byteCode.set(jumpSource, Bytes.of(OpCode.JUMPDEST.byteValue())); + byteCode.set(jumpSource + 1, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set( + jumpSource + 2, + jumpDestinationsToPC.get( + jumpDestinations.get( + permutation.get(i + 1)))); // Jump to the next jump destination wrt permutation + byteCode.set(jumpSource + 3, Bytes.of(OpCode.JUMP.byteValue())); + } + + // Last jump destination + byteCode.set( + jumpDestinations.get(jumpDestinations.size() - 1), Bytes.of(OpCode.JUMPDEST.byteValue())); + + // Run the generated bytecode + BytecodeRunner bytecodeRunner = BytecodeRunner.of(Bytes.concatenate(byteCode)); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpiSequenceSuccessTrivial() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + appendJumpi(EWord.of(68), EWord.of(1), program); + appendStop(program); + + appendJumpDest(program); // PC = 68 + appendJumpi(EWord.of(137), EWord.of(1), program); + appendStop(program); + + appendJumpDest(program); // PC = 137 + appendJumpi(EWord.of(206), EWord.of(1), program); + appendStop(program); + + appendJumpDest(program); // PC = 206 + appendStop(program); + + // codesize = 208 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpiSequenceSuccessBackAndForth() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + appendJumpi(EWord.of(137), EWord.of(1), program); + appendStop(program); + + appendJumpDest(program); // PC = 68 + appendJumpi(EWord.of(206), EWord.of(1), program); + appendStop(program); + + appendJumpDest(program); // PC = 137 + appendJumpi(EWord.of(68), EWord.of(1), program); + appendStop(program); + + appendJumpDest(program); // PC = 206 + appendStop(program); + + // codesize = 208 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpiSequenceFailingNoJumpdestTrivial() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + appendJumpi(EWord.of(68), EWord.of(1), program); + appendStop(program); + + appendJumpDest(program); // PC = 68 + appendJumpi(EWord.of(137), EWord.of(1), program); + appendStop(program); + + appendJumpDest(program); // PC = 137 + appendJumpi(EWord.of(205), EWord.of(1), program); // It fails because 205 is not a JUMPDEST + appendStop(program); + + appendJumpDest(program); // PC = 206 + + // codesize = 207 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpiSequenceFailingOobTrivial() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + appendJumpi(EWord.of(68), EWord.of(1), program); + appendStop(program); + + appendJumpDest(program); // PC = 68 + appendJumpi(EWord.of(137), EWord.of(1), program); + appendStop(program); + + appendJumpDest(program); // PC = 137 + appendJumpi( + EWord.of(207), EWord.of(1), program); // It fails because pc_new = 207 >= codesize = 207 + appendStop(program); + + appendJumpDest(program); // PC = 206 + + // codesize = 207 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestNoJumpi() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + appendJumpi(EWord.of(68), EWord.of(0), program); // jumpCondition is 0, that means no JUMPI + appendStop(program); + + appendJumpDest(program); // PC = 68 + + // codesize = 69 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpiHiNonZero() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + EWord jumpCondition = EWord.of(TWO_POW_128_MINUS_ONE, BigInteger.ZERO); + appendJumpi(EWord.of(68), jumpCondition, program); + appendStop(program); + + appendJumpDest(program); // PC = 68 + + // codesize = 69 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpiLoNonZero() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + EWord jumpCondition = EWord.of(BigInteger.valueOf(0), TWO_POW_128_MINUS_ONE); + appendJumpi(EWord.of(68), jumpCondition, program); + appendStop(program); + + appendJumpDest(program); // PC = 68 + + // codesize = 69 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpiHiLoNonZero() { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + EWord jumpCondition = EWord.of(TWO_POW_128_MINUS_ONE, TWO_POW_128_MINUS_ONE); + appendJumpi(EWord.of(68), jumpCondition, program); + appendStop(program); + + appendJumpDest(program); // PC = 68 + + // codesize = 69 + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpiSequenceSuccessRandom() { + final int N_JUMPIS = 200; + final int MAX_JUMPDESTINATION = 256; + final int SPREADING_FACTOR = 256; + + // Generate N_JUMPIS random jump destinations + List jumpDestinations = + generateJumpDestinations(N_JUMPIS, MAX_JUMPDESTINATION, SPREADING_FACTOR); + + // Compute the PC of each jump destination + Map jumpDestinationsToPC = + computeJumpDestinationsToPCForJUMPI(jumpDestinations); + + // Init a byteCode with all STOPs (0x00) + int byteCodeNumberOfElements = jumpDestinations.get(jumpDestinations.size() - 1) + 1; + List byteCode = initByteCode(byteCodeNumberOfElements); + + // First jumpi + byteCode.set(0, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set(1, EWord.of(1)); + byteCode.set(2, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set(3, jumpDestinationsToPC.get(jumpDestinations.get(0))); + byteCode.set(4, Bytes.of(OpCode.JUMPI.byteValue())); + + // Jumpis in the middle + for (int i = 0; i < jumpDestinations.size() - 1; i++) { + int jumpiSource = jumpDestinations.get(i); + byteCode.set(jumpiSource, Bytes.of(OpCode.JUMPDEST.byteValue())); + byteCode.set(jumpiSource + 1, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set(jumpiSource + 2, EWord.of(1)); + byteCode.set(jumpiSource + 3, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set( + jumpiSource + 4, + jumpDestinationsToPC.get( + jumpDestinations.get(i + 1))); // Jumpi to the next jump destination + byteCode.set(jumpiSource + 5, Bytes.of(OpCode.JUMPI.byteValue())); + } + + // Last jump destination + byteCode.set( + jumpDestinations.get(jumpDestinations.size() - 1), Bytes.of(OpCode.JUMPDEST.byteValue())); + + // Run the generated bytecode + BytecodeRunner bytecodeRunner = BytecodeRunner.of(Bytes.concatenate(byteCode)); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + @Test + void TestJumpiSequenceSuccessRandomBackAndForth() { + final int N_JUMPIS = 200; + final int MAX_JUMPDESTINATION = 256; + final int SPREADING_FACTOR = 256; + + // Generate N_JUMPIS random jump destinations + List jumpDestinations = + generateJumpDestinations(N_JUMPIS, MAX_JUMPDESTINATION, SPREADING_FACTOR); + + // Compute the PC of each jump destination + Map jumpDestinationsToPC = + computeJumpDestinationsToPCForJUMPI(jumpDestinations); + + // Init a byteCode with all STOPs (0x00) + int byteCodeNumberOfElements = jumpDestinations.get(jumpDestinations.size() - 1) + 1; + List byteCode = initByteCode(byteCodeNumberOfElements); + + // Define a permutation of the order of the jump destinations + List permutation = generatePermutation(jumpDestinations.size()); + + // First jumpi + byteCode.set(0, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set(1, EWord.of(1)); + byteCode.set(2, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set(3, jumpDestinationsToPC.get(jumpDestinations.get(permutation.get(0)))); + byteCode.set(4, Bytes.of(OpCode.JUMPI.byteValue())); + + // Jumpis in the middle + for (int i = 0; i < jumpDestinations.size() - 1; i++) { + int jumpiSource = jumpDestinations.get(permutation.get(i)); + byteCode.set(jumpiSource, Bytes.of(OpCode.JUMPDEST.byteValue())); + byteCode.set(jumpiSource + 1, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set(jumpiSource + 2, EWord.of(1)); + byteCode.set(jumpiSource + 3, Bytes.of(OpCode.PUSH32.byteValue())); + byteCode.set( + jumpiSource + 4, + jumpDestinationsToPC.get( + jumpDestinations.get( + permutation.get(i + 1)))); // Jump to the next jump destination wrt permutation + byteCode.set(jumpiSource + 5, Bytes.of(OpCode.JUMPI.byteValue())); + } + + // Last jump destination + byteCode.set( + jumpDestinations.get(jumpDestinations.size() - 1), Bytes.of(OpCode.JUMPDEST.byteValue())); + + // Run the generated bytecode + BytecodeRunner bytecodeRunner = BytecodeRunner.of(Bytes.concatenate(byteCode)); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + assertFalse(Exceptions.jumpFault(hub.pch().exceptions())); + } + + // Support methods + private List generateJumpDestinations( + int N_JUMPS, int MAX_JUMPDESTINATION, int SPREADING_FACTOR) { + return ThreadLocalRandom.current() + .ints(1, MAX_JUMPDESTINATION) + .distinct() + .limit(N_JUMPS) + .sorted() + .map(x -> x * SPREADING_FACTOR) + .boxed() + .toList(); + } + + private List generatePermutation(int jumpDestinationsSize) { + List permutation = + ThreadLocalRandom.current() + .ints(0, jumpDestinationsSize - 1) + .distinct() + .limit(jumpDestinationsSize - 1) + .boxed() + .collect(Collectors.toList()); + permutation.add( + jumpDestinationsSize - 1); // The last jump has to be always to the last instruction + return permutation; + } + + private Map computeJumpDestinationsToPCForJUMP(List jumpDestinations) { + Map jumpDestinationsToPC = new HashMap<>(); + for (int i = 0; i < jumpDestinations.size(); i++) { + jumpDestinationsToPC.put( + jumpDestinations.get(i), EWord.of(jumpDestinations.get(i) + (i + 1) * 31L)); + } + return jumpDestinationsToPC; + } + + private Map computeJumpDestinationsToPCForJUMPI(List jumpDestinations) { + Map jumpDestinationsToPC = new HashMap<>(); + for (int i = 0; i < jumpDestinations.size(); i++) { + jumpDestinationsToPC.put( + jumpDestinations.get(i), EWord.of(jumpDestinations.get(i) + (i + 1) * 62L)); + } + return jumpDestinationsToPC; + } + + private List initByteCode(int byteCodeNumberOfElements) { + return IntStream.range(0, byteCodeNumberOfElements) + .mapToObj(i -> Bytes.of(OpCode.STOP.byteValue())) + .collect(Collectors.toCollection(ArrayList::new)); + } + + private void appendJump(EWord pcNew, BytecodeCompiler program) { + program.push(pcNew); + program.op(OpCode.JUMP); + System.out.println("Added JUMP at PC: " + program.compile().bitLength() / 8); + // 32 + 1 + 1 bytes + } + + private void appendJumpi(EWord pcNew, EWord jumpCondition, BytecodeCompiler program) { + program.push(jumpCondition); + program.push(pcNew); + program.op(OpCode.JUMPI); + System.out.println("Added JUMPI at PC: " + program.compile().bitLength() / 8); + // 32 + 1 + 32 + 1 + 1 bytes + } + + private void appendJumpDest(BytecodeCompiler program) { + program.op(OpCode.JUMPDEST); + System.out.println("Added JUMPDEST at PC: " + program.compile().bitLength() / 8); + // 1 byte + } + + private void appendStop(BytecodeCompiler program) { + program.op(OpCode.STOP); + System.out.println("Added STOP at PC: " + program.compile().bitLength() / 8); + // 1 byte + } +} diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobRdcTest.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobRdcTest.java new file mode 100644 index 0000000000..3b39d8c1cc --- /dev/null +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobRdcTest.java @@ -0,0 +1,805 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.math.BigInteger; + +import net.consensys.linea.zktracer.module.hub.Hub; +import net.consensys.linea.zktracer.module.hub.signals.Exceptions; +import net.consensys.linea.zktracer.opcode.OpCode; +import net.consensys.linea.zktracer.testing.BytecodeCompiler; +import net.consensys.linea.zktracer.testing.BytecodeRunner; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +public class OobRdcTest { + + public static final BigInteger TWO_POW_128_LEFT = + BigInteger.ONE.shiftLeft(128).subtract(BigInteger.valueOf(100)); + + public static final BigInteger TWO_POW_128_RIGHT = + BigInteger.ONE.shiftLeft(128).subtract(BigInteger.valueOf(100)); + + @Test + void TestReturnDataCopyMaxPosZero() { + // maxPos = offset + size = 0 + 0 < rds = 32 + BytecodeCompiler program = initReturnDataCopyProgram(BigInteger.ZERO, BigInteger.ZERO); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Disabled("This test is temporary disabled because of issue with CREATE") + void TestReturnDataCopyMaxPosRds() { + // maxPos = offset + size = 12 + 20 = rds = 32 + BytecodeCompiler program = + initReturnDataCopyProgram(BigInteger.valueOf(12), BigInteger.valueOf(20)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Disabled("This test is temporary disabled because of issue with CREATE") + void TestReturnDataCopyMaxPosSmallerThanRds() { + // maxPos = offset + size = 3 + 4 < rds = 32 + BytecodeCompiler program = + initReturnDataCopyProgram(BigInteger.valueOf(3), BigInteger.valueOf(4)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Disabled("This test is temporary disabled because of issue with CREATE") + void TestReturnDataCopyMaxPosSmallerThanRdsAndOffsetZero() { + // maxPos = offset + size = 0 + 4 < rds = 32 + BytecodeCompiler program = + initReturnDataCopyProgram(BigInteger.valueOf(0), BigInteger.valueOf(4)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Disabled("This test is temporary disabled because of issue with CREATE") + void TestReturnDataCopyMaxPosSmallerThanRdsAndSizeZero() { + // maxPos = offset + size = 3 + 0 < rds = 32 + BytecodeCompiler program = + initReturnDataCopyProgram(BigInteger.valueOf(3), BigInteger.valueOf(0)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + // Failing cases + + // offset smaller cases + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetSmallerAndSizeSmall() { + // maxPos = offset + size = 10 + 23 > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgram(BigInteger.valueOf(10), BigInteger.valueOf(23)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetSmallerAndSizeBigLeft() { + // maxPos = offset + size = 10 + TWO_POW_128_LEFT > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(BigInteger.valueOf(10), TWO_POW_128_LEFT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetSmallerAndSizeBigRight() { + // maxPos = offset + size = 10 + TWO_POW_128_RIGHT > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(BigInteger.valueOf(10), TWO_POW_128_RIGHT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + // offset just greater cases + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetJustGreaterAndSizeZero() { + // maxPos = offset + size = 33 + 0 > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgram(BigInteger.valueOf(33), BigInteger.valueOf(0)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetJustGreaterAndSizeSmall() { + // maxPos = offset + size = 33 + 23 > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgram(BigInteger.valueOf(33), BigInteger.valueOf(23)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetJustGreaterAndSizeBigLeft() { + // maxPos = offset + size = 33 + TWO_POW_128_LEFT > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(BigInteger.valueOf(33), TWO_POW_128_LEFT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetJustGreaterAndSizeBigRight() { + // maxPos = offset + size = 33 + TWO_POW_128_RIGHT > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(BigInteger.valueOf(33), TWO_POW_128_RIGHT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + // offset big left cases + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetBigLeftAndSizeZero() { + // maxPos = offset + size = TWO_POW_128_LEFT + 0 > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(TWO_POW_128_LEFT, BigInteger.valueOf(0)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetBigLeftAndSizeSmall() { + // maxPos = offset + size = TWO_POW_128_LEFT + 23 > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(TWO_POW_128_LEFT, BigInteger.valueOf(23)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetBigLeftAndSizeBigLeft() { + // maxPos = offset + size = TWO_POW_128_LEFT + TWO_POW_128_LEFT > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(TWO_POW_128_LEFT, TWO_POW_128_LEFT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetBigLeftAndSizeBigRight() { + // maxPos = offset + size = TWO_POW_128_LEFT + TWO_POW_128_RIGHT > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(TWO_POW_128_LEFT, TWO_POW_128_RIGHT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + // offset big right cases + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetBigRightAndSizeZero() { + // maxPos = offset + size = TWO_POW_128_RIGHT + 0 > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(TWO_POW_128_RIGHT, BigInteger.valueOf(0)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetBigRightAndSizeSmall() { + // maxPos = offset + size = TWO_POW_128_RIGHT + 23 > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(TWO_POW_128_RIGHT, BigInteger.valueOf(23)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetBigRightAndSizeBigLeft() { + // maxPos = offset + size = TWO_POW_128_Right + TWO_POW_128_LEFT > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(TWO_POW_128_RIGHT, TWO_POW_128_LEFT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + @Test + void TestReturnDataCopyMaxPosGreaterThanRdsAndOffsetBigRightAndSizeBigRight() { + // maxPos = offset + size = TWO_POW_128_RIGHT + TWO_POW_128_RIGHT > 32 = rds + BytecodeCompiler program = initReturnDataCopyProgram(TWO_POW_128_RIGHT, TWO_POW_128_RIGHT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + } + + // Same cases but using identity precompile + @Test + void TestReturnDataCopyUsingIdentityPrecompileMaxPosZero() { + // maxPos = offset + size = 0 + 0 < rds = 32 + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(BigInteger.ZERO, BigInteger.ZERO); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void TestReturnDataCopyUsingIdentityPrecompileMaxPosRds() { + // maxPos = offset + size = 12 + 20 = rds = 32 + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile( + BigInteger.valueOf(12), BigInteger.valueOf(20)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + System.out.println(bytecodeRunner.getHub().currentFrame().frame().getReturnData()); + + assertFalse(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void TestReturnDataCopyUsingIdentityPrecompileMaxPosSmallerThanRds() { + // maxPos = offset + size = 3 + 4 < rds = 32 + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile( + BigInteger.valueOf(3), BigInteger.valueOf(4)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void TestReturnDataCopyUsingIdentityPrecompileMaxPosSmallerThanRdsAndOffsetZero() { + // maxPos = offset + size = 0 + 4 < rds = 32 + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile( + BigInteger.valueOf(0), BigInteger.valueOf(4)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void TestReturnDataCopyUsingIdentityPrecompileMaxPosSmallerThanRdsAndSizeZero() { + // maxPos = offset + size = 3 + 0 < rds = 32 + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile( + BigInteger.valueOf(3), BigInteger.valueOf(0)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertFalse(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + // Failing cases + + // offset smaller cases + @Test + void TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetSmallerAndSizeSmall() { + // maxPos = offset + size = 10 + 23 > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile( + BigInteger.valueOf(10), BigInteger.valueOf(23)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + System.out.println(bytecodeRunner.getHub().currentFrame().frame().getReturnData()); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void + TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetSmallerAndSizeBigLeft() { + // maxPos = offset + size = 10 + TWO_POW_128_LEFT > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(BigInteger.valueOf(10), TWO_POW_128_LEFT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void + TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetSmallerAndSizeBigRight() { + // maxPos = offset + size = 10 + TWO_POW_128_RIGHT > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(BigInteger.valueOf(10), TWO_POW_128_RIGHT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + // offset just greater cases + @Test + void + TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetJustGreaterAndSizeZero() { + // maxPos = offset + size = 33 + 0 > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile( + BigInteger.valueOf(33), BigInteger.valueOf(0)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void + TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetJustGreaterAndSizeSmall() { + // maxPos = offset + size = 33 + 23 > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile( + BigInteger.valueOf(33), BigInteger.valueOf(23)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void + TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetJustGreaterAndSizeBigLeft() { + // maxPos = offset + size = 33 + TWO_POW_128_LEFT > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(BigInteger.valueOf(33), TWO_POW_128_LEFT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void + TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetJustGreaterAndSizeBigRight() { + // maxPos = offset + size = 33 + TWO_POW_128_RIGHT > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(BigInteger.valueOf(33), TWO_POW_128_RIGHT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + // offset big left cases + @Test + void TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetBigLeftAndSizeZero() { + // maxPos = offset + size = TWO_POW_128_LEFT + 0 > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(TWO_POW_128_LEFT, BigInteger.valueOf(0)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetBigLeftAndSizeSmall() { + // maxPos = offset + size = TWO_POW_128_LEFT + 23 > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(TWO_POW_128_LEFT, BigInteger.valueOf(23)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void + TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetBigLeftAndSizeBigLeft() { + // maxPos = offset + size = TWO_POW_128_LEFT + TWO_POW_128_LEFT > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(TWO_POW_128_LEFT, TWO_POW_128_LEFT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void + TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetBigLeftAndSizeBigRight() { + // maxPos = offset + size = TWO_POW_128_LEFT + TWO_POW_128_RIGHT > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(TWO_POW_128_LEFT, TWO_POW_128_RIGHT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + // offset big right cases + @Test + void TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetBigRightAndSizeZero() { + // maxPos = offset + size = TWO_POW_128_RIGHT + 0 > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(TWO_POW_128_RIGHT, BigInteger.valueOf(0)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void + TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetBigRightAndSizeSmall() { + // maxPos = offset + size = TWO_POW_128_RIGHT + 23 > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(TWO_POW_128_RIGHT, BigInteger.valueOf(23)); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void + TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetBigRightAndSizeBigLeft() { + // maxPos = offset + size = TWO_POW_128_Right + TWO_POW_128_LEFT > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(TWO_POW_128_RIGHT, TWO_POW_128_LEFT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + @Test + void + TestReturnDataCopyUsingIdentityPrecompileMaxPosGreaterThanRdsAndOffsetBigRightAndSizeBigRight() { + // maxPos = offset + size = TWO_POW_128_RIGHT + TWO_POW_128_RIGHT > 32 = rds + BytecodeCompiler program = + initReturnDataCopyProgramUsingIdentityPrecompile(TWO_POW_128_RIGHT, TWO_POW_128_RIGHT); + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + Hub hub = bytecodeRunner.getHub(); + + assertTrue(Exceptions.returnDataCopyFault(hub.pch().exceptions())); + + // Chunk with index 1 is the one corresponding to IDENTITY precompile + // precompileCost = (5 + ceil) * 3 where ceil = 1 + // cds is trivially 0 in initReturnDataCopyProgramUsingIdentityPrecompile + assertEquals( + bytecodeRunner.getHub().oob().getChunks().get(1).getPrecompileCost(), + BigInteger.valueOf(18)); + } + + // Support methods + BytecodeCompiler initReturnDataCopyProgram(BigInteger offset, BigInteger size) { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + // Creates a constructor that creates a contract which returns 32 FF + program + .push("7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") + .push(0) + .op(OpCode.MSTORE) + .push("FF6000527FFF60005260206000F3000000000000000000000000000000000000") + .push(32) + .op(OpCode.MSTORE) + .push("000000000060205260296000F300000000000000000000000000000000000000") + .push(64) + .op(OpCode.MSTORE); + + // Create the contract with the constructor code above + program + .push(77) + .push(0) + .push(0) + .op(OpCode.CREATE); // Puts the new contract address on the stack + + // Call the deployed contract + program.push(0).push(0).push(0).push(0).op(OpCode.DUP5).push("FFFFFFFF").op(OpCode.STATICCALL); + + // Clear the stack + program.op(OpCode.POP).op(OpCode.POP); + + // Clear the memory + program + .push(0) + .push(0) + .op(OpCode.MSTORE) + .push(0) + .push(32) + .op(OpCode.MSTORE) + .push(0) + .push(64) + .op(OpCode.MSTORE); + + // Invoke RETURNDATACOPY + program.push(size).push(offset).push(0).op(OpCode.RETURNDATACOPY); + + return program; + } + + BytecodeCompiler initReturnDataCopyProgramUsingIdentityPrecompile( + BigInteger offset, BigInteger size) { + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + // First place the parameters in memory + program + .push("AAAAAAAAAA9999999999BBBBBBBBBB8888888888CCCCCCCCCC7777777777DDDD") + . // data + push(0) + .op(OpCode.MSTORE); + + // Do the call + program + .push(0) + . // retSize + push(0) + . // retOffset + push(32) + . // argSize + push(0) + . // argOffset + push(4) + . // address + push("FFFFFFFF") + . // gas + op(OpCode.STATICCALL); + + // Clear the stack + program.op(OpCode.POP); + + // Clear the memory + program.push(0).push(0).op(OpCode.MSTORE); + + // Invoke RETURNDATACOPY + program.push(size).push(offset).push(0).op(OpCode.RETURNDATACOPY); + + return program; + } +} diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobSha2RipemdIdentityTest.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobSha2RipemdIdentityTest.java new file mode 100644 index 0000000000..812888f3d9 --- /dev/null +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/oob/OobSha2RipemdIdentityTest.java @@ -0,0 +1,288 @@ +/* + * Copyright Consensys Software Inc. + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package net.consensys.linea.zktracer.module.oob; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Random; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import com.google.common.io.BaseEncoding; +import net.consensys.linea.zktracer.module.hub.Hub; +import net.consensys.linea.zktracer.opcode.OpCode; +import net.consensys.linea.zktracer.testing.BytecodeCompiler; +import net.consensys.linea.zktracer.testing.BytecodeRunner; +import org.bouncycastle.crypto.digests.RIPEMD160Digest; +import org.bouncycastle.util.encoders.Hex; +import org.hyperledger.besu.datatypes.Address; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +public class OobSha2RipemdIdentityTest { + Random random = new Random(1L); + static final int[] argSizes = + new int[] {0, 1, 10, 20, 31, 32, 33, 63, 64, 65, 95, 96, 97, 127, 128, 129, 1000, 2000}; + + // https://coderpad.io/blog/development/writing-a-parameterized-test-in-junit-with-examples/ + // https://stackoverflow.com/questions/76124016/pass-externally-defined-variable-to-junit-valuesource-annotation-in-a-paramete + static int[] argSizesSource() { + return argSizes; + } + + @ParameterizedTest + @MethodSource("argSizesSource") + void TestSha2(int argSize) throws NoSuchAlgorithmException { + String data = generateHexString(argSize); + ProgramAndRetInfo programAndRetInfo = initProgramInvokingPrecompile(data, Address.SHA256); + BytecodeCompiler program = programAndRetInfo.program(); + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + String referenceComputedHash = sha256(data); + final Hub hub = bytecodeRunner.getHub(); + String prcComputedHash = hub.currentFrame().frame().getReturnData().toString(); + + // String returnDataSizeMaybe = hub.currentFrame().frame().getStackItem(0).toString(); + // System.out.println("RETURNDATASIZE after a SHA2 CALL:" + returnDataSizeMaybe); + // System.out.println("Test SHA2-256 with random argSize = " + argSize); + // System.out.println("Inp: 0x" + data); + // System.out.println("Ref: " + referenceComputedHash); + // System.out.println("Com: " + prcComputedHash); + + assertEquals(referenceComputedHash, prcComputedHash); + } + + @ParameterizedTest + @MethodSource("argSizesSource") + void TestIdentity(int argSize) { + String data = generateHexString(argSize); + ProgramAndRetInfo programAndRetInfo = initProgramInvokingPrecompile(data, Address.ID); + BytecodeCompiler program = programAndRetInfo.program(); + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + String returnedData = bytecodeRunner.getHub().currentFrame().frame().getReturnData().toString(); + // System.out.println(returnedData); + // System.out.println("Test IDENTITY with random argSize = " + argSize); + // System.out.println("Inp: 0x" + data); + // System.out.println("Ret: " + returnedData); + assertEquals("0x" + data.toLowerCase(), returnedData); + } + + @ParameterizedTest + @MethodSource("argSizesSource") + void TestRipmd(int argSize) { + String data = generateHexString(argSize); + ProgramAndRetInfo programAndRetInfo = initProgramInvokingPrecompile(data, Address.RIPEMD160); + BytecodeCompiler program = programAndRetInfo.program(); + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + String referenceComputedHash = ripemd160(data); + String prcComputedHash = + bytecodeRunner.getHub().currentFrame().frame().getReturnData().toString(); + + // System.out.println("Test RIPEMD-160 with random argSize = " + argSize); + // System.out.println("Inp: 0x" + data); + // System.out.println("Ref: " + referenceComputedHash); + // System.out.println("Com: " + prcComputedHash); + + assertEquals(referenceComputedHash, prcComputedHash); + } + + // Support methods + private String generateHexString(int size) { + return IntStream.range(0, size) + .mapToObj(i -> String.format("%02x", random.nextInt(256))) + .collect(Collectors.joining()); + } + + private String sha256(String hexString) throws NoSuchAlgorithmException { + byte[] byteInput = BaseEncoding.base16().decode(hexString.toUpperCase()); + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(byteInput); + return "0x" + BaseEncoding.base16().encode(hash).toLowerCase(); + } + + private static String ripemd160(String hexString) { + byte[] byteInput = BaseEncoding.base16().decode(hexString.toUpperCase()); + RIPEMD160Digest digest = new RIPEMD160Digest(); + digest.update(byteInput, 0, byteInput.length); + byte[] hash = new byte[digest.getDigestSize()]; + digest.doFinal(hash, 0); + return "0x000000000000000000000000" + Hex.toHexString(hash); + } + + @Test + void TestPrcSupportMethods() throws NoSuchAlgorithmException { + String data = generateHexString(32); + System.out.println("SHA2-256 of random data: " + sha256(data)); + System.out.println("RIPEMD-160 of random data: " + ripemd160(data)); + assert (sha256("") + .equals("0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")); + assert (sha256("00") + .equals("0x6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d")); + assert (sha256("0000") + .equals("0x96a296d224f285c67bee93c30f8a309157f0daa35dc5b87e410b78630a09cfc7")); + assert (sha256("ff") + .equals("0xa8100ae6aa1940d0b663bb31cd466142ebbdbd5187131b92d93818987832eb89")); + assert (sha256( + "aaaaaaaaaa9999999999bbbbbbbbbb8888888888cccccccccc7777777777ddddaaaaaaaaaa9999999999bbbbbbbbbb8888888888cccccccccc7777777777dddd") + .equals("0xfa3695ebdadeb06f552f983ff12deea809391ca80d10f0dd27fea25ae8a6daa7")); + assert (ripemd160("") + .equals("0x0000000000000000000000009c1185a5c5e9fc54612808977ee8f548b2258d31")); + assert (ripemd160("00") + .equals("0x000000000000000000000000c81b94933420221a7ac004a90242d8b1d3e5070d")); + assert (ripemd160("0000") + .equals("0x000000000000000000000000f7d50d120d655be4b88750873e00caf147f28a1b")); + assert (ripemd160("ff") + .equals("0x0000000000000000000000002c0c45d3ecab80fe060e5f1d7057cd2f8de5e557")); + assert (ripemd160( + "aaaaaaaaaa9999999999bbbbbbbbbb8888888888cccccccccc7777777777ddddaaaaaaaaaa9999999999bbbbbbbbbb8888888888cccccccccc7777777777dddd") + .equals("0x0000000000000000000000009c08e833ee0d5d3e42f332e2d22563b68617bfba")); + } + + private String padToEWord(String input, boolean toTheLeft) { + if (toTheLeft) { + return "00".repeat(32 - input.length() / 2) + input; + } else { + return input + "00".repeat(32 - input.length() / 2); + } + } + + private String subHexString(String input, int from, int to) { + return input.substring(from * 2, to * 2); + } + + private String subHexString(String input, int from) { + return input.substring(from * 2); + } + + private record ProgramAndRetInfo( + BytecodeCompiler program, int argSize, int argOffset, int retSize, int retOffset) {} + + ProgramAndRetInfo initProgramInvokingPrecompile(String data, Address address) { + int argSize = data.length() / 2; + int argOffset = 0; + + int retSize = address == Address.ID ? argSize : 32; + int retOffset = 0; + + BytecodeCompiler program = BytecodeCompiler.newProgram(); + + // MSTORE data if argSize > 0 + if (argSize > 0) { + // Note that argSize <= 32 is treated in a slightly different way than argSize > 32 to avoid + // splitting the input and padding + if (argSize <= 32) { + // The random offset is applied before the EWord + // Generate a small random offset + int randomOffset = random.nextInt(1, 5); + argOffset = randomOffset + 32 - argSize; + retOffset = address == Address.ID ? randomOffset + 64 - argSize : randomOffset + 32; + + program + .push(data) + . // data + push(randomOffset) + .op(OpCode.MSTORE); + } else { // argSize > 32 + // The random offset is applied between the beginning of the first EWord and the input + // Generate a small random offset + argOffset = random.nextInt(1, 5); + retOffset = argOffset + argSize; + + // MSTORE first EWord + String firstEWord = padToEWord(subHexString(data, 0, 32 - argOffset), true); + program + .push(firstEWord) + . // data + push( + 0) // The argOffset is already taken into consideration by padding zeros to the left + .op(OpCode.MSTORE); + + // MSTORE EWord in the middle + int i = 1; + while (32 * i - argOffset + 32 < argSize) { + String middleEWord = subHexString(data, 32 * i - argOffset, 32 * i - argOffset + 32); + program + .push(middleEWord) + . // data + push(32 * i) + .op(OpCode.MSTORE); + i++; + } + + // MSTORE last EWord + String lastEWord = padToEWord(subHexString(data, 32 * i - argOffset), false); + program + .push(lastEWord) + . // data + push(32 * i) + .op(OpCode.MSTORE); + } + } + + program + .push(retSize) + . // retSize + push(retOffset) + . // retOffset + push(argSize) + . // argSize + push(argOffset) + . // argOffset + push(address) + . // address + push("FFFFFFFF") + . // gas + op(OpCode.STATICCALL) + .op(OpCode.RETURNDATASIZE); + + return new ProgramAndRetInfo(program, argSize, argOffset, retSize, retOffset); + } + + @ParameterizedTest + @MethodSource("argSizesSource") + void TestInitProgramInvokingPrecompileDataInMemorySupportMethod(int argSize) { + // This test is to ensure that the data written in memory is the same as the input data + String data = generateHexString(argSize); + + ProgramAndRetInfo programAndRetInfo = initProgramInvokingPrecompile(data, Address.ZERO); + BytecodeCompiler program = programAndRetInfo.program(); + + BytecodeRunner bytecodeRunner = BytecodeRunner.of(program.compile()); + bytecodeRunner.run(); + + String dataInMemory = + bytecodeRunner + .getHub() + .currentFrame() + .frame() + .shadowReadMemory(programAndRetInfo.argOffset, programAndRetInfo.argSize) + .toString(); + System.out.println("0x" + data); + System.out.println(dataInMemory); + assertEquals("0x" + data.toLowerCase(), dataInMemory); + } +} diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/rlpaddr/TestRlpAddress.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/rlpaddr/TestRlpAddress.java index 6e89f40401..cadf940c54 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/rlpaddr/TestRlpAddress.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/rlpaddr/TestRlpAddress.java @@ -110,7 +110,7 @@ void test() { private ToyAccount randCreate(int initCodeSize) { byte[] value = bigIntegerToBytes(BigInteger.valueOf(randLong())).toArray(); return ToyAccount.builder() - .balance(Wei.MAX_WEI) + .balance(Wei.fromEth(1000)) .nonce(randLong()) .address(Address.wrap(Bytes.repeat((byte) 0x01, 20))) .code( @@ -132,7 +132,7 @@ private ToyAccount randCreateTwo(int initCodeSize) { byte[] value = bigIntegerToBytes(BigInteger.valueOf(randLong())).toArray(); return ToyAccount.builder() - .balance(Wei.MAX_WEI) + .balance(Wei.fromEth(1000)) .nonce(randLong()) .address(Address.wrap(Bytes.repeat((byte) 0x02, 20))) .code( diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/shf/ShfRtTracerTest.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/shf/ShfRtTracerTest.java index 6a0e779375..56eadf8054 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/module/shf/ShfRtTracerTest.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/module/shf/ShfRtTracerTest.java @@ -47,6 +47,14 @@ void testFailingBlockchainBlock(final int opCodeValue) { .run(); } + @Test + void TestShfResultFailure() { + BytecodeRunner.of( + Bytes.fromHexString( + "7faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa7fa0000000000000000000000000000000000000000000000000000000000000001d")) + .run(); + } + @ParameterizedTest(name = "{0}") @MethodSource("provideRandomSarArguments") void testRandomSar(final Bytes32[] payload) { diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/BytecodeCompiler.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/BytecodeCompiler.java index 054163193d..eb6e4baab4 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/BytecodeCompiler.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/BytecodeCompiler.java @@ -184,6 +184,16 @@ public BytecodeCompiler push(final BigInteger xs) { return this.push(bigIntegerToBytes(xs)); } + /** + * Add a {@link OpCode#PUSH1} and a {@link String} argument representing a hex number. + * + * @param x String argument representing a hex number + * @return current instance + */ + public BytecodeCompiler push(final String x) { + return this.push(new BigInteger(x, 16)); + } + /** * Add a {@link OpCode#PUSH1} and int number argument. * diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/BytecodeRunner.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/BytecodeRunner.java index a19e32ddb5..22532c91e9 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/BytecodeRunner.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/BytecodeRunner.java @@ -16,12 +16,15 @@ package net.consensys.linea.zktracer.testing; import java.util.List; +import java.util.Optional; import java.util.function.Consumer; import com.google.common.base.Preconditions; import lombok.Setter; import lombok.experimental.Accessors; import net.consensys.linea.zktracer.ZkTracer; +import net.consensys.linea.zktracer.module.constants.GlobalConstants; +import net.consensys.linea.zktracer.module.hub.Hub; import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.crypto.KeyPair; import org.hyperledger.besu.crypto.SECP256K1; @@ -36,7 +39,9 @@ */ @Accessors(fluent = true) public final class BytecodeRunner { + public static final long DEFAULT_GAS_LIMIT = 25_000_000L; private final Bytes byteCode; + ToyExecutionEnvironment toyExecutionEnvironment; /** * @param byteCode the byte code to test @@ -52,13 +57,23 @@ public static BytecodeRunner of(Bytes byteCode) { @Setter private Consumer zkTracerValidator = zkTracer -> {}; public void run() { + this.run(Wei.fromEth(1), (long) GlobalConstants.LINEA_BLOCK_GAS_LIMIT); + } + + public void run(Wei senderBalance) { + this.run(senderBalance, (long) GlobalConstants.LINEA_BLOCK_GAS_LIMIT); + } + + public void run(Wei senderBalance, Long gasLimit) { Preconditions.checkArgument(byteCode != null, "byteCode cannot be empty"); KeyPair keyPair = new SECP256K1().generateKeyPair(); Address senderAddress = Address.extract(Hash.hash(keyPair.getPublicKey().getEncodedBytes())); final ToyAccount senderAccount = - ToyAccount.builder().balance(Wei.fromEth(1)).nonce(5).address(senderAddress).build(); + ToyAccount.builder().balance(senderBalance).nonce(5).address(senderAddress).build(); + + final Long selectedGasLimit = Optional.of(gasLimit).orElse(DEFAULT_GAS_LIMIT); final ToyAccount receiverAccount = ToyAccount.builder() @@ -73,18 +88,24 @@ public void run() { .sender(senderAccount) .to(receiverAccount) .keyPair(keyPair) - .gasLimit(25000000L) + .gasLimit(selectedGasLimit) .build(); final ToyWorld toyWorld = ToyWorld.builder().accounts(List.of(senderAccount, receiverAccount)).build(); - ToyExecutionEnvironment.builder() - .testValidator(x -> {}) - .toyWorld(toyWorld) - .zkTracerValidator(zkTracerValidator) - .transaction(tx) - .build() - .run(); + toyExecutionEnvironment = + ToyExecutionEnvironment.builder() + .testValidator(x -> {}) + .toyWorld(toyWorld) + .zkTracerValidator(zkTracerValidator) + .transaction(tx) + .build(); + + toyExecutionEnvironment.run(); + } + + public Hub getHub() { + return toyExecutionEnvironment.getHub(); } } diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/ToyAccount.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/ToyAccount.java index c426c6c91c..4dcf2480e5 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/ToyAccount.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/ToyAccount.java @@ -68,6 +68,11 @@ public Address getAddress() { return address; } + @Override + public boolean isStorageEmpty() { + return false; + } + @Override public Hash getAddressHash() { return addressHash.get(); diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/ToyExecutionEnvironment.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/ToyExecutionEnvironment.java index 98a00448b7..ada1c48da7 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/ToyExecutionEnvironment.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/testing/ToyExecutionEnvironment.java @@ -38,7 +38,8 @@ import net.consensys.linea.blockcapture.snapshots.TransactionSnapshot; import net.consensys.linea.corset.CorsetValidator; import net.consensys.linea.zktracer.ZkTracer; -import net.consensys.linea.zktracer.module.hub.signals.Exceptions; +import net.consensys.linea.zktracer.module.constants.GlobalConstants; +import net.consensys.linea.zktracer.module.hub.Hub; import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.datatypes.*; import org.hyperledger.besu.ethereum.core.*; @@ -54,6 +55,7 @@ import org.hyperledger.besu.evm.MainnetEVMs; import org.hyperledger.besu.evm.gascalculator.GasCalculator; import org.hyperledger.besu.evm.internal.EvmConfiguration; +import org.hyperledger.besu.evm.precompile.MainnetPrecompiledContracts; import org.hyperledger.besu.evm.precompile.PrecompileContractRegistry; import org.hyperledger.besu.evm.processor.ContractCreationProcessor; import org.hyperledger.besu.evm.processor.MessageCallProcessor; @@ -159,7 +161,6 @@ private void executeFrom(final ConflationSnapshot conflation) { for (Transaction tx : body.getTransactions()) { transactionProcessor.processTransaction( - null, overridenToyWorld.updater(), (ProcessableBlockHeader) header, tx, @@ -197,7 +198,6 @@ private void execute() { for (Transaction tx : mockBlockBody.getTransactions()) { final TransactionProcessingResult result = transactionProcessor.processTransaction( - null, toyWorld.updater(), (ProcessableBlockHeader) header, tx, @@ -217,8 +217,14 @@ private void execute() { } private MainnetTransactionProcessor getMainnetTransactionProcessor() { + + PrecompileContractRegistry precompileContractRegistry = new PrecompileContractRegistry(); + + MainnetPrecompiledContracts.populateForIstanbul( + precompileContractRegistry, evm.getGasCalculator()); + final MessageCallProcessor messageCallProcessor = - new MessageCallProcessor(evm, new PrecompileContractRegistry()); + new MessageCallProcessor(evm, precompileContractRegistry); final ContractCreationProcessor contractCreationProcessor = new ContractCreationProcessor(evm.getGasCalculator(), evm, false, List.of(), 0); @@ -232,7 +238,7 @@ private MainnetTransactionProcessor getMainnetTransactionProcessor() { false, Optional.of(this.chainId), Set.of(TransactionType.FRONTIER, TransactionType.ACCESS_LIST, TransactionType.EIP1559), - Exceptions.MAX_CODE_SIZE), + GlobalConstants.MAX_CODE_SIZE), contractCreationProcessor, messageCallProcessor, true, @@ -241,4 +247,8 @@ private MainnetTransactionProcessor getMainnetTransactionProcessor() { feeMarket, CoinbaseFeePriceCalculator.eip1559()); } + + public Hub getHub() { + return tracer.getHub(); + } } diff --git a/arithmetization/src/test/resources/contracts/oob/Callee.sol b/arithmetization/src/test/resources/contracts/oob/Callee.sol new file mode 100644 index 0000000000..28e519cd0a --- /dev/null +++ b/arithmetization/src/test/resources/contracts/oob/Callee.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Callee { + event EtherReceived(address sender, uint256 amount); + + function calleeFunction() external payable { + emit EtherReceived(msg.sender, msg.value); + } +} \ No newline at end of file diff --git a/arithmetization/src/test/resources/contracts/oob/Caller.sol b/arithmetization/src/test/resources/contracts/oob/Caller.sol new file mode 100644 index 0000000000..b0b0cb9114 --- /dev/null +++ b/arithmetization/src/test/resources/contracts/oob/Caller.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.2 <0.9.0; + +import "./Callee.sol"; + +contract Caller { + + function invokeCalleeFunctionWithEther(address calleeAddress, uint256 amount) external { + Callee calleeContract = Callee(calleeAddress); + // Transfer amount to the Callee contract from Caller balance + calleeContract.calleeFunction{value: amount}(); + } + + + function invokeOwnFunctionRecursively(uint256 iterations) public { + if (iterations > 0) { + this.invokeOwnFunctionRecursively(iterations - 1); + } + } + + // Function to receive Ether + receive() external payable {} +} \ No newline at end of file diff --git a/arithmetization/src/test/resources/contracts/oob/compiledContracts/Callee.bin-runtime b/arithmetization/src/test/resources/contracts/oob/compiledContracts/Callee.bin-runtime new file mode 100644 index 0000000000..513907510f --- /dev/null +++ b/arithmetization/src/test/resources/contracts/oob/compiledContracts/Callee.bin-runtime @@ -0,0 +1 @@ +608060405260043610601c5760003560e01c8063671dcbd7146021575b600080fd5b60276029565b005b7f1e57e3bb474320be3d2c77138f75b7c3941292d647f5f9634e33a8e94e0e069b3334604051605892919060b6565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000608b826062565b9050919050565b6099816082565b82525050565b6000819050919050565b60b081609f565b82525050565b600060408201905060c960008301856092565b60d4602083018460a9565b939250505056fea2646970667358221220db0fd3e56b2e3e01fc7e13c3d4079963fd4a197b9952ae46f9f273efe2eb481964736f6c63430008150033 \ No newline at end of file diff --git a/arithmetization/src/test/resources/contracts/oob/compiledContracts/Caller.bin-runtime b/arithmetization/src/test/resources/contracts/oob/compiledContracts/Caller.bin-runtime new file mode 100644 index 0000000000..bb7d293005 --- /dev/null +++ b/arithmetization/src/test/resources/contracts/oob/compiledContracts/Caller.bin-runtime @@ -0,0 +1 @@ +60806040526004361061002d5760003560e01c806363acac8e14610039578063ff277a621461006257610034565b3661003457005b600080fd5b34801561004557600080fd5b50610060600480360381019061005b91906101b5565b61008b565b005b34801561006e57600080fd5b5061008960048036038101906100849190610240565b61010f565b005b600081111561010c573073ffffffffffffffffffffffffffffffffffffffff166363acac8e6001836100bd91906102af565b6040518263ffffffff1660e01b81526004016100d991906102f2565b600060405180830381600087803b1580156100f357600080fd5b505af1158015610107573d6000803e3d6000fd5b505050505b50565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663671dcbd7836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561015c57600080fd5b505af1158015610170573d6000803e3d6000fd5b5050505050505050565b600080fd5b6000819050919050565b6101928161017f565b811461019d57600080fd5b50565b6000813590506101af81610189565b92915050565b6000602082840312156101cb576101ca61017a565b5b60006101d9848285016101a0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061020d826101e2565b9050919050565b61021d81610202565b811461022857600080fd5b50565b60008135905061023a81610214565b92915050565b600080604083850312156102575761025661017a565b5b60006102658582860161022b565b9250506020610276858286016101a0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006102ba8261017f565b91506102c58361017f565b92508282039050818111156102dd576102dc610280565b5b92915050565b6102ec8161017f565b82525050565b600060208201905061030760008301846102e3565b9291505056fea2646970667358221220eeda6cd078a1e0b43b7e0e6267949ef02a8119de7d68431781e3b1ef33a616d464736f6c63430008150033 \ No newline at end of file diff --git a/arithmetization/src/test/resources/replays/2982051-2982061.json.gz b/arithmetization/src/test/resources/replays/2982051-2982061.json.gz new file mode 100644 index 0000000000..0c3e504b04 Binary files /dev/null and b/arithmetization/src/test/resources/replays/2982051-2982061.json.gz differ diff --git a/arithmetization/src/test/resources/replays/3149945-3149946.json b/arithmetization/src/test/resources/replays/3149945-3149946.json new file mode 100644 index 0000000000..7147a213b8 --- /dev/null +++ b/arithmetization/src/test/resources/replays/3149945-3149946.json @@ -0,0 +1,15695 @@ +{ + "blocks": [ + { + "header": { + "parentHash": "0x8fb816291f7ff031bd300ec68ebc8105159fa0a69811915978bf21ed1b47a086", + "ommersHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x1f426d7ad1fb0141af5815b110fea784abdd3bfa7c1e2ea086643a91b1ecf2e7", + "transactionRoot": "0xafa990022a3774297fce8d072f6abfb32cd63e5a50c8089783ea13061199a704", + "receiptsRoot": "0x99bfed91fd2612c797c83e01a813caf45d5c54e1b53182091420d651ce83d092", + "logsBloom": "0xf6768a04e2974221a3102121a6d84c038e126b5c4580465100000004062417036ca1463caa286107040de324e9d2202220932e10050520270e845d0a82a72d58750b4006196584451b018d0d66d023e540dc1220405c9264118162689a0bc9005660b222222c2a44074a446a5c981c09516563a22414dc108f0fcb3c009b0c48047246230b32596158d3c00008aa207c282890516ca140474c823949610668403200c97e60bab131a994632584cb880820c65145001a09739251200d6880288bce08ac22081610280502888522448a8114808100e2cd10810ca520131210692c1217222a1ac52904a0064582048100c6513804623218e068805eccbd8090c922", + "difficulty": "0x0000000000000000000000000000000000000000000000000000000000000002", + "number": 3149945, + "gasLimit": 61000000, + "gasUsed": 15516146, + "timestamp": 1711457753, + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000be9d72dbf001a979b324e464f63b06aff2d9789485c34f59346d9d3c190198e4332205f6a3a032eb6a5918591af38c1ef8a19fb4a0943a2427abbcd1cc6aa93100", + "mixHashOrPrevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": 0, + "baseFee": { + "value": "0x0000000000000000000000000000000000000000000000000000000000000007" + } + }, + "txs": [ + { + "r": "2cd988ca7bd29d13d9724ffba71b8f9b0a48c3b5bd98462076e23b652856c020", + "s": "1eb8960c72f6befab3bb9a91200e66cbe5e77427c0f49705109333613a3e6ddc", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xf89d7b9c864f589bbf53a82105107622b35eaa40", + "to": { + "value": "0xed56a70610622578487302371d64d5bdcf2ff8f2" + }, + "nonce": 221924, + "value": "0x0000000000000000000000000000000000000000000000000013e52b9abe0000", + "payload": "0x", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000012a05f200" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 90000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "1e1e3a30af2eb632002ffd77ec2bb054a1efebc151f951dcd93b8afac623f6f3", + "s": "7a1b1385baa01b3760db0247bd2baf9aedf7313c9d8f9bc87d4699f3a437e616", + "v": "1", + "type": "EIP1559", + "sender": "0x2ef7557d99ab910210405a4c472e4a7c0344f569", + "to": { + "value": "0x6cd20be8914a9be48f2a35e56354490b80522856" + }, + "nonce": 19, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xb9a2092d", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f900" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f90e" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 23460, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "29f530a652e8851eb364123ba065fa2df969485c664359c845dfbd7f93d2da67", + "s": "ca918ed2ff8ff746e450286574012a2e5ff1e1286cfd2fd5051cc95e513814d8", + "v": "0", + "type": "EIP1559", + "sender": "0x6c354d27b8e7e413a1e42a43100a6957d6af5256", + "to": { + "value": "0x612af58f8016c06e603d803829ccfd843f787618" + }, + "nonce": 21, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x064a181e0000000000000000000000000000000000000000000000000266a46f7b00200000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000041639142b8d6f97f3c1265808c05604637a786b33da8f8e8c275a028698f6bb24e1b75f10554590df3cf922282dc19b68335a994a0a299c4732bad8a6647cfe2c50100000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f900" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f90e" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 535035, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "6ffd4d6a01007ddbf5cc95f9ec5761fe2dfe7118e315a5b62e996b1b405f39d7", + "s": "7411f828d6401ea788ffee7d84a6bca4d8aed56ce3ed9d302731fd4011ce64a1", + "v": "0", + "type": "EIP1559", + "sender": "0x34c2f64eae617691bd24a5acb1d77565676cb8c1", + "to": { + "value": "0x70bf27bbb562a9b21fe6eaf2b7832c476691a39f" + }, + "nonce": 26, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1eedb60700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000006602c49f000000000000000000000000967035b7cc9a323c6019fb0b9c53a308d2ca551c000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064156e29f600000000000000000000000034c2f64eae617691bd24a5acb1d77565676cb8c1fa5fb00c383f2ea90616c5eaffb819d3eec79f642163ec8de7ded980566c6c710000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041df51a3535bf2c603df915963834aa93e058158706329b11cca41b8d6b9b52ec57bcaa2c1d19da6cacac9c5e7ecd42831546ee7b18193338189b86a90336a8f081c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f900" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f90e" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 153697, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "1b10476479843c1711802e550348bc2341eb6648a2022df467024ec71155f7d5", + "s": "c936248f6adb77698e3018ed37304cc246b42c637a08d18beec077449f1b8d3b", + "v": "1", + "type": "EIP1559", + "sender": "0x24fb76cec8a5bc50409dbfeee5605109bb23e7d3", + "to": { + "value": "0x9df3c2c75a92069b99c73bd386961631f143727c" + }, + "nonce": 11, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x57bc3d7800000000000000000000000024fb76cec8a5bc50409dbfeee5605109bb23e7d300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000059682f00" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000059682f08" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 190890, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "3c21014a890085b733fd1d14e74904d6d890f1164057125fc0c9753333e76c34", + "s": "b09557c26e0b46e176014a070091685f84f68a92ff1eef3317d152dcd28a1c98", + "v": "0", + "type": "EIP1559", + "sender": "0xaf8ae6955d07776ab690e565ba6fbc79b8de3a5d", + "to": { + "value": "0xcf68a2721394dcf5dcf66f6265c1819720f24528" + }, + "nonce": 310294, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x535b355c00000000000000000000000023af02e4b268a2502496f3425246d59e0962e58300000000000000000000000000000000000000000000000000092e6ce3960000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000565e7c8f" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000565e7c9d" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 86954, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4e00201b9ccdf2f4bbc4869c3d491b6ede3eb85592b8951c2938692104a2d48f", + "s": "b0e0720c2fbb6f89687d2dcfe99a67687600d405827431b33725b0bf7bb69339", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "to": { + "value": "0x2d366ab3e0e9483ff0e63a7a28b8c27770eac867" + }, + "nonce": 12816, + "value": "0x0000000000000000000000000000000000000000000000000127261762015000", + "payload": "0x", + "gasPrice": { + "value": "0x00000000000000000000000000000000000000000000000000000000430e2340" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 105000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "516a2c5af47a34b320a665638c2075bc5f87a2cbbc5fd87209ff473eddce22a0", + "s": "b8312f0d102fe86db1c046f9662edad4db24808dc4ae1fd41cbddfcd8ef049aa", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xe93685f3bba03016f02bd1828badd6195988d950", + "to": { + "value": "0xa658742d33ebd2ce2f0bdff73515aa797fd161d9" + }, + "nonce": 1423783, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x252f7b01000000000000000000000000000000000000000000000000000000000000006e00000000000000000000000045f1a95a4d3f3836523f5c83673c797f4d4d263b0000000000000000000000000000000000000000000000000000000000043238cace2bf56678e06fa1aaed8eb738d1c48bf7772e519597b5c0ef43dc7bcb4a30cace2bf56678e06fa1aaed8eb738d1c48bf7772e519597b5c0ef43dc7bcb4a3000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000002740000000000000000000000004d73adb72bc3dd368966edd0f0b2148401a178e20000000000067d2d006e352d8275aae3e0c2404d9f68f6cee084b5beb3dd00b745f1a95a4d3f3836523f5c83673c797f4d4d263b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050ea3544f67cbd255b00000000000000000000000000000000000000000000000000238b7d0d964e0000000000000000000000000000000000000000000000000000000045ed101e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053098324380000000000000000000000000000000000000000000000000002390f392d8b00000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000014c2ecd3065b4d0d7c21b35bced2f17b2ea5ddd6970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000003f9c315a" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 1308608, + "chainId": 59144, + "accessList": {} + }, + { + "r": "790f3321cdb1ce5fe46e95821dbc1dcc54fbfb6d242595070a8bbec2fcaf0d8a", + "s": "531fce7f14f43cedc2d6c539929798780f8da289e8e24fd6426314af531bd896", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0xe93685f3bba03016f02bd1828badd6195988d950", + "to": { + "value": "0xa658742d33ebd2ce2f0bdff73515aa797fd161d9" + }, + "nonce": 1423784, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x252f7b01000000000000000000000000000000000000000000000000000000000000006e00000000000000000000000045f1a95a4d3f3836523f5c83673c797f4d4d263b000000000000000000000000000000000000000000000000000000000004323890b475a1c8eb2397cec169f48d4b134312e96796f53adabbb043a6d7bd6ec69890b475a1c8eb2397cec169f48d4b134312e96796f53adabbb043a6d7bd6ec69800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000002740000000000000000000000004d73adb72bc3dd368966edd0f0b2148401a178e20000000000067d2e006e352d8275aae3e0c2404d9f68f6cee084b5beb3dd00b745f1a95a4d3f3836523f5c83673c797f4d4d263b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050ea3544f67cbd255b0000000000000000000000000000000000000000000000000b2a37f2f0c35000000000000000000000000000000000000000000000000000000015f6dc2bdc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a152574154000000000000000000000000000000000000000000000000000b2bef3c2430800000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000149174695d8e014105f70fb489146923217288f2d70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000003f9c315a" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 1308608, + "chainId": 59144, + "accessList": {} + }, + { + "r": "1c5bad4b81f3d629eb803d468d02bb4118ae807b564e4f481275d4a786471822", + "s": "f15fbde1df42ee9ee5254ac4ff03fdce88d3859b4006a853ae7747078b7ff79c", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x7018fb69874eda14ccb35a025b08fc4ef7ec7eca", + "to": { + "value": "0xc577018b3518cd7763d143d7699b280d6e50fdb6" + }, + "nonce": 9, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x70245bdc", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000036556a28" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 189304, + "chainId": 59144, + "accessList": {} + }, + { + "r": "b69b5b9eb79dc4f8bac1a6875f617925a4147ba0b375fe925f122c6555874bd", + "s": "bd5999f17e382a8421a8d6d2a03b62940b509e8f98caa35c015ba3e1e91d57a2", + "v": "1", + "type": "EIP1559", + "sender": "0xbd707c3940f7ae368e0d8822ea7487029839d012", + "to": { + "value": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2" + }, + "nonce": 1, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035107291" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003510729a" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 107491, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "1eb646796821ede48c1b7cd539fc746aafd165d3d3ca7480879bc5e8e7ef0e51", + "s": "c04993fcf9d5ed8adba3806b3e6b760253fc6697b7281266d32b67d384486649", + "v": "1", + "type": "EIP1559", + "sender": "0x5eca542ba69755763af3cf6f670986cd56c06b7b", + "to": { + "value": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff" + }, + "nonce": 2, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x095ea7b300000000000000000000000031c2f6fcff4f8759b3bd5bf0e1084a055615c76800000000000000000000000000000000000000000000000000000000042c9bb9", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035107291" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003510729a" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 60306, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "1b1dd3b13cb7df3492efa8b741632ce4c43c6962e0f7c1a29682fe2d907fa532", + "s": "23ae87abe804911012f77e01c1adf1e13247adb862bff0daffd8c8f4efd299fd", + "v": "0", + "type": "EIP1559", + "sender": "0x09c8b20f01aeb2bae2f3d1c62dfe1a0f61d91348", + "to": { + "value": "0x2933749e45796d50eba9a352d29eed6fe58af8bb" + }, + "nonce": 21, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xf02bc6d500000000000000000000000000000000000000000000000000005af3107a4000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003503795d" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003503795d" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 37441, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7dc45f06833b24891d4c1db80d698dd99f9b678729cdd9997a4d405e54f2c116", + "s": "d80505de60e78627e0498436b38a4fb24dd531735f46f2630bc76ed711de618b", + "v": "1", + "type": "EIP1559", + "sender": "0xdb8e9113daa5fcd09f7b68d5d7d35576b1cc5760", + "to": { + "value": "0xc043bce9af87004398181a8de46b26e63b29bf99" + }, + "nonce": 11, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xefef39a10000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003503794e" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035037955" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 324256, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "96208356e4c4bbb67d6affb4bf869d10c55439b0f19d5244e181005846cb028", + "s": "6e6e7c65d3b7c4d3d4ab8c235cf627e7c8bd83a3051342859902aa65b783a179", + "v": "0", + "type": "EIP1559", + "sender": "0xfa6bbc8899ad07b738f27ad83fffce2a7c01f108", + "to": { + "value": "0x678aa4bf4e210cf2166753e054d5b7c31cc7fa86" + }, + "nonce": 8, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x5ae401dc0000000000000000000000000000000000000000000000000000018e7ae7018e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000104b858183f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000001a35a0a000000000000000000000000000000000000000000000000001a9340eccbea6a000000000000000000000000000000000000000000000000000000000000002b176211869ca2b568f2a7d4ee941e073a821ee1ff0001f4e5d7c2a44ffddf6b295a15c148167daaaf5cf34f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c000000000000000000000000000000000000000000000000001a9340eccbea6a000000000000000000000000fa6bbc8899ad07b738f27ad83fffce2a7c01f10800000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035032547" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035032555" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 338551, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "34bbe1911c96b1914a5dfcb0d2d21ff1c4a960ca9d81856aca6bc40b127a8c2f", + "s": "a01f73d61852ba4fb0518569dae3970ccc9eb691e02a6ef23879bb6fd60bb372", + "v": "1", + "type": "EIP1559", + "sender": "0x8cd632d842154c4e1aff44cde01384cf73e4d2ae", + "to": { + "value": "0xce048492076b0130821866f6d05a0b621b1715c8" + }, + "nonce": 19, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x0743219600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160912214269b9b891a0d7451974030ba13207d3bf78e515351609de9dd8a3396860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000148cd632d842154c4e1aff44cde01384cf73e4d2ae00000000000000000000000000000000000000000000000000000000000000000000000000000000000000408f2f90d8304f6eb382d037c47a041d8c8b4d18bdd8b082fa32828e016a584ca709454575856487b4b3d8a3a0f3176d6ff9491360a9d96ac2c8cded143816ef4b000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000041e4d826862f73413335edbc3dccf62801f204620b85e2edd80773ceeeee42a4776cae03b73d9f6bf5c1b95c2a297fa04be2b96faf593e1c3c01918e9b45043bbf1c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003502291a" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022928" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 525127, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "dd5095a8b06f1ff89c0d5bf1f413236c10404a2653144ea02463ca479e7127a", + "s": "403cc98d406822c4e4437631d056037342e1c7178271152143f2597c8e97cf59", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x3a42e975cd9a88c7577f8f3f58d401942b588da3", + "to": { + "value": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4" + }, + "nonce": 1, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x183ff085", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 36500, + "chainId": 59144, + "accessList": {} + }, + { + "r": "71eded72071163ac50fcccf1dd499fb9449a17f36a17634cb5687238fb9846ad", + "s": "7911b68b43fe99a82c390f423ce9f996cffbf83f38f30c0b1e3edf805700881f", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x7d3baaade779879340349649994ab5a292f84cba", + "to": { + "value": "0x47874ff0bef601d180a8a653a912ebbe03739a1a" + }, + "nonce": 10, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xefef39a10000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 216171, + "chainId": 59144, + "accessList": {} + }, + { + "r": "2f6cfa17329f68efdc98112064493afee50ae11b09060b0c7779eb6e920ebdc9", + "s": "ced43bb83fdda224b5e433a5671869480f10cc80f00d757b5b9cbbc3ebcca866", + "v": "0", + "type": "EIP1559", + "sender": "0x27b1b071ec734d3c91d3cfc6e02520f3bde4a5b1", + "to": { + "value": "0x510581cefd1a4c651aa6727957f283c665647485" + }, + "nonce": 13, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa0712d680000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003502291a" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 176641, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "24ecb02947038dd59382ea83a69127f4d05a1273514b01d01dbabd83d0152", + "s": "4a5d8945e9c5390c5a01f787be6d5efba5e6eca5140e783426fa8bff6658cfc6", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x503a9ae5cdd0499bf69b1ce0ccb6e38a60cd48dd", + "to": { + "value": "0xf3eee655eab9896bf7537c2d1078669c4fd13b15" + }, + "nonce": 16, + "value": "0x0000000000000000000000000000000000000000000000000000000000000001", + "payload": "0x5f0c978100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000006c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000b31ee81d67b7e1645956400000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004e3504e41550100000003b801000000030d02be0465145a34ee78755bdb8556d2695a27daf2a5af2392b7ac088799a205f98d6fecc8fc3b19c22e9787d6c416d0c754f28fb72362e61309b58f6ac4fe835dcb01039d69becfa3b236efdc19173c44c19165cd8a767d18e9a6165515e4438b3bb4d7302e45e3deee275822269b9d7d3908a5f9e9ac1108df430097e2a67090d4df45010473168a2d7104e609e4f859bce973d0fb82bde9d3030727647bd16030923d676538faa557e9c4520ebf549015d98895c9d38c3e4c43beaed0032ab470844d42e301069b7bb42d97ed45c2751a5a7cb01e0cea0bbda916c8da395593a765f666ee87c7189457e032d09955ffeac0e53e022a60983f2a7cd82c21a5bcbafd2164b74f4501072f96d7bbb7dfba7ddfcf2d4a402ecb78ac85b6ffe4edcb08ee84b4a6aee9b2a25afc775c5d1d3623908b1014f839fbdb3e5fb6ec533e4835bb945523cdc43abe00080ab33a2c51de9c4dd08e08dc2cd8928bd5d6f1ba38b673127e219eae7021ebf32c6974d98361b396c21dbc9facb02dee09a269cd00eb6e55c655fe8ab10c747f000af391ff5b135db9e3b666fbf5145a2008eed8bc015617afba73fcce885de2be1a63b264045096ba964c78fb28fc89ebe8dc7a4dc1db4aed6571d1de59633d57fb010b0a2a1feb3d0b17a7b128b6f1c690c196952c4dea7df0d1b2d8b2bfe732fb9dd87e6d9ce55f9e77c9f5bdf1cc665ea9bc9d18fcb7d903d49888a0e5233706887b010c70c6b80ca9132f8bb20fd4c8b2b49e0c9dc263d425da8b1536e72ac56103928926cc0d2bde5d85c43a482ce136eca009170a3114f123d85cce0a68a2bf194c3f010dc86f3722c05efd9db28f15e2514181be10807e9ae56c8eccbbcdf42435ccbb6a7209ce944bf92148d3bb32658f4b33fd4dd801f170770ed5ef7a5a0c81d4b260010e5fea88e386f31079212d05ca550224fbe53f12655104b78d9356062d343c9a1a0d2c1ac807b577f400cb6f9229a8b38c25488b84972b6c41e8196c9ccb5a8d5e01107902820bc978d28aa7b40e127e0d75d12a77e22d929b8f6614149d3b8174e3527b30b947d5fd5d8cdcb403fb13d40a661a5d1cb40561e140921a6c554f01278e0112fccf8769970349f1f4766de9bfb74c9bd5a4ce47e03973df1dd016ec8f38e4e958d7a691c54864065d01e062ccb0caccc02a84e1515971e072f9bc0af7588a26016602c5d400000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000002cab0bc0141555756000000000007d40a1d000027102c096a388d6488d0c996db2c2415b78e8e2ade8e01005500ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace0000005497a367860000000011e6dbeafffffff8000000006602c5d4000000006602c5d400000054da4492e0000000000dff0be00a2d0970a24569563bb2d0e8c7a2d5015b246422df32e7ad6734a789dd95b7e6ef156a6df2cc8bddc1abb88ac1b64b382ffbd24c5ecfb9c1e55aace45a65785bf348546fcff0941e0699b376cb95cb555a342ee8367b73e3a063a53faaf5e4dc7079faf0d7e0ea0a8bf5a4fdd907b6783f5c0b86dc6dec0516e7fad3cfd24add4ee9dfdc6eb5a8534b201d3300242d723cec715f35977756855e7e2e902a306611125aa4aab805e02f259dd096726012659ee9d6821c337c3aca61e4464442956ca7ad7671e0eae60100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006602c5d4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002c3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 566400, + "chainId": 59144, + "accessList": {} + }, + { + "r": "16f3c2852f91e87a4507d86b66a3c5717d9611a30301177149b39e8529df2387", + "s": "5f3ad2941314b0f1fe9a2958c48ea455c32e2bf87387887522edee63f7c749ee", + "v": "1", + "type": "EIP1559", + "sender": "0x4468557b915770c2b93655fabc26bc2c7bac1cfe", + "to": { + "value": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589" + }, + "nonce": 21, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0xf648253d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000004468557b915770c2b93655fabc26bc2c7bac1cfe0000000000000000000000000de240b2a3634fcd72919eb591a7207bddef03cd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003502291a" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 195284, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "356e8a3a7c07b26da3b86e653fb430571726fe53b9a5494a240831a5d7c88d2d", + "s": "9feac94733a8570249e3bf54acbe953e32ba4d6bb35c333dd0f4ae5cd184321b", + "v": "1", + "type": "EIP1559", + "sender": "0x93a69b20f7670207f34d4e1e28f54afeffeb6789", + "to": { + "value": "0x2933749e45796d50eba9a352d29eed6fe58af8bb" + }, + "nonce": 24, + "value": "0x000000000000000000000000000000000000000000000000000000e8d4a51000", + "payload": "0xf02bc6d500000000000000000000000000000000000000000000000000005af3107a4000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003502291a" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 31455, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "bfc9af47fa0c77f56702b24f4e9cc96f698e58ec6d08c30c703505dc041cec", + "s": "bb6960f463e63c9119b6e537af3718996937f2cab3ae501fef56588fad9195e2", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x69f7c3f66f5b1cc53f33c06dce56297a016131fc", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 26, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x36ab86c403ebfbd4d6339c0078133d4495ce0a890badcab84b63343469b38a0cff65cd740000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 254474, + "chainId": 59144, + "accessList": {} + }, + { + "r": "3cdcabc48e3d8e9310528eccb55da629fbd421382ab11a86e0e30059ddf51043", + "s": "4b7b0ceac7d34af248b9c18cbaddeec07686401227c6573306c05a5f1fd13fa8", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x94bd35fa9dba31e354a85d1753fdd1f6b0b9a827", + "to": { + "value": "0xc577018b3518cd7763d143d7699b280d6e50fdb6" + }, + "nonce": 28, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x70245bdc", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 129267, + "chainId": 59144, + "accessList": {} + }, + { + "r": "6cfa63e7d3914356aa6e5a41509bfcd7b20bdf06ac303819b82615c1c9fd1a6f", + "s": "43ae6a96597d186ca652352b761201d14d56b8981ad5b2bef5dd8feb68d6eb7", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x5dcd66a5306ad33d896d7d04d466bfa691d787f4", + "to": { + "value": "0x6cd20be8914a9be48f2a35e56354490b80522856" + }, + "nonce": 33, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xb9a2092d", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 28152, + "chainId": 59144, + "accessList": {} + }, + { + "r": "67c21c8f406df07c44ff263136b33ad4cc3bb46681929706e1b959e0bd900f6c", + "s": "9b8f7fc63c59b9e133d7283f382a02e1c5f95f8cdae92c8d34c92d2452661359", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x344db8ae392139d1125b25cb07832ffe95e2146e", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 39, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 226777, + "chainId": 59144, + "accessList": {} + }, + { + "r": "2a0cb746494cbf14e721780683df99217bc61329bbd8e856cc60f66559f092c7", + "s": "2632a81d6a3d8dd9a6ee9c3d1e56e51bb26c1b2933090778b3f2d4c1ea09fa70", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xa811993ce0eb564f6d2b41baa42e24d9510a13a3", + "to": { + "value": "0xb9cc0bb020cf55197c4c3d826ac87cadba51f272" + }, + "nonce": 7, + "value": "0x0000000000000000000000000000000000000000000000000001c6bf52634000", + "payload": "0x05e67f6300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140ce6351ef35f71cd649b75be11a4d08a8420811e21db89085b27f56c9eeac1578000000000000000000000000000000000000000000000000000000006ba66044000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a811993ce0eb564f6d2b41baa42e24d9510a13a300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000041d1718705134ac168f770a0349f92d59308227734d6450b03dba172f86da33bb12cd19eada56d34e13205d3b6abdd807bd0fdfab4f35bd4d6575811b9da2e73ec1c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000034fd1040" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 504897, + "chainId": 59144, + "accessList": {} + }, + { + "r": "19ce95bf657b42e8b78fba6990ee9b714dcd21595db7f295feaa29492b234562", + "s": "f2368d5be5d1a99bb300e607daa9586b11e0987d2d4432546d364ddbba1c59d8", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x7b5e3fb92214804e1cc11ab30ddc5521c954d06c", + "to": { + "value": "0xb86b3e16b6b960fd822849fd4b4861d73805879b" + }, + "nonce": 23, + "value": "0x0000000000000000000000000000000000000000000000000002d79883d20000", + "payload": "0x07432196000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0105db2b6a3e9d79739bca3e1d9ddeec6bd68667cf1de8d4248020b91a9a80e460000000000000000000000000000000000000000000000000000000066796cc5000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000147b5e3fb92214804e1cc11ab30ddc5521c954d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000040fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000000000000000000000000000535393134340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000410490d9b0f62e8be01e1562c39d95773a4d25948e406cb5c40f49aeed340eba790a0a353234cf8377437642b6b3890fda5d6b79902c20c3de7c3146678c822ca01b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000034fd1040" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 611078, + "chainId": 59144, + "accessList": {} + }, + { + "r": "5724a3e761f4ad42232064940ca6f44de9fb894be9968419af602dacd2f0acdb", + "s": "a04067f2ca7ff841994d3c5b753edf5d3d297f7f5de25618f29adde368c25741", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x7994e6879ed06a6959ca67d844de9d53e5e036ec", + "to": { + "value": "0x1d0188c4b276a09366d05d6be06af61a73bc7535" + }, + "nonce": 82, + "value": "0x00000000000000000000000000000000000000000000000000009a9d359ca000", + "payload": "0xd3115a8a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b20116ee399f15647bb1eef9a74f6ef3b58bc951eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001400000000000000000000000006a1ff5f05ddaf8b61f1734daa6f9a42f16e3368e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000002000100000000000000000000000000007fffffffffffffffffffffffffffffff010200000000000000000000000000007fffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100010000000000000000000000000000fffffffffffffffff93e7e03c9c2019d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000034edce00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 228321, + "chainId": 59144, + "accessList": {} + }, + { + "r": "7ce9b0b8ee733249b9c3aad4e3a1da31bbdb747f916b8b905a08d4c20cb23f3a", + "s": "2abcfacc8d2c225f799b28b57f58309d00ebd8dc3e250e374d5ec874df57ee32", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0xc575fa4034ed81175647b6ac7cd78845253968d6", + "to": { + "value": "0x80c67432656d59144ceff962e8faf8926599bcf8" + }, + "nonce": 118, + "value": "0x000000000000000000000000000000000000000000000000000997a2bce4e336", + "payload": "0x", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000034edce00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 31500, + "chainId": 59144, + "accessList": {} + }, + { + "r": "4ef03ef13d7d4fb40c2e90de37e0e41d2e602ed66973ec20728658b6041bbc68", + "s": "5173888c3a57325f0d83c6ea86d0cd795d04011d75cac91d7307a6eb3b567059", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x61f3be073bd5c5a6ed11443e51744ce505e27b85", + "to": { + "value": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f" + }, + "nonce": 170, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa2a9539c00000000000000000000000061f3be073bd5c5a6ed11443e51744ce505e27b8500000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000134d7c600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000041808f49dd982ea4a45341a899a4d074d343fdb5a6ae69d0b8c2d015fddea17d863d96800af590a6714ee1220747dd04f0fc23160682f98621ebfe1b971e1206d91b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000034edce00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 90795, + "chainId": 59144, + "accessList": {} + }, + { + "r": "e7d8cc6a5bd26da482da86cfad89468ae286a43bcb67970add009460fc1462f", + "s": "6d9e1ea39a8db018241060ea3162a04e9a8e6f9fc6ae83ce5403d9fce7523d0f", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x5572905d0c9ae6387c0ebea4f8f3caff501036b1", + "to": { + "value": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f" + }, + "nonce": 274, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa2a9539c0000000000000000000000005572905d0c9ae6387c0ebea4f8f3caff501036b100000000000000000000000000000000000000000000000000000000000001e1000000000000000000000000000000000000000000000000000000000134d7c600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000041cef8819b4b81f93ca847160c0dc955fe27fc4d9dde255aefc0d2c5487627f73b389619f13f0b540d6ef7ba73bfff3a58ca496324a88b576afb82e501f962ceb41c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000034edce00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 90795, + "chainId": 59144, + "accessList": {} + }, + { + "r": "53ce13e750e5056db2ea24036cd051af2b7c1bb1525acca84bf45c6a7d7de592", + "s": "8f919937ecd80ba3a27b95187e2b6e40e2d4950eb15295544885a0afe5ca2a00", + "v": "0", + "type": "EIP1559", + "sender": "0x4fc0a5da8083493b41feb49c5193425090fe4d76", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 10, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 226777, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "5fe7a55e13c5d14d0e2133bfcc43c5464ed104d5e7480ca4172db48ad8d27cc7", + "s": "c5d2a036f2af183ac8c177d07fe5b0f9bf159f9436710ebdf97d245db4a1c537", + "v": "1", + "type": "EIP1559", + "sender": "0x736f4f046ca29cfc725e278249a1bf34582ee48e", + "to": { + "value": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f" + }, + "nonce": 10, + "value": "0x00000000000000000000000000000000000000000000000000000a7f379a8d80", + "payload": "0xd0e30db0", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 45038, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "30d7c1d7e0b9deb0f3fd66f1171e91521244874806e78ed7c9116ada544f91ca", + "s": "55e86a3e73533a1dd11ce80efb3135a72cc75c5d0dc07ce394f12344f90bd042", + "v": "0", + "type": "EIP1559", + "sender": "0xb450028848ad2739c48bd060b60478165f6fcc60", + "to": { + "value": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a" + }, + "nonce": 17, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4390aa4206b486b9bdd799a466505823e27905a9a249c5fcffee848aafa53d6a", + "s": "c911b480bc8fe95114a92aa49fc7f46b4a7c99521161080027d8d9c9c2eee9ca", + "v": "0", + "type": "EIP1559", + "sender": "0x35929e90ff36ee8b9e19ec84a4d13da5f236a978", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 19, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 110193, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "3c81a15b8f286091c25ee77837dab03516765f17d77f2df64321c82f5b2d3610", + "s": "658603bfed185e77180040d2b86f0cc7bec8f0f11eb92da3eaf1a383ea9aee31", + "v": "1", + "type": "EIP1559", + "sender": "0x1ded49e13453bf5e81e619c45789366080e00ff9", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 21, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x36ab86c405d2a4b6777a7d41aec7e58beed7971231ad31b62c75feb2184473792a2366220000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 340001, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "372e4d6a6e763aa254b1013b44b9b20aa05af62bf5c14e33429f837a7d32f3b3", + "s": "a749db4a5970c8d1cc29f1463caa13ca373e0fe5f2120deee1a3815c77280287", + "v": "1", + "type": "EIP1559", + "sender": "0xc30043e74ec1b2debb2774a0f10531bb6fdaf5ed", + "to": { + "value": "0x80e38291e06339d10aab483c65695d004dbd5c69" + }, + "nonce": 26, + "value": "0x00000000000000000000000000000000000000000000000000b0bc6a05c5cb5a", + "payload": "0x2cc4081e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000a8a2632000000000000000000000000000000000000000000000000000000006602f4b4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0bc6a05c5cb5a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000005ec5b1e9b1bd5198343abb6e55fb695d2f7bb3080000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f000000000000000000000000c30043e74ec1b2debb2774a0f10531bb6fdaf5ed00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 176192, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "227bbf6f0838d269a6400f8f463d10a8310661f57e403c899e2567393384259e", + "s": "7325639bf58385c397002043ce834361d583bfca69356c62c96449d8ecd1cc73", + "v": "0", + "type": "EIP1559", + "sender": "0x472926e26f3d1d68a7e99f42ff8b34d856f94711", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 30, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x80ffa19a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021195154157f4c30dd330473d26b00d87ed12423880c16caafdf1ba79dcb50cff0a13a881cc83c8d0322f88a7a0d8bc8515a78617296d9024bc00569a2d8a4dfb07541d5f88f8bff221ca8b76adfaea113cdbc5ead70f04bcdc57dde5cac347f406636fa976357307f2bc427351759919a652e676d3467df60cee34923205899000b4b25f4dd94bf731812b3c7640aa05ec4032d6e3fc3e6053799d1f8eb7f4e5263fbb61f4ae10ecc1517a91af91c366f7e2adf699a0755cb3cb038da44d23c607743dd2cb9e926a382c26ba58040da347434b2a5355b4b39b902c8afdbcd3450c888bce7dfeb60a37b2deb7dc460491a5b1a87f6030fba0c5ff693bedc8e2710000000000000000000000000000000000000000000000000100230048110c8800000000000000000000000000000000000000000000100010886011440110e80000000000000000000000000000000000bfdbbbadaeda6e965afaa7bb97bbb9000000000000000000000000472926e26f3d1d68a7e99f42ff8b34d856f94711000000000000000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000000000000000b41a1f0a56a86700c83a0283afb08612ad8eca7848e38d6c39b14d3c283f32735f230e40cf4afc3ed60a789469597df4ba5cf79b24e59c83c4ba6de0897c98f0b81cdc6556c1dcf62b6b5127cd65f2ce9b4546ead1dae90d932791bafa7a24a9031411430da7380bdc617c5f5f6b51a5e09b3b6d15f9c42f8f44380921657cc82302415236d272b766361c9588b08e650059946f5ec8ae002228faf932872a9cc6232cc2bff46e9cdf8ae1751a0af481ccf4cbe0e0a705ff9d5108dbbd69b3f3ef1a5ac0443b5ce5596daf7337df08af3e832ca8be1d5317031d44f10a117ece292fbbfa2357acba7c143d27bfb76fff94c9bca901f46187c9aeffcd4e622ae291168cc9051e3ae52201de1b507dd9065ffef121b4b242e3e79bbe560868ff13bf00000000000000000000000000000000000000000000100010886011440110e80000000000000000000000000000000000000000000000000000230084118cc90000000000000000000000000000000000eadbbd7efa6a6d79b6a799bef9a7aa000000000000000000000000472926e26f3d1d68a7e99f42ff8b34d856f9471100000000000000000000000000000000000000000000000000000000000000b400000000000000000000000000000000000000000000000000000000000000f0150b1a83863665ce48cc8291c3ebc8b193360ab328c943a599424e139273b869", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 160001, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "717bfc3886c633786f6472ce7a8c51660df210223f9816f7bc9dbef382b4efb2", + "s": "9c8758cfa6445be2bca804aae0c8da8854c177bd94951586cea9a83284eb7d7c", + "v": "0", + "type": "EIP1559", + "sender": "0x8aa5a31df8a9994bbca5f358d80f5e3ef8f4d43d", + "to": { + "value": "0x5e809a85aa182a9921edd10a4163745bb3e36284" + }, + "nonce": 0, + "value": "0x000000000000000000000000000000000000000000000000002081e063b1e006", + "payload": "0x", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 31500, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "191dab061e0aaae2a398c9e27873d06f73ffdb57adf0f25c57057145c071c8da", + "s": "6f9fafd0243d05b20b9d17711fb60cbd66891833f5fbcd8de43c584b4150113c", + "v": "1", + "type": "EIP1559", + "sender": "0x51fddcaedb975a1e99b204150db3cdc8626c027a", + "to": { + "value": "0xe4edb277e41dc89ab076a1f049f4a3efa700bce8" + }, + "nonce": 1, + "value": "0x0000000000000000000000000000000000000000000000000087b6b2966ba336", + "payload": "0x", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 21000, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "6e65cc97d9af0b742636b558db2b07ad5e6c2bde6ac8ff72d2b5bc56d07df6ca", + "s": "3a7ec886f8ecb0db8dccf071424d985c7e93505820f771a15275dc4129058749", + "v": "1", + "type": "EIP1559", + "sender": "0xf19198b7b11eef578a0e67b8ed8c8b4162964571", + "to": { + "value": "0x8286d601a0ed6cf75e067e0614f73a5b9f024151" + }, + "nonce": 3, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x7859bb8d00000000000000000000000000000000000000000000000017c051a75c892aea", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 27975, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "61cf159f8022b651d5f574d72340e8c032b3727ff9cd7473bfae03b87f2faf14", + "s": "17abcc1eab685b8d9ace17b44fca45055ea66e38e2ca0b5f20ef3bed46e89774", + "v": "0", + "type": "EIP1559", + "sender": "0x4f60cb6d7d1ad3e1912177bb56cd080586b43d0c", + "to": { + "value": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589" + }, + "nonce": 6, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0xf648253d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000004f60cb6d7d1ad3e1912177bb56cd080586b43d0c0000000000000000000000000de240b2a3634fcd72919eb591a7207bddef03cd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 195284, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4d4ba5d35a86785fa8ab9fefcc1dbef4e166d7fbeee115a59905d925391b85c8", + "s": "b951460902996659e553a80225ec90ae645935eb54554a0b3cf9791c1edb7ec8", + "v": "1", + "type": "EIP1559", + "sender": "0x92c53c327cf39ce132b57e5eab51610ad3f15746", + "to": { + "value": "0x06f9914838903162515afa67d5b99ada0f9791cc" + }, + "nonce": 11, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1b0d0ea8000000000000000000000000000000000000000000000000000000006602c6fefa6d0b9738d3e74ad5cb0de84c2ee0863e37ecb363207419666d8110ae6effd00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004192a523f6ac0359fc239905e249b8e3648d4f43c4bd1894895c1ff0479dcc5ae33b89f3b50b4707cbb74fcdbba0d2199c597570aa4a2ea0ac90e2d202cec7710a1c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 173190, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "50e4b77347289cd65098a3747fd1b662851d95dde70ee93f255e37f5772e22be", + "s": "1124ae7f1af9ac9be29388c75de06e2f3c7e8c98af169c607f631d19b4f4f7bf", + "v": "1", + "type": "EIP1559", + "sender": "0xbea70fc812267f534be568553f2978a7a54495b0", + "to": { + "value": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc" + }, + "nonce": 19, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "75cbdb3f63c9b67aa85e32eee45193952f1b75111f4695eef3319fad9cd45237", + "s": "6a38fe9c82e89772b473171497316faf3cf318041bd4628c7eaf63c36b2d8697", + "v": "1", + "type": "EIP1559", + "sender": "0x04e53b29277a6552a7107021ec373fdfd4eecf49", + "to": { + "value": "0xc043bce9af87004398181a8de46b26e63b29bf99" + }, + "nonce": 24, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xefef39a10000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 216171, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "69ec026e4918164ca1017669be39f2054ccd8abc74a2982fdc5c17f88f63a533", + "s": "b337039221386c1267817dec0f0126a761c31d7367ab97c17946d091a0504a16", + "v": "0", + "type": "EIP1559", + "sender": "0x51f069bbe2aca62440f6205a21d26c9b7472b3d5", + "to": { + "value": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc" + }, + "nonce": 24, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "49b66314804ad8ecfc93eff343c94be347460a11e309c9fb11b16e1a45038bdb", + "s": "504d9c9c56ece543b6e46ce31675ac4b95b1d91d8a403a0e78f6c4b53d45def3", + "v": "0", + "type": "EIP1559", + "sender": "0x621972ebcee38b4f2d2fd1627b7add8a456637c4", + "to": { + "value": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff" + }, + "nonce": 29, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x095ea7b300000000000000000000000031c2f6fcff4f8759b3bd5bf0e1084a055615c768000000000000000000000000000000000000000000000000000000000345c0b7", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 60306, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "53f7a1ff540d30ec04945ae7223dfea2ed6acb888f8975f79df6b876db34870", + "s": "f7566b557b27502c88e7092488a187df0413655b1817bf1eb417468f6f799e2f", + "v": "1", + "type": "EIP1559", + "sender": "0xc083bfaf848b06664cca7732a39e8cfe36f0eae4", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 31, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 110193, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "65c8f7c00e439a19f95d5cbbb77a930d82051287407358982b45cf1ddc0318d0", + "s": "71d4b5d6f77ddbfd5cc1a1931e25cb4d3091c442b8f8febedc6b78448ee747ef", + "v": "1", + "type": "EIP1559", + "sender": "0x6ecff6cf7b8fc76903ba027bb639eafdd49b8d08", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 31, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 110193, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7f722e29b95bb43e85f260c051134268cf5db43c8ee232379b903bcec12df820", + "s": "71f3f45dd7b62f5b4fe313d5a5c5eb98cdeb2725a6605bcc6287b62c81eaba9e", + "v": "0", + "type": "EIP1559", + "sender": "0x94b562a327e997c4106d7ae3f3d28e16470799a2", + "to": { + "value": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8" + }, + "nonce": 31, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x13d79d58000000000000000000000000000000000000000000000000784030786a6363430000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 86380, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "71d0b24adbac419223b5ffc243a301e4a403580633d98855976ab6ca0e02c583", + "s": "2f90d1e3713df5dd1cdef8a51f795f842e709bf97440420099c5dc9adbfcf927", + "v": "0", + "type": "EIP1559", + "sender": "0xd21639362ddb572b3fd067da0d460e78252408ef", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 32, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 110193, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4a442ad99dc380531780112790af1db29334cb32ddcaab64e6780b11ab388c5a", + "s": "fc374040ad26e7decce1eb36b11fba7b12ac70d3fd80bcafbab5ec54f4986ca7", + "v": "1", + "type": "EIP1559", + "sender": "0xd40c7ecd85d863c011280ce2f0da3fafb165f5bc", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 35, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 151185, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "3c547e1b2b9bb4910f25eea7f939fa3b56ff61cd224bfa002316f7c1c5872806", + "s": "55b15558a044eacfc1b149bdb19d7dead5f2c2f0ad4398622ea16a9bfe25be7c", + "v": "0", + "type": "EIP1559", + "sender": "0x751a8a5b62a98f8945e637d319845378253ac9d0", + "to": { + "value": "0x780de722234532f7d61ca3d147574f44a85c4244" + }, + "nonce": 38, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1a3e7c8b00000000000000000000000006bff275cbcc675ac6c1f0bc32e2a8343d40229a000000000000000000000000751a8a5b62a98f8945e637d319845378253ac9d00000000000000000000000000000000000000000000000000000000000060ee600000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000007768747470733a2f2f736f6369616c2d636f6e74726163742d6d657461646174612e73332e616d617a6f6e6177732e636f6d2f6c696e65612f3078373830646537323232333435333266376436316361336431343735373466343461383563343234342f3339373033302f6d657461646174612e6a736f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000041beeec96454dc655b850af976bf2883504aa7e6340c78ce1e759e635024fc5f814a5c831a23af6b85dea8174731d7de7ae7bbd698d3add4fa9963df02d3bd0b861b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 300000, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "12d3cb6ded790f86df8241107e4fba4b6a2d0ae99802e83bb0cb21cbaa33a140", + "s": "189c96b3ecb4efa9619a24bb49eb9ebdd832c078fd1e2cf7c24f81cc775644ae", + "v": "0", + "type": "EIP1559", + "sender": "0x64164ca5172f802acb51f18ec2bdc847c3847057", + "to": { + "value": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a" + }, + "nonce": 63, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7c7ae8a4acc88d69c534c1ed8b6ccd02a168522c061caacb73b62124ac496c06", + "s": "9563d87f7f59b6a446d81ab087e9f81baff871629e987fce258a82908c8b5e98", + "v": "1", + "type": "EIP1559", + "sender": "0x9c8d59f4b41f292c4fe663581e880928cd8eeb07", + "to": { + "value": "0xc043bce9af87004398181a8de46b26e63b29bf99" + }, + "nonce": 127, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xefef39a10000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 324256, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "27c631df6acf2096faf10aed07c73f407eaca06f6ab67f504f69eeea6974da8a", + "s": "a1741e82d4f771713e5cd98833df1bc118dbe24835c2d74f7665bc464e32d527", + "v": "0", + "type": "EIP1559", + "sender": "0x758bf7889ddef7e96b4296d32a086c66d853807c", + "to": { + "value": "0xde1e598b81620773454588b85d6b5d4eec32573e" + }, + "nonce": 288, + "value": "0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000", + "payload": "0x55c99cd80000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000df1d00e5c697900000000000000000000000000000000000000000000000000a29513032b5fb9000000000000000000000000000000000000000000000000000000006604175000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8a4fb931e8d77df8497790381ca7d228e68a41b000000000000000000000000710bda329b2a6224e4b44833de30f38e7f81d5640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055a57e330cf5d6837102098f9aa5b0eddd18ad554398ec3fc8bd6f68a4cf465c0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758bf7889ddef7e96b4296d32a086c66d853807c00000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003686f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6a756d7065722e65786368616e67650000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 393101, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "584a22a55a90ba09f44899fadd3862f40bd016490fc04a4af7af36965f87741a", + "s": "842eafbbec3181c8614b88a90b4d45055767148f7cdaa6aef674b14034b6771d", + "v": "0", + "type": "EIP1559", + "sender": "0x8755d1f468e1a2aa92928bfe24cf4c0a1ede9437", + "to": { + "value": "0xc577018b3518cd7763d143d7699b280d6e50fdb6" + }, + "nonce": 6, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x70245bdc", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb7c" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 107723, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "64bcbd6a41c04f0ff9279256e75d4a5c57d4c9394dc3c627a10ec16d8388cc94", + "s": "6e3648e579a6b6c0941b0e6623769f3d80eda3be7da9cd8d37a278a89a6303e7", + "v": "0", + "type": "EIP1559", + "sender": "0x92a02f0902586526c6585afc9aece852240979ba", + "to": { + "value": "0x63ce21bd9af8cc603322cb025f26db567de8102b" + }, + "nonce": 10, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xfb89f3b1", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb7c" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 57609, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "186985318fcd872eca0cb0d7829781d63ccd8481c84f597b01b695aa35d0dc18", + "s": "e0dea04c45dd6e17f7e36af266074fdc4f50cd7d683230938675592e41354fd1", + "v": "1", + "type": "EIP1559", + "sender": "0xe1503dc691bb93af200f2b5adddbc65480227f7d", + "to": { + "value": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f" + }, + "nonce": 17, + "value": "0x000000000000000000000000000000000000000000000000000001001d1bf800", + "payload": "0xd0e30db0", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb7c" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 45038, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "18b32386a8c3cdfb8518572b2c6c84ede85cd5f1dd4c60555cb88be758ffd671", + "s": "a1451b4f644a3009dce3816b176c7cb9ba37dedef7a3990eec1131114e8e9db8", + "v": "1", + "type": "EIP1559", + "sender": "0x9544621e3446bd504005f99a0909ed15aaf698ff", + "to": { + "value": "0x8286d601a0ed6cf75e067e0614f73a5b9f024151" + }, + "nonce": 22, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x7859bb8d00000000000000000000000000000000000000000000000017c051be3e22680a", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb7c" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 27975, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "3c1278afb03d9aa79a5efec891126e149b22d6bce6be2fb1fcb7b750b29ac71a", + "s": "48846663adf780eb1a01ff3e24a169e20fa4c190723dd1f6d25b0e08c5f26f7e", + "v": "0", + "type": "EIP1559", + "sender": "0xaf583b941df2215231c29f8c859dffc278e8ce90", + "to": { + "value": "0x8286d601a0ed6cf75e067e0614f73a5b9f024151" + }, + "nonce": 29, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x7859bb8d00000000000000000000000000000000000000000000000017c051c0d729604c", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb7c" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 27975, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "465e36786c1d1b205d458b4a3b3b88b02b51014ffc4b5371350c0edf38e34413", + "s": "39f799217b43f5240851f82fef397b7f3a9438735e59fcdc280e53035927b85c", + "v": "0", + "type": "EIP1559", + "sender": "0xc172b13a354edd55121c6a57f7c124542b2ed270", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 31, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb7c" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 110193, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "3e740e93e46e27e83f8d122b74af7daac6a95e6ca2d5f551a7c735777ca3fc76", + "s": "da334d5492a1075245a47c88a8dd50ab31ec869c8a7f3a54eb410a32cfe88064", + "v": "1", + "type": "EIP1559", + "sender": "0x0f00893d3e3a5440687dce9b780b05d13f332a5c", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 31, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb7c" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 110193, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "1a6443747099b180cf224543a08f7e4078c55385f76dbd3f3386da68583a3b65", + "s": "20e86d3a9429f0ae65bfac58db288b93b28e74a2fe048908c0be2463ec0318bc", + "v": "0", + "type": "EIP1559", + "sender": "0xd4f8e1d2d67e46d4dea058f5391ea772a9b755da", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 31, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb7c" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 110193, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "6a9fadb4f0a68d05befcd7931bb6c4003309bdb54975de801010edff14310584", + "s": "961262057f1f57b6d5595fddaadfa88175387d4b4116127819e3a46fc23dfe7b", + "v": "1", + "type": "EIP1559", + "sender": "0x43d68e14638ca40a193453229c87e37f84257763", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 69, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x36ab86c40069cbd51f88dc428b3bc40e4a877381e8b9c410fb55b447b8ee430554ee2a770000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb7c" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 340001, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "2aa1c7cdc3170f6c80f66ce387aecf591889f57750682525ce736d5e96ceb9c2", + "s": "bf65907cdba9d012f077c0d3de2107886a415115ac66b9a5ad0e2bff4c9930f0", + "v": "0", + "type": "EIP1559", + "sender": "0x5f035f5f3bd2abdb8ef9fddbd251ece2ef24f2b4", + "to": { + "value": "0x6cd20be8914a9be48f2a35e56354490b80522856" + }, + "nonce": 3, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xb9a2092d", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 23797, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "49d7f45192e06b2d8d330cbe4858662d4b64960fef4b9622ddfe36562b65b65", + "s": "2d6656f9f5493d9a18d93d00aea9efc3c61a89cc028f97f43335e1e2c9a49568", + "v": "1", + "type": "EIP1559", + "sender": "0x4bdb9a26955fb929978857bcb76756ee841e29dc", + "to": { + "value": "0x6cd20be8914a9be48f2a35e56354490b80522856" + }, + "nonce": 4, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xb9a2092d", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 23797, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "56a9fed457a07a52e06540d76c13482cffecadee3772592df90580681ce771b0", + "s": "959c98e7b844ac3ba3113946e047a78284a323f9bd8dc917da9d86d5f81634f4", + "v": "0", + "type": "EIP1559", + "sender": "0x039eafb9ce26f7af1a2c52505d68d6b50ac8eab7", + "to": { + "value": "0xd1a3abf42f9e66be86cfdea8c5c2c74f041c5e14" + }, + "nonce": 5, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x5b7d7482000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000004037643133303863376630613065626131626335306666636161393832623062376630653063323263656432333666373866343339653630653534333461333534000000000000000000000000000000000000000000000000000000000000004033383936336434306137333434633266623830626566356464396161643661306330363665666439346238363436633463636362333062663130373337613038", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 33673, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7e334c50e9bcbc351a84ac322c801325e327907391665a5820e959a00af98eed", + "s": "35fdbe85afbbb17afc15e66ba6ba4e8096502c4963f379667948e2599f5a37c", + "v": "0", + "type": "EIP1559", + "sender": "0xd380a95ca364561f3867c5734aae712b744bb7d0", + "to": { + "value": "0xd1a3abf42f9e66be86cfdea8c5c2c74f041c5e14" + }, + "nonce": 10, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x5b7d7482000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000004033623330623931363135323432333232353030356339646161336639383935626632643564333634626533363266306439303339653563663731363739326166000000000000000000000000000000000000000000000000000000000000004033383936336434306137333434633266623830626566356464396161643661306330363665666439346238363436633463636362333062663130373337613038", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 33673, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "155fa3ef4da442b5d34cea7a48ae3cb54f4064e558b8b1f4a61992709795a474", + "s": "3d991a8d969717faf51b2d6465d06a8c46b8860521a1965bafaf540d4569ebe", + "v": "0", + "type": "EIP1559", + "sender": "0xd98ab490d53286d5a8322a3c85326893abfcf6b7", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 11, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 74336, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "198ed699c6cbc11bdd0e8190b365c2e67967304072cdc79e14c2285304c94fee", + "s": "2898cfd6620838dc994b0d8d3c5392e35f415158132ffbcc73eb406d01247fcc", + "v": "1", + "type": "EIP1559", + "sender": "0x00ddaee0b6fa39bca72767c8a4ab6a9a078fbf48", + "to": { + "value": "0x6cd20be8914a9be48f2a35e56354490b80522856" + }, + "nonce": 15, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xb9a2092d", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 23797, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "24b20027ad129d571774f4cc4df198771cd0c4c869d8b00b32e2feb3eef2e7f7", + "s": "6388e5190602cc92ffc04031f0e246e7426ab5257b4cce147fd1bac52ed6cc58", + "v": "1", + "type": "EIP1559", + "sender": "0xedb5e41592a67e7008fe87ec783fa344b4737ebc", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 15, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 152368, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "e462df8570f83f18a7a0b78e261a2c83f5bf31a68352e3cc45977ba4f0b40fe", + "s": "d2a7a0f45911081ffe3d137c91e7652f3a957dcb5ad5cf1de50806074bfa789", + "v": "0", + "type": "EIP1559", + "sender": "0x29bac895f50746fa136b16d4fe7a7d9f80ec9320", + "to": { + "value": "0x47874ff0bef601d180a8a653a912ebbe03739a1a" + }, + "nonce": 20, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xefef39a10000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 216730, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "12903b0aac7d5dbc5fef8dfab69dab37ac5c89893061cfea6b68330c27f5fd83", + "s": "57db3901b8be1c3b0137eedf9aaa3f9df1e8cc46996034296ad64283994386ae", + "v": "1", + "type": "EIP1559", + "sender": "0xbff841e28e36bf7859ad41033131c08c4b677ea4", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 41, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 152368, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "5c868652d19e39f55a382aed1eef7f2345eeffe485761b50721748676f1cd335", + "s": "a4b9c0ccbcb8aa5ebbca40f0918990b27d207cf20c072874bc666bd65a1348e8", + "v": "1", + "type": "EIP1559", + "sender": "0x30d64908e2ac75cda712cf0075f3ed5a9d22bf3a", + "to": { + "value": "0x281a95769916555d1c97036e0331b232b16edabc" + }, + "nonce": 3, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xf160619b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006602c6f3000000000000000000000000000000000000000000000000000000000000004114dbed32f7981dcdaa58ce6491adb2fbc1d130f6a9d8b89240957093ed26e48260b4ba25ce5c28668b2377747885d0208c6485b2141e600052525e2b86d9f32e1b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d7841" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d784a" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 637462, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "3611a0a9c3b4283c4fcd265ff58e857adf6e2ad3c75bf703b63ff8d04e3f6d15", + "s": "e8cac4341584f352a2d0334bec7a7e82609752201497949856b620b3ac7100b0", + "v": "0", + "type": "EIP1559", + "sender": "0xd06c066a909186500bbe6fc178e13992e832d664", + "to": { + "value": "0x281a95769916555d1c97036e0331b232b16edabc" + }, + "nonce": 3, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xf160619b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006602c6f30000000000000000000000000000000000000000000000000000000000000041ef922ac3b665e344662119ccef2e2bf6f7bace67c3a2f1da22e6b9cfa43f05476ea28f0959eeef74ba0405fd0da63bdd3012d214daef3af7c7c765d4aafcabde1c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d7841" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d784a" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 637474, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "3de883bb3910278acf11196b87facce4c68e86165703658f9f7791c5e9f84ab7", + "s": "713013f7bd8e6a444180a0365cdd7046c6fe845db828461c90eadc461ffa1bce", + "v": "0", + "type": "EIP1559", + "sender": "0x6c98070554315f62313dd1bdd934d3ed2849f319", + "to": { + "value": "0x281a95769916555d1c97036e0331b232b16edabc" + }, + "nonce": 3, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xf160619b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006602c6f20000000000000000000000000000000000000000000000000000000000000041a92a992a3a94d0f0ec21ef5b4a831035ba04b339efe036192093fad7112a71cd3a7245e27bb17c421bfc4c5b2e64abf3ba1bdf135e025015aaebbb7ffdae8d491b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d7841" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d784a" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 637474, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "722942a3a5558f21366665c7976f3c4f04c89cfd5ca65c821cda57b3d6c8ec3a", + "s": "8036a68c203ca41ebe1a87d38f0516a70c0a8b5d5940a62fe7edfc71cb2bf6ad", + "v": "0", + "type": "EIP1559", + "sender": "0xde5f5ebef73981fd290e9885b56473396caadaf2", + "to": { + "value": "0x26ee4ba1f0017f411c400a729115c4389e85c42c" + }, + "nonce": 41, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1a3e7c8b00000000000000000000000006bff275cbcc675ac6c1f0bc32e2a8343d40229a000000000000000000000000de5f5ebef73981fd290e9885b56473396caadaf200000000000000000000000000000000000000000000000000000000000522d500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000007768747470733a2f2f736f6369616c2d636f6e74726163742d6d657461646174612e73332e616d617a6f6e6177732e636f6d2f6c696e65612f3078323665653462613166303031376634313163343030613732393131356334333839653835633432632f3333363539372f6d657461646174612e6a736f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000041931a8f314aa24d1d31c5481e4ff8755c44f2f56047bdfc07213a3f76e728c353769cf650c1c36ed0967af46432e5f61dd2cdb8d20b23fb37360d1e5909bdd9fe1c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d7841" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d784a" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 300000, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "654702df4a703d80caaf83c0731007b9826985c966227fb16cfcc75440bc6b7a", + "s": "f223df9766910e9d6351c164b9dcf95baf01344f059fdafffd6d17060314dd81", + "v": "1", + "type": "EIP1559", + "sender": "0xc557f27445c6ef0017a2ffc91689c1ca7d13ac4a", + "to": { + "value": "0xf5b709c209c3ba5e837d517bb2719e3d2da76629" + }, + "nonce": 94, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0x63a01275768c000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d7841" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d784a" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 555519, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "27adaaae166d992740918af11d4edf4bd80218f51aaebb97af6b517877e1ed80", + "s": "40cdcce7743b305d7f52e657e915bd11051630726e96e7425fc4d78258755aef", + "v": "1", + "type": "EIP1559", + "sender": "0xeb09081242b1be54a98598540e788695a501b23f", + "to": { + "value": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f" + }, + "nonce": 299, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa2a9539c000000000000000000000000eb09081242b1be54a98598540e788695a501b23f00000000000000000000000000000000000000000000000000000000000001a6000000000000000000000000000000000000000000000000000000000134d7c600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000041f82d88857dfb00c9a16fb20446ec3dc3aba4fb0ccc0c3a70e3e6a303b58683f358f6ca44bb950ba4fdd1ac6e689082556401807fac85edb82df6e239e717069b1c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d7841" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d784a" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 180375, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "6138c534fcd0df2da9db13557cab4c9aacf2b947a1840fdc2c454e9e2edcdc61", + "s": "149e3280cfda4de457887f1bbb49988655db365d3db8d8cf3bccd0f8195ebf33", + "v": "1", + "type": "EIP1559", + "sender": "0x50bd7c177e51ac52a11775b029627ac1c9ed0953", + "to": { + "value": "0xc043bce9af87004398181a8de46b26e63b29bf99" + }, + "nonce": 2, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xefef39a10000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 324256, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "69d9be4d9f092edf320da0d26db627d09d37e685c36c19e9064faa331e32f5b7", + "s": "3df2fda470a600a2a8a634a18a1dee25d9fdb04930819e3aae7dbb9471ec58ab", + "v": "1", + "type": "EIP1559", + "sender": "0x921c572b3fb08662e2f5cbbe36bad1fa681f20bf", + "to": { + "value": "0x47874ff0bef601d180a8a653a912ebbe03739a1a" + }, + "nonce": 12, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xefef39a10000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 324256, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "456b96c5f4bf2364e272672437f61d235e7bafe38a41e72dd7239d225b83c09c", + "s": "132b388d74384d07de855422f397cb8797f65b5658423c383a68e5d54e63c19b", + "v": "0", + "type": "EIP1559", + "sender": "0xc0face0db9363f0e1772186a4f44da97b32ba2e5", + "to": { + "value": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4" + }, + "nonce": 14, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xd85d3d270000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003b68747470733a2f2f6170692e6269746176617461722e696f2f76312f6176617461722f3636303263356339663334313236313738656536366661380000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 500000, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "1d07df32993bb1825d7c3fbe5ba0fe3ae13b23752452ac5d05e0faa37d65c147", + "s": "626f13c61891ae9e1907650a8b2797769b04850ed03fa0d6a8abb191b94d1642", + "v": "1", + "type": "EIP1559", + "sender": "0xd10fbd67ab320d2cdcd2d5b7dd758db233ff6dc1", + "to": { + "value": "0xc577018b3518cd7763d143d7699b280d6e50fdb6" + }, + "nonce": 25, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x70245bdc", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 107723, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "5b76c4870ce854a7941ff297132ef5aaea451d0205d3659752d32ef650904d35", + "s": "7713513c85e7a3ee3ce7580e27df93179020cc78abac90adf8adfad7961c5755", + "v": "1", + "type": "EIP1559", + "sender": "0x9e2d2b19c0bcf1f68b0d922f7c5dd844c0c9e382", + "to": { + "value": "0x06f9914838903162515afa67d5b99ada0f9791cc" + }, + "nonce": 32, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1b0d0ea8000000000000000000000000000000000000000000000000000000006602c6f36e23cc85dad38a7e96f5d70a83aea0e26d3f6dee08c7eb903583bb694708f06000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000041297f69d0420a28a842f5b878bc7f21f82e7fabee728ca23fa7f8b7ae2f811666603ca572ce92234dd71e239dd226ae86f5417ad212b6f41164256db342568ead1b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 173190, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7f75c7ef325aaea7e478a63ec513703ccb4449d3dcf5c5f0d126e5c18d2b3f4a", + "s": "60b3c6c2c97f3c621af497af72043ae25cbc21a4fad54a1edc000ddd7dae15e6", + "v": "1", + "type": "EIP1559", + "sender": "0x44a19e678f803cc001229dfce41f104bb9b9c312", + "to": { + "value": "0x9df3c2c75a92069b99c73bd386961631f143727c" + }, + "nonce": 43, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x57bc3d7800000000000000000000000044a19e678f803cc001229dfce41f104bb9b9c31200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 127260, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "41a0a420b47673dc80b7f15e89fb357dc458b3a7ed16960cead0dc4f6db1a652", + "s": "d1d9441c701401064295baea357e45a40f223a2224108c6ede5021719719af46", + "v": "1", + "type": "EIP1559", + "sender": "0x146d1e888ca460c2b4e1f6478075dbad5f46446b", + "to": { + "value": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589" + }, + "nonce": 59, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0xf648253d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000146d1e888ca460c2b4e1f6478075dbad5f46446b0000000000000000000000000de240b2a3634fcd72919eb591a7207bddef03cd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 195284, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "528b804640023fb2345ad69ba59d5cc2138f084c98de63d6b67dceff896aa44c", + "s": "7a6c5e59c253906faaeafa9fbb5f455c8a41d0b036140f0de83dd86fcf9cf3f7", + "v": "1", + "type": "EIP1559", + "sender": "0x3bf6b744459282fee0d17793d604092d92b1841d", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 62, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 226777, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "a7e976d3d08f03950d77f94d245b86b031a3c2301a743723f29fb281231c593", + "s": "787681a91a9dc19d2e8dc831adbb5d06b69703999dd41e11b0585e6b0d238700", + "v": "1", + "type": "EIP1559", + "sender": "0xbe001e07c10b67da88283160082a2b3834ca1ee0", + "to": { + "value": "0x63ce21bd9af8cc603322cb025f26db567de8102b" + }, + "nonce": 3, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xfb89f3b1", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d1f111" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d1f119" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 38406, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "5fd32ac3c9584c7a9164579323c58561b51d85e251cee3a2e81a2396bd6e587b", + "s": "9a07fc05468506586c384421ad9b6eca18e57c258db59f1dfa5b5e07fb7c765d", + "v": "1", + "type": "EIP1559", + "sender": "0xbc3c845c58c3f97be75b684b1adf19d9f6f322fa", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 84, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x80ffa19a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000212b35ca888c0ec77a68c22e79a560d17cbd4fa2799eb509aff44f42d2fa1f762291077987fc2963cda62ff1f52d5183395d6351e20067646a0722e660f7e056e1883d2f603d16278f0faef2809dae44c98b248c9448c59990a3ed022d6313baa28b5de2a9738d5784d9b90b57ee2c208f2ccf3a2c2a23210a67056d636a72d8705eefa8d85b1437fd51579ee22b7b14cc99f5c4f93914fd086aca5dd21988c071361d82c5f9f1f0971214ff2b72f58c42d49ba6713971a1201e2a76afc83580f0c41274a1e9649e247f3a0c2fbd1bc948b2ee9c0eca8e7e6585653060876ba3920d7d276da3fbb547fd395de5cc6fefc1a406ba540d28afa0e055729121d4ff00000000000000000000000000000000000000000000000001000000040000000000000000000000000000000000000000000000000000040010c2109460210c20000000000000000000000000000000000adbb5be6e6e6e6e9e6e79b9e79b9b6000000000000000000000000bc3c845c58c3f97be75b684b1adf19d9f6f322fa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0b429c827ad32f3ab6531d1688bf5187c113886e7faa56eede3288f1bfc7b14e2f9eb326dcc756e34e79f4e1fc4f76e7eb8efa2d3e2aa43b43eb9b2075391a471520590d9c2281db20121d4774f28c965105f22e4e8cf50543bb54d29f3b88b12ffbe63cbcfcdae22e4170fab080c5ba3207e851e282c0e009334cf85e9f65e016a2543170352e0206b8b34151aeb993853f2b9f388dd2a3a45c1b3f0cc32596285b8dc07151fa748c62d679c50e38f3babce8ca9ed8a46cf9744512462bd3e22628cbc02abbd8ef30d39c3df34ec1b8a3ad1c5fad76ac0b165c96b4e93200f42b4eef8add2f0c23e4981cab58ce6bcb67345afefb680c5f306f5069ebbf0a170228e10f2a17c014158eed8ec45033dd63d6395131b33b31a6557426036f2faa000000000000000000000000000000000000000000000040010c2109460210c200000000000000000000000000000000000000000000080000884028c00089010000000000000000000000000000000000dee9e6db6e6e7db7af9e79b7ba6e79000000000000000000000000bc3c845c58c3f97be75b684b1adf19d9f6f322fa000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000782bda5b41146fca5bcd6aabf405ccdbf842393a3372d5339602602d329af8fd8a", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d1f111" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d1f119" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 180001, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "6159e1e82c1d3a88c940761644b216ec9f8902a24cd2f2e950900583df3a3720", + "s": "fea477ff27dc61438a9e984a83e73b21c259a1f8666fe2905227ebb29ad6ef7", + "v": "1", + "type": "EIP1559", + "sender": "0x7a0def86ff7de5e3dc19a8d9cfbb7641db9c33d9", + "to": { + "value": "0x66ccc220543b6832f93c2082edd7be19c21df6c0" + }, + "nonce": 18, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xefef39a10000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031c016e9" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000034bb0772" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 324256, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4eb7030997d17b98dbfc2319836dd153ba41b8a2b9e6caf3bdd7fa19a6bc90e8", + "s": "9c145884ba0d1b63691c59965e2645935a696f3c55d22994f3e11b9d23b0f858", + "v": "1", + "type": "EIP1559", + "sender": "0x354f5a3938a1bc282a6ae9878387aea31a626ea9", + "to": { + "value": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a" + }, + "nonce": 31, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002ef04be0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002ef04be0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 84956, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "e5604b61ccc8996a9810e26b38065001f9848933d1721827b63b366e3dbcf2", + "s": "b3be1b5119730d1d9d8e406706de9959ea3e155919b206891cbbe52e6d3725ee", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x373f4dffbdfed366832b5b4341282916b43aa169", + "to": { + "value": "0x6cd20be8914a9be48f2a35e56354490b80522856" + }, + "nonce": 2, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xb9a2092d", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002dc6c000" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 37432, + "chainId": 59144, + "accessList": {} + }, + { + "r": "166019dd0414b3945ce46fe479377c1b62be8bc06f9e40fdd14d99c839bdb60c", + "s": "569cb15fd531007a058994bc8dfb9379fc0b46405f06249cecbaca9a3b047f8f", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xf3f14a3c5acec9b8fd19939c5335fc4bbd05a308", + "to": { + "value": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4" + }, + "nonce": 6, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x183ff085", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002db99e40" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 23268, + "chainId": 59144, + "accessList": {} + }, + { + "r": "2b0488d3cf4654e4e8be0426b80a3869b187259990458aaf97784cf1395cac3f", + "s": "f3b22752da8863fccbd39babac39ff5c3803cc0c4edf197c24ad68819e916884", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x3de45ff59508bc0b0b8530f66c85b29f403f88b5", + "to": { + "value": "0x780de722234532f7d61ca3d147574f44a85c4244" + }, + "nonce": 8, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d4cae00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 46722, + "chainId": 59144, + "accessList": {} + }, + { + "r": "7b224c1bbcf08e69e70edcc79c15115771a5651b3df3056c0685c74667c45857", + "s": "851417cf42733554161d58a345aa2224b203d60604733ee33883eac6fc07f61e", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x924f60d3eb745ad7fdf81a505ec551aab21fd52c", + "to": { + "value": "0x6129f06f872e80e0ff336aa74507ee1136574dfa" + }, + "nonce": 10, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d4cae00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 79346, + "chainId": 59144, + "accessList": {} + }, + { + "r": "51030635412d20775c643a4eb553df379006c59349249af1f02646953826a1e", + "s": "5718f7ce1852c4ac179aa56148ad330a8225dd49d8c3ba1710ebe152d3fb7f4b", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x5cae65285dac285031bafb1027cbceab4802042e", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 12, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d4cae00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 46341, + "chainId": 59144, + "accessList": {} + }, + { + "r": "8f4cf43124363af4834615f7694219b3784eefde4969007569e8b941960aece", + "s": "b180ad5b9111bbc62746fd36e31694be5c4261daec40ba9c377b0dae3dffda61", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x897e2c9c4f8ac1f38729979ac4794ccf5ed83397", + "to": { + "value": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce" + }, + "nonce": 16, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d4cae00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 46260, + "chainId": 59144, + "accessList": {} + }, + { + "r": "4ab5a2ea8dfb9fb3045d98d5f2dfeea2ffd8b951feb9e245dadd56661ce5a752", + "s": "773c63f7bcd6db248df427a4f2f2e78f70030b67d984d6bdfce7b52ab7e27a3e", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x10156134106a632ec43f03173ba6a27cfb24a70b", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 20, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d4cae00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 46341, + "chainId": 59144, + "accessList": {} + }, + { + "r": "1de448271b04d67502c504f30667c737c9ce979207f1dc916b18838096a65a4c", + "s": "ab58587677bf3af6d4dbb49fd827cc047a4beed3ea822233d6ab87424b1f468c", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0xeda8d95134e1d153e8abdfbbe8be955b38e32cc4", + "to": { + "value": "0x666a8f155e5c0316b0867f6ef5d410ae0fbcfbd8" + }, + "nonce": 28, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xab64d2e6", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d4cae00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 23689, + "chainId": 59144, + "accessList": {} + }, + { + "r": "1a2bb9e187cbf8b884d3cd2659aefafb2b370f23271d04bf0d11027b909853ff", + "s": "6555ac2fd6c9713b3967cbbaf94e967e42016b4ba105c68b43dde8edc967f05f", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xed320adcf1e612e691db3d6fe9bb530f32d3c849", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 35, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d4cae00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 25954, + "chainId": 59144, + "accessList": {} + }, + { + "r": "6070509d590a033ed22648ae6a1ad6a040b02d32079fd13380737889bdd0e262", + "s": "dc4c905b55e8236d8bda9be15be5cceb24be1dedf50b300b05d34ce997172403", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xfd83a44f6df860721d26aedbd2cbf8cf25f91718", + "to": { + "value": "0x281a95769916555d1c97036e0331b232b16edabc" + }, + "nonce": 3, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xf160619b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006602c7010000000000000000000000000000000000000000000000000000000000000041e7d935492b64fd68689de0eb69ea11586fde92686ecd884a273b1725d7c9c148757e6e1470f8446491b2c68e789faf8fabc2e4fc9973530d518c12ca4316f1de1c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d0ea2f5" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 800000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "242848040b850d474bb60335bbbfa38456bec651983ecf92b98a67e5d3158ef1", + "s": "b18b176134fcd674f6f88ade2d7d5201873fff2b2ba04a66ddd3c71ac2a097b3", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xe6813139e10fa162aafd52c1aca081d544d3443b", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 11, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d0ea2f5" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 151185, + "chainId": 59144, + "accessList": {} + }, + { + "r": "5d6ce93def4af08d06bc3d9d90e37ebb83447fc6467c33147b45463cdf31844", + "s": "522ae4b5af6e1a063981cd9b71cc1628d3f41a66f938f88752aa186a5e2da880", + "v": "0", + "type": "EIP1559", + "sender": "0x058d2e0a3306a7dd764b4caeb1989f3e04246a6f", + "to": { + "value": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2" + }, + "nonce": 58, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41779" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41787" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 107615, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "69fd952c91509bd24e36484a436843697b98f54fc00b058d0b346a0437bc5a1e", + "s": "31177c90e9561be2af8423b89602a77e1f6a7080d35301142a47b120111c9768", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x39311f0a39334e488492608282593fc76d825d99", + "to": { + "value": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589" + }, + "nonce": 15, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0xf648253d000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039311f0a39334e488492608282593fc76d825d990000000000000000000000000de240b2a3634fcd72919eb591a7207bddef03cd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 195840, + "chainId": 59144, + "accessList": {} + }, + { + "r": "58439b4a804716e6a6f332b145bf90611f56b3d2b335d0178c1e64c4e74651ee", + "s": "466b23ef6a37ae0acff44b70fe6fd133d7f4a726dd57ffda45a43174ffa1f17f", + "v": "1", + "type": "EIP1559", + "sender": "0xdd7217ae336c97c3b21ca53321744ad788b133b2", + "to": { + "value": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589" + }, + "nonce": 18, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0xf648253d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000dd7217ae336c97c3b21ca53321744ad788b133b20000000000000000000000000de240b2a3634fcd72919eb591a7207bddef03cd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41779" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 195840, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4b964fcf2b0aeeaf7f891de76eff608b98d45ea7457eb49bc9621d3fd8144785", + "s": "5608245631bcab2f77f66e50e3d6eb9a8da3750d5206868adac41c74a90b56a1", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x701b952c0346620ca736861650ea6f39a4139455", + "to": { + "value": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a" + }, + "nonce": 23, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x1249c58b", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 82000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "96ddaaac9facdb7ce3b391d4faa0e44d366266a139be44a8bf53c6f7327ac75", + "s": "730de9456fb9681542a537adf35d95545e91ed92abd42e4f02fa2555c23f6835", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x2f10ac1d4f508506cb5bd03131f76ae08da76bdd", + "to": { + "value": "0xc577018b3518cd7763d143d7699b280d6e50fdb6" + }, + "nonce": 23, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x5da264db00000000000000000000000000000000000000000000000000000000000000010000000000000000000000002f10ac1d4f508506cb5bd03131f76ae08da76bdd000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000137e801ed882c9e17dbb92080ab0aaaa503a0a6fea3c37b3a64aaca67df9d432a0000000000000000000000000000000000000000000000000000000000000041a5c43b1b8ff751a600f927153d6bd23fc5c01b43226c798f0b68f044ec11ebae1c4f67e7a738a6ef8c31b1d6c2b42d97e6b25fda6d3e872d15f376ff6fe31ba31b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 345154, + "chainId": 59144, + "accessList": {} + }, + { + "r": "21bc0aef64e57145120dcb36ca28965187955ec0aeae652de33ce1a6b504d675", + "s": "871a33fee51c36ec454afe0a1c7f8d81a2105c54772f5f4501bcff4316127107", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x58ce903c4c5ef8e09218500bc2db5cea84115743", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 25, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 250000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "5cba0dbbdc37091485947b5358405ac8e6a576019af63423b24571086cbad185", + "s": "49461b3257e642ebf1e56f41267cc8c2874d53d1af901ad6e49f7216286ec5c", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x46e950611f644ac46766790b86b6616fde36cca9", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 26, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 250000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "4d1e85e424ca44be548d083b5ab1f1fba49fd70679b60a397447d65e1a594dee", + "s": "4f94406000d2154a783e3e835d31b86f4b122a599c5ea801c9d3ae571e714ca4", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x6ce63ce9c3f3436eb163338f0148d566e5b34bd5", + "to": { + "value": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4" + }, + "nonce": 76, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x183ff085", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 23000, + "chainId": 59144, + "accessList": {} + } + ] + }, + { + "header": { + "parentHash": "0x4db35dfb295e03647313d57b1735eae465970ea178156bb11e093da96977a2ed", + "ommersHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x32f212c119d9344e075d275a0b9b4cb2481a8cd00e6d931784af58ad6467fcbd", + "transactionRoot": "0x9fec2561ebe442c7c8a02e890388095bc55b00dbb5243beaf757f7f1b60bbad2", + "receiptsRoot": "0x7b1f5b9dcae7bfdcd095ef6e2a4a1a6a85afcd9034ed1bf59a2b7ac5174aebf1", + "logsBloom": "0x1c2202642341481301020f4587d030d104422bc505a04e1220009100620e06044d881419b2d0b106208a54945022205304806e304cb220aece54113480b7be51904222c60a2c044e0ba9820b06281a67a44210a941cd1840605040999024a804e20ab4018a3e24a2012285e4ca9039009475b0802a13c51a39044174a0ce5c0d40220790c11ae2c3c9f27a04020c28890b3a15c1282043c70ce320402844d0c022e2cb1a53f0141b44304928290808c82ca2600d0004716c8041422e38808081224482064025101b87920a4c81b21902104e0c99863f000b0b0306a212817b3c4012215c078196742482c221329d84459c22c023339298e818ec292892904020", + "difficulty": "0x0000000000000000000000000000000000000000000000000000000000000002", + "number": 3149946, + "gasLimit": 61000000, + "gasUsed": 13747454, + "timestamp": 1711457757, + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000d0117bb6ff79669ca8d67971f1965f2249f6ce7225a94d5891d59f1e6b2a665e7c04841f2e2ea7d162d048e3415e5ea49137842ce594b697d3f495a9aedcf0b600", + "mixHashOrPrevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": 0, + "baseFee": { + "value": "0x0000000000000000000000000000000000000000000000000000000000000007" + } + }, + "txs": [ + { + "r": "5c2919c44c05f9452fa449c4efde1ef86b827eca2e919a9e46f046a3b219fefa", + "s": "2067029546f6353c246753ea4b0ac845a24ff3a79a418d4b4803f42d113cb3da", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0xd3d7dbe73bbdd5a5c7a49ca322763c4d400fc240", + "to": { + "value": "0x8bdfd57151dbd2e3db4b8e42cf3f21cc33ac6332" + }, + "nonce": 1685479, + "value": "0x0000000000000000000000000000000000000000000000000019c64b09618800", + "payload": "0x", + "gasPrice": { + "value": "0x00000000000000000000000000000000000000000000000000000000b2d05e00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 50000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "5f47b0123501a216b9e8abb413422c4b205c7a841f35be11c724d8448874ba6c", + "s": "47b40af6edce83e718629fea87e43a3cb696ce02f201bbdc8037d10181ae4146", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xd3d7dbe73bbdd5a5c7a49ca322763c4d400fc240", + "to": { + "value": "0x7d38ebdd033bbfa8e4ea6eac2ba49210a5a013cc" + }, + "nonce": 1685480, + "value": "0x0000000000000000000000000000000000000000000000000011c37937e08000", + "payload": "0x", + "gasPrice": { + "value": "0x00000000000000000000000000000000000000000000000000000000b2d05e00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 50000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "6d2e090ee2af7042a82f36a1174fde79b8fab7f73f7b1508ea42910b7776f08c", + "s": "2f287f31b42ed0e00d27af96de3a984159dc5586be7def6ea4e214d5e88aeb72", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0xd3d7dbe73bbdd5a5c7a49ca322763c4d400fc240", + "to": { + "value": "0x800d885cb32b0c4553dfa92139fb6894fa4262ee" + }, + "nonce": 1685481, + "value": "0x000000000000000000000000000000000000000000000000000e0ededb605000", + "payload": "0x", + "gasPrice": { + "value": "0x00000000000000000000000000000000000000000000000000000000b2d05e00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 50000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "2174d98fe3295b873f2a69c5fd592788015bbfe7f84c93f9cf641d479747e925", + "s": "6a1775ac30bae66f1b778d8794b3069e7dce1275cc870c7e3e2cce280b749fcb", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xd3d7dbe73bbdd5a5c7a49ca322763c4d400fc240", + "to": { + "value": "0xc65f140b2a22f5761ebb2469a78ad7b05a8a4bc6" + }, + "nonce": 1685482, + "value": "0x00000000000000000000000000000000000000000000000000229d34f60bf000", + "payload": "0x", + "gasPrice": { + "value": "0x00000000000000000000000000000000000000000000000000000000b2d05e00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 50000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "6d07acbfe3967f8aed945ddef4b72abb4504cce419d242b247964e2fc8a77c8", + "s": "1083b34194839793a7c41c2cf792cb223f12af0cb41131a4ad668b251fe90c7e", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xd3d7dbe73bbdd5a5c7a49ca322763c4d400fc240", + "to": { + "value": "0x6d357be7d0a6c3ebbf07c0da865acdcfe179c36d" + }, + "nonce": 1685483, + "value": "0x000000000000000000000000000000000000000000000000003ff2e795f50000", + "payload": "0x", + "gasPrice": { + "value": "0x00000000000000000000000000000000000000000000000000000000b2d05e00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 50000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "332f82a95e859fb6e9996e5688e424e64157bf0dee357d2794d6e332a27d7da3", + "s": "de2cc7411a22736a4d0efb7aa9918443b6f46132c520130f253ceb48d6ec5a0d", + "v": "0", + "type": "EIP1559", + "sender": "0x4d99727e1b3ed67036e5d8e7dd2df7156f4d847e", + "to": { + "value": "0x6cd20be8914a9be48f2a35e56354490b80522856" + }, + "nonce": 0, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xb9a2092d", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f900" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f90e" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 23460, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "2a8b4a76195cde7fbded75dbeb11f4ff3d6253086cfb1247a199a430b6515955", + "s": "e11c5833719e083100aaf8d77568a1da92d756cdf8d2309b811d3eeb1c975012", + "v": "0", + "type": "EIP1559", + "sender": "0xcd6ded926130e82924007460541e0040354f37d8", + "to": { + "value": "0x34be5b8c30ee4fde069dc878989686abe9884470" + }, + "nonce": 9, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xe139278f00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000399ec6ae9eb65508f7368bbc066f61a2796082baf5d50ccf471dc417922c0183000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000041a11aff5dc773266e1d22ecd0fa0233bab45da60f6091a1855e762830ce0820342ef14079abc1ee666039746c829442e72cf0b1e7ed5258ec8ffe808f5b49d4b21c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f900" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f90e" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 135687, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7b50d4c4ec2f608542d071279f8ad594d8d8eec73f53974c410a2244c424f586", + "s": "506f5d8c7a76f99294fe2e5d9305f50c05a85958457ecf5b9bdf0a559ce81cfa", + "v": "0", + "type": "EIP1559", + "sender": "0x5c660efaa824024c069463c47ae96655c3b096ea", + "to": { + "value": "0x70bf27bbb562a9b21fe6eaf2b7832c476691a39f" + }, + "nonce": 9, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1eedb60700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000006602c545000000000000000000000000967035b7cc9a323c6019fb0b9c53a308d2ca551c000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064156e29f60000000000000000000000005c660efaa824024c069463c47ae96655c3b096eafa5fb00c383f2ea90616c5eaffb819d3eec79f642163ec8de7ded980566c6c710000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041433735a81c5c548c4cf9f7db1f85046c283cf826eab26c8b322940204fe8e424774f8ed7aa0fe81f144911e14ce5d08255a33032b8addcb96f222d94ebdf2ccc1b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f900" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000009502f90e" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 153697, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "776d7556f6bf8bf0483a2f3b0d67e2cae0cbda9428117f1b863a788592b1c9e7", + "s": "96fd7aafb13868e1b96f94d44bc4008d7a63c46783f15e9a844964deb88ca7b7", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x0ea644267003897625618344e937369022fb1b52", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 21, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x", + "gasPrice": { + "value": "0x00000000000000000000000000000000000000000000000000000000376eac80" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 25954, + "chainId": 59144, + "accessList": {} + }, + { + "r": "1167bbce5275c60a59925d64c464c08048a519849b63d1ab9d610c91031ccc74", + "s": "346ec83be226a496ff246178c2fa67af692a3995dacf8b3dd30d601851ad223", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x89044c4fb920b2ccd1cc86937facebc244732cd3", + "to": { + "value": "0x032b241de86a8660f1ae0691a4760b426ea246d7" + }, + "nonce": 11, + "value": "0x000000000000000000000000000000000000000000000000000047d99eeff000", + "payload": "0xac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000012475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000089044c4fb920b2ccd1cc86937facebc244732cd3000000000000000000000000000000000000000000000000000047d99eeff0000000000000000000000000000000000000000000000000000000000000044ab5000000000000000000000000000000000000000000000000000000006602cce2000000000000000000000000000000000000000000000000000000000000002be5d7c2a44ffddf6b295a15c148167daaaf5cf34f000bb8176211869ca2b568f2a7d4ee941e073a821ee1ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a00000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x00000000000000000000000000000000000000000000000000000000367e200a" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 349559, + "chainId": 59144, + "accessList": {} + }, + { + "r": "606f3faa4d8675fadd5e88efce6fd92bab9e5ec7db952b1efda51a48118ec154", + "s": "625561093ffef0aa4207100ce4d6cc9a1e4e1489bb7983c4062f095f84a65e76", + "v": "0", + "type": "EIP1559", + "sender": "0x847c6bd970b7af8be8330123fc6408878ab9727c", + "to": { + "value": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4" + }, + "nonce": 13, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x183ff085", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000350f1186" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000350f118f" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 22409, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "45f5f06fa1855fe7dfa8e5fad7e216afabc552c2e305efad77a35a0d4497517", + "s": "4ceba8df7463e95a0d57170e35889b64f4aecf37b393e6cd01558b60ce21bcc1", + "v": "0", + "type": "EIP1559", + "sender": "0x4449eb076ae97e78b495e0aa7b8164707aceb900", + "to": { + "value": "0x2933749e45796d50eba9a352d29eed6fe58af8bb" + }, + "nonce": 13, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xf02bc6d50000000000000000000000000000000000000000000000000000000000002710000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003503795d" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003503795d" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 75217, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "22bc0c0e6fa2a919a2762522e1d398cb498dea1ebcfd4278c380170abcf93994", + "s": "286912d218c99a81ede917f849d1e551a5296f1475ffd73014a8445bf3459d67", + "v": "0", + "type": "EIP1559", + "sender": "0x712c1703f4670081dd04544048f14d5bafc4a88d", + "to": { + "value": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2" + }, + "nonce": 138, + "value": "0x000000000000000000000000000000000000000000000000000221b262dd8000", + "payload": "0x347c91aa000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff0000000000000000000000003aab2285ddcddad8edf438c1bab47e1a9d05a9b40000000000000000000000000000000000003248ec2c61b10f9764034b1400000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000712c1703f4670081dd04544048f14d5bafc4a88d00000000000000000000000000000000000d708648584b356d8c69b580000000000000000000000000000000000000000000000000000000000221b262dd8000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035032547" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035032555" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 420000, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7cfb98f6c619cdc1184c5666967ea212ca78194de075306bec2cfd0176cf7455", + "s": "e3a36e1fd821008b537d25af32bf39856c93fcb102f3268fc0259ee26b4878cf", + "v": "1", + "type": "EIP1559", + "sender": "0x6cc4bbc248d1689a84a2f87f642a67d750908fa4", + "to": { + "value": "0xc64a931356e0e25c280224b80fa4c87e6131e1d6" + }, + "nonce": 119, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x095ea7b3000000000000000000000000af1d554d1cb4cbea861e219bbfeab06c1f87ca0e00000000000000000000000000000000000000000000000574920013fa05dcec", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003502d5e8" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003502d5f6" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 46345, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "565212740ed613489f8d5196ea282c2b7a5dd7ae4f0cbb3223044d4c783f6ae8", + "s": "245d2afdd42727ce99fe59d359091ef971e177a3e260b86d65cf82c15c9466cf", + "v": "1", + "type": "EIP1559", + "sender": "0x5c391df9aa515a475ef687a94f48c99b694eaf0a", + "to": { + "value": "0xb5bedd42000b71fdde22d3ee8a79bd49a568fc8f" + }, + "nonce": 3, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x095ea7b3000000000000000000000000032b241de86a8660f1ae0691a4760b426ea246d7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003502d138" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003502d146" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81124, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "13bcb5dd21ab882bf8f3d72d9731daed68151a1d302660d3d3af72b570b9672a", + "s": "31c76257e85190d2291c12087904289498d8b989e3a26a624b1045609b0c5b21", + "v": "1", + "type": "EIP1559", + "sender": "0x10ce6c28cc09c18340edb8b10ea303e2d06600e6", + "to": { + "value": "0x34be5b8c30ee4fde069dc878989686abe9884470" + }, + "nonce": 8, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xe139278f00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000d35923963b8640e8fb6142ad9e360c9c2eec946b5eed2203e8a39b8ae372f4110000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000418811f2c5d685da6a52c2ed8209eb941c9877b914aaef8d73ee8b64c91f43ea8b30dd10fa7019822379a28e0c8338ea335de1e93a6566e33a33e5dee53fbf67341c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003502291a" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022928" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 90458, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "5630eab4534bd440218bc75cc234067502e922d3dd613bbe10737f88062cc475", + "s": "a29ddb5674150714c4700d448c97aabb8c4d36ae9f9cb3c347724c80edebe88f", + "v": "0", + "type": "EIP1559", + "sender": "0x417b4adc279743fc49f047c323fc668db9e600d8", + "to": { + "value": "0xf9d64d54d32ee2bdceaabfa60c4c438e224427d0" + }, + "nonce": 5550, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xad718d2a000000000000000000000000cf62df0148574e0b33598178491d965327e29b8c00000000000000000000000000000000000000000000000000000000000000a0523ac9a230a4298e747d96e207e7f3eb5dd7f42d5c7812285eee083fa8c5bfcd166c47631107336e691b4b24c4d110724e4a7498e687c266abd5124552a430b4157366481a06d38769bb11fde4e8cfa84b58c971ebe2194f9ae13a09f9b9fe300000000000000000000000000000000000000000000000000000000000000e4467d3175200000000000000000000000016675523d9cb8a0354be0f80c9fba48695d3cd98000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000004101f53c997b4c4cd38c2338c4829571bcc914771b20ec8216f80fb536324ebf3e51eefdb48e3e050873bdd0a4b8a74c1bf5e514b4c664155e65a4be2a6393d8ca1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d24c8d18a4500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000019275666125736df3a99564f15064b09501650bf000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c24769047a500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000626aab000000000000000000000000e51f18a90330414d3aa54541efb71802f4123e5e00000000000000000000000016675523d9cb8a0354be0f80c9fba48695d3cd9800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000456e15000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000000000010000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000000000aa4e21fd0e90000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f081470f5c6fbccf48cc4e5b82dd926409dcdd67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000000000000000000000000000000000008600000000000000000000000000000000000000000000000000000000000000560000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000016675523d9cb8a0354be0f80c9fba48695d3cd98000000000000000000000000000000000000000000000000000000006602ca850000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000004048d318020000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000f081470f5c6fbccf48cc4e5b82dd926409dcdd67000000000000000000000000704c442bfef3b6b31559085fc67083ca64e30b5c000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b930000000000000000000000007d43aabc515c356145049227cee54b608342c0ad0000000000000000000000000000000000000000000000000000000000456e150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000401b96cfd40000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000009cfcc5322455f0951336ccb4474795924f5640150000000000000000000000007d43aabc515c356145049227cee54b608342c0ad000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff000000000000000000000000f081470f5c6fbccf48cc4e5b82dd926409dcdd670000000000000000000000000000000000000000000000003f278c3d191bb0820000000000000000000000000000000000000000000000000000000000043f2400000000000000000000000000000000000000000000000000000000000000401b96cfd40000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000005615a7b1619980f7d6b5e7f69f3dc093dfe0c95c000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f000000000000000000000000f081470f5c6fbccf48cc4e5b82dd926409dcdd6700000000000000000000000000000000000000000000000000000000004586c9000000000000000000000000000000000000000000000000000000000002ef7600000000000000000000000000000000000000000000000000000000000000200000000000000000000000004af753070000000000000000000477e45eb1ddc7000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000016675523d9cb8a0354be0f80c9fba48695d3cd980000000000000000000000000000000000000000000000000000000000456e1500000000000000000000000000000000000000000000000000046103a47b1be6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f081470f5c6fbccf48cc4e5b82dd926409dcdd6700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000456e1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f27b22536f75726365223a22706c656e6166696e616e6365222c22416d6f756e74496e555344223a22342e353530313635222c22416d6f756e744f7574555344223a22342e353734363430343834313532323333222c22526566657272616c223a22222c22466c616773223a312c22496e74656772697479496e666f223a7b224b65794944223a2231222c225369676e6174757265223a2258734c6d566b45704676495966324f5353724b487366395477414667686750746b6836536f674f79314a786e6d37383739537974425a6d584d75784953594243356a50462f464c435165706157793575424b6c563551434e52385a54494a4d6a4850324b353770766a437a344138495554344a51526679656570514c7a5069366c696a7879654e445844746a695a57307044564f706751574a31686c67556362416b5a554e4338734868357242654d6c542b3972464f36566a523866594d6e6559432f69335634446543343159474a4d546d543361534e5548567075436f3937556c2b5266776f78697439647966497752536b384e53625933746e4b7a2f4e6f79514536727264785158684a4a4f61793450597563784b3236386833547478676a44584c7066754b47374c71316b6e7a462b5777493062517032582f5871524a4d786b6e65565344555147394b6f2f63714a663175413d3d227d7d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003502291a" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022923" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 1698944, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4ea66a650d5a3f4c8651839851cea306f37bcb925f5c276a7782d9c92f5e023c", + "s": "8af86fdd928ed0de201b45c764c6a37474706e58895e294956a2546d79763781", + "v": "1", + "type": "EIP1559", + "sender": "0xf5d68238c4bbb18a053631e929589be5a9621b54", + "to": { + "value": "0x780de722234532f7d61ca3d147574f44a85c4244" + }, + "nonce": 5, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003502291a" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 46722, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4cefcc9aff1936a98b2f3f6261b15efd29cd06b88d72e6e994fc0bbe708870cf", + "s": "8e733fee3ffdfc92ec85713a11e7ee02338da35fb5f7ac7ad8412eded6644bd3", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x24bfb3ffe53c9f09960d41369c0dfaf9f7586d33", + "to": { + "value": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d" + }, + "nonce": 18, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xc5ebeaec000000000000000000000000000000000000000000000000000000006f415363", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 608842, + "chainId": 59144, + "accessList": {} + }, + { + "r": "afd730b04a6fc151fd8df3d9c5e881ea7d5e1ef6c42a0e733c09fe03eb16894", + "s": "f94f7d607646f2c728cc5d20534596ced9326170870baa1c84023c3700c803e5", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xf1eb13a3f3546452bd90a2e9efbe9b6c5125deb0", + "to": { + "value": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f" + }, + "nonce": 18, + "value": "0x000000000000000000000000000000000000000000000000000009184e72a000", + "payload": "0xd0e30db0", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 102251, + "chainId": 59144, + "accessList": {} + }, + { + "r": "fa77ded54dd0b238d8974b6c6a91ce438d8729716c5f43037aaa94d8f2e115e", + "s": "babf08c2756621815e50c2dd04de894a8db8fc44f3ff56b3fe79792d69f4d4f8", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x94bd35fa9dba31e354a85d1753fdd1f6b0b9a827", + "to": { + "value": "0x47874ff0bef601d180a8a653a912ebbe03739a1a" + }, + "nonce": 29, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xefef39a10000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 259405, + "chainId": 59144, + "accessList": {} + }, + { + "r": "336a3f1344d4d51b222965f73408684e0984dcecb93063dbed43d4cbb68ae8a7", + "s": "1b31b2f32149280d0ef9844b71fcd86a692afcd258f98ec4b051b03acd4decaa", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x5dcd66a5306ad33d896d7d04d466bfa691d787f4", + "to": { + "value": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589" + }, + "nonce": 34, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0xf648253d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000005dcd66a5306ad33d896d7d04d466bfa691d787f40000000000000000000000000de240b2a3634fcd72919eb591a7207bddef03cd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022921" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 234340, + "chainId": 59144, + "accessList": {} + }, + { + "r": "150f135605ec61eedffbe8096c334edfdc019440d819b8f273c9d75bbca98a20", + "s": "f167b7296a9d73e7cb1b9ff1822e84d91f688591c8c9bb52a7e9f73898f28cd0", + "v": "0", + "type": "EIP1559", + "sender": "0xdb535295e772ecf275fafb91419a9d497024a3d7", + "to": { + "value": "0x281a95769916555d1c97036e0331b232b16edabc" + }, + "nonce": 3, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xf160619b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006602c6ab000000000000000000000000000000000000000000000000000000000000004194c2a0b28726e4785d6475295715b66d1ecc6c2564adc6c251615730fe14145b255098a3fd38bbd024ad1ee6ff642ed22d07c48b368678c4f1aac68edb8195c21c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022912" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000035022919" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 637474, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "6bf62acbe720799b1c0f2fa4331ab0c12215b1367f11a6b3dba8c648fa3ef847", + "s": "96caf91f4f99189f7d6ab7260c505355f4c1e125d37f2fdb026ae362eaed6199", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0xe0526e812e4b739562747dd1423a0d70e0aefca5", + "to": { + "value": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589" + }, + "nonce": 9, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0xf648253d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e0526e812e4b739562747dd1423a0d70e0aefca50000000000000000000000000de240b2a3634fcd72919eb591a7207bddef03cd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000034fd1040" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 293760, + "chainId": 59144, + "accessList": {} + }, + { + "r": "3eec983f100a56a4c249fd6fcf246b9ffdc606bf62843b40def50df6b689de44", + "s": "196ba36cb656b6ec505dddacebe8385d71865c6d39ab1a225705ea8fd127c43a", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x45e42d96dd5ded012ff36a784a6893c11f29830e", + "to": { + "value": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a" + }, + "nonce": 33, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x1249c58b", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000034fd1040" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 97941, + "chainId": 59144, + "accessList": {} + }, + { + "r": "4e822fb65937a1cbdc9c628bfe17dabda060bf208c7266b353125feb6e8630a2", + "s": "5eae043dcdeca25173ed326b579b3636acbd346c4f4307a68d4bb9cf1cfd3564", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x431d47ed942f1c3ad7bd8ba43c47a5afb50c657c", + "to": { + "value": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f" + }, + "nonce": 137, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa2a9539c000000000000000000000000431d47ed942f1c3ad7bd8ba43c47a5afb50c657c00000000000000000000000000000000000000000000000000000000000001d2000000000000000000000000000000000000000000000000000000000134d7c6000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000418c7d174572a0108e666d9d6ad2cff479252f60e4d060bcc6ff0fe35b9c835cda48b4ceeac94fadf5170add8eb6a8f4879bed50f19ba3d4e166218f8bf78a6aed1b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x0000000000000000000000000000000000000000000000000000000034fd1040" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 90795, + "chainId": 59144, + "accessList": {} + }, + { + "r": "635541d6e496e3b93e8edba6505c5af562732e16694adc257654405ec82995f7", + "s": "9a76d2e08440176aa16d6ed4a386327c7f2d0194b0507d55edd9a7122ce9a404", + "v": "0", + "type": "EIP1559", + "sender": "0x8e2e455166d5a10f93ff4df0f19a8bd2b6487458", + "to": { + "value": "0x63ce21bd9af8cc603322cb025f26db567de8102b" + }, + "nonce": 5, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xfb89f3b1", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 38406, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "37704c5d1f77129911e1aaa019a21b9be942f0ea55737d084db59fb90e82d303", + "s": "7dea021a2c7a7c233c346726ca67bdbc168007bd564c2ca9fc8255c4369955c3", + "v": "0", + "type": "EIP1559", + "sender": "0x4282c8e153b0cdd87292e164ee0e88e616cc8e1a", + "to": { + "value": "0x63ce21bd9af8cc603322cb025f26db567de8102b" + }, + "nonce": 5, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xfb89f3b1", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 38406, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "51a373e8fcfe471a159100a971e8fb87c1c6003c824ceb9becb4ae042a0172b9", + "s": "4c65c1fdc13bb45037661e5b92c8a8bbf23b6fe8076fb57ee95ec29d6fe7b374", + "v": "1", + "type": "EIP1559", + "sender": "0xe8b0532428c49daac6df99b542b515d023a20fef", + "to": { + "value": "0x63ce21bd9af8cc603322cb025f26db567de8102b" + }, + "nonce": 6, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xfb89f3b1", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 38406, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "60e8642036ce8e18a2a0d279800dbcc60e7cf2ac45b63230914624cc12e6c284", + "s": "49230781cf6ea8bdb26d83f590f5f925be558d8ceac762218a913d5ea9d5a97d", + "v": "0", + "type": "EIP1559", + "sender": "0xeee84badf6bd4cd77e03783fda23b5c114f0e008", + "to": { + "value": "0x63ce21bd9af8cc603322cb025f26db567de8102b" + }, + "nonce": 7, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xfb89f3b1", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 38406, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "1bfc0abda205f2f3b9ff4e207ff574d96982be022ee065fde543ee530ab250ef", + "s": "e3f6f3ac7b3e32a08a27167949fc98396b225f35bae5eb6871d4776c4c6bcc64", + "v": "0", + "type": "EIP1559", + "sender": "0xb787edf42d4b6d331c523c91cea2d148d608b242", + "to": { + "value": "0x63ce21bd9af8cc603322cb025f26db567de8102b" + }, + "nonce": 8, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xfb89f3b1", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 38406, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "3f8be47aab525121247631026e784e2013e662d4cc91d9bd5b5866c0dc16c512", + "s": "1231e0efa6524d929beb8f9c24faf599b80cb854259ca4db5300711c737cef60", + "v": "0", + "type": "EIP1559", + "sender": "0xeee1360db6d03d3caceed4190961d43fd4035ec9", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 13, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 151185, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "62bf2285b49acdc25626fefd35e79c41ad40eeddb4e100e1a3b6b134319bda27", + "s": "7f1c64088d83432dedfa88eaf3d8c4296f44adfed77c218ed568aa87bda2656a", + "v": "0", + "type": "EIP1559", + "sender": "0x447ff8fc8962ff2d8ab758b7d7a0853c2038c996", + "to": { + "value": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8" + }, + "nonce": 16, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x13d79d58000000000000000000000000000000000000000078405370697269746f66486f0000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 129642, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "5af220bc1c9596cfc136b417f5d9f6d18b85deddb6cb76cc4ba5f44331b1c385", + "s": "43b1ce9df3c6cdf876bc38084a766ca16a9e79bd0bfd8281194f97d6a6802688", + "v": "1", + "type": "EIP1559", + "sender": "0x96836669d8bfa3f756fdf20c5b71367f9586fbd7", + "to": { + "value": "0xce048492076b0130821866f6d05a0b621b1715c8" + }, + "nonce": 19, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x0743219600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160912214269b9b891a0d7451974030ba13207d3bf78e515351609de9dd8a3396860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001496836669d8bfa3f756fdf20c5b71367f9586fbd700000000000000000000000000000000000000000000000000000000000000000000000000000000000000408f2f90d8304f6eb382d037c47a041d8c8b4d18bdd8b082fa32828e016a584ca7fcfe7b2a355eac5ef71bf6ace648f6646e196fabeeff0b241e92f32b17829b80000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000041745237705bb767d6520253d9dd091a20ad9317d9972379e413a00b737a4b3c5116894596ca98dcad9c5dc67b442e4cbf0610ab7923c245b912766a448cbf40ac1b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 375091, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "306cb5a2a4b5acffb037c15520e40833424f3dd04a5b7150fb98fb0ff744da5f", + "s": "e32eeda57c2e7563afa341edf24e16229c4eb4e94cc079ae66385fb9a5750cdf", + "v": "1", + "type": "EIP1559", + "sender": "0x76d8a43100ef5c045f8a31b60fcea74e6b52c433", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 21, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 110193, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4bd912246661d7a852589cdcd0c71e712a085860f3b877b77095d9ec78f5116e", + "s": "758d40f35700eba3bb1c1d14562605758db18e7856912f1ebe9693708df6d74f", + "v": "0", + "type": "EIP1559", + "sender": "0x95230220c9e577000b1794a8222ab9a75e8a792e", + "to": { + "value": "0xce048492076b0130821866f6d05a0b621b1715c8" + }, + "nonce": 21, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x0743219600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160912214269b9b891a0d7451974030ba13207d3bf78e515351609de9dd8a3396860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001495230220c9e577000b1794a8222ab9a75e8a792e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000408f2f90d8304f6eb382d037c47a041d8c8b4d18bdd8b082fa32828e016a584ca7abb0fc4c2b9301342b922be7ec191cb5e0adfcfa3973f70ce45c1d07935e93d000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004145b076e1c5abd4fc4879086d290c6b9a033c16969196ea4b5d6a3853656b99431ff4ce165afdb1a139e9aa15e73fb5e6a2ba8f65a91af3638c2b33de4f9ed6a81c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 375079, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7a52fb9fc591028ec4595ac95f37e6e8a2dfaf49f84393d6a993f4ed6b74b287", + "s": "a1ae3bfeb390d3eda94294fd4b9345dc34a4a03da8622a543d4bf1596b80e85a", + "v": "1", + "type": "EIP1559", + "sender": "0x47d9237e68ffda57720f28557236a292afec6839", + "to": { + "value": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8" + }, + "nonce": 31, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x13d79d580000000000000000000000000000000000000000000000007840446f6157656e0000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 86380, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "21b6076fef72938fb762df59977e9e9097818c9f6ccded0a5628cbdbd5e1d731", + "s": "7f9e985770f6ec39e8f3f5ea8a426347c01ab759ede2dbc4644ee43d71e671f0", + "v": "0", + "type": "EIP1559", + "sender": "0x44d81da7e9f621475d62ddf8c8dc433dc8ddeee2", + "to": { + "value": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8" + }, + "nonce": 31, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x13d79d580000000000000000000000000000000000000000000000007840646366676f640000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 86380, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "20b033b40f5fb9b3a08560c3cd383f3ac26028645aebd4c7b667f6e557e0456a", + "s": "1a757bc123ec51d8273d3f84a92b9750b648812159c4da86b9faf5ae6a2e1e7d", + "v": "1", + "type": "EIP1559", + "sender": "0x485b284beba95a812e29fe5501d7eedde43153c1", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 34, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x36ab86c4035d170f71da7ed7d0ff62c031a5e369c2215a557f38cb13012a44f8b1d8f7210000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 340001, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4f5697fcedc71d39d243709032cf73a5d91ac3fa631b684e67da7d2f64cdd41", + "s": "24f84355099a382a3adc39cca1c34ab740325ec7a63df4cd042b52f57c0ff255", + "v": "0", + "type": "EIP1559", + "sender": "0xfc7fa137552eac1d53f2060e12d0a43b394a5f8e", + "to": { + "value": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc" + }, + "nonce": 43, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "53e9b2e684c25e62860968b58b7b57cb9946bdd4476eb7832a10adede88aaac5", + "s": "aea96c22c5b9aebb4d33d17f8ff80d745d06647f40d6b6e84ed11c949df28437", + "v": "0", + "type": "EIP1559", + "sender": "0xddb6674d7b7b27ebf8001758820f1b86d784a6d7", + "to": { + "value": "0x47874ff0bef601d180a8a653a912ebbe03739a1a" + }, + "nonce": 46, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xefef39a10000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 324256, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "10682e1437ca6c227b3643baf2c679a11ab5f5cbdb34207bea49593cd51fb6c7", + "s": "3b7cfd964d649b8996a7a71a5cf4c5cf626072ff137c6f03f9f371c1f9541c03", + "v": "1", + "type": "EIP1559", + "sender": "0xc253c51cf4204d7d5da9bec2b39bcbbf1c524bad", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 55, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x80ffa19a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000031b337ef7b3a9d4363637fa7682af6328ef404cc1c9c8dafa665797465f606d1d2374c4dd5e01d53419b7b40d290bbc2b78143b24d1d98765d00485e07764287e1f6fa0ddad709aab58118e37203105cf0e24f649c50749895d7a9d9cd54a4fef2341a9fac77a86ab0d1ddb90c5fbcaabf1b2882c6a34277e7c1776cf05e370842dc27770b64badbf56477a668dfb4b3f156189834736145a9831998802a070e62e86e6f534ad3c77d701e2a573415a097408fd8c39003163f14ad543269c320a0799ee6e9551db88b4d119227f1582be03fabbb1a7827ab779e94c775395a3141bf0eb1fa4fc1c7ef2d672dc67dc563266067652ba3a9e63bc55b4b109d780670000000000000000000000000000000000000000000000001000000040000000000000000000000000000000000000000000000000002800020800310420886200000000000000000000000000000000005555555021a6590411111a91040266000000000000000000000000c253c51cf4204d7d5da9bec2b39bcbbf1c524bad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c2f52c9cb5d6a0c45a341ad5bb3012d63fb9f6ad741947315e5db264d6d0895a52e00ceaf3e99d69504b43a85ccafe7210464c38133b1f3cf5667a6ca40410c811a56e2ecec52e9bee437ad016ff18eb8cc04ef5a244a7a4b36491f7706a3d72911af6f20a8acda85c403cb57c4e6f70fe9b7f3a5f01b6f14081d3e612be1105607b009b94c19571b02a75cd736dba20bc4382412fa0be1613bb7bea253d3952b096b2e7839124b9ab42f517b9df76463a958c2a2d1a42c5616ccc75799e0986512e9141e2432d8ace4a512393016d5866f4617eaa66fb09512c2b2f473196f9e0c1e4b386da5ff50a97bc137e1fd438756f3b0edb648c003085ddab23ae4779f27054eb1d1e68f6d41baf3038fdc9ce269f134441479742cb1af4df51fb15f3800000000000000000000000000000000000000000000280002080031042088620000000000000000000000000000000000000000000038c222144329060184a20000000000000000000000000000000000950501111696140141440196a69a68000000000000000000000000c253c51cf4204d7d5da9bec2b39bcbbf1c524bad000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000780a5f3a65d7b6c490c6c07dafa319bc20d1fedf9e37cfc83094061e7d5efb92c20c600ad6eb94a1c3e8241daaa7e51444d6db1395ae0e185171a137e34f27046311267eb7bbf8957361fa348dc6173099eab3b344b83b9dfc458148a383b64f871363150235eeef57a77db4d61b139fe553d5274248088ffd1d54ed0e65ab93b003a9a0415c0948a60c395f361a1a93a4bf6684ed1496d49a77a71532bfe615f4221b08b98769f04654000ee5d397d0978c7dc40446ac56d1e9c98d80982d90fe0fe3ec7101b8809e16c7a198ae13ec93ffe1d0cee153fec0e630d9474bc93b5b0109560c1c4d336823d02a66136704cda43d57a01b3f5631f95959f6461476422cad14d22f9e858678f4f708a14fdaea25db65692a62a25e62d8d6b6d1fd226c0000000000000000000000000000000000000000000038c222144329060184a200000000000000000000000000000000000000000000390222148130c23184a4000000000000000000000000000000000026aa96669aaaaaaaaaaaaaaaaaaaaa000000000000000000000000c253c51cf4204d7d5da9bec2b39bcbbf1c524bad0000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000008b0a5f3a65d7b6c490c6c07dafa319bc20d1fedf9e37cfc83094061e7d5efb92c2", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 760001, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "fe3c21c13fb7e2365a5e8d158143cabe8d33e5819ccfac8a8190d7e8733239f", + "s": "139c9d2033769d982f0e09821ff5a8c688fa72b142d81290951a879a3ac2c042", + "v": "0", + "type": "EIP1559", + "sender": "0x8a12743ea754fe9cdfb72b17e2f2806648337ea1", + "to": { + "value": "0xb18b7847072117ae863f71f9473d555d601eb537" + }, + "nonce": 65, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x14f710fe", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 229135, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "612cd329b72fd6cba54af9c90155a89d0e7f43970f669575a5d5d71e95a9d841", + "s": "882dbda67d2b78dbf8ca9318a9a5c11c915525110f2e15926f316f827c4a4266", + "v": "0", + "type": "EIP1559", + "sender": "0xd3575c36745536246b3f2c82d8932de68616ede7", + "to": { + "value": "0xb9cc0bb020cf55197c4c3d826ac87cadba51f272" + }, + "nonce": 68, + "value": "0x0000000000000000000000000000000000000000000000000001c6bf52634000", + "payload": "0x05e67f6300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140ce6351ef35f71cd649b75be11a4d08a8420811e21db89085b27f56c9eeac1578000000000000000000000000000000000000000000000000000000006ba66054000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000d3575c36745536246b3f2c82d8932de68616ede7000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000410439eda465a19d7a76861bd4074ec57147ec83be83cfcf5a38ba455abd96c15f40d9c907bb1a73d287f59bf841a7aca99ede719d91bfdfaf2dbec7cb0f07567c1b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 370000, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "2bec1059049d49d0a4198c7c1cdabef597801e71f4e69bc1f5427f06ec61347f", + "s": "ad71ccbe0d094938b5e369c48f3cd5328bd42bf247bde5efd1500fe371f2efc3", + "v": "1", + "type": "EIP1559", + "sender": "0x2d3789a928c3507ba152e26859fafd4af409263b", + "to": { + "value": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a" + }, + "nonce": 70, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "ffc4c4254359810654ecc3e0e5e9c3d0cc93aa1970fffdb5e8eea1690ebaf3d", + "s": "b9ab54eb44597ce3712fe4890da1dfb573dc9d94d04dbf56c6849ae6f7606038", + "v": "1", + "type": "EIP1559", + "sender": "0x927c0e63783513120c5f35bc55f5ab33b0e0b5a4", + "to": { + "value": "0x9df3c2c75a92069b99c73bd386961631f143727c" + }, + "nonce": 141, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x57bc3d78000000000000000000000000927c0e63783513120c5f35bc55f5ab33b0e0b5a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 127260, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "43853a46dfd1508d961e73a0ebe4f7407a0155a89c2773d32e88332bda78fe8f", + "s": "4b291462fc08d885516d967641b22478582f5ce7ea91b1d724e288f3c0571495", + "v": "1", + "type": "EIP1559", + "sender": "0xe77d2b64803fe14baacb4193389c4bf662401729", + "to": { + "value": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4" + }, + "nonce": 152, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x183ff085", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 22409, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4577af8fcc9f7422562e2f3bf7976329700075512c70d3fe98e8ac987d249ae3", + "s": "fd9b03fb1518f865fca10cdfc4236c0f9d5fb582580224c1b02953d63be86ca9", + "v": "1", + "type": "EIP1559", + "sender": "0xfbf9b6d3c7f177cde3215487a8cafd14c8b97d59", + "to": { + "value": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75" + }, + "nonce": 248, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xabeb97dc000000000000000000000000000000000000000000000000000000000000006f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000041ad0c5da93dc3a7c817ae93f1008e7c1fd6d5c8ca6ce6c39dfbe43fb4dc0388e0077da5a44f1078ed66f6baa4bb199824e91b1c93fa12971e19f7f2790017f5780000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 190850, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "15967efe3728a51abf93aa14045da49cfce02b1341ca2fa0d3f24d1480211411", + "s": "50caf6abd384b5781e419009079f6ce80771fb72b4907507b63ceef13ac34642", + "v": "1", + "type": "EIP1559", + "sender": "0xd13d65e70ec5e3ae8967f889a6d33b82105b2895", + "to": { + "value": "0x80e38291e06339d10aab483c65695d004dbd5c69" + }, + "nonce": 397, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x2cc4081e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000171a88f4d365907000000000000000000000000000000000000000000000000000000006602f4b5000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff000000000000000000000000000000000000000000000000000000001ad274800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001600000000000000000000000005ec5b1e9b1bd5198343abb6e55fb695d2f7bb3080000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff000000000000000000000000d236b61b6445f2af7775814aa690bec421ce3dd600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d236b61b6445f2af7775814aa690bec421ce3dd60000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f000000000000000000000000d13d65e70ec5e3ae8967f889a6d33b82105b289500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c546a" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336c5474" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 248152, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "a9a651be83724369df387731a32f7b8e6b03fe7ccfe6b0c69723f0c1fdeb7dc", + "s": "74d7b4c81851c1be7c32f22214848d2354e34c3a1524e72a1c09bfd7ce3fa754", + "v": "0", + "type": "EIP1559", + "sender": "0x106ff529e927fcffd2a4c6e4290f39e2ebc20b44", + "to": { + "value": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff" + }, + "nonce": 1, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa9059cbb00000000000000000000000067c48a3f893643757a179bc18b5a80870c1b8c0400000000000000000000000000000000000000000000000000000000003bb5ee", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 73041, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "167a1ac1e21312a88a62917673e757712d0f070ff1a96576fb0ef67d9ad5b770", + "s": "8f6c94763b7cef5ceaf9bba56968e03fc726e1024c9d83f57d34b145b63e0a26", + "v": "0", + "type": "EIP1559", + "sender": "0x562f25789dcf663381b0103741e0937818b27b13", + "to": { + "value": "0x70b9c57e1ff24761c1c3ced57ddae9a3f3570698" + }, + "nonce": 9, + "value": "0x000000000000000000000000000000000000000000000000000000174876e800", + "payload": "0x301a3720000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d5000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000014a130822cd6e000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000006602c82c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000066c45ff040e86dc613f239123a5e21ffdc3a3fec000000000000000000000000c77392396be1fb5143f1f66a3ae67dd03fbaba270000000000000000000000000000000000000000000000000000000000000002000000000000000000000000e76b4515cce537fdc439dbec1fae301869c4a6390000000000000000000000003d775406a990b5d4020cec5cef92c4784c7073c10000000000000000000000000000000000000000000000000000000000000003000000000000000000000000e76b4515cce537fdc439dbec1fae301869c4a6390000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b00000000000000000000000070b9c57e1ff24761c1c3ced57ddae9a3f3570698000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 415546, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7079a5c7f160e8b599d4f41308f5da8f2c0dfba4593680cb6a367e86394c362a", + "s": "908add1567554fb3a52bde67f3c5f83a487ed0b6b30dc9acb071721a20dd022b", + "v": "1", + "type": "EIP1559", + "sender": "0xc1c1ec966e159d1bed34f84cd3dfbd5720a40ed9", + "to": { + "value": "0xd1a3abf42f9e66be86cfdea8c5c2c74f041c5e14" + }, + "nonce": 14, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x5b7d7482000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000004032666539623034633131333066333738613166373763373533323265363561383839633965393861373536396132383563666330633264353334313934626435000000000000000000000000000000000000000000000000000000000000004032666539623034633131333066333738613166373763373533323265363561383839633965393861373536396132383563666330633264353334313934626435", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 33352, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "2e37da59e3951bbcc4556f1028f2fe483ea05c81659aec1cea6abcda09ea5e32", + "s": "56f6d065c67c21dbc073cff8bd3e6b99ffee90a768d8d6cd332be966faf62389", + "v": "1", + "type": "EIP1559", + "sender": "0x95c1a4db2008d38abd9fcfec67b33a9eeeae2fda", + "to": { + "value": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f" + }, + "nonce": 14, + "value": "0x000000000000000000000000000000000000000000000000000070fc8d053c00", + "payload": "0xd0e30db0", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 45038, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "51d94c9529570f94b61ef5dadddd91e86106ce77efefcd0a1ecc6cbffdb509a6", + "s": "d547c1e5d2d0a4406672f6f6d1031dd553571fe1721ee09fc31e6ea6fea2a1c9", + "v": "0", + "type": "EIP1559", + "sender": "0x57845f9fd86b3ea4d7556f2f7923803b5e3fa1d0", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 21, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 110193, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4d864e011657faa16850642b0d9fcec85b18b851322ede092b2d7dc82456d7dd", + "s": "70b05bede7c723523cb35bac57a62ccb08224cd94d9e5fd83dca51180f449f71", + "v": "1", + "type": "EIP1559", + "sender": "0x76c3efaf7d41cd733f8a4d832a3dfdbf12d99af7", + "to": { + "value": "0xf9326b9aa3c9beef6557a508cfffe519ab6ff560" + }, + "nonce": 25, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x7e15d9ee00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000076c3efaf7d41cd733f8a4d832a3dfdbf12d99af700000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000006602c5d00000000000000000000000000000000000000000000000000000000000000011373635363131393936353935383937343200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412b649ab9510d2ade73423ec2eeed51bdf2b504815d092124e519b9f0280f3a8e11729c33d447c55364d09b9f5f91e729847277f26f38eac452e6b9c3201969b01c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004185638609a84b3e4dab71c5d28f0797f569139c3499d1a4ec811a7139d7cd0ba7444da4296915c26027747222dccd079cae7448028cf58fd004247e02d53966901c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 95153, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "215f26fbd52e39301bb30781d933b07a5b89c81dfd236086bac5f5b0a03968a7", + "s": "534b6b63002f372c120bb4e2df56956a6eca5ff3c65f1be6a9863342386cbd7a", + "v": "0", + "type": "EIP1559", + "sender": "0x2836ffc6950644a8a49e6318f4937a015f25f6e0", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 26, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x36ab86c406d57767e272fc24e70b6ae32a36a706d7d9593e34583f9a2fa17fd99915ae260000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 340001, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "32860546d8e88c544f62f61e3907900848c40a2d75fb45dc7cb479421ff88cd8", + "s": "394f2722f7e73326a7992932dc64a8508f16a4572f928f2b5693492c0f13eba5", + "v": "1", + "type": "EIP1559", + "sender": "0x878c8ca70b8d6b6a7039ec39887d2f12f3489996", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 35, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 151185, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "1546b2e0d72f2d283f05970329f179bbed36b9e61f457c598cc1c269d87c6a94", + "s": "cd5829bee05982f7d1f35f61f4d64689bc9edd60a9c16a777162cacd224c5224", + "v": "1", + "type": "EIP1559", + "sender": "0xd04c339222e6b8e23bc86b97980dd5e0b0517513", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 36, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 151185, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "374370b165ce3805816e32bc227232b699b17a2006ab1f2148e59aa52558d421", + "s": "cb8a8a2a6912ff804dd165dc5c3e04a3ffe62de8ba4bc61137bff9c90e2c8017", + "v": "1", + "type": "EIP1559", + "sender": "0x428081337be786b930cc25f842b9f69664d1db26", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 36, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 151185, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4f4eb4f73f414ead1890fa0f7da1bad0dca12f7956baedfd79a0fc1bdd1988a1", + "s": "73ebafc8087d9722ca2cb546997bec32ccca932a3b25cc5a6e7be5245fe848ab", + "v": "1", + "type": "EIP1559", + "sender": "0xee6a2f373b50400758cba9b743646ce2e8aa3e72", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 58, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x80ffa19a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030ecb7312348bb1c2db54c7a631f368f9e513841ea950644ad80d11c150682d4103237ed276fc6c49e346852031bdba3e572b2f899c37d9f5e6b02f7a36d869d010f2f361d165be337826d46539c7abe6fe955d9c01f0bd0cf0ec8d39a6edd4981f68dcbabc399d0f5cd0b8286e898a40dea5a5eff2831db14ee6390dcfffddd4287c0483283cc0f0647441e8be9777268fc89253a4e432cf4a94aead7294ec2918c991f221c88b07e9c4eefb4d7fd133479b7d510cf9560ab3161800bd4fb6d81121bb8efd902f0f6aa32f42159d0aa10b0ff177dce7bf1d443841b5543277da2ac92f004ada56ed2dd7bc5a081f5110a42c76dff24ed277b648f13f98334739000000000000000000000000000000000000000000000000100000004000000000000000000000000000000000000000000000000000004a3184c1104a100002000000000000000000000000000000000031cf4d34cdb34d39cb33319b6db6d3000000000000000000000000ee6a2f373b50400758cba9b743646ce2e8aa3e720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c17d136a21bd26e39f4446e8b75a1f11d1f672e5994f7cca7b5b5d2368d4030d12252423e3c4704780dbb63529aeae4e61cd088a978e6d4e1ab2da8e13db4274c2f6f419d1808c8168fac61d0aad87bf3aa656bd9d9a62b53feba7d428409807f1ba3b224c939d38762b720aa9bac231cabea70486ea1c24a9f296a017b48ddd709a59c778c7f88eb223c1a7780e1b6e57106b5e36133b42e815e75896beb962301310bee5b6c9213e5617dc31bd93106aeafb7585982f0fe60eed793e248e4700eede9e1f86a2ed7aae261af9a91df89dcaf84975a7dbaaf8099dd821d5636782eae1334f7c610ad3c1740e7348ad7bd1ed98d8f06de73d8e34b642b1659418004aa4e49c08db9279bd121a090e4c8dd06dbfeb0c937acd80aa6b65c6a03adcb00000000000000000000000000000000000000000000004a3184c1104a100002000000000000000000000000000000000000000000000142001824188e11108200000000000000000000000000000000004c8888cc366d0ccb0db6d3b9ccb336000000000000000000000000ee6a2f373b50400758cba9b743646ce2e8aa3e72000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000007800a94de939766fc9b55e391e699eaa457ec3be1d31a2f3e13a5f0f8fd961d7d6185b020e35de18f440287803ce648eeb956779bbf0ba1fe8df82b816752d13a705d90772b9115cce5e46335887afb683f49539216e473825b18eb5e5b45d205c00caa22c0fe80c0000296e93ff64f86b598953da1baf245c8ecf702caae791e6163101c903e32ee41bc23c730c0967323551271db1fd54f0e94ef0c6d761377e21fc1357e1c9eba125fd7b5725ddad0d557b75b6e49867866a6b9f5d4ec786511c9d6dffdc7965db2e6f2423e4981b1721809347243e749b13aed098b60c524c15e89a246e659f5b0aef43ef1b70738702ef919fd29a447b20c1418e616064ad04239ece7c454b0c1e649a9b3f01ed3b43af11a90d3537e3dfb089f8e96cc0ef000000000000000000000000000000000000000000000142001824188e1110820000000000000000000000000000000000000000000010ca2218861906108ce20000000000000000000000000000000000cd39edd36cb4cc1363aaaaaaaaaaaa000000000000000000000000ee6a2f373b50400758cba9b743646ce2e8aa3e720000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009c00a94de939766fc9b55e391e699eaa457ec3be1d31a2f3e13a5f0f8fd961d7d6", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 760001, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "2fa84a0c05b3c9bafdea510b84c8fb64ced62679c5515b5e35c440f2833e15d4", + "s": "55a5cc55766bfa861a4b6445fe1b17449065361de3e93333a04df7cbebd113c7", + "v": "0", + "type": "EIP1559", + "sender": "0xe6123d87f80de852fa7e018c775462afa60fa581", + "to": { + "value": "0x9df3c2c75a92069b99c73bd386961631f143727c" + }, + "nonce": 59, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x57bc3d78000000000000000000000000e6123d87f80de852fa7e018c775462afa60fa58100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 127260, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "5c18aa53cce7bd5bc1a6023fa955da1d00b8f765cf79cf140a6a6a48e0dacd39", + "s": "63210f10472d6dd226cd7dd9c917987cd50eb660d7e01a02d9750755c305b7c2", + "v": "1", + "type": "EIP1559", + "sender": "0x8b414b5430f3485b15f252d5bdfd27a7b19b264e", + "to": { + "value": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc" + }, + "nonce": 70, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7789db7d96662211b06db20686dc7be180ffe17be06dd20cb78a16b6b8c63a78", + "s": "a06fc046a67e4ba0cb1e413ed32a5b6decaecd94cc1aa5a3f277821b557087da", + "v": "1", + "type": "EIP1559", + "sender": "0x45082f8cfb86c7b5eedf4cc8fe061d016727093a", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 587, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175d" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 230977, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "55dd0f8ae092a0b7e948001f69021c6b1c5b671e4ca1bae274ae583daf1cbc6f", + "s": "6bcc8a34449c9a7a2aa9ae9a068ab285943e85ffca11ea73f8f2a49c3aea3906", + "v": "1", + "type": "EIP1559", + "sender": "0x3ad7d53378752802e6ac1be9530f6da2d068f76e", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 44, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x36ab86c42c65f171a9127ff69743a88424cfe7b2eb09754db42bc1b7b69adfeaf060de9f0000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b175c" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000336b1767" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 229201, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4d8925df761efb5e1ba3be845df05fbfc6e163b4e4a26c111932e78b1120b4ed", + "s": "bee78cf1a8ecf40a24fa1853558d1efdb3f23d852d6ebc7039e657589ef2d7ee", + "v": "1", + "type": "EIP1559", + "sender": "0xd8475ff3ef4576accb0ccf9cfc92ce36d987cd12", + "to": { + "value": "0x9df3c2c75a92069b99c73bd386961631f143727c" + }, + "nonce": 64, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x57bc3d78000000000000000000000000d8475ff3ef4576accb0ccf9cfc92ce36d987cd1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb7c" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368fb86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 127260, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7ea7da308d7f2b43e10f15b994c67882295bb5f5a0aba9b44048fc2ac37f64a7", + "s": "6ea27cc8016e270742a18f2f55769e9186968942ab70ff32eeefeb9e2da48d28", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x13b19cfb68cc7f71dd48e27f57811dd6a853f658", + "to": { + "value": "0x0635163285c6ef5692167f18b799fb339df064f8" + }, + "nonce": 6267, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xc9807539000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000300000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000b3c9ebd6f89701463821e9d841825ed900013d110602060809000305010407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000005491dd20a8000000000000000000000000000000000000000000000000000000549307930000000000000000000000000000000000000000000000000000000054931c2c700000000000000000000000000000000000000000000000000000005493dad71500000000000000000000000000000000000000000000000000000054946ebcda00000000000000000000000000000000000000000000000000000054946ebcda00000000000000000000000000000000000000000000000000000054946ebcda000000000000000000000000000000000000000000000000000000549809695c000000000000000000000000000000000000000000000000000000549a8e7850000000000000000000000000000000000000000000000000000000549dde468d000000000000000000000000000000000000000000000000000000000000000449dea747dec31ab4c6429fd91e65beebcae4df8b8a7badf8a448b025d6ab3f710be8f9c845456de3e8b583a68455619f132823815e382f94524ad7f3f0fb1a2562f8f35046276f71b4b348b5e3b1e24ba8c2ec062393ffa2852184b78f3b5d98e8fe11966934a029f05034bde7001fb7cde96b49b6c79fd0d110a42941527e14000000000000000000000000000000000000000000000000000000000000000462513452cdb9cdc195c3d686030cb197cc33a980f70efc0a8639d334ab65b9934176f20ac0696441c3f5104465d74dd954e7c873244231c084bbe90b83d43ab63922bf5f623a2c8ae22087cd118e9903d6b46b564decf2a7fa2082f7485a222e583ebb4d4b567c7abbca78de0f52f888820a6a9a3af52f0d5d40528ca3bf12d3", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000003368ddfd" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 500000, + "chainId": 59144, + "accessList": {} + }, + { + "r": "273a3cf39fc6c20ccc9e4b5d93717af6da1bd7004f31118aff4b97a8e9cb01f7", + "s": "fda444dacdb6fa39795d490d90b76a64f1d5b2874cb6d73a0ebb2b9676328d17", + "v": "0", + "type": "EIP1559", + "sender": "0x9638b74bb12c769114d15e0325c7d75f5ebc2e88", + "to": { + "value": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589" + }, + "nonce": 0, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0xf648253d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000009638b74bb12c769114d15e0325c7d75f5ebc2e880000000000000000000000000de240b2a3634fcd72919eb591a7207bddef03cd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 195840, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "2266b3e931997bbcfa69a0594b6e3f022e6481985b05b780604a7fc860863557", + "s": "32d3d7e37b87d72ce98aba5b19cadd8f04dba8c58d84af5f307e6c77b7d15de1", + "v": "1", + "type": "EIP1559", + "sender": "0xf669de7d30725e943e0850b0b6a01f38cb1c78d0", + "to": { + "value": "0xb18b7847072117ae863f71f9473d555d601eb537" + }, + "nonce": 0, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x14f710fe", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 153946, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "3051cb0d986dcc4009f916af514f4c8874ffe3b9a61bf3670dae34a75ca36d31", + "s": "b38561f354b7fb5b52b55ec3102f4de24fc3f72517bcd02640a091f524fcf5b0", + "v": "1", + "type": "EIP1559", + "sender": "0x0c8d71a375552df0e20ef4c0bf482b4cbb1855bd", + "to": { + "value": "0x6cd20be8914a9be48f2a35e56354490b80522856" + }, + "nonce": 4, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xb9a2092d", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 23797, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "6af3a0ac3180416b8a870d6338a9f0bcc8f777452d6793b9c2d6d910e6595961", + "s": "f8a433a366c1c9b49311687c636bb7039a9c12a05fbc9a33afb3e91757abcf61", + "v": "1", + "type": "EIP1559", + "sender": "0x78d49d969503413d08763f896ef910d56f726062", + "to": { + "value": "0x8286d601a0ed6cf75e067e0614f73a5b9f024151" + }, + "nonce": 6, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x7859bb8d00000000000000000000000000000000000000000000000017bb6d27eba7e83a", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 28321, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "1ee4f7446449877c8c1f6e884d68d894b2135d1f4eb4ac01f2530e8f319c7412", + "s": "1a2961ecb0f693ba16eddd9a02aae31985c8bb9d0b4b27d4f6842c6a3b3ed37", + "v": "0", + "type": "EIP1559", + "sender": "0xab688f8a8bbe6ab5efa291857ea9649e7da64e01", + "to": { + "value": "0x780de722234532f7d61ca3d147574f44a85c4244" + }, + "nonce": 11, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 27166, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "3f6061a2ea2128026e7b7f2299f10d84ac52119ea2d77132b52f5b7efac764ac", + "s": "1ec8b4c4743fb93608aa1dfb412490994ce4fdbda4f2da60767fee11f07bb402", + "v": "1", + "type": "EIP1559", + "sender": "0x3fb385aab3a6e24be80e401bc1862f1b10eff936", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 13, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 152368, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "2ccdffecebd0f52158544114f795fc51668e1a3bc9d00217fd02b30ef0df441d", + "s": "7b2b02883da70e636e5d270c31458ea2f6c10c171fada8aa0473d7b2f9ba76b2", + "v": "0", + "type": "EIP1559", + "sender": "0x8cf3909b7f7992e41c5fa3b26ff2c8e97cabb27d", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 17, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 152368, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "12ee6260c713b3d58416fd14316898b455903af60524ba36434c84c9d536b65a", + "s": "50cd0d8aa7e8481a0ddc3bd5cfd725ca682513399c1ea72278f7c9f0ab40cd68", + "v": "1", + "type": "EIP1559", + "sender": "0xbe2cd58637a2e220de12864122f3d414ae0b9b29", + "to": { + "value": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7" + }, + "nonce": 21, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000003368b4a0" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 152368, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "148bbb8523659d6e7f29715fed6b0fa696ed4c2a670a71ad847d05e9b0bc743e", + "s": "b42d238b8ec6f4a7b8eb33683544df4c2df02e22a1683d9d6c24037df0e4ebee", + "v": "1", + "type": "EIP1559", + "sender": "0xfed660b4d956cf43671c989d84184e950697f0fd", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 1, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d7841" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d784a" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 220386, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "605bab938791287a6c7477ad850fcb80c7872026e788c675b9f9777737f89601", + "s": "3b57ad250b9be54910833dc8295b810c80b0b51114ef4875fee1eb436b2f86a8", + "v": "0", + "type": "EIP1559", + "sender": "0x047ffe4def817e48f8c026aefe0469d53d341f54", + "to": { + "value": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589" + }, + "nonce": 53, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0xf648253d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000047ffe4def817e48f8c026aefe0469d53d341f540000000000000000000000000de240b2a3634fcd72919eb591a7207bddef03cd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d7841" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d784a" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 195284, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7817e7d59666538239e144573b3b6a629267510cc3a375dc048a3dff35faf83b", + "s": "cf8d3bfabc2cfe43ab90b1df1607f9f9c10bfb94c95ea27ad560213312d99849", + "v": "0", + "type": "EIP1559", + "sender": "0x03ef86b748c6a9dff661770cca42440746708c5a", + "to": { + "value": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a" + }, + "nonce": 94, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d7841" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000331d784a" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "675153cfb352a801e1a9ba27d7d6c976882dbe12dee8ecb30aaf442146722ecf", + "s": "1bdf7f4879ee85aae6357c28041f1745e33d2e60240c42e7528440b3cc8a585c", + "v": "0", + "type": "EIP1559", + "sender": "0x5c5515e537800295ad2be29077d981f7bf02d99f", + "to": { + "value": "0x66ccc220543b6832f93c2082edd7be19c21df6c0" + }, + "nonce": 4, + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000", + "payload": "0xefef39a10000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d52f7f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d52f86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 324256, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "4686c72554e2ecb0d4c09d28d95154d699d988c8fe1402c6c8004963e1f3ff13", + "s": "7cc5b7da4365e42649f03a804bc53d939606501685ac2044e3219c205d050d04", + "v": "0", + "type": "EIP1559", + "sender": "0xc180ee6429f8bd2e5a9ba98da21fcadb783786d2", + "to": { + "value": "0x612af58f8016c06e603d803829ccfd843f787618" + }, + "nonce": 6, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x064a181e0000000000000000000000000000000000000000000000000266a47324002000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000419c33275dccf715873e0d0d297fbb3506abe7e13342f7cba60ebf9ff1c189c4613d7a68edeb42c2a50e9bcac71b76c6fd7577f6ce289b5ed3cbaaf6c43d11394b0000000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d52f7f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d52f86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 535017, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "c9b8a50c2301b89f5c4bb8432dd8d57caa1d2b379dfc5e0309f9f66e648d7d8", + "s": "6d6b83eca81bfe8632db6faa0824fd1f56abb1d30cf7f7237bdc8767dbe9fdf1", + "v": "0", + "type": "EIP1559", + "sender": "0x2996158f2439966cea731d6d3c77d4a8696b8f1a", + "to": { + "value": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a" + }, + "nonce": 16, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d52f7f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d52f86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "6497d82e818c6240e4b76a040319ccf10bfccb7a56beda4ffef98f12824b5ca3", + "s": "611b7c87b977f7eddff27f62e457813fc61503beda4449bfdc0e531197b9735e", + "v": "1", + "type": "EIP1559", + "sender": "0x8dffdcd8fef7d27928fa84ca74f85bca3f1ca906", + "to": { + "value": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a" + }, + "nonce": 53, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d52f7f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d52f86" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "641814a97d07b899fd099687ecd1848aedabdf6494b9bab2a1c663b56eef8d8e", + "s": "7586fbcce6697eaf3c986c2ac213443a507430929bf8859f574567dc33e785b7", + "v": "1", + "type": "EIP1559", + "sender": "0x917d3fec60442024908778535cc78efaa2b213e8", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 16, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x36ab86c42f848b66d51c064bc9051418c30d73c3a5e3602379d50b5491646c294a800e520000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 340001, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "5f6ac16d6346c44ba62fbb77fc00f644b27fe0670d67391eb44cea9062cbf884", + "s": "57f319aac30d5d9ffe1e72bc6a48821c4d7be9f45b307068f3b679197dac8cf8", + "v": "0", + "type": "EIP1559", + "sender": "0x7f7d66252569b76be93d842540a6b4811ad0fae6", + "to": { + "value": "0x612af58f8016c06e603d803829ccfd843f787618" + }, + "nonce": 20, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x064a181e0000000000000000000000000000000000000000000000000266a475c6402000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000410c6f651f34e5f087e7b0d6650279f1e47c17ee476b51dad5e11e0a6a09f4febf34555c3c339d6799f3f7b496cf138398d5bf20bb136edae13129d01f2a0459770100000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 535053, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "2a1171e073dc8dfd7ca45ca936f01dad26ae826eaaf3426813b8d5fac5ddbc54", + "s": "535d42dcdeeb07d8601d3bb4b5ac93ecae42a18263dcc5e9fe2dbf9689c09ccb", + "v": "1", + "type": "EIP1559", + "sender": "0xbf1aa473e60388c734ed39c98ab9da90e90bc71e", + "to": { + "value": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a" + }, + "nonce": 21, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "5380af101439c18c949f38e2acbccf03390e0826f13da9d3548bbfcf49e6080a", + "s": "d4aa78165d0f137e54f9359c844ad3b8e0d82c33bbee77a0d985ebe4934ac8f8", + "v": "1", + "type": "EIP1559", + "sender": "0xce631cde950ef014d2c4fb65d5b85d16a4e4df09", + "to": { + "value": "0xbdb018e21ad1e5756853fe008793a474d329991b" + }, + "nonce": 38, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x7c2ccc45000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000ce631cde950ef014d2c4fb65d5b85d16a4e4df0900000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000041f58e65903d9cecdd187bc3c2d6d741c10cfb238426b45e8660ac2617fc8bfd2338d4799d070cac8996290771a9571d3ac4724c22faa34293c9f28f6e1787e0d91c00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 125701, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "bbee1ff769b9fc126d5b78046d60bda8682c814040869f20d605e029a2cd783", + "s": "aa3c9d98eb2ea2ec994a4279c3f3b926f6118f267c956a77acb0efe3ea091793", + "v": "0", + "type": "EIP1559", + "sender": "0x8cc5bdee02ba1a95da7a634ab5c552b00c6a2abf", + "to": { + "value": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4" + }, + "nonce": 72, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xd85d3d270000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003b68747470733a2f2f6170692e6269746176617461722e696f2f76312f6176617461722f3636303263356330333962396163306466383930323735350000000000", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc3f" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000031d3fc47" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 500000, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "30bcc01f5a470aeb3c53b24f3f94490f728188adda90435ec160ddd9c6c0a629", + "s": "634c97197413d0fe4f92103f265e71511af73d2c9a7ad52708a367e268061653", + "v": "1", + "type": "EIP1559", + "sender": "0x6fefeb0c79615fe744eb745cc2c5eae2556d0fd0", + "to": { + "value": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a" + }, + "nonce": 38, + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000318d74d3" + }, + "maxFeePerGas": { + "value": "0x00000000000000000000000000000000000000000000000000000000318d74da" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "7f07dbf814fb180c81f874ad14876d8247e55860734d1f78308a75405bb8224b", + "s": "f19af961811cb151228ee1a83685f74801bd989fd930938ca60208cf12f3eb11", + "v": "1", + "type": "EIP1559", + "sender": "0x0bc94aa6486d126b0d0594b11f34e17a3718919f", + "to": { + "value": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc" + }, + "nonce": 16, + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000", + "payload": "0x1249c58b", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000030e03500" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000030e03500" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 81555, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "604bfeb1a6cf28d07b5100318063574a8db9d8450b5e6987985bb4ad5fcad782", + "s": "95f295b6d0f91af8f367c3de2a4a0eb8cf349246cec26d8d7c1cb93e01152cd1", + "v": "1", + "type": "EIP1559", + "sender": "0xa712e958a1ee3185f36a89f9f67ea5b5df56bfb8", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 15, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x36ab86c41560905fcdd77f3e6bc88536660411d3991664baefcb237964d5be4a02e5b2ae0000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002ed564da" + }, + "maxFeePerGas": { + "value": "0x0000000000000000000000000000000000000000000000000000000034cb45e3" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 340001, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "b151e3f642f5e0118b466f97cab43d678290e669fa91e750adeb02149b9f95b", + "s": "d748b9cc2a204caa7108b7724565d0e7a7a01ae4de7658a051c1161a118fb2e5", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x630cf19324e1caf562042dc74eeaa7568dbb76dd", + "to": { + "value": "0x780de722234532f7d61ca3d147574f44a85c4244" + }, + "nonce": 4, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d4cae00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 46722, + "chainId": 59144, + "accessList": {} + }, + { + "r": "21adb420bc17836e72a25b0ae0615ee2b6fd650a449114d99d20311d0465d5de", + "s": "b1cfa2bb940f9e13fdd09196171f10d12dcc2e1fc12db2e58305a9d314169ba2", + "v": "1ce33", + "type": "FRONTIER", + "sender": "0x243e087001eb5aceb78fc39c5b49f9e2ab0b154a", + "to": { + "value": "0x06f9914838903162515afa67d5b99ada0f9791cc" + }, + "nonce": 15, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x1b0d0ea8000000000000000000000000000000000000000000000000000000006602c70594a7b25d58e336a8e308760798d74359dc85e6f99275516a0c5a3d46599b2173000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000411187560ceac353719d6fc419344699b9cf45c8fd7d9e81d7b8f65fb4a8c4d36859b41aa5e2ccdab9d2e52276c47cd564e24bbee076f320ab0cd0a90541094f741b00000000000000000000000000000000000000000000000000000000000000", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d4cae00" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 144325, + "chainId": 59144, + "accessList": {} + }, + { + "r": "5af61593b8a8dcb1729802615313a7a1d2b09c5ed21a5433a35a3102c88c2410", + "s": "5f3e729919434946c45fa183ab6e43b5c75cf37a87ccfc7a9366a3c9bc9b7c4f", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0xaa5a6c3b62eff7c3757b7ac031abb80dc98c7ac3", + "to": { + "value": "0x43264dccf2bbff0f21d711e46505c4c30879ead2" + }, + "nonce": 7, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d268860" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 47142, + "chainId": 59144, + "accessList": {} + }, + { + "r": "4ce23855e21da7ec1a35156ba41bd104099e34cf2bca1d7c4796814211d0dc1e", + "s": "882048273cfe8c216f9bb2c92968d156d7c8b28538aeb8e955c538ac2fbf0289", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0xe31d80d4136706022fccef1e40d07f289a68c29e", + "to": { + "value": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4" + }, + "nonce": 11, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x183ff085", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002d0ea2f5" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 22409, + "chainId": 59144, + "accessList": {} + }, + { + "r": "741acefb63e52e0d39cac5a252a3dcca24b737cafa7289dd1da1a262b9fc9f79", + "s": "4b897baa72826a8aac501514303f30033bc33378e66466c7539188bd84e59068", + "v": "0", + "type": "EIP1559", + "sender": "0x2e6f50485f05c808ba753a95d1d533534b2e730f", + "to": { + "value": "0xb18b7847072117ae863f71f9473d555d601eb537" + }, + "nonce": 8, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x14f710fe", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41779" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 153946, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "971d279b1be4d3843651b10558ff5d9f0cdba2761da7957c28bc185ca46bb18", + "s": "771252eab3517d381373aee116f11274de4e351bbf8bcbe53d8913d2679d9cf4", + "v": "1", + "type": "EIP1559", + "sender": "0x7b5d1affa60244cbbac9f25de50b32990a8a7031", + "to": { + "value": "0x780de722234532f7d61ca3d147574f44a85c4244" + }, + "nonce": 8, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0xa22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41779" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 46722, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "5bfbc16062940f41cb56fe487cc7b24cca59844f1ff6640677b32d664f32ec4", + "s": "cc4f444f659f3816b68d8251c70fbef5f9b315d17e090c950bdaa0721ed9065e", + "v": "1", + "type": "EIP1559", + "sender": "0x317a744d1650c8432e94d163aeefe07efcf9323e", + "to": { + "value": "0x009a0b7c38b542208936f1179151cd08e2943833" + }, + "nonce": 14, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x830cbbbd000000000000000000000000c7d8489dae3d2ebef075b1db2257e2c231c9d23100000000000000000000000000000000000000000000000000020595baa78aac", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 358576, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "1b3e48bcb2504cf0ee03b435f6ad82a02c76422f83ef14c73111d7318ec9f95a", + "s": "fe0cc77774681181b44c304bb85002d51eaa5290de82c6df98ce6e527199bbac", + "v": "1", + "type": "EIP1559", + "sender": "0x7406ecc532180589d34b29e92c543af48e7554d3", + "to": { + "value": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f" + }, + "nonce": 17, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x", + "gasPrice": {}, + "maxPriorityFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41779" + }, + "maxFeePerGas": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxFeePerBlobGas": {}, + "gasLimit": 26296, + "chainId": 59144, + "accessList": { + "value": [] + } + }, + { + "r": "69e099593d31c2efc85e5703d8fdc414d601a21b4d7ea09e69163e87835e86d1", + "s": "77151de34d1cf1fcdfec0f8c7e444f442b55d8524b08bc023e4e7e07d7c9b06a", + "v": "1ce34", + "type": "FRONTIER", + "sender": "0x655d9ce049e8a98e91ec3419deb7e2c288d7f87c", + "to": { + "value": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa" + }, + "nonce": 23, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "payload": "0x6871ee40", + "gasPrice": { + "value": "0x000000000000000000000000000000000000000000000000000000002cb41780" + }, + "maxPriorityFeePerGas": {}, + "maxFeePerGas": {}, + "maxFeePerBlobGas": {}, + "gasLimit": 120000, + "chainId": 59144, + "accessList": {} + } + ] + } + ], + "accounts": [ + { + "address": "0x44d81da7e9f621475d62ddf8c8dc433dc8ddeee2", + "nonce": 31, + "balance": "0x000000000000000000000000000000000000000000000000000f7e801b63a6b2", + "code": "0x" + }, + { + "address": "0x5dcd66a5306ad33d896d7d04d466bfa691d787f4", + "nonce": 33, + "balance": "0x000000000000000000000000000000000000000000000000002380501a46f4af", + "code": "0x" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "nonce": 1, + "balance": "0x00000000000000000000000000000000000000000000000d07f7b81a287395e8", + "code": "0x60806040526004361061034a5760003560e01c8063715018a6116101bb578063c50cd326116100f7578063eb12d61e11610095578063f4ebea691161006f578063f4ebea69146109d6578063f5f082ea14610a06578063f8228e3b14610a26578063fb01e4e114610ac757600080fd5b8063eb12d61e14610976578063ef36925214610996578063f2fde38b146109b657600080fd5b8063d41d9221116100d1578063d41d922114610914578063d6e6eb9f1461092a578063e0e6799f14610940578063e4ffe7d71461096057600080fd5b8063c50cd326146108be578063cad244cd146108de578063d30de188146108fe57600080fd5b806386be5eb811610164578063a49834211161013e578063a498342114610843578063b5a7a7fd14610863578063b6ec175114610878578063b91816111461088e57600080fd5b806386be5eb8146107e25780638da5cb5b146107f5578063a30a1d251461081357600080fd5b80637b796b76116101955780637b796b761461076257806383b388cf1461078257806385f5276f146107b257600080fd5b8063715018a614610717578063750142e61461072c5780637582bac91461074257600080fd5b806335295de61161028a5780635a461698116102335780635cf4ee911161020d5780635cf4ee9114610697578063694825d5146106b75780636bebaf97146106d75780636c9a3dad146106f757600080fd5b80635a461698146106315780635a6eb322146106475780635a8a764e1461067757600080fd5b80634ad85952116102645780634ad859521461058a5780634ada02d0146105ba57806358e6da351461060157600080fd5b806335295de6146105345780633644e515146105545780634236e8761461056a57600080fd5b806320606b70116102f757806328a529f5116102d157806328a529f5146104915780632db78d93146104b15780632e50b914146104de57806330d838e2146104fe57600080fd5b806320606b701461040f5780632079fb9a1461044357806324dc441d1461047b57600080fd5b806313d79d581161032857806313d79d58146103b95780631ab55648146103d95780632006b5b7146103ef57600080fd5b80630bf832341461034f5780630e316ab7146103825780630f71cf61146103a4575b600080fd5b34801561035b57600080fd5b5061036f61036a366004613056565b610adc565b6040519081526020015b60405180910390f35b34801561038e57600080fd5b506103a261039d36600461309c565b610c65565b005b3480156103b057600080fd5b5061036f610f14565b3480156103c557600080fd5b506103a26103d43660046130b7565b610f86565b3480156103e557600080fd5b5061036f600c5481565b3480156103fb57600080fd5b506103a261040a366004613125565b6114b4565b34801561041b57600080fd5b5061036f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b34801561044f57600080fd5b5061046361045e3660046131d9565b611738565b6040516001600160a01b039091168152602001610379565b34801561048757600080fd5b5061036f60095481565b34801561049d57600080fd5b506103a26104ac3660046130b7565b611762565b3480156104bd57600080fd5b5061036f6104cc36600461309c565b600f6020526000908152604090205481565b3480156104ea57600080fd5b5061036f6104f93660046130b7565b61180b565b34801561050a57600080fd5b506104636105193660046131d9565b6000908152601060205260409020546001600160a01b031690565b34801561054057600080fd5b5061036f61054f3660046131f2565b61182e565b34801561056057600080fd5b5061036f60025481565b34801561057657600080fd5b5061036f6105853660046130b7565b61195b565b34801561059657600080fd5b5061036f6105a53660046131d9565b60009081526010602052604090206006015490565b3480156105c657600080fd5b5061036f6105d5366004613227565b60008281526010602090815260408083206001600160a01b038516845260070190915290205492915050565b34801561060d57600080fd5b5061036f61061c3660046131d9565b60009081526010602052604090206001015490565b34801561063d57600080fd5b5061036f600a5481565b34801561065357600080fd5b5061036f6106623660046131d9565b60009081526010602052604090206003015490565b34801561068357600080fd5b506103a26106923660046131d9565b611a04565b3480156106a357600080fd5b5061036f6106b23660046130b7565b611a11565b3480156106c357600080fd5b506103a26106d2366004613253565b611af2565b3480156106e357600080fd5b506103a26106f23660046131d9565b611db8565b34801561070357600080fd5b5061036f6107123660046130b7565b611dc5565b34801561072357600080fd5b506103a2611e63565b34801561073857600080fd5b5061036f600b5481565b34801561074e57600080fd5b506103a261075d3660046131d9565b611e77565b34801561076e57600080fd5b5061036f61077d366004613227565b611e84565b34801561078e57600080fd5b5061036f61079d3660046131d9565b60009081526010602052604090206002015490565b3480156107be57600080fd5b506107d26107cd3660046130b7565b611fa9565b6040519015158152602001610379565b6103a26107f036600461332b565b611ff8565b34801561080157600080fd5b506000546001600160a01b0316610463565b34801561081f57600080fd5b5061036f61082e3660046131d9565b60009081526010602052604090206005015490565b34801561084f57600080fd5b506103a261085e3660046131d9565b61245f565b34801561086f57600080fd5b5061036f61246c565b34801561088457600080fd5b5061036f60055481565b34801561089a57600080fd5b506107d26108a936600461309c565b600e6020526000908152604090205460ff1681565b3480156108ca57600080fd5b506107d26108d936600461336d565b6124c5565b3480156108ea57600080fd5b5061036f6108f93660046130b7565b6127c1565b34801561090a57600080fd5b5061036f60045481565b34801561092057600080fd5b5061036f60075481565b34801561093657600080fd5b5061036f60085481565b34801561094c57600080fd5b506103a261095b36600461309c565b6127e8565b34801561096c57600080fd5b5061036f60065481565b34801561098257600080fd5b506103a261099136600461309c565b61282a565b3480156109a257600080fd5b50600354610463906001600160a01b031681565b3480156109c257600080fd5b506103a26109d136600461309c565b61297f565b3480156109e257600080fd5b5061036f6109f13660046131d9565b60009081526010602052604090206004015490565b348015610a1257600080fd5b506103a2610a21366004613411565b612a0f565b348015610a3257600080fd5b50610a88610a413660046131d9565b60106020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039095169593949293919290919087565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610379565b348015610ad357600080fd5b5061036f612dd8565b6000600254604051602001610b86907f5265776172642862797465733332207375626a6563742c61646472657373206f81527f776e65722c75696e7432353620736e617073686f745265776172642c75696e7460208201527f3235362072657761726450657263656e742c62797465733332206d65726b6c6560408201527f526f6f7429000000000000000000000000000000000000000000000000000000606082015260650190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083015281018890526001600160a01b03871660608201526080810186905260a0810185905260c0810184905260e00160405160208183030381529060405280519060200120604051602001610c449291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b60405160208183030381529060405280519060200120905095945050505050565b610c6d612e7d565b6001600160a01b0381166000908152600e602052604090205460ff16610cda5760405162461bcd60e51b815260206004820152600c60248201527f4e6f6e206578697374656e74000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600d546001600160a01b0382166000908152600f602052604090205410610d435760405162461bcd60e51b815260206004820152601260248201527f496e646578206f7574206f662072616e676500000000000000000000000000006044820152606401610cd1565b6001600160a01b0381166000908152600f6020526040812054600d54909190610d6e906001906134a8565b9050808214610e0e576000600d8281548110610d8c57610d8c6134bf565b600091825260209091200154600d80546001600160a01b039092169250829185908110610dbb57610dbb6134bf565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03948516179055929091168152600f909152604090208290555b6001600160a01b0383166000908152600e6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600f909152812055600d805480610e6857610e686134ee565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690550190556040517f98d1ebbe00ae92a5de96a0f49742a8afa89f42363592bc2e7cfaaed68b45e7a690610f0790339086906001600160a01b0392831681529116602082015260400190565b60405180910390a1505050565b604051602001610f6d907f42696e642862797465733332207375626a6563742c61646472657373206f776e81527f6572290000000000000000000000000000000000000000000000000000000000602082015260230190565b6040516020818303038152906040528051906020012081565b610f8e612ee6565b610fc96040518060c0016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b600083815260106020908152604080832033845260078101909252909120548311156110375760405162461bcd60e51b815260206004820152601360248201527f496e73756666696369656e7420706173736573000000000000000000000000006044820152606401610cd1565b61105083826006015461104a91906134a8565b84611a11565b60208301819052600854670de0b6b3a76400009161106e919061351d565b6110789190613589565b60408301526009546020830151670de0b6b3a7640000916110989161351d565b6110a29190613589565b6060830152600a546020830151670de0b6b3a7640000916110c29161351d565b6110cc9190613589565b608083018190526060830151604084015160208501516110ec91906134a8565b6110f691906134a8565b61110091906134a8565b8252336000908152600782016020526040812080548592906111239084906134a8565b925050819055508281600601600082825461113e91906134a8565b90915550506080820151600b805460009061115a90849061359d565b909155505080546001600160a01b0316611191578160600151816005016000828254611186919061359d565b909155506112569050565b80546060830151604080516000815260208101918290526001600160a01b03909316926111bd916135e4565b60006040518083038185875af1925050503d80600081146111fa576040519150601f19603f3d011682016040523d82523d6000602084013e6111ff565b606091505b5050151560a083018190526112565760405162461bcd60e51b815260206004820152601460248201527f556e61626c6520746f2073656e642066756e64730000000000000000000000006044820152606401610cd1565b81516040805160008152602081019182905233929161127591906135e4565b60006040518083038185875af1925050503d80600081146112b2576040519150601f19603f3d011682016040523d82523d6000602084013e6112b7565b606091505b5050151560a0830181905261130e5760405162461bcd60e51b815260206004820152601460248201527f556e61626c6520746f2073656e642066756e64730000000000000000000000006044820152606401610cd1565b60035460408381015181516000815260208101928390526001600160a01b0390931692909161133d91906135e4565b60006040518083038185875af1925050503d806000811461137a576040519150601f19603f3d011682016040523d82523d6000602084013e61137f565b606091505b5050151560a083018190526113d65760405162461bcd60e51b815260206004820152601460248201527f556e61626c6520746f2073656e642066756e64730000000000000000000000006044820152606401610cd1565b7f54d609ca39e5dc7a2d5d2ed14f4bb8d1d758277736a5761915ddb995877b180d604051806101400160405280600460008154809291906114169061361f565b919050558152602001428152602001336001600160a01b0316815260200186815260200160001515815260200185815260200184602001518152602001836007016000336001600160a01b03166001600160a01b0316815260200190815260200160002054815260200183600601548152602001600b5481525060405161149d9190613658565b60405180910390a150506114b060018055565b5050565b6114bc612ee6565b6114d46114c98989611e84565b8787878787876124c5565b50600088815260106020526040902080546001600160a01b03166115855780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038916178155600580547f4b98327729a18eb1089c15c278405541e37dbcb3bcb48ba79c1f3adea8987f359160006115548361361f565b909155506040805191825242602083015281018b90526001600160a01b038a16606082015260800160405180910390a15b600581015415611724576005810180546000918290556040805183815260208101918290529192916001600160a01b038c169184916115c3916135e4565b60006040518083038185875af1925050503d8060008114611600576040519150601f19603f3d011682016040523d82523d6000602084013e611605565b606091505b50509050806116565760405162461bcd60e51b815260206004820152601460248201527f556e61626c6520746f2073656e642066756e64730000000000000000000000006044820152606401610cd1565b7ff69e44bab5bc334d88a6d599475890bbfcf605fdc719ccf2a0ff1103d628c3606040518060c00160405280600760008154809291906116959061361f565b9190505581526020014281526020018c6001600160a01b031681526020018d815260200160008152602001848152506040516117199190600060c08201905082518252602083015160208301526001600160a01b036040840151166040830152606083015160608301526080830151608083015260a083015160a083015292915050565b60405180910390a150505b5061172e60018055565b5050505050505050565b600d818154811061174857600080fd5b6000918252602090912001546001600160a01b0316905081565b61176a612e7d565b6000828152601060205260409020600201546117c85760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e7420726577617264730000000000000000000000006044820152606401610cd1565b600082815260106020526040902060038101829055600401544211156114b057600c546117f5904261359d565b6000838152601060205260409020600401555050565b6000828152601060205260408120600601546118279083611a11565b9392505050565b600060025460405160200161188c907f4275792862797465733332207375626a6563742c616464726573732073656e6481527f65722c75696e7432353620616d6f756e74290000000000000000000000000000602082015260320190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083015281018690526001600160a01b03851660608201526080810184905260a0016040516020818303038152906040528051906020012060405160200161193c9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090509392505050565b60008061196884846127c1565b90506000670de0b6b3a764000060085483611983919061351d565b61198d9190613589565b90506000670de0b6b3a7640000600954846119a8919061351d565b6119b29190613589565b90506000670de0b6b3a7640000600a54856119cd919061351d565b6119d79190613589565b905080826119e585876134a8565b6119ef91906134a8565b6119f991906134a8565b979650505050505050565b611a0c612e7d565b600955565b6000806006611a2185600261351d565b611a2c90600161359d565b611a3786600161359d565b611a41908761351d565b611a4b919061351d565b611a559190613589565b905060006006611a65858761359d565b611a7090600261351d565b611a7b90600161359d565b85611a8788600161359d565b611a91919061359d565b611a9b878961359d565b611aa5919061351d565b611aaf919061351d565b611ab99190613589565b90506000611ac783836134a8565b905061a96a611ade82670de0b6b3a764000061351d565b611ae89190613589565b9695505050505050565b611afa612ee6565b670de0b6b3a7640000881115611b525760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420706172616d657465720000000000000000000000000000006044820152606401610cd1565b611b626114c98c8c8c8c8c610adc565b5060008b8152601060205260409020600181015415611bc35760405162461bcd60e51b815260206004820152600b60248201527f496e697469616c697a65640000000000000000000000000000000000000000006044820152606401610cd1565b80546001600160a01b0316611c655780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c16178155600580547f4b98327729a18eb1089c15c278405541e37dbcb3bcb48ba79c1f3adea8987f35916000611c348361361f565b909155506040805191825242602083015281018e90526001600160a01b038d16606082015260800160405180910390a15b670de0b6b3a7640000611c788a8c61351d565b611c829190613589565b60018201819055600282015560038101889055600c54611ca2904261359d565b60048201556001810154600b8054600090611cbe9084906134a8565b925050819055507fd2ac8a0efed34e478c26f40a0dd1bb7a531be7ead0369f8cf7c11a22fa2f10426040518060e0016040528060066000815480929190611d049061361f565b9190505581526020014281526020018e81526020018d6001600160a01b031681526020018c81526020018b8152602001600b54815250604051611d999190600060e0820190508251825260208301516020830152604083015160408301526001600160a01b0360608401511660608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b60405180910390a150611dab60018055565b5050505050505050505050565b611dc0612e7d565b600a55565b600080611dd2848461180b565b90506000670de0b6b3a764000060085483611ded919061351d565b611df79190613589565b90506000670de0b6b3a764000060095484611e12919061351d565b611e1c9190613589565b90506000670de0b6b3a7640000600a5485611e37919061351d565b611e419190613589565b90508082611e4f858761359d565b611e59919061359d565b6119f9919061359d565b611e6b612e7d565b611e756000612f40565b565b611e7f612e7d565b600c55565b6000600254604051602001611ee2907f42696e642862797465733332207375626a6563742c61646472657373206f776e81527f6572290000000000000000000000000000000000000000000000000000000000602082015260230190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083015281018590526001600160a01b038416606082015260800160405160208183030381529060405280519060200120604051602001611f8b9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b60405160208183030381529060405280519060200120905092915050565b600080611fb861010084613589565b90506000611fc8610100856136e4565b6000958652601060209081526040808820948852600890940190529190942054600190911b908116149392505050565b612000612ee6565b61200e6114c989338a61182e565b5061204a6040518060c0016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b60008981526010602052604090206006810154612067908a611a11565b60208301819052600854670de0b6b3a764000091612085919061351d565b61208f9190613589565b60408301526009546020830151670de0b6b3a7640000916120af9161351d565b6120b99190613589565b6060830152600a546020830151670de0b6b3a7640000916120d99161351d565b6120e39190613589565b60808301819052606083015160408401516020850151612103919061359d565b61210d919061359d565b612117919061359d565b8083523410156121695760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e74207061796d656e740000000000000000000000006044820152606401610cd1565b336000908152600782016020526040812080548b929061218a90849061359d565b92505081905550888160060160008282546121a5919061359d565b90915550506080820151600b80546000906121c190849061359d565b909155505080546001600160a01b03166121f85781606001518160050160008282546121ed919061359d565b909155506122bd9050565b80546060830151604080516000815260208101918290526001600160a01b0390931692612224916135e4565b60006040518083038185875af1925050503d8060008114612261576040519150601f19603f3d011682016040523d82523d6000602084013e612266565b606091505b5050151560a083018190526122bd5760405162461bcd60e51b815260206004820152601460248201527f556e61626c6520746f2073656e642066756e64730000000000000000000000006044820152606401610cd1565b60035460408381015181516000815260208101928390526001600160a01b039093169290916122ec91906135e4565b60006040518083038185875af1925050503d8060008114612329576040519150601f19603f3d011682016040523d82523d6000602084013e61232e565b606091505b5050151560a083018190526123855760405162461bcd60e51b815260206004820152601460248201527f556e61626c6520746f2073656e642066756e64730000000000000000000000006044820152606401610cd1565b7f54d609ca39e5dc7a2d5d2ed14f4bb8d1d758277736a5761915ddb995877b180d604051806101400160405280600460008154809291906123c59061361f565b919050558152602001428152602001336001600160a01b031681526020018c81526020016001151581526020018b815260200184602001518152602001836007016000336001600160a01b03166001600160a01b0316815260200190815260200160002054815260200183600601548152602001600b5481525060405161244c9190613658565b60405180910390a1505061172e60018055565b612467612e7d565b600855565b604051602001610f6d907f4275792862797465733332207375626a6563742c616464726573732073656e6481527f65722c75696e7432353620616d6f756e74290000000000000000000000000000602082015260320190565b600d5460009080158015906124d957508087145b80156124e457508085145b80156124ef57508083145b61253b5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610cd1565b60008167ffffffffffffffff811115612556576125566135b5565b60405190808252806020026020018201604052801561257f578160200160208202803683370190505b50905060005b828110156127b057600060018c8c8c858181106125a4576125a46134bf565b90506020020160208101906125b991906136f8565b8b8b868181106125cb576125cb6134bf565b905060200201358a8a878181106125e4576125e46134bf565b9050602002013560405160008152602001604052604051612621949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612643573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001516001600160a01b0381166000908152600e602052919091205490925060ff1690506126d95760405162461bcd60e51b815260206004820152600e60248201527f496e76616c6964207369676e65720000000000000000000000000000000000006044820152606401610cd1565b60005b8281101561277157816001600160a01b0316848281518110612700576127006134bf565b60200260200101516001600160a01b0316141561275f5760405162461bcd60e51b815260206004820152600a60248201527f4475706c696361746564000000000000000000000000000000000000000000006044820152606401610cd1565b806127698161361f565b9150506126dc565b5080838381518110612785576127856134bf565b6001600160a01b039092166020928302919091019091015250806127a88161361f565b915050612585565b5060019a9950505050505050505050565b600082815260106020526040812060060154611827906127e29084906134a8565b83611a11565b6127f0612e7d565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b612832612e7d565b6001600160a01b0381166000908152600e602052604090205460ff161561289b5760405162461bcd60e51b815260206004820152600d60248201527f4e6f74207265656e7472616e74000000000000000000000000000000000000006044820152606401610cd1565b600d80546001600160a01b0383166000818152600f6020908152604080832094909455600e815283822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915585549081018655949091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb590930180547fffffffffffffffffffffffff000000000000000000000000000000000000000016821790558151338152928301527f12146497b3b826918ec47f0cac7272a09ed06b30c16c030e99ec48ff5dd60b47910160405180910390a150565b612987612e7d565b6001600160a01b038116612a035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cd1565b612a0c81612f40565b50565b612a17612ee6565b60008781526010602052604090206004810154421115612a795760405162461bcd60e51b815260206004820152600660248201527f45787069726500000000000000000000000000000000000000000000000000006044820152606401610cd1565b612a838888611fa9565b15612ad05760405162461bcd60e51b815260206004820152600760248201527f436c61696d6564000000000000000000000000000000000000000000000000006044820152606401610cd1565b60408051602081018a9052908101889052606087811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690820152607481018690526094810185905260009060b401604051602081830303815290604052805190602001209050612b79848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505050600384015483612fa8565b612bc55760405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642070726f6f66000000000000000000000000000000000000006044820152606401610cd1565b6000612bd36101008a613589565b90506000612be36101008b6136e4565b600083815260088601602052604081208054600180851b909117909155860154919250908890612c14908b9061351d565b612c1e9190613589565b905080856002016000828254612c3491906134a8565b9091555050604080516000808252602082019092526001600160a01b038c16908390604051612c6391906135e4565b60006040518083038185875af1925050503d8060008114612ca0576040519150601f19603f3d011682016040523d82523d6000602084013e612ca5565b606091505b5050905080612cf65760405162461bcd60e51b815260206004820152601460248201527f556e61626c6520746f2073656e642066756e64730000000000000000000000006044820152606401610cd1565b7ff69e44bab5bc334d88a6d599475890bbfcf605fdc719ccf2a0ff1103d628c3606040518060c0016040528060076000815480929190612d359061361f565b9190505581526020014281526020018d6001600160a01b031681526020018f81526020018e815260200184815250604051612db89190600060c08201905082518252602083015160208301526001600160a01b036040840151166040830152606083015160608301526080830151608083015260a083015160a083015292915050565b60405180910390a1505050505050612dcf60018055565b50505050505050565b604051602001610f6d907f5265776172642862797465733332207375626a6563742c61646472657373206f81527f776e65722c75696e7432353620736e617073686f745265776172642c75696e7460208201527f3235362072657761726450657263656e742c62797465733332206d65726b6c6560408201527f526f6f7429000000000000000000000000000000000000000000000000000000606082015260650190565b33612e906000546001600160a01b031690565b6001600160a01b031614611e755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cd1565b60026001541415612f395760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cd1565b6002600155565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082612fb58584612fbe565b14949350505050565b600081815b845181101561300357612fef82868381518110612fe257612fe26134bf565b602002602001015161300b565b915080612ffb8161361f565b915050612fc3565b509392505050565b6000818310613027576000828152602084905260409020611827565b6000838152602083905260409020611827565b80356001600160a01b038116811461305157600080fd5b919050565b600080600080600060a0868803121561306e57600080fd5b8535945061307e6020870161303a565b94979496505050506040830135926060810135926080909101359150565b6000602082840312156130ae57600080fd5b6118278261303a565b600080604083850312156130ca57600080fd5b50508035926020909101359150565b60008083601f8401126130eb57600080fd5b50813567ffffffffffffffff81111561310357600080fd5b6020830191508360208260051b850101111561311e57600080fd5b9250929050565b60008060008060008060008060a0898b03121561314157600080fd5b8835975061315160208a0161303a565b9650604089013567ffffffffffffffff8082111561316e57600080fd5b61317a8c838d016130d9565b909850965060608b013591508082111561319357600080fd5b61319f8c838d016130d9565b909650945060808b01359150808211156131b857600080fd5b506131c58b828c016130d9565b999c989b5096995094979396929594505050565b6000602082840312156131eb57600080fd5b5035919050565b60008060006060848603121561320757600080fd5b833592506132176020850161303a565b9150604084013590509250925092565b6000806040838503121561323a57600080fd5b8235915061324a6020840161303a565b90509250929050565b60008060008060008060008060008060006101008c8e03121561327557600080fd5b8b359a5061328560208d0161303a565b995060408c0135985060608c0135975060808c0135965067ffffffffffffffff8060a08e013511156132b657600080fd5b6132c68e60a08f01358f016130d9565b909750955060c08d01358110156132dc57600080fd5b6132ec8e60c08f01358f016130d9565b909550935060e08d013581101561330257600080fd5b506133138d60e08e01358e016130d9565b81935080925050509295989b509295989b9093969950565b60008060008060008060008060a0898b03121561334757600080fd5b8835975060208901359650604089013567ffffffffffffffff8082111561316e57600080fd5b60008060008060008060006080888a03121561338857600080fd5b87359650602088013567ffffffffffffffff808211156133a757600080fd5b6133b38b838c016130d9565b909850965060408a01359150808211156133cc57600080fd5b6133d88b838c016130d9565b909650945060608a01359150808211156133f157600080fd5b506133fe8a828b016130d9565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561342c57600080fd5b87359650602088013595506134436040890161303a565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561346d57600080fd5b6133fe8a828b016130d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156134ba576134ba613479565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561355557613555613479565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826135985761359861355a565b500490565b600082198211156135b0576135b0613479565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000825160005b8181101561360557602081860181015185830152016135eb565b81811115613614576000828501525b509190910192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561365157613651613479565b5060010190565b6000610140820190508251825260208301516020830152604083015161368960408401826001600160a01b03169052565b506060830151606083015260808301516136a7608084018215159052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525092915050565b6000826136f3576136f361355a565b500690565b60006020828403121561370a57600080fd5b813560ff8116811461182757600080fdfea2646970667358221220a0a46ef0f6845e1088605653b39c452d62e095a3cd584e8bfe48f5b4bd3d55b664736f6c634300080c0033" + }, + { + "address": "0xf5d68238c4bbb18a053631e929589be5a9621b54", + "nonce": 5, + "balance": "0x000000000000000000000000000000000000000000000000001134f1e15a8956", + "code": "0x" + }, + { + "address": "0x61f3be073bd5c5a6ed11443e51744ce505e27b85", + "nonce": 170, + "balance": "0x0000000000000000000000000000000000000000000000000002624d01f5499f", + "code": "0x" + }, + { + "address": "0xd236b61b6445f2af7775814aa690bec421ce3dd6", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063b1dd61b6116100a2578063ee97f7f311610071578063ee97f7f31461048e578063f66eab5b146104b5578063fbfa77cf146104d5578063ff9c8ac6146104fc57600080fd5b8063b1dd61b614610414578063d21220a714610429578063d505accf14610450578063dd62ed3e1461046357600080fd5b806395d89b41116100de57806395d89b41146103de578063a287c795146103e6578063a5a41031146103f9578063a9059cbb1461040157600080fd5b806370a082311461036b5780637132bb7f1461038b5780637ecebe001461039e5780638b4c5470146103be57600080fd5b806323b872dd116101875780633644e515116101565780633644e5151461033c578063443cb4bc146103445780635a76f25e1461034d57806367e4ac2c1461035657600080fd5b806323b872dd146102c057806327b0bcea146102d35780632c0198cc146102f3578063313ce5671461030857600080fd5b80630902f1ac116101c35780630902f1ac1461025c578063095ea7b3146102705780630dfe16811461028357806318160ddd146102b757600080fd5b806301ffc9a7146101f557806303e7286a1461021e57806306fdde031461023e57806307f293f714610253575b600080fd5b610208610203366004612ee1565b61050f565b6040516102159190612f0c565b60405180910390f35b61023161022c366004612f91565b610561565b6040516102159190613038565b610246610a1a565b60405161021591906130a4565b610231600b5481565b600954600a546040516102159291906130b5565b61020861027e3660046130e1565b610aa8565b6102aa7f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f81565b6040516102159190613127565b61023160005481565b6102086102ce366004613135565b610abe565b6102e66102e1366004612f91565b610b9e565b60405161021591906131a9565b6103066103013660046131b7565b6111d5565b005b61032f7f000000000000000000000000000000000000000000000000000000000000001281565b604051610215919061323b565b61023161127a565b61023160095481565b610231600a5481565b61035e611299565b60405161021591906132a6565b6102316103793660046132b7565b60016020526000908152604090205481565b6102e6610399366004612f91565b611364565b6102316103ac3660046132b7565b60036020526000908152604090205481565b6103d16103cc3660046133d3565b6118e5565b604051610215919061345d565b610246611986565b6102316103f436600461346b565b611993565b6103d1611a45565b61020861040f3660046130e1565b611ad5565b61041c600181565b60405161021591906134bb565b6102aa7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b61030661045e3660046134dd565b611b4a565b61023161047136600461357c565b600260209081526000928352604080842090915290825290205481565b6102aa7f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a381565b6104c86104c3366004612f91565b611c3f565b6040516102159190613601565b6102aa7f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b81565b61023161050a36600461346b565b61204d565b60006001600160e01b031982166301ffc9a760e01b148061054057506001600160e01b0319821663d505accf60e01b145b8061055b57506001600160e01b03198216630b00663360e21b145b92915050565b600061056b6121d1565b61060260405180610200016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001606081525090565b61060e878901896132b7565b6001600160a01b03166020820152600954600a5460608301526040820152610634612203565b60a083018190526080830182905261064c919061236d565b610140820152604081015160808201516106669190613628565b60c0820152606081015160a082015161067f9190613628565b60e082015261068d86612458565b9550600081604001516000146106c3576106be82606001518360c001516106b4919061363f565b8360400151900490565b6106c6565b60005b60e08301519091508111801561073157610721887f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f612516565b62ffffff166101c0840152610788565b61077c887f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f7f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f612516565b62ffffff166101c08401525b6107b0836101c0015162ffffff168460c001518560e00151858760400151886060015161253b565b61012085015261010084018190526040840180516107cf90839061365e565b9052506101208301516060840180516107e990839061365e565b90525060408301516060840151610800919061236d565b610160840181905260009061081890829081906125c8565b6101808601819052909150600003610855576103e884610140015161083d9190613628565b6101a085015261085060006103e86127a1565b61088d565b610160840151610180850151610140860151610872908390613628565b61087c919061363f565b610886919061368c565b6101a08501525b836101a001516000036108b357604051633489be7560e21b815260040160405180910390fd5b6108c68460200151856101a001516127a1565b6001600160a01b0388161561097a576001600160a01b0389168452604080516020601f89018190048102820181019092528781529088908890819084018382808284376000920191909152505050506101e0850152604051630204997360e41b81526001600160a01b038916906320499730906109479087906004016137e7565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b505050505b61098c84608001518560a001516127fe565b801561099c57610140840151600b555b83602001516001600160a01b0316336001600160a01b03167fa8137fff86647d8a402117b9c5dbda627f721d3773338fb9678c83e54ed390808660c001518760e00151886101a001516040516109f4939291906137f8565b60405180910390a35050506101a001519050610a106001600855565b9695505050505050565b60048054610a2790613836565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5390613836565b8015610aa05780601f10610a7557610100808354040283529160200191610aa0565b820191906000526020600020905b815481529060010190602001808311610a8357829003601f168201915b505050505081565b6000610ab5338484612846565b50600192915050565b6001600160a01b03831660009081526002602090815260408083203384529091528120546000198114610b1a57610af58382613628565b6001600160a01b03861660009081526002602090815260408083203384529091529020555b6001600160a01b03851660009081526001602052604081208054859290610b42908490613628565b90915550506001600160a01b038085166000818152600160205260409081902080548701905551909187169060008051602061412c83398151915290610b89908790613038565b60405180910390a360019150505b9392505050565b6040805180820190915260008082526020820152610bba6121d1565b610c6660405180610200016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600060ff168152602001606081525090565b610c7287890189613862565b60ff166101c08401526001600160a01b039081166020840152166060820152610c99612203565b60a08301908152608083019182523060009081526001602052604081205460c085015291519051610ccb9190836125c8565b60e08401819052909150600003610ce157600080fd5b610d0282608001518360c00151610cf8919061363f565b8360e00151900490565b61010083015260a082015160c0830151610d1f91610cf89161363f565b61012083015260c0820151610d359030906128ae565b610d3e87612458565b96507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031682606001516001600160a01b031603610ecc57610dc8877f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f612516565b62ffffff166101a083018190526001600160a01b037f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f1660408401526101008301516080840151610e3c929190610e20908290613628565b8561012001518660a00151610e359190613628565b600161290d565b610180840152610160830181905261012083018051610e5c90839061365e565b91508181525050610e9d7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f8360200151846101200151856101c001516129c8565b6101208201516101408301819052600061010084015260a083018051610ec4908390613628565b90525061105d565b7f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f6001600160a01b031682606001516001600160a01b031614610f0e57600080fd5b610f59877f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f7f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f612516565b62ffffff166101a083018190526001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f1660408401526101208301516101008401516080850151610fd1939291610fb591613628565b8561012001518660a00151610fca9190613628565b600061290d565b610180840152610160830181905261010083018051610ff190839061365e565b915081815250506110327f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f8360200151846101000151856101c001516129c8565b61010082015161014083018190526000610120840152608083018051611059908390613628565b9052505b6001600160a01b03861615611111576001600160a01b0387168252604080516020601f87018190048102820181019092528581529086908690819084018382808284376000920191909152505050506101e0830152604051630eace54160e11b81526001600160a01b03871690631d59ca82906110de9085906004016139d5565b600060405180830381600087803b1580156110f857600080fd5b505af115801561110c573d6000803e3d6000fd5b505050505b61112382608001518360a001516127fe565b801561113f5761113b82608001518360a0015161236d565b600b555b604051806040016040528083606001516001600160a01b03168152602001836101400151815250925081602001516001600160a01b0316336001600160a01b03167fd175a80c109434bb89948928ab2475a6647c94244cb70002197896423c8833638461010001518561012001518660c001516040516111c1939291906137f8565b60405180910390a35050610a106001600855565b82804211156111f757604051630407b05b60e31b815260040160405180910390fd5b600061120588888888612ae0565b9050611248888286868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b9992505050565b61126557604051638baa579f60e01b815260040160405180910390fd5b611270888888612846565b5050505050505050565b600060065446146112925761128d612cc5565b905090565b5060075490565b60408051600280825260608083018452926020830190803683370190505090507f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f816000815181106112ed576112ed6139e6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81600181518110611341576113416139e6565b60200260200101906001600160a01b031690816001600160a01b03168152505090565b60408051808201909152600080825260208201526113806121d1565b61141e604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600060ff168152602001606081525090565b61142a87890189613862565b60ff166101808401526001600160a01b039081166020840152166040820152600954600a5460a08301526080820152611461612203565b60e083015260c082015261147486612458565b95507f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f6001600160a01b031681604001516001600160a01b0316036115fc576114fe867f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f612516565b62ffffff166101608201526001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f166060820152608081015160c082015161154c9190613628565b8161010001818152505061157b81610160015162ffffff1682610100015183608001518460a00151600161290d565b610140830152610120820181905260e08201805161159a908390613628565b90525060208101516101008201516101208301516040516001600160a01b039093169233927fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822926115ef926000918291613a14565b60405180910390a3611785565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031681604001516001600160a01b03161461163e57600080fd5b611689867f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f7f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f612516565b62ffffff166101608201526001600160a01b037f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f16606082015260a081015160e08201516116d79190613628565b8161010001818152505061170681610160015162ffffff1682610100015183608001518460a00151600061290d565b610140830152610120820181905260c082018051611725908390613628565b90525060208101516101008201516101208301516040516001600160a01b039093169233927fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229261177c9260009291908390613a49565b60405180910390a35b60c08101516001600160801b0310156117b157604051631a93c68960e11b815260040160405180910390fd5b60e08101516001600160801b0310156117dd57604051631a93c68960e11b815260040160405180910390fd5b6117fb816060015182602001518361012001518461018001516129c8565b6001600160a01b038516156118af576001600160a01b0386168152604080516020601f86018190048102820181019092528481529085908590819084018382808284376000920191909152505050506101a082015260405163608dbcbb60e01b81526001600160a01b0386169063608dbcbb9061187c908490600401613b9b565b600060405180830381600087803b15801561189657600080fd5b505af11580156118aa573d6000803e3d6000fd5b505050505b6118c18160c001518260e001516127fe565b60608101516001600160a01b0316825261012001516020820152610a106001600855565b604051634625a94d60e01b81526000906001600160a01b037f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a31690634625a94d9061193c9030908990899089908990600401613bac565b602060405180830381865afa158015611959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197d9190613c09565b95945050505050565b60058054610a2790613836565b600954600a54600091907f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f6001600160a01b039081169087161483816119f9577f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f611a1b565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f5b9050611a39611a2b87838b612516565b62ffffff1688868686612d4e565b98975050505050505050565b6040516302a64b8360e21b81526000906001600160a01b037f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a31690630a992e0c90611a94903090600401613127565b602060405180830381865afa158015611ab1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128d9190613c09565b33600090815260016020526040812080548391908390611af6908490613628565b90915550506001600160a01b0383166000818152600160205260409081902080548501905551339060008051602061412c83398151915290611b39908690613038565b60405180910390a350600192915050565b8380421115611b6c57604051630407b05b60e31b815260040160405180910390fd5b6000611b7a89898989612ae0565b9050600060018287878760405160008152602001604052604051611ba19493929190613c2a565b6020604051602081039080840390855afa158015611bc3573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b031614611c0157604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b038116611c2857604051638baa579f60e01b815260040160405180910390fd5b611c338a8a8a612846565b50505050505050505050565b6060611c496121d1565b611cb460405180610140016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001606081525090565b611cc087890189613c52565b60ff166101008301526001600160a01b03166020820152611cdf612203565b606083019081526040808401928352306000908152600160205290812054608085015291519051611d119190836125c8565b60a08401819052909150600003611d2757600080fd5b611d4882604001518360800151611d3e919061363f565b8360a00151900490565b60c083015260608201516080830151611d6491611d3e9161363f565b60e08301526080820151611d799030906128ae565b611db27f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f83602001518460c001518561010001516129c8565b611deb7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f83602001518460e001518561010001516129c8565b60c082015160408301805191909103905260e08201516060830180519190910390526001600160a01b03861615611ec957611e2587612458565b6001600160a01b03168252604080516020601f870181900481028201810190925285815290869086908190840183828082843760009201919091525050505061012083015260405163109ea27d60e31b81526001600160a01b038716906384f513e890611e96908590600401613d4e565b600060405180830381600087803b158015611eb057600080fd5b505af1158015611ec4573d6000803e3d6000fd5b505050505b611edb826040015183606001516127fe565b8015611ef757611ef38260400151836060015161236d565b600b555b6040805160028082526060820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081611f0d57905050925060405180604001604052807f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f6001600160a01b031681526020018360c0015181525083600081518110611f8b57611f8b6139e6565b602002602001018190525060405180604001604052807f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031681526020018360e0015181525083600181518110611feb57611feb6139e6565b602002602001018190525081602001516001600160a01b0316336001600160a01b03167fd175a80c109434bb89948928ab2475a6647c94244cb70002197896423c8833638460c001518560e0015186608001516040516111c1939291906137f8565b600954600a54600091907f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f6001600160a01b039081169087161483816120b3577f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f6120d5565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f5b90506120f36120e5878a84612516565b62ffffff168886868661290d565b5098975050505050505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b1790529051600091606091839182916001600160a01b0387169161214891613d81565b600060405180830381855afa9150503d8060008114612183576040519150601f19603f3d011682016040523d82523d6000602084013e612188565b606091505b509150915081156121b4576001818060200190518101906121a99190613de5565b935093505050915091565b600060405180602001604052806000815250935093505050915091565b6002600854036121fc5760405162461bcd60e51b81526004016121f390613e20565b60405180910390fd5b6002600855565b6000807f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b6001600160a01b031663f7888aec7f000000000000000000000000b5bedd42000b71fdde22d3ee8a79bd49a568fc8f306040518363ffffffff1660e01b8152600401612274929190613e5b565b602060405180830381865afa158015612291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b59190613e81565b604051633de222bb60e21b81529092506001600160a01b037f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b169063f7888aec90612326907f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f903090600401613e5b565b602060405180830381865afa158015612343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123679190613e81565b90509091565b60006001600160801b0383111561239757604051631a93c68960e11b815260040160405180910390fd5b6001600160801b038211156123bf57604051631a93c68960e11b815260040160405180910390fd5b610b976123cc838561363f565b70ffffffffffffffffffffffffffffffffff811160071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1781811c620100000160b5600192831c1b0260121c80830401811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b60006001600160a01b03821615612512576001600160a01b038216331461251257604051632af3bd5560e21b81526001600160a01b037f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a3169063abcef554906124c5903390600401613127565b602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125069190613eb5565b61251257506000919050565b5090565b6000612533848484604051806020016040528060008152506118e5565b949350505050565b60008083600003612551575060009050806125bd565b848610612589576125826125658688613628565b61256f908a61363f565b61257d620186a0600261363f565b900490565b90506125bd565b600083612596868961363f565b6125a0919061368c565b90506125b96125af828a613628565b61256f908b61363f565b9250505b965096945050505050565b600080600054905060007f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a36001600160a01b0316634ccb20c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612630573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126549190613ee1565b600b546001600160a01b038216151594509091508015612797578315612791578460000361268957612686878761236d565b94505b8085111561278c57600061269b611a45565b62ffffff1690506000816126af8489613628565b6126b9908761363f565b6126c3919061363f565b905060006126d1848461363f565b886126df85620186a0613628565b6126e9919061363f565b6126f3919061365e565b90506000612701828461368c565b905080156127875761271386826127a1565b604051631087d04360e31b81526001600160a01b0387169063843e82189061274690600190309086908a90600401613f17565b600060405180830381600087803b15801561276057600080fd5b505af1158015612774573d6000803e3d6000fd5b505050508087612784919061365e565b96505b505050505b612797565b6000600b555b5050935093915050565b806000808282546127b2919061365e565b90915550506001600160a01b0382166000818152600160205260408082208054850190555160008051602061412c833981519152906127f2908590613038565b60405180910390a35050565b600a81905560098290556040517fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a9061283a90849084906130b5565b60405180910390a15050565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906128a1908590613038565b60405180910390a3505050565b6001600160a01b038216600090815260016020526040812080548392906128d6908490613628565b90915550506000805482900381556040516001600160a01b0384169060008051602061412c833981519152906127f2908590613038565b6000808560000361292157600091506129be565b600061293088620186a0613628565b61293a908861363f565b9050612952612949898961363f565b620186a0900490565b9150831561298d5780612968620186a08861363f565b612972919061365e565b61297c868361363f565b612986919061368c565b92506129bc565b8061299b620186a08761363f565b6129a5919061365e565b6129af878361363f565b6129b9919061368c565b92505b505b9550959350505050565b8060ff16600003612a5a576040516317d5759960e31b81526001600160a01b037f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b169063beabacc890612a2390879087908790600401613f61565b600060405180830381600087803b158015612a3d57600080fd5b505af1158015612a51573d6000803e3d6000fd5b50505050612ada565b604051636cb568c160e01b81526001600160a01b037f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b1690636cb568c190612aac908790879087908790600401613f7c565b600060405180830381600087803b158015612ac657600080fd5b505af1158015611270573d6000803e3d6000fd5b50505050565b6000612aea61127a565b6001600160a01b038616600090815260036020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c992899289928992909190612b3883613fb1565b9190505587604051602001612b5296959493929190613fcb565b60405160208183030381529060405280519060200120604051602001612b7992919061401a565b604051602081830303815290604052805190602001209050949350505050565b600080612ba68484612e09565b9050846001600160a01b0316816001600160a01b031603612bda576001600160a01b03811615612bda576001915050610b97565b600080866001600160a01b0316631626ba7e60e01b8787604051602401612c0292919061404b565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612c409190613d81565b600060405180830381855afa9150503d8060008114612c7b576040519150601f19603f3d011682016040523d82523d6000602084013e612c80565b606091505b5091509150818015612c93575080516020145b8015612cba57508051630b135d3f60e11b90612cb89083016020908101908401613e81565b145b979650505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6004604051612cf791906140dd565b604051908190038120612d3392917fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc690469030906020016140e9565b60405160208183030381529060405280519060200120905090565b600084600003612d605750600061197d565b8115612dbb57612d7386620186a0613628565b612d7d8686613628565b612d87919061363f565b620186a0612d95878661363f565b612d9f919061363f565b612da9919061368c565b612db490600161365e565b905061197d565b612dc886620186a0613628565b612dd28685613628565b612ddc919061363f565b620186a0612dea878761363f565b612df4919061363f565b612dfe919061368c565b610a1090600161365e565b60008151604114612e1c5750600061055b565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612e62576000935050505061055b565b60018682858560405160008152602001604052604051612e859493929190613c2a565b6020604051602081039080840390855afa158015612ea7573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6001600160e01b031981165b8114612ed357600080fd5b50565b803561055b81612ebc565b600060208284031215612ef657612ef6600080fd5b60006125338484612ed6565b8015155b82525050565b6020810161055b8284612f02565b60008083601f840112612f2f57612f2f600080fd5b50813567ffffffffffffffff811115612f4a57612f4a600080fd5b602083019150836001820283011115612f6557612f65600080fd5b9250929050565b60006001600160a01b03821661055b565b612ec881612f6c565b803561055b81612f7d565b60008060008060008060808789031215612fad57612fad600080fd5b863567ffffffffffffffff811115612fc757612fc7600080fd5b612fd389828a01612f1a565b96509650506020612fe689828a01612f86565b9450506040612ff789828a01612f86565b935050606087013567ffffffffffffffff81111561301757613017600080fd5b61302389828a01612f1a565b92509250509295509295509295565b80612f06565b6020810161055b8284613032565b60005b83811015613061578181015183820152602001613049565b83811115612ada5750506000910152565b600061307c825190565b808452602084019350613093818560208601613046565b601f01601f19169290920192915050565b60208082528101610b978184613072565b604081016130c38285613032565b610b976020830184613032565b80612ec8565b803561055b816130d0565b600080604083850312156130f7576130f7600080fd5b60006131038585612f86565b9250506020613114858286016130d6565b9150509250929050565b612f0681612f6c565b6020810161055b828461311e565b60008060006060848603121561314d5761314d600080fd5b60006131598686612f86565b935050602061316a86828701612f86565b925050604061317b868287016130d6565b9150509250925092565b80516040830190613196848261311e565b506020820151612ada6020850182613032565b6040810161055b8284613185565b60008060008060008060a087890312156131d3576131d3600080fd5b60006131df8989612f86565b96505060206131f089828a01612f86565b955050604061320189828a016130d6565b945050606061321289828a016130d6565b935050608087013567ffffffffffffffff81111561301757613017600080fd5b60ff8116612f06565b6020810161055b8284613232565b6000613255838361311e565b505060200190565b6000613267825190565b80845260209384019383018060005b8381101561329b57815161328a8882613249565b975060208301925050600101613276565b509495945050505050565b60208082528101610b97818461325d565b6000602082840312156132cc576132cc600080fd5b60006125338484612f86565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715613314576133146132d8565b6040525050565b600061332660405190565b905061333282826132ee565b919050565b600067ffffffffffffffff821115613351576133516132d8565b601f19601f83011660200192915050565b82818337506000910152565b600061338161337c84613337565b61331b565b90508281526020810184848401111561339c5761339c600080fd5b6133a7848285613362565b509392505050565b600082601f8301126133c3576133c3600080fd5b813561253384826020860161336e565b600080600080608085870312156133ec576133ec600080fd5b60006133f88787612f86565b945050602061340987828801612f86565b935050604061341a87828801612f86565b925050606085013567ffffffffffffffff81111561343a5761343a600080fd5b613446878288016133af565b91505092959194509250565b62ffffff8116612f06565b6020810161055b8284613452565b60008060006060848603121561348357613483600080fd5b600061348f8686612f86565b93505060206134a0868287016130d6565b925050604061317b86828701612f86565b61ffff8116612f06565b6020810161055b82846134b1565b60ff8116612ec8565b803561055b816134c9565b600080600080600080600060e0888a0312156134fb576134fb600080fd5b60006135078a8a612f86565b97505060206135188a828b01612f86565b96505060406135298a828b016130d6565b955050606061353a8a828b016130d6565b945050608061354b8a828b016134d2565b93505060a061355c8a828b016130d6565b92505060c061356d8a828b016130d6565b91505092959891949750929550565b6000806040838503121561359257613592600080fd5b600061359e8585612f86565b925050602061311485828601612f86565b60006135bb8383613185565b505060400190565b60006135cd825190565b80845260209384019383018060005b8381101561329b5781516135f088826135af565b9750602083019250506001016135dc565b60208082528101610b9781846135c3565b634e487b7160e01b600052601160045260246000fd5b60008282101561363a5761363a613612565b500390565b600081600019048311821515161561365957613659613612565b500290565b6000821982111561367157613671613612565b500190565b634e487b7160e01b600052601260045260246000fd5b60008261369b5761369b613676565b500490565b80516000906102008401906136b5858261311e565b5060208301516136c8602086018261311e565b5060408301516136db6040860182613032565b5060608301516136ee6060860182613032565b5060808301516137016080860182613032565b5060a083015161371460a0860182613032565b5060c083015161372760c0860182613032565b5060e083015161373a60e0860182613032565b5061010083015161374f610100860182613032565b50610120830151613764610120860182613032565b50610140830151613779610140860182613032565b5061016083015161378e610160860182613032565b506101808301516137a3610180860182613032565b506101a08301516137b86101a0860182613032565b506101c08301516137cd6101c0860182613452565b506101e08301518482036101e086015261197d8282613072565b60208082528101610b9781846136a0565b606081016138068286613032565b6138136020830185613032565b6125336040830184613032565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061384a57607f821691505b60208210810361385c5761385c613820565b50919050565b60008060006060848603121561387a5761387a600080fd5b60006138868686612f86565b935050602061389786828701612f86565b925050604061317b868287016134d2565b80516000906102008401906138bd858261311e565b5060208301516138d0602086018261311e565b5060408301516138e3604086018261311e565b5060608301516138f6606086018261311e565b5060808301516139096080860182613032565b5060a083015161391c60a0860182613032565b5060c083015161392f60c0860182613032565b5060e083015161394260e0860182613032565b50610100830151613957610100860182613032565b5061012083015161396c610120860182613032565b50610140830151613981610140860182613032565b50610160830151613996610160860182613032565b506101808301516139ab610180860182613032565b506101a08301516139c06101a0860182613452565b506101c08301516137cd6101c0860182613232565b60208082528101610b9781846138a8565b634e487b7160e01b600052603260045260246000fd5b600061055b613a088381565b90565b612f06816139fc565b60808101613a228287613032565b613a2f6020830186613a0b565b613a3c6040830185613a0b565b61197d6060830184613032565b60808101613a578287613a0b565b613a646020830186613032565b613a716040830185613032565b61197d6060830184613a0b565b80516000906101c0840190613a93858261311e565b506020830151613aa6602086018261311e565b506040830151613ab9604086018261311e565b506060830151613acc606086018261311e565b506080830151613adf6080860182613032565b5060a0830151613af260a0860182613032565b5060c0830151613b0560c0860182613032565b5060e0830151613b1860e0860182613032565b50610100830151613b2d610100860182613032565b50610120830151613b42610120860182613032565b50610140830151613b57610140860182613032565b50610160830151613b6c610160860182613452565b50610180830151613b81610180860182613232565b506101a08301518482036101a086015261197d8282613072565b60208082528101610b978184613a7e565b60a08101613bba828861311e565b613bc7602083018761311e565b613bd4604083018661311e565b613be1606083018561311e565b8181036080830152612cba8184613072565b62ffffff8116612ec8565b805161055b81613bf3565b600060208284031215613c1e57613c1e600080fd5b60006125338484613bfe565b60808101613c388287613032565b613c456020830186613232565b613a3c6040830185613032565b60008060408385031215613c6857613c68600080fd5b6000613c748585612f86565b9250506020613114858286016134d2565b8051600090610140840190613c9a858261311e565b506020830151613cad602086018261311e565b506040830151613cc06040860182613032565b506060830151613cd36060860182613032565b506080830151613ce66080860182613032565b5060a0830151613cf960a0860182613032565b5060c0830151613d0c60c0860182613032565b5060e0830151613d1f60e0860182613032565b50610100830151613d34610100860182613232565b5061012083015184820361012086015261197d8282613072565b60208082528101610b978184613c85565b6000613d69825190565b613d77818560208601613046565b9290920192915050565b6000610b978284613d5f565b6000613d9b61337c84613337565b905082815260208101848484011115613db657613db6600080fd5b6133a7848285613046565b600082601f830112613dd557613dd5600080fd5b8151612533848260208601613d8d565b600060208284031215613dfa57613dfa600080fd5b815167ffffffffffffffff811115613e1457613e14600080fd5b61253384828501613dc1565b6020808252810161055b81601f81527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00602082015260400190565b60408101613e69828561311e565b610b97602083018461311e565b805161055b816130d0565b600060208284031215613e9657613e96600080fd5b60006125338484613e76565b801515612ec8565b805161055b81613ea2565b600060208284031215613eca57613eca600080fd5b60006125338484613eaa565b805161055b81612f7d565b600060208284031215613ef657613ef6600080fd5b60006125338484613ed6565b600061ffff821661055b565b612f0681613f02565b60a08101613f258287613f0e565b613f32602083018661311e565b613f3f6040830185613032565b613f4c6060830184613032565b81810360808301526000815260208101610a10565b60608101613f6f828661311e565b613813602083018561311e565b60808101613f8a828761311e565b613f97602083018661311e565b613fa46040830185613032565b61197d6060830184613232565b60006000198203613fc457613fc4613612565b5060010190565b60c08101613fd98289613032565b613fe6602083018861311e565b613ff3604083018761311e565b6140006060830186613032565b61400d6080830185613032565b612cba60a0830184613032565b61190160f01b815260020160006140318285613032565b6020820191506140418284613032565b5060200192915050565b604081016140598285613032565b81810360208301526125338184613072565b6000815461407881613836565b60018216801561408f57600181146140a4576140d4565b60ff19831686528115158202860193506140d4565b60008581526020902060005b838110156140cc578154888201526001909101906020016140b0565b838801955050505b50505092915050565b6000610b97828461406b565b60a081016140f78288613a0b565b6141046020830187613032565b6141116040830186613a0b565b61411e6060830185613032565b610a10608083018461311e56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209d4df6080488c965e85c8d46a748d3e9c678e134194f5c0fad6ef2903c78217b64736f6c634300080f0033" + }, + { + "address": "0x344db8ae392139d1125b25cb07832ffe95e2146e", + "nonce": 39, + "balance": "0x0000000000000000000000000000000000000000000000000006ca6bba4814a4", + "code": "0x" + }, + { + "address": "0x224d8fd7ab6ad4c6eb4611ce56ef35dec2277f03", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000086c59092e3283f6185", + "code": "0x6080604052600436106100f75760003560e01c8063715018a61161008a578063d0e30db011610059578063d0e30db01461039b578063dd5f0f68146103a3578063dd62ed3e146103d6578063f2fde38b1461041157610106565b8063715018a6146103075780638da5cb5b1461031c57806395d89b411461034d578063a9059cbb1461036257610106565b806329c80c2f116100c657806329c80c2f1461024c5780632e1a7d4d1461027f578063313ce567146102a957806370a08231146102d457610106565b806306fdde031461010b578063095ea7b31461019557806318160ddd146101e257806323b872dd1461020957610106565b3661010657610104610444565b005b600080fd5b34801561011757600080fd5b5061012061049b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015a578181015183820152602001610142565b50505050905090810190601f1680156101875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101a157600080fd5b506101ce600480360360408110156101b857600080fd5b506001600160a01b0381351690602001356104cb565b604080519115158252519081900360200190f35b3480156101ee57600080fd5b506101f7610531565b60408051918252519081900360200190f35b34801561021557600080fd5b506101ce6004803603606081101561022c57600080fd5b506001600160a01b03813581169160208101359091169060400135610537565b34801561025857600080fd5b506101ce6004803603602081101561026f57600080fd5b50356001600160a01b03166107f6565b34801561028b57600080fd5b50610104600480360360208110156102a257600080fd5b503561080b565b3480156102b557600080fd5b506102be6108a9565b6040805160ff9092168252519081900360200190f35b3480156102e057600080fd5b506101f7600480360360208110156102f757600080fd5b50356001600160a01b03166108ae565b34801561031357600080fd5b506101046108c0565b34801561032857600080fd5b50610331610936565b604080516001600160a01b039092168252519081900360200190f35b34801561035957600080fd5b50610120610945565b34801561036e57600080fd5b506101ce6004803603604081101561038557600080fd5b506001600160a01b038135169060200135610966565b610104610444565b3480156103af57600080fd5b50610104600480360360208110156103c657600080fd5b50356001600160a01b031661097a565b3480156103e257600080fd5b506101f7600480360360408110156103f957600080fd5b506001600160a01b0381358116916020013516610a12565b34801561041d57600080fd5b506101046004803603602081101561043457600080fd5b50356001600160a01b0316610a2f565b336000818152600360209081526040918290208054349081019091556002805482019055825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6040518060400160405280601481526020017314dd185c99d85d1948115d1a195c8815985d5b1d60621b81525081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60025481565b600060026001541415610591576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556001600160a01b0384166000908152600360205260409020548211156105bb57600080fd5b6001600160a01b03841633148015906105f957506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b15610659576001600160a01b038416600090815260046020908152604080832033845290915290205482111561062e57600080fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600090815260036020908152604080832080548790039055928616825260059052205460ff16156106ed576001600160a01b038084166000818152600360209081526040918290208054870190558151868152915192938816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a36107e9565b6002805483900390556040516000906001600160a01b0385169084908381818185875af1925050503d8060008114610741576040519150601f19603f3d011682016040523d82523d6000602084013e610746565b606091505b505090508061079c576040805162461bcd60e51b815260206004820152601960248201527f53474554483a206661696c656420746f207472616e7366657200000000000000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b03167fb4a87134099d10c48345145381989042ab07dc53e6e62a6511fca55438562e26856040518082815260200191505060405180910390a3505b5060018080559392505050565b60056020526000908152604090205460ff1681565b3360009081526003602052604090205481111561082757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f19350505050158015610866573d6000803e3d6000fd5b5060028054829003905560408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b601281565b60036020526000908152604090205481565b6108c8610b43565b6001600160a01b03166108d9610936565b6001600160a01b031614610934576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b6000546001600160a01b031690565b604051806040016040528060058152602001640a68e8aa8960db1b81525081565b6000610973338484610537565b9392505050565b610982610b43565b6001600160a01b0316610993610936565b6001600160a01b0316146109ee576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b600460209081526000928352604080842090915290825290205481565b610a37610b43565b6001600160a01b0316610a48610936565b6001600160a01b031614610aa3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610ae85760405162461bcd60e51b8152600401808060200182810382526026815260200180610b486026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212200eedc0965a7869c654597a72486e6eb92d4507f2e79717e9d18d1591c6362bbc64736f6c63430007060033" + }, + { + "address": "0x7928e4e69697b1827b450f806ebdc746b932b052", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405260043610156100e6575b361561001957600080fd5b6065546040516315ab88c960e31b81526001600160a01b03916020908290600490829086165afa80156100da57829160009161009c575b5016331490811561008e575b501561006457005b60405162461bcd60e51b81526020600482015260026024820152616e7760f01b6044820152606490fd5b90506071541633143861005c565b91506020823d82116100d2575b816100b6602093836140c2565b810103126100cf57506100c982916143fb565b38610050565b80fd5b3d91506100a9565b6040513d6000823e3d90fd5b6000803560e01c80630280545414613f0f5780630d172a0114613e1b5780630da67fe714613d5a5780631848effa14613d315780631c27b53e14613cc757806326fdad2e14613b2457806330a66e1514613a315780633659cfe6146137155780633a336ee11461355f57806344c5999e14613536578063485cc955146133da5780634979e371146132b55780634b54b43e1461327c5780634e34f26b1461323d5780634f1ef28614612ec757806352d1902d14612e0357806355d4853114612c165780635760f2e314612af15780635e6b57dd146129d5578063684ae9e51461298a5780637734bd4614612928578063791b98bc146128ff5780637c7c829d146128335780638327f0e11461268657806388e4048e1461265d5780638c64ea4a146126005780639403b634146125b0578063962cfcbd146125925780639e9f5e2d146124625780639ef421b6146123fd578063a42dce80146122d8578063ad38fba5146121f8578063b6f3e08714611e35578063b91ac78814611d89578063bb04869d1461139a578063bdf391cc1461136b578063c0d7865514611246578063c0da840d14611121578063c415b95c146110f8578063d355a9b414611080578063d51d62ab14611057578063dda4079714610ed6578063e5bc030314610ead578063f3b39b6c146105e0578063f887ea40146105b7578063f9b6117f1461058e578063fcaaa10d146104695763fcc5a98014610302575061000e565b346100cf5760208060031936011261046557600461031e613fc9565b60655460405162435da560e01b81526001600160a01b03949093909182918591829088165afa801561041d5784938691610428575b508190602460405180978193637be53ca160e01b8352336004840152165afa801561041d577f72b4ed62e1ee37f0e29a1c7e7361816f24dfe3452f9ac21e3f3074f7668538db946103ac9287926103f0575b5050614427565b607580548284166001600160a01b031982161790915560408051338152939091166001600160a01b0390811660208501529091169082015280606081015b0390a180f35b61040f9250803d10610416575b61040781836140c2565b81019061440f565b38806103a5565b503d6103fd565b6040513d87823e3d90fd5b809450828092503d831161045e575b61044181836140c2565b8101031261045a578061045485946143fb565b90610353565b8480fd5b503d610437565b5080fd5b50346100cf57602080600319360112610465576004610486613fc9565b60655460405162435da560e01b81526001600160a01b03949093909182918591829088165afa801561041d5784938691610555575b508190602460405180978193637be53ca160e01b8352336004840152165afa801561041d577fc97a4232c1a0d14b35d5a822f82fefb6d78599a212c862721fc754f7b60b2aab946105139287926103f0575050614427565b606880548284166001600160a01b031982161790915560408051338152939091166001600160a01b0390811660208501529091169082015280606081016103ea565b809450828092503d8311610587575b61056e81836140c2565b8101031261045a578061058185946143fb565b906104bb565b503d610564565b50346100cf57806003193601126100cf576071546040516001600160a01b039091168152602090f35b50346100cf57806003193601126100cf576072546040516001600160a01b039091168152602090f35b50346100cf5760a03660031901126100cf576105fa613fc9565b6084356001600160401b038111610dc1576106199036906004016140fe565b9061062f60018060a01b03607254163314614537565b6065546106469084906001600160a01b031661459f565b6024358452606e6020526106f060ff6040862060405161066581614042565b8154815260018201546001600160a01b0390811660208301526002830154811660408301526003830154908116606083015260a090811c909316151560808201819052600483015493820193909352600582015460c0820152600682015460e08201526007820154610100820152600882015461012082015260099091015461014090910152614568565b6044351580158091610ea2575b61070690614b05565b610711602435614f3b565b606081015190939061072d906001600160a01b03161515614b36565b602084015160408501516001600160a01b039081169488948594939092169284919083610e39575b606435610dc5575b333b15610dc1576107a991839160405193849283926321326a7360e11b84528960048501528c60248501526044356044850152606435606485015260a0608485015260a4840191614b67565b038183335af18015610db657610da2575b5050610cf3575b5050606435610c4e575b5050606554604051632630c12f60e01b81529290602090849060049082906001600160a01b03165afa928315610c03578493610c0e575b50602082810151604051634bb3415360e01b81526001600160a01b0391821660048201529485916024918391165afa928315610c03578493610bcf575b5060675460405163044e9a1b60e01b81526024803560048301528101859052936001600160a01b039091169190602085604481865afa948515610bc4578695610b8a575b5060e0906084604051809581936379f45a07861b835260243560048401526044356024840152606435604484015260648301525afa801561041d57859486938780968194829383908492610b1d575b50899082819060018060a01b0360208701511687526073602052604087206108fb8b82546144ad565b90556040868101516001600160a01b03168852607360205287208054610922908a906144ad565b905560208601516001600160a01b038d8116911603610ac55750507f20f7411220a575a66d53613925a30fcd2faeb040572d77208808a70a0de8f0b791610968916144ad565b915b6024358552606f60205260408520906109c360026109898685546144ad565b93848155016109998382546144ad565b80915560405193849360243597859094939260609260808301968352602083015260408201520152565b0390a2606001516001600160a01b0316803b15610465576040516340c10f1960e01b81526001600160a01b0387166004820152602481018a905291908290604490829084905af18015610aba57610aa2575b5060609750604051926044358452606435602085015287604085015288840152608083015260018060a01b03841660a08301528460c083015260e08201527f1ce85287e0edb2517f46ae15d2959b2f7d62f2794db98cf303cf6cfe9795d2086101006024359360018060a01b031692a3604080519384526001600160a01b03919091166020840152820152f35b610aac899161405e565b610ab65787610a15565b8780fd5b6040513d8b823e3d90fd5b604086015191947f20f7411220a575a66d53613925a30fcd2faeb040572d77208808a70a0de8f0b794909350916001600160a01b038d8116911614610b0c575b505061096a565b610b1692506144ad565b8a38610b05565b985050509650505094505060e0823d60e011610b82575b81610b4160e093836140c2565b8101031261045a578151610b57602084016143fb565b946040840151938760608201519660808301519460c060a085015194015190999780999694906108d2565b3d9150610b34565b9094506020813d602011610bbc575b81610ba6602093836140c2565b81010312610bb757519360e0610883565b600080fd5b3d9150610b99565b6040513d88823e3d90fd5b9092506020813d602011610bfb575b81610beb602093836140c2565b81010312610bb75751913861083f565b3d9150610bde565b6040513d86823e3d90fd5b9092506020813d602011610c46575b81610c2a602093836140c2565b81010312610c4257610c3b906143fb565b9138610802565b8380fd5b3d9150610c1d565b906020610c60602493606435906144ad565b91604051938480926370a0823160e01b82523060048301525afa91821561041d578592610cbf575b5011610c955738806107cb565b60405162461bcd60e51b8152602060048201526002602482015261747360f01b6044820152606490fd5b9091506020813d602011610ceb575b81610cdb602093836140c2565b81010312610bb757519038610c88565b3d9150610cce565b6020610d04602493604435906144ad565b91604051938480926370a0823160e01b82523060048301525afa918215610d97578792610d63575b5011610d395738806107c1565b60405162461bcd60e51b8152602060048201526002602482015261746960f01b6044820152606490fd5b9091506020813d602011610d8f575b81610d7f602093836140c2565b81010312610bb757519038610d2c565b3d9150610d72565b6040513d89823e3d90fd5b610dab9061405e565b610ab65787386107ba565b6040513d84823e3d90fd5b8280fd5b6040516370a0823160e01b81523060048201529096506020816024818b5afa908115610e2e578391610df9575b509561075d565b9250506020823d602011610e26575b81610e15602093836140c2565b81010312610bb75789915138610df2565b3d9150610e08565b6040513d85823e3d90fd5b6040516370a0823160e01b8152306004820152909550602081602481885afa908115610e2e578391610e6d575b5094610755565b9250506020823d602011610e9a575b81610e89602093836140c2565b81010312610bb75789915138610e66565b3d9150610e7c565b5060643515156106fd565b50346100cf57806003193601126100cf576067546040516001600160a01b039091168152602090f35b50346100cf5760403660031901126100cf57610ef0613fc9565b60655460405162435da560e01b8152602092602435926001600160a01b03929085908290600490829087165afa908115610bc45783918691889161101c575b50602460405180948193636606a87360e11b8352336004840152165afa908115610bc4578691610fff575b5015610fd557917fafbbbdf627e5c98de87b970491cf6c1a475e060b8f4f76619bcec51f7f8b775493916060931680865260738352610f9f8260408820541015614463565b8086526073835260408620610fb5838254614502565b9055610fc2823383614ba9565b604051923384528301526040820152a180f35b60405162461bcd60e51b81526004810185905260026024820152611bdd60f21b6044820152606490fd5b6110169150853d87116104165761040781836140c2565b38610f5a565b92505081813d8311611050575b61103381836140c2565b8101031261104c578461104684926143fb565b38610f2f565b8580fd5b503d611029565b50346100cf57806003193601126100cf576075546040516001600160a01b039091168152602090f35b50346100cf5760203660031901126100cf576040610100916004358152606a60205220805490600181015490600281015460038201546004830154906005840154926007600686015495015495604051978852602088015260408701526060860152608085015260a084015260c083015260e0820152f35b50346100cf57806003193601126100cf576069546040516001600160a01b039091168152602090f35b50346100cf5760208060031936011261046557600461113e613fc9565b60655460405162435da560e01b81526001600160a01b03949093909182918591829088165afa801561041d578493869161120d575b508190602460405180978193637be53ca160e01b8352336004840152165afa801561041d577fb4de3a2a83ff870b8b12748946c690b64e45c9e45c04e72dd42a7942b5134e64946111cb9287926103f0575050614427565b607180548284166001600160a01b031982161790915560408051338152939091166001600160a01b0390811660208501529091169082015280606081016103ea565b809450828092503d831161123f575b61122681836140c2565b8101031261045a578061123985946143fb565b90611173565b503d61121c565b50346100cf57602080600319360112610465576004611263613fc9565b60655460405162435da560e01b81526001600160a01b03949093909182918591829088165afa801561041d5784938691611332575b508190602460405180978193637be53ca160e01b8352336004840152165afa801561041d577f8799a8185db1502b64c132a0d9e2dfe4bc81fa8902b7448833734362de2caada946112f09287926103f0575050614427565b607280548284166001600160a01b031982161790915560408051338152939091166001600160a01b0390811660208501529091169082015280606081016103ea565b809450828092503d8311611364575b61134b81836140c2565b8101031261045a578061135e85946143fb565b90611298565b503d611341565b50346100cf5760203660031901126100cf5761016061138b600435614f3b565b611398604051809261412b565bf35b50346100cf5760a03660031901126100cf57600435906001600160a01b03821682036100cf576064351515606435036100cf576084356001600160401b03811161046557906113ee600492369084016140fe565b909361140560018060a01b03607254163314614537565b6065546001600160a01b0390811693906114219083168561459f565b6024358152606e6020526114c86040822060405161143e81614042565b8154815260018201546001600160a01b0390811660208301526002830154811660408301526003830154908116606083015260a090811c60ff161515608083018190528984015491830191909152600583015460c0830152600683015460e08301526007830154610100830152600883015461012083015260099092015461014090910152614568565b6114d56044351515614b05565b60206114e2602435614f3b565b60608101519095906114fe906001600160a01b03161515614b36565b604051632630c12f60e01b815296879182905afa948515611d40578195611d4d575b50602084810151604051634bb3415360e01b81526001600160a01b0391821660048201529687916024918391165afa948515611d40578195611d0c575b5060675460405163044e9a1b60e01b8152602480356004830152810187905291906001600160a01b0316602083604481845afa928315610db6578293611cd8575b5060a0604051809263fb13d65560e01b825281806115d68c604435602435600485016040919493926060820195825260208201520152565b03915afa908115610db65782978399849785938695611c82575b5060608a01516001600160a01b0316333b15611c7e5790869161163b604051948593849362b501c160e71b855260048501526044356024850152606060448501526064840191614b67565b038183335af1801561041d57611c6b575b5060608801516001600160a01b0316803b1561045a57848091602460405180948193630852cd8d60e31b835260443560048401525af1801561041d57908591611c57575b50506004906116a0602435614ecd565b60208a81015160405163313ce56760e01b815294859182906001600160a01b03165afa928315610bc4579060049392918793611c36575b5060408b810151905163313ce56760e01b81529460209186919082906001600160a01b03165afa938415610d97578794611c05575b5086928151602083015190818111611bd2575b505087916060604082015191015190818111611b8f575b5050601260ff8216810311611b7b5761175760ff61175d9216601203614b88565b8d614b96565b93601260ff8216810311611b7b57916117a061179b928f8361179561179b9261178f60ff6117a69b9a16601203614b88565b90614b96565b96614bea565b6144ad565b94614bea565b11611b515761182c6118257f20f7411220a575a66d53613925a30fcd2faeb040572d77208808a70a0de8f0b79260018060a01b0360208b01511686526073602052604086206117f68282546144ad565b905560408a8101516001600160a01b0316875260736020528620805461181d9087906144ad565b90558a6144ad565b928a6144ad565b916024358452606f60205260408420906118b361188b61188584549361185481861015614ca5565b61187d8860028801966118758489549261187085851015614ca5565b614502565b809955614502565b80955561450f565b9561450f565b9160405193849360243597859094939260609260808301968352602083015260408201520152565b0390a28561196a575b50611942938680611946575b5050604080518681526020810188905260443591810191909152606081018490526080810191909152602435916001600160a01b0316907f202fcc956f1a9bf63ace8fb75373910b54ee3eaf3cbaa9c54afe1c700f3446709060a090a3604051938493846040919493926060820195825260208201520152565b0390f35b60409091015161196391906001600160a01b038581169116614ba9565b38866118c8565b60643580611ac8575b15611aa0576065546040516315ab88c960e31b815290602090829060049082906001600160a01b03165afa908115610db6578291611a66575b506001600160a01b0316803b1561046557818091602460405180948193632e1a7d4d60e01b83528c60048401525af18015610db657908291611a52575b508060206040516119f98161408c565b82815201886001600160a01b0387165af1611a126142f7565b5015611a2357611942935b936118bc565b60405162461bcd60e51b81526020600482015260076024820152660cae4e45acae8d60cb1b6044820152606490fd5b611a5b9061405e565b6100cf5780386119e9565b90506020813d602011611a98575b81611a81602093836140c2565b8101031261046557611a92906143fb565b386119ac565b3d9150611a74565b5060208401516119429490611ac39087906001600160a01b038681169116614ba9565b611a1d565b506020858101516065546040516315ab88c960e31b81526001600160a01b03928316939092909183916004918391165afa908115610e2e578391611b17575b506001600160a01b031614611973565b90506020813d602011611b49575b81611b32602093836140c2565b81010312610dc157611b43906143fb565b38611b07565b3d9150611b25565b60405162461bcd60e51b81526020600482015260026024820152611a5b60f21b6044820152606490fd5b634e487b7160e01b88526011600452602488fd5b611b9a929350614502565b60ff851660120360128111611bbe579061178f611bb692614b88565b903880611736565b634e487b7160e01b89526011600452602489fd5b611bdd929550614502565b601260ff8516810311611b7b57611bfd9061178f60ff8616601203614b88565b92388061171f565b611c2891945060203d602011611c2f575b611c2081836140c2565b810190614494565b923861170c565b503d611c16565b611c5091935060203d602011611c2f57611c2081836140c2565b91386116d7565b611c609061405e565b610c42578338611690565b611c779094919461405e565b923861164c565b8680fd5b98509350995097505060a0853d60a011611cd0575b81611ca460a093836140c2565b810103126104655784516020860151976040870151996080606089015198015192999a979293386115f0565b3d9150611c97565b9092506020813d602011611d04575b81611cf4602093836140c2565b810103126104655751913861159e565b3d9150611ce7565b9094506020813d602011611d38575b81611d28602093836140c2565b8101031261045a5751933861155d565b3d9150611d1b565b50604051903d90823e3d90fd5b9094506020813d602011611d81575b81611d69602093836140c2565b8101031261045a57611d7a906143fb565b9338611520565b3d9150611d5c565b50346100cf5760203660031901126100cf576040610160916004358152606e6020522080549060018060a01b0390816001820154169180600283015416906003830154600484015460ff600586015492600687015494600788015496600960088a0154990154996040519b8c5260208c015260408b0152811660608a015260a01c161515608088015260a087015260c086015260e0850152610100840152610120830152610140820152f35b50346100cf5760403660031901126100cf57611e4f613fc9565b611e57613fdf565b60655460405162435da560e01b81526001600160a01b03916020919082908290600490829087165afa908115610bc4578391839188916121c1575b50602460405180948193637be53ca160e01b8352336004840152165afa8015610bc457611ec69187916121a4575b50614427565b8184169283151580612199575b1561216f57828116948587526074835260ff6040882054161561214457848752606c8352604087208688528352611f0e604088205415614463565b60405163313ce56760e01b8082529084816004818a5afa908115610aba5760129160ff918b91612127575b5016111590816120d1575b50156120a657606654604051630b04656760e21b81526001600160a01b039283166004820152929091166024830152909291908190849060449082908a9087165af1928315610bc457869361206f575b50606e606d5491858852606c8152604088208789528152826040892055606c81526040882086895281528260408920558288525260408620908155600360018201916bffffffffffffffffffffffff60a01b9286848254161790556002810187848254161790550191831690825416179055606d5490600019821461205b5760018201606d55604080516001600160a01b0392909216825260208201929092527feda679f3434de965730a28b8b694f2a348c09a2c1bb3e226633b6af24841adc19190a380f35b634e487b7160e01b85526011600452602485fd5b9080935081813d831161209f575b61208781836140c2565b8101031261104c57612098906143fb565b9138611f94565b503d61207d565b60405162461bcd60e51b815260048101849052600360248201526221646560e81b6044820152606490fd5b905060405190815283816004818a5afa90811561211c5760129160ff918a916120ff575b5016111538611f44565b6121169150863d8811611c2f57611c2081836140c2565b386120f5565b6040513d8a823e3d90fd5b61213e9150873d8911611c2f57611c2081836140c2565b38611f39565b60405162461bcd60e51b8152600481018490526003602482015262085cdd60ea1b6044820152606490fd5b60405162461bcd60e51b8152600481018390526002602482015261021360f41b6044820152606490fd5b508281161515611ed3565b6121bb9150833d85116104165761040781836140c2565b38611ec0565b92505081813d83116121f1575b6121d881836140c2565b8101031261104c57816121eb84926143fb565b38611e92565b503d6121ce565b50346100cf5760403660031901126100cf5780808080612216613fc9565b607054602435919061224b90336001600160a01b03918216149081156122ca575b81156122bc575b81156122ae575b50614cd6565b612256824711614d07565b826040516122638161408c565b525af161226e6142f7565b50156122775780f35b60405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b606954163314905038612245565b60685481163314915061223e565b607154811633149150612237565b50346100cf576020806003193601126104655760046122f5613fc9565b60655460405162435da560e01b81526001600160a01b03949093909182918591829088165afa801561041d57849386916123c4575b508190602460405180978193637be53ca160e01b8352336004840152165afa801561041d577f91a2027f9be8d0393543cba68b2cc24f8deb24954889f5ed7333057e9bd18647946123829287926103f0575050614427565b606980548284166001600160a01b031982161790915560408051338152939091166001600160a01b0390811660208501529091169082015280606081016103ea565b809450828092503d83116123f6575b6123dd81836140c2565b8101031261045a57806123f085946143fb565b9061232a565b503d6123d3565b50346100cf5760803660031901126100cf57612417613fdf565b6001600160a01b03906044358281168103610c42576124538361245f946070541633149081156122ca5781156122bc5781156122ae5750614cd6565b60643591600435614d4a565b80f35b50346100cf5760208060031936011261046557600461247f613fc9565b60655460405162435da560e01b81526001600160a01b03949093909182918591829088165afa801561041d5784938691612559575b508190602460405180968193637be53ca160e01b8352336004840152165afa90811561041d577f23f19f475473ae6d9f214c387c64591569144b4e69902cc30cd2af11badf3198946125126074936103ea9689916125425750614427565b83168652526040808520805460ff1916905580513381526001600160a01b03909216602083015290918291820190565b6121bb9150843d86116104165761040781836140c2565b809450828092503d831161258b575b61257281836140c2565b8101031261045a578061258585946143fb565b906124b4565b503d612568565b50346100cf57806003193601126100cf576020606d54604051908152f35b50346100cf5760203660031901126100cf5760a06125cf600435614ecd565b6080604051918051835260208101516020840152604081015160408401526060810151606084015201516080820152f35b50346100cf5760203660031901126100cf57600480358252606f602090815260409283902080546001820154600283015460038401549390950154865192835293820152938401929092526060830191909152608082015260a090f35b50346100cf57806003193601126100cf576066546040516001600160a01b039091168152602090f35b50346100cf576101203660031901126100cf576004356101003660231901126104655760655460405162435da560e01b81526020916001600160a01b03919083908290600490829086165afa90811561041d578291849187916127fc575b50602460405180948193637be53ca160e01b8352336004840152165afa801561041d576127179186916125425750614427565b828452606e8252604084209080600183015416151591826127ec575b5050156127c257606a9060c435926127606305f5e1008086111590816127b4575b816127a6575b50614463565b8452526040822090602435825560443560018301556064356002830155608435600383015560a4356004830155600582015560e435600682015560076101043591015580f35b90506101043511153861275a565b80915060e435111590612754565b6064906040519062461bcd60e51b8252600482015260036024820152621c1b9d60ea1b6044820152fd5b6002015416151590503880612733565b92505081813d831161282c575b61281381836140c2565b8101031261045a578261282683926143fb565b386126e4565b503d612809565b50346100cf577f56150ce04aef562b211a1147ad2dad770a18c937c2a5309f2a476929bbcb079761286336613faf565b61287b60018060a09695961b036070541633146144d0565b838552606f6020526128f9604086206128d56128cf60018301956128c78660038954966128aa85891015614463565b01956128bf8488549261187085851015614463565b809a55614502565b80945561450f565b9361450f565b93604051948594859094939260609260808301968352602083015260408201520152565b0390a280f35b50346100cf57806003193601126100cf576070546040516001600160a01b039091168152602090f35b50346100cf5760203660031901126100cf57604060c0916004358152606b6020522080549060018101549060028101546003820154906005600484015493015493604051958652602086015260408501526060840152608083015260a0820152f35b50346100cf5760403660031901126100cf5760406020916129a9613fc9565b6129b1613fdf565b6001600160a01b039182168352606c85528383209116825283522054604051908152f35b50346100cf576020806003193601126104655760046129f2613fc9565b60655460405162435da560e01b81526001600160a01b03949093909182918591829088165afa801561041d5784938691612ab8575b508190602460405180968193637be53ca160e01b8352336004840152165afa90811561041d577fb6354f95e228e831e2aa88313d16f7245c10fe5dd84d851209116c19f3e7e07194612a856074936103ea9689916125425750614427565b83168652526040808520805460ff1916600117905580513381526001600160a01b03909216602083015290918291820190565b809450828092503d8311612aea575b612ad181836140c2565b8101031261045a5780612ae485946143fb565b90612a27565b503d612ac7565b50346100cf57602080600319360112610465576004612b0e613fc9565b60655460405162435da560e01b81526001600160a01b03949093909182918591829088165afa801561041d5784938691612bdd575b508190602460405180978193637be53ca160e01b8352336004840152165afa801561041d577f888f67ba778372c27e79bbfc2b6a7933c7f94ac44ea6110df376637c513641e494612b9b9287926103f0575050614427565b607080548284166001600160a01b031982161790915560408051338152939091166001600160a01b0390811660208501529091169082015280606081016103ea565b809450828092503d8311612c0f575b612bf681836140c2565b8101031261045a5780612c0985946143fb565b90612b43565b503d612bec565b50346100cf576101803660031901126100cf576101603660231901126100cf5760655460405162435da560e01b81526001600160a01b03916020919082908290600490829087165afa908115610c0357839183918691612dcc575b50602460405180948193637be53ca160e01b8352336004840152165afa8015610c0357612ca49185916121a45750614427565b6004358352606e815260408320918060018401541615159081612dbc575b5015612d92575060e435612cf66305f5e100808311159081612d83575b81612d74575b81612d65575b81612d575750614463565b60a435801515809103610c425760038301805460ff60a01b191660a09290921b60ff60a01b1691909117905560c435600483015560058201556101043560068201556101243560078201556101443560088201556101643560099091015580f35b90506101643511153861275a565b80915061014435111590612ceb565b80915061012435111590612ce5565b80915061010435111590612cdf565b6064906040519062461bcd60e51b8252600482015260036024820152620dccaf60eb1b6044820152fd5b9050600283015416151538612cc2565b92505081813d8311612dfc575b612de381836140c2565b81010312610c425781612df684926143fb565b38612c71565b503d612dd9565b50346100cf57806003193601126100cf577f0000000000000000000000007928e4e69697b1827b450f806ebdc746b932b0526001600160a01b03163003612e5c5760206040516000805160206150258339815191528152f35b60405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608490fd5b5060403660031901126100cf57612edc613fc9565b9060249182356001600160401b038111610dc15736602382011215610dc157806004013590612f0a826140e3565b612f1760405191826140c2565b8281526020928382019236888383010111611c7e57818792898793018637830101526001600160a01b037f0000000000000000000000007928e4e69697b1827b450f806ebdc746b932b052811690612f71308314156141a5565b612f8e600080516020615025833981519152928284541614614206565b6004858260655416604051928380926334cc866d60e21b82525afa90811561211c579082918991613205575b501633036131cb577f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612ffc57505050505061245f919250614267565b859394969516906040516352d1902d60e01b81528781600481865afa87918161319c575b506130805760405162461bcd60e51b815260048101899052602e818b01527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b979192939496959703613147575090859161309a84614267565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a280511580159061313f575b6130d6575b505050505080f35b6131349482917f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c6040519661310a886140a7565b60278852870152660819985a5b195960ca1b60408701525190845af461312e6142f7565b91614327565b5038808083816130ce565b5060016130c9565b8460296084926040519262461bcd60e51b845260048401528201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152fd5b9091508881813d83116131c4575b6131b481836140c2565b81010312610ab657519038613020565b503d6131aa565b60405162461bcd60e51b8152600481018690526013818a015272556e617574686f72697a65642061636365737360681b6044820152606490fd5b809250878092503d8311613236575b61321e81836140c2565b81010312610ab65761323082916143fb565b38612fba565b503d613214565b50346100cf5760203660031901126100cf5760209060ff906040906001600160a01b03613268613fc9565b168152607484522054166040519015158152f35b50346100cf5760203660031901126100cf576020906040906001600160a01b036132a4613fc9565b168152607383522054604051908152f35b50346100cf576020806003193601126104655760046132d2613fc9565b60655460405162435da560e01b81526001600160a01b03949093909182918591829088165afa801561041d57849386916133a1575b508190602460405180978193637be53ca160e01b8352336004840152165afa801561041d577fc323e6b9ead1b2c846995d39cd9ad6731de0ce620397b30c21a9a6a9be0f23239461335f9287926103f0575050614427565b606780548284166001600160a01b031982161790915560408051338152939091166001600160a01b0390811660208501529091169082015280606081016103ea565b809450828092503d83116133d3575b6133ba81836140c2565b8101031261045a57806133cd85946143fb565b90613307565b503d6133b0565b50346100cf5760403660031901126100cf576004356001600160a01b0381811691829003610dc157602435908116809103610dc15782549160ff8360081c161592838094613529575b8015613512575b156134b65760ff1981166001178555836134a5575b506bffffffffffffffffffffffff60a01b9081606554161760655560665416176066556001606d5561346e5780f35b61ff001981541681557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a180f35b61ffff19166101011784553861343f565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b15801561342a5750600160ff82161461342a565b50600160ff821610613423565b50346100cf57806003193601126100cf576068546040516001600160a01b039091168152602090f35b50346100cf5760403660031901126100cf57607054600435906001600160a01b039060243590821633148015613708575b156136db577f28e1a0159d995563bbd6a6946a34f4476a667aa813095cd747cbf8777b74249691606091848652606f60205260026040872092606e602052604088206040516135de81614042565b815481528260018301541660208201526101406009848685015416936040840194855260ff60038201548781168c87015260a01c1615156080850152600481015460a0850152600581015460c0850152600681015460e08501526007810154610100850152600881015461012085015201549101528884136000146136915761366684614520565b6136748487019182546144ad565b90555b51169201549060405192835260208301526040820152a280f35b828501805461369f86614520565b116136bf575b6136b86136b186614520565b8254614502565b9055613677565b6136d6838351166136cf87614520565b908b6146a0565b6136a5565b60405162461bcd60e51b815260206004820152600560248201526437b836b7b360d91b6044820152606490fd5b5081606954163314613590565b50346100cf5760208060031936011261046557613730613fc9565b6001600160a01b037f0000000000000000000000007928e4e69697b1827b450f806ebdc746b932b0528116613767308214156141a5565b613784600080516020615025833981519152918383541614614206565b6004848360655416604051928380926334cc866d60e21b82525afa8015610bc457839187916139f9575b501633036139be57604051916137c38361408c565b8583527f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156137fd5750505061245f9150614267565b83929316906040516352d1902d60e01b81528581600481865afa87918161398f575b506138805760405162461bcd60e51b815260048101879052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b949394036139385761389182614267565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a283835115801590613931575b6138cd575b5050505080f35b8061392794604051946138df866140a7565b602786527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c81870152660819985a5b195960ca1b604087015281519101845af461312e6142f7565b50388080836138c6565b50806138c1565b60405162461bcd60e51b815260048101849052602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b9091508681813d83116139b7575b6139a781836140c2565b81010312610ab65751903861381f565b503d61399d565b60405162461bcd60e51b8152600481018590526013602482015272556e617574686f72697a65642061636365737360681b6044820152606490fd5b809250868092503d8311613a2a575b613a1281836140c2565b8101031261104c57613a2483916143fb565b386137ae565b503d613a08565b50346100cf5760203660031901126100cf576040816101009260e08351613a5781614026565b82815282602082015282858201528260608201528260808201528260a08201528260c082015201526004358152606a60205220604051613a9681614026565b8154918282526001810154602083019081526002820154604084019081526003830154606085019081526004840154916080860192835260058501549360a0870194855260e0600760068801549760c08a01988952015497019687526040519788525160208801525160408701525160608601525160808501525160a08401525160c08301525160e0820152f35b50346100cf5760e03660031901126100cf5760043560c03660231901126104655760655460405162435da560e01b81526020916001600160a01b03919083908290600490829086165afa90811561041d57829184918791613c90575b50602460405180948193637be53ca160e01b8352336004840152165afa801561041d57613bb39186916125425750614427565b828452606e825260408420908060018301541615159182613c80575b505015613c565760059060243590606435613bea81846144ad565b90613bf860443580936144ad565b91606b613c0860843580956144ad565b94613c1660a43580976144ad565b98613c336305f5e100613c2c60c435809d6144ad565b1115614463565b8a5252604088209485556001850155600284015560038301556004820155015580f35b6064906040519062461bcd60e51b825260048201526003602482015262706e6560e81b6044820152fd5b6002015416151590503880613bcf565b92505081813d8311613cc0575b613ca781836140c2565b8101031261045a5782613cba83926143fb565b38613b80565b503d613c9d565b50346100cf5760403660031901126100cf576004357f63eff9ad83aa78e212443a2702156d22d36e10bc8a296255ad3728c445726b436020602435613d1760018060a01b036070541633146144d0565b838552606f8252806004604087200155604051908152a280f35b50346100cf57806003193601126100cf576065546040516001600160a01b039091168152602090f35b50346100cf5760203660031901126100cf5760408160c09260a08351613d7f81613ff5565b828152826020820152828582015282606082015282608082015201526004358152606b60205220604051613db281613ff5565b8154918282526001810154602083019081526002820154604084019081526003830154916060850192835260a0600560048601549560808801968752015495019485526040519586525160208601525160408501525160608401525160808301525160a0820152f35b50346100cf5760603660031901126100cf57613e35613fc9565b613e3d613fdf565b6070549091604435916001600160a01b039190821633148015613f02575b8015613ef5575b8015613ee8575b613e7290614cd6565b6040516370a0823160e01b8152306004820152939116602084602481845afa93841561041d578594613eb3575b50613eae8361245f9511614d07565b614ba9565b93506020843d8211613ee0575b81613ecd602093836140c2565b8101031261045a57925192613eae613e9f565b3d9150613ec0565b5060695482163314613e69565b5033826068541614613e62565b5033826071541614613e5b565b50346100cf577f56150ce04aef562b211a1147ad2dad770a18c937c2a5309f2a476929bbcb0797613f3f36613faf565b90613f5860018060a09695961b036070541633146144d0565b838552606f6020526128f96040862060036001820191613f798584546144ad565b8093550190613f898583546144ad565b809255604051948594859094939260609260808301968352602083015260408201520152565b6060906003190112610bb757600435906024359060443590565b600435906001600160a01b0382168203610bb757565b602435906001600160a01b0382168203610bb757565b60c081019081106001600160401b0382111761401057604052565b634e487b7160e01b600052604160045260246000fd5b61010081019081106001600160401b0382111761401057604052565b61016081019081106001600160401b0382111761401057604052565b6001600160401b03811161401057604052565b60a081019081106001600160401b0382111761401057604052565b602081019081106001600160401b0382111761401057604052565b606081019081106001600160401b0382111761401057604052565b90601f801991011681019081106001600160401b0382111761401057604052565b6001600160401b03811161401057601f01601f191660200190565b9181601f84011215610bb7578235916001600160401b038311610bb75760208381860195010111610bb757565b8051825260018060a01b03806020830151166020840152806040830151166040840152606082015116606083015260808101511515608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015190830152610120808201519083015261014080910151910152565b156141ac57565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608490fd5b1561420d57565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608490fd5b803b1561429c5760008051602061502583398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b3d15614322573d90614308826140e3565b9161431660405193846140c2565b82523d6000602084013e565b606090565b91929015614389575081511561433b575090565b3b156143445790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b82519091501561439c5750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b8285106143e2575050604492506000838284010152601f80199101168101030190fd5b84810182015186860160440152938101938593506143bf565b51906001600160a01b0382168203610bb757565b90816020910312610bb757518015158103610bb75790565b1561442e57565b60405162461bcd60e51b815260206004820152600d60248201526c37b7363ca837b7b620b236b4b760991b6044820152606490fd5b1561446a57565b60405162461bcd60e51b81526020600482015260026024820152610caf60f31b6044820152606490fd5b90816020910312610bb7575160ff81168103610bb75790565b919082018092116144ba57565b634e487b7160e01b600052601160045260246000fd5b156144d757565b60405162461bcd60e51b81526020600482015260036024820152626f706d60e81b6044820152606490fd5b919082039182116144ba57565b600160ff1b81146144ba5760000390565b6000811261452b5790565b6145349061450f565b90565b1561453e57565b60405162461bcd60e51b815260206004820152600260248201526137b960f11b6044820152606490fd5b1561456f57565b60405162461bcd60e51b8152602060048201526008602482015267191a5cd8589b195960c21b6044820152606490fd5b60405162435da560e01b8152602092916001600160a01b039084908390600490829085165afa9283156100da578492600094614663575b5060405163b36d691960e01b815290821660048201529283916024918391165afa9081156100da57600091614646575b5061460e5750565b6064906040519062461bcd60e51b825260048201526011602482015270189b1858dadb1a5cdd081858d8dbdd5b9d607a1b6044820152fd5b61465d9150823d84116104165761040781836140c2565b38614606565b919282819592953d8311614699575b61467c81836140c2565b810103126100cf575090602461469285936143fb565b93906145d6565b503d614672565b6000908152602091606e8352604092838320908451906146bf82614042565b8254825260018060a01b039182600185015416828201528260028501541687820152600384015497838916606083015260ff60809960a01c1615158983015260096004958681015460a0850152600581015460c0850152600681015460e08501526007810154610100850152600881015461012085015201546101408301528380607554169661475e8a51946311bc3cb960e11b86528886019061412b565b1661016483015261018482015287816101a481885afa918215614a0a5786988799889389956149b4575b508951636eb1769f60e11b808252308983019081526001600160a01b038b166020820152928816999290919085908290819060400103818d5afa9081156149aa579086918c91614975575b5010614840575b50505050826075541692833b15611c7e57928695949286926084958a519b8c988997637f0148ab60e11b8952880152166024860152604485015260648401525af191821561483657505061482b5750565b6148349061405e565b565b51903d90823e3d90fd5b8a51908152308882019081526001600160a01b038316602082015284908290819060400103818c5afa90811561496b578a9161493a575b506148d85789519263095ea7b360e01b90840152602483015260001960448301526044825281018181106001600160401b038211176148c55788526148bc9086614a14565b388080806147da565b634e487b7160e01b885260418652602488fd5b895162461bcd60e51b8152808801849052603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608490fd5b90508381813d8311614964575b61495181836140c2565b81010312614960575138614877565b8980fd5b503d614947565b8b513d8c823e3d90fd5b809250868092503d83116149a3575b61498e81836140c2565b8101031261499f57859051386147d3565b8a80fd5b503d614984565b8c513d8d823e3d90fd5b9a5050925090508188813d8311614a03575b6149d081836140c2565b8101031261104c576149e1886143fb565b906149ed818a016143fb565b928460608a8c01519b015193949a939490614788565b503d6149c6565b87513d88823e3d90fd5b60408051908101916001600160a01b03166001600160401b0383118284101761401057614a7d926040526000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af161312e6142f7565b805190828215928315614aed575b50505015614a965750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b614afd935082018101910161440f565b388281614a8b565b15614b0c57565b60405162461bcd60e51b8152602060048201526002602482015261696160f01b6044820152606490fd5b15614b3d57565b60405162461bcd60e51b8152602060048201526002602482015261069760f41b6044820152606490fd5b908060209392818452848401376000828201840152601f01601f1916010190565b604d81116144ba57600a0a90565b818102929181159184041417156144ba57565b60405163a9059cbb60e01b60208201526001600160a01b0392909216602483015260448083019390935291815261483491614be56064836140c2565b614a14565b9060001981830981830291828083109203918083039214614c8f576c0c9f2c9cd04674edea400000009082821115614c52577f7d33c22789773a07feda8b6f0930e26fa397c439f1d5cf4b2eb27d7306d2dc99940990828211900360e21b9103601e1c170290565b60405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606490fd5b50506c0c9f2c9cd04674edea4000000091500490565b15614cac57565b60405162461bcd60e51b81526020600482015260026024820152610d2f60f31b6044820152606490fd5b15614cdd57565b60405162461bcd60e51b81526020600482015260026024820152611c1960f21b6044820152606490fd5b15614d0e57565b60405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606490fd5b93929190938215614ec6576000908082526020606e815260409081842093825194614d7486614042565b8054865260018060a01b038060018301541696878582015261014060098360028601541694858985015260ff6003820154868116606087015260a01c1615156080850152600481015460a0850152600581015460c0850152600681015460e08501526007810154610100850152600881015461012085015201549101528a16958614908115614ebc575b5015614e945782516370a0823160e01b8152306004820152918083602481895afa938415614e8957508193614e58575b505050614834959685809210614e47575b505050614ba9565b614e50926146a0565b388381614e3f565b9091809350813d8311614e82575b614e7081836140c2565b810103126100cf575051868580614e2e565b503d614e66565b51913d9150823e3d90fd5b50606491519062461bcd60e51b825260048201526002602482015261189d60f21b6044820152fd5b9050851438614dfe565b5050509050565b60806040918251614edd81614071565b6000928184809352826020820152828682015282606082015201528152606f60205220600460405191614f0f83614071565b805483526001810154602084015260028101546040840152600381015460608401520154608082015290565b604051614f4781614042565b60096000928383528360208401528360408401528360608401528360808401528360a08401528360c08401528360e0840152604061010094808686015261012092818487015281610140809701528152606e602052209060405194614fab86614042565b8254865260018301546001600160a01b0390811660208801526002840154811660408801526003840154908116606088015260a090811c60ff1615156080880152600484015490870152600583015460c0870152600683015460e08701526007830154908601526008820154908501520154908201529056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220a388d299a9b72428cd77f1b35d3590446ec19558dd5aa51506e385cbb03fd63864736f6c63430008130033" + }, + { + "address": "0xb6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106102855760003560e01c80639c729da111610153578063ca066b35116100cb578063f2fde38b1161007f578063f5ecbdbc11610064578063f5ecbdbc14610e54578063faee093f14610f16578063fdc07c7014610f2b57610285565b8063f2fde38b14610db8578063f4abee4b14610deb57610285565b8063da1a7c9a116100b0578063da1a7c9a14610d5b578063e97a448a14610d8e578063ebfea6e014610da357610285565b8063ca066b3514610cae578063cbed8b9c14610cc357610285565b8063bd42a71311610122578063c2fa481311610107578063c2fa481314610a49578063c580310014610b48578063c7e3711714610c8057610285565b8063bd42a71314610a06578063c07f47d414610a3457610285565b80639c729da1146108a7578063a91606df146108da578063aaff5f16146108ef578063b2086499146109c957610285565b806342d65a8d1161020157806376a386dc116101b55780638da5cb5b1161019a5780638da5cb5b146107bf5780639924d33b146107d45780639a8a05921461089257610285565b806376a386dc146106765780637a1457481461076557610285565b80635d9ef01a116101e65780635d9ef01a14610619578063715018a61461062e57806371ba2fd61461064357610285565b806342d65a8d146105605780634afb422b146105e857610285565b806310ddb1371161025857806324ba3f2c1161023d57806324ba3f2c1461042f5780633408e4701461044457806340a7bb101461045957610285565b806310ddb137146103ce578063158c81ad146103fc57610285565b806307e0db171461028a578063096568f6146102ba5780630b837bb5146103045780630eaf6ea614610332575b600080fd5b34801561029657600080fd5b506102b8600480360360208110156102ad57600080fd5b503561ffff16610fb3565b005b3480156102c657600080fd5b506102ed600480360360208110156102dd57600080fd5b50356001600160a01b03166110ea565b6040805161ffff9092168252519081900360200190f35b34801561031057600080fd5b506102b86004803603602081101561032757600080fd5b503561ffff16611129565b34801561033e57600080fd5b506103ba6004803603604081101561035557600080fd5b61ffff823516919081019060408101602082013564010000000081111561037b57600080fd5b82018360208201111561038d57600080fd5b803590602001918460018302840111640100000000831117156103af57600080fd5b509092509050611309565b604080519115158252519081900360200190f35b3480156103da57600080fd5b506102b8600480360360208110156103f157600080fd5b503561ffff16611355565b34801561040857600080fd5b506102b86004803603602081101561041f57600080fd5b50356001600160a01b0316611495565b34801561043b57600080fd5b506102ed61167e565b34801561045057600080fd5b506102ed611683565b34801561046557600080fd5b50610547600480360360a081101561047c57600080fd5b61ffff823516916001600160a01b03602082013516918101906060810160408201356401000000008111156104b057600080fd5b8201836020820111156104c257600080fd5b803590602001918460018302840111640100000000831117156104e457600080fd5b91939092823515159260408101906020013564010000000081111561050857600080fd5b82018360208201111561051a57600080fd5b8035906020019184600183028401116401000000008311171561053c57600080fd5b5090925090506116a7565b6040805192835260208301919091528051918290030190f35b34801561056c57600080fd5b506102b86004803603604081101561058357600080fd5b61ffff82351691908101906040810160208201356401000000008111156105a957600080fd5b8201836020820111156105bb57600080fd5b803590602001918460018302840111640100000000831117156105dd57600080fd5b509092509050611800565b3480156105f457600080fd5b506105fd6119a0565b604080516001600160a01b039092168252519081900360200190f35b34801561062557600080fd5b506102ed6119b7565b34801561063a57600080fd5b506102b86119c1565b34801561064f57600080fd5b506105fd6004803603602081101561066657600080fd5b50356001600160a01b0316611a97565b34801561068257600080fd5b506107346004803603604081101561069957600080fd5b61ffff82351691908101906040810160208201356401000000008111156106bf57600080fd5b8201836020820111156106d157600080fd5b803590602001918460018302840111640100000000831117156106f357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611b81945050505050565b6040805167ffffffffffffffff90941684526001600160a01b03909216602084015282820152519081900360600190f35b34801561077157600080fd5b506107a26004803603604081101561078857600080fd5b50803561ffff1690602001356001600160a01b0316611bd8565b6040805167ffffffffffffffff9092168252519081900360200190f35b3480156107cb57600080fd5b506105fd611c10565b3480156107e057600080fd5b506107a2600480360360408110156107f757600080fd5b61ffff823516919081019060408101602082013564010000000081111561081d57600080fd5b82018360208201111561082f57600080fd5b8035906020019184600183028401116401000000008311171561085157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c1f945050505050565b34801561089e57600080fd5b506102ed611c57565b3480156108b357600080fd5b506105fd600480360360208110156108ca57600080fd5b50356001600160a01b0316611c7b565b3480156108e657600080fd5b506102ed611d58565b3480156108fb57600080fd5b506102b86004803603606081101561091257600080fd5b61ffff823516919081019060408101602082013564010000000081111561093857600080fd5b82018360208201111561094a57600080fd5b8035906020019184600183028401116401000000008311171561096c57600080fd5b91939092909160208101903564010000000081111561098a57600080fd5b82018360208201111561099c57600080fd5b803590602001918460018302840111640100000000831117156109be57600080fd5b509092509050611d5e565b3480156109d557600080fd5b506107a2600480360360408110156109ec57600080fd5b50803561ffff1690602001356001600160a01b0316612143565b348015610a1257600080fd5b506102b860048036036020811015610a2957600080fd5b503561ffff1661216a565b348015610a4057600080fd5b506102ed612350565b348015610a5557600080fd5b506102b8600480360360c0811015610a6c57600080fd5b61ffff8235169190810190604081016020820135640100000000811115610a9257600080fd5b820183602082011115610aa457600080fd5b80359060200191846001830284011164010000000083111715610ac657600080fd5b919390926001600160a01b038335169267ffffffffffffffff602082013516926040820135929091608081019060600135640100000000811115610b0957600080fd5b820183602082011115610b1b57600080fd5b80359060200191846001830284011164010000000083111715610b3d57600080fd5b509092509050612372565b6102b8600480360360c0811015610b5e57600080fd5b61ffff8235169190810190604081016020820135640100000000811115610b8457600080fd5b820183602082011115610b9657600080fd5b80359060200191846001830284011164010000000083111715610bb857600080fd5b919390929091602081019035640100000000811115610bd657600080fd5b820183602082011115610be857600080fd5b80359060200191846001830284011164010000000083111715610c0a57600080fd5b919390926001600160a01b0383358116936020810135909116929190606081019060400135640100000000811115610c4157600080fd5b820183602082011115610c5357600080fd5b80359060200191846001830284011164010000000083111715610c7557600080fd5b509092509050612995565b348015610c8c57600080fd5b506105fd60048036036020811015610ca357600080fd5b503561ffff16612bf4565b348015610cba57600080fd5b506103ba612c0f565b348015610ccf57600080fd5b506102b860048036036080811015610ce657600080fd5b61ffff823581169260208101359091169160408201359190810190608081016060820135640100000000811115610d1c57600080fd5b820183602082011115610d2e57600080fd5b80359060200191846001830284011164010000000083111715610d5057600080fd5b509092509050612c20565b348015610d6757600080fd5b506102ed60048036036020811015610d7e57600080fd5b50356001600160a01b0316612e16565b348015610d9a57600080fd5b506103ba612e64565b348015610daf57600080fd5b506105fd612e70565b348015610dc457600080fd5b506102b860048036036020811015610ddb57600080fd5b50356001600160a01b0316612e7f565b348015610df757600080fd5b50610e1e60048036036020811015610e0e57600080fd5b50356001600160a01b0316612fab565b6040805161ffff95861681529390941660208401526001600160a01b039182168385015216606082015290519081900360800190f35b348015610e6057600080fd5b50610ea160048036036080811015610e7757600080fd5b5061ffff81358116916020810135909116906001600160a01b036040820135169060600135612fea565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610edb578181015183820152602001610ec3565b50505050905090810190601f168015610f085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f2257600080fd5b506102ed61327a565b348015610f3757600080fd5b506107a260048036036040811015610f4e57600080fd5b61ffff8235169190810190604081016020820135640100000000811115610f7457600080fd5b820183602082011115610f8657600080fd5b80359060200191846001830284011164010000000083111715610fa857600080fd5b50909250905061328a565b600054819061ffff740100000000000000000000000000000000000000009091048116908216111580610fe9575061ffff818116145b6110245760405162461bcd60e51b815260040180806020018281038252602c8152602001806133b8602c913960400191505060405180910390fd5b336000818152600460209081526040808320805461ffff88167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909116811782558085526001808552948390205494820180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039690961695909517909455815194855291840192909252815190927ff2bc255571446a2f9b7cb2f0c75fd6a279bdb469f515d5a5c9910f713aeb32ca92908290030190a1505050565b6001600160a01b0381166000908152600460205260408120805461ffff161561111857805461ffff16611120565b60025461ffff165b9150505b919050565b6111316132d7565b6001600160a01b0316611142611c10565b6001600160a01b03161461119d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600054819061ffff7401000000000000000000000000000000000000000090910481169082161115806111d3575061ffff818116145b61120e5760405162461bcd60e51b815260040180806020018281038252602c8152602001806133b8602c913960400191505060405180910390fd5b61ffff821661124e5760405162461bcd60e51b81526004018080602001828103825260288152602001806135f36028913960400191505060405180910390fd5b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff848116918217808455908116600090815260016020908152604091829020547fffffffffffffffff0000000000000000000000000000000000000000ffffffff9093166001600160a01b039093166401000000000292909217909355825191825291517feb685c087d38029bbde35299b748c6b80f099c7e5c3f9fe2dbb3ace1099e3b07929181900390910190a15050565b61ffff8316600090815260076020526040808220905182919085908590808383808284379190910194855250506040519283900360200190922060010154151593505050509392505050565b600054819061ffff74010000000000000000000000000000000000000000909104811690821611158061138b575061ffff818116145b6113c65760405162461bcd60e51b815260040180806020018281038252602c8152602001806133b8602c913960400191505060405180910390fd5b33600081815260046020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff166201000061ffff8916908102919091178083558186526001855294839020547fffffffffffffffff0000000000000000000000000000000000000000ffffffff9095166001600160a01b0390951664010000000002949094178155815194855291840192909252815190927f9c199418af68d1547d7b99c71ee6a9eb18b27990dfcfb38982f3e3fb8c7b6bef92908290030190a1505050565b61149d6132d7565b6001600160a01b03166114ae611c10565b6001600160a01b031614611509576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661154e5760405162461bcd60e51b815260040180806020018281038252602d815260200180613549602d913960400191505060405180910390fd5b60005461ffff740100000000000000000000000000000000000000009091048116106115ab5760405162461bcd60e51b815260040180806020018281038252602c81526020018061351d602c913960400191505060405180910390fd5b60008054600161ffff7401000000000000000000000000000000000000000080840482168301821681027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff90941693909317808555839004811684526020918252604080852080546001600160a01b0388167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790559354845193900416825291517f18c7402e58a1bec57f4eb75af242f65ababbbe09d9db383e0542f00635e5b8c5929181900390910190a150565b600081565b7f00000000000000000000000000000000000000000000000000000000000000b790565b6001600160a01b03861660009081526004602052604081208054829190829061ffff16156116e25760018201546001600160a01b03166116f7565b60025464010000000090046001600160a01b03165b9050806001600160a01b03166340a7bb108c8c8c8c8c8c8c6040518863ffffffff1660e01b8152600401808861ffff168152602001876001600160a01b03168152602001806020018515158152602001806020018381038352888882818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f8201169050808301925050509950505050505050505050604080518083038186803b1580156117bb57600080fd5b505afa1580156117cf573d6000803e3d6000fd5b505050506040513d60408110156117e557600080fd5b508051602090910151909c909b509950505050505050505050565b61ffff831660009081526007602052604080822090518490849080838380828437919091019485525050604051928390036020019092206001810154909350151591506118969050576040805162461bcd60e51b815260206004820152601c60248201527f4c617965725a65726f3a206e6f2073746f726564207061796c6f616400000000604482015290519081900360640190fd5b80546801000000000000000090046001600160a01b03163314611900576040805162461bcd60e51b815260206004820152601960248201527f4c617965725a65726f3a20696e76616c69642063616c6c657200000000000000604482015290519081900360640190fd5b80547fffffffff00000000000000000000000000000000000000000000000000000000168155600060018201556040805161ffff86168152602081018281529181018490527f23d2684f396e92a6e2ff2d16f98e6fea00d50cb27a64b531bc0748f730211f98918691869186919060608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a150505050565b60025464010000000090046001600160a01b031681565b60025461ffff1681565b6119c96132d7565b6001600160a01b03166119da611c10565b6001600160a01b031614611a35576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6001600160a01b0381166000908152600460205260408120805461ffff62010000909104811690811415611afc5760405162461bcd60e51b815260040180806020018281038252602b81526020018061364a602b913960400191505060405180910390fd5b61ffff8116611b645760025462010000900461ffff9081161415611b515760405162461bcd60e51b81526004018080602001828103825260358152602001806133e46035913960400191505060405180910390fd5b6003546001600160a01b03169250611b7a565b815464010000000090046001600160a01b031692505b5050919050565b600760209081526000928352604090922081518083018401805192815290840192909301919091209152805460019091015467ffffffffffffffff8216916801000000000000000090046001600160a01b03169083565b61ffff821660009081526006602090815260408083206001600160a01b038516845290915290205467ffffffffffffffff1692915050565b6000546001600160a01b031690565b6005602090815260009283526040909220815180830184018051928152908401929093019190912091525467ffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000b781565b6001600160a01b0381166000908152600460205260408120805461ffff90811690811415611cda5760405162461bcd60e51b81526004018080602001828103825260288152602001806134f56028913960400191505060405180910390fd5b61ffff8116611d445760025461ffff9081161415611d295760405162461bcd60e51b815260040180806020018281038252603281526020018061348d6032913960400191505060405180910390fd5b60025464010000000090046001600160a01b03169250611b7a565b50600101546001600160a01b031692915050565b61ffff81565b600854610100900460ff16600114611dbd576040805162461bcd60e51b815260206004820181905260248201527f4c617965725a65726f3a206e6f2072656365697665207265656e7472616e6379604482015290519081900360640190fd5b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661020017905561ffff85166000908152600760205260408082209051869086908083838082843791909101948552505060405192839003602001909220600181015490935015159150611e7f9050576040805162461bcd60e51b815260206004820152601c60248201527f4c617965725a65726f3a206e6f2073746f726564207061796c6f616400000000604482015290519081900360640190fd5b805467ffffffffffffffff1682148015611eba5750806001015483836040518083838082843780830192505050925050506040518091039020145b611f0b576040805162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000604482015290519081900360640190fd5b80547fffffffff000000000000000000000000000000000000000000000000000000008116825560006001830181905561ffff88168152600560205260408082209051680100000000000000009093046001600160a01b0316928890889080838380828437919091019485525050604051928390036020018320547e1d356700000000000000000000000000000000000000000000000000000000845261ffff8c166004850190815267ffffffffffffffff90911660448501819052608060248601908152608486018c90529095506001600160a01b03871694621d356794508d93508c928c9288928d928d929091606481019060a401888880828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b15801561206657600080fd5b505af115801561207a573d6000803e3d6000fd5b505050507f612434f39581c8e7d99746c9c20c6eb0ce8c0eb99f007c5719d620841370957d8888888486604051808661ffff168152602001806020018467ffffffffffffffff168152602001836001600160a01b031681526020018281038252868682818152602001925080828437600083820152604051601f909101601f19169092018290039850909650505050505050a15050600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055505050505050565b600660209081526000928352604080842090915290825290205467ffffffffffffffff1681565b6121726132d7565b6001600160a01b0316612183611c10565b6001600160a01b0316146121de576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600054819061ffff740100000000000000000000000000000000000000009091048116908216111580612214575061ffff818116145b61224f5760405162461bcd60e51b815260040180806020018281038252602c8152602001806133b8602c913960400191505060405180910390fd5b61ffff821661228f5760405162461bcd60e51b815260040180806020018281038252602b8152602001806135a5602b913960400191505060405180910390fd5b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff166201000061ffff8581168281029390931793849055920490911660009081526001602090815260409182902054600380546001600160a01b039092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055815192835290517f96874dbe70c8a59e7996847475489a70a1b5096ed92cdc858b63ebabd071f8199281900390910190a15050565b60005474010000000000000000000000000000000000000000900461ffff1681565b600854610100900460ff166001146123d1576040805162461bcd60e51b815260206004820181905260248201527f4c617965725a65726f3a206e6f2072656365697665207265656e7472616e6379604482015290519081900360640190fd5b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661020017905561ffff8816600090815260056020526040908190209051889088908083838082843791909101948552505060405192839003602001909220805467ffffffffffffffff80821660010181167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921682179092559087161491506124ca9050576040805162461bcd60e51b815260206004820152601660248201527f4c617965725a65726f3a2077726f6e67206e6f6e636500000000000000000000604482015290519081900360640190fd5b6001600160a01b0385166000908152600460205260409020805462010000900461ffff16612540576003546001600160a01b0316331461253b5760405162461bcd60e51b81526004018080602001828103825260228152602001806134196022913960400191505060405180910390fd5b6125a6565b805464010000000090046001600160a01b031633146125a6576040805162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964206c696272617279000000000000604482015290519081900360640190fd5b61ffff891660009081526007602052604080822090518a908a908083838082843791909101948552505060405192839003602001909220600181015490935015915061263b9050576040805162461bcd60e51b815260206004820152601e60248201527f4c617965725a65726f3a20696e206d65737361676520626c6f636b696e670000604482015290519081900360640190fd5b866001600160a01b0316621d3567868c8c8c8b8a8a6040518863ffffffff1660e01b8152600401808761ffff168152602001806020018567ffffffffffffffff168152602001806020018381038352888882818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600088803b1580156126f757600080fd5b5087f193505050508015612709575060015b61295d573d808015612737576040519150601f19603f3d011682016040523d82523d6000602084013e61273c565b606091505b5060405180606001604052808686905067ffffffffffffffff168152602001896001600160a01b0316815260200186866040518083838082843780830192505050925050506040518091039020815250600760008d61ffff1661ffff1681526020019081526020016000208b8b604051808383808284378083019250505092505050908152602001604051809103902060008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600101559050507f0f9e4d95b62f08222d612b5ab92039cd8fbbbea550a95e8df9f927436bbdf5db8b8b8b8b8b8a8a88604051808961ffff16815260200180602001876001600160a01b031681526020018667ffffffffffffffff168152602001806020018060200184810384528b8b82818152602001925080828437600083820152601f01601f1916909101858103845287815260200190508787808284376000838201819052601f909101601f191690920186810384528751815287516020918201939189019250908190849084905b83811015612918578181015183820152602001612900565b50505050905090810190601f1680156129455780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a1505b5050600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555050505050505050565b60085460ff166001146129ef576040805162461bcd60e51b815260206004820152601d60248201527f4c617965725a65726f3a206e6f2073656e64207265656e7472616e6379000000604482015290519081900360640190fd5b6008805460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911617905533600081815260046020908152604080832061ffff8e1684526006835281842094845293909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000811667ffffffffffffffff91821660010191821617909155612a89826132db565b6001600160a01b0316634d3a0f7c3433848f8f8f8f8f8f8f8f8f6040518d63ffffffff1660e01b8152600401808c6001600160a01b031681526020018b67ffffffffffffffff1681526020018a61ffff1681526020018060200180602001876001600160a01b03168152602001866001600160a01b031681526020018060200184810384528c8c82818152602001925080828437600083820152601f01601f191690910185810384528a815260200190508a8a80828437600083820152601f01601f191690910185810383528681526020019050868680828437600081840152601f19601f8201169050808301925050509e5050505050505050505050505050506000604051808303818588803b158015612ba357600080fd5b505af1158015612bb7573d6000803e3d6000fd5b5050600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050505050505050565b6001602052600090815260409020546001600160a01b031681565b600854610100900460ff1660021490565b600054859061ffff740100000000000000000000000000000000000000009091048116908216111580612c56575061ffff818116145b612c915760405162461bcd60e51b815260040180806020018281038252602c8152602001806133b8602c913960400191505060405180910390fd5b61ffff8616612cf15760025461ffff808216620100009092041614612ce75760405162461bcd60e51b81526004018080602001828103825260368152602001806134bf6036913960400191505060405180910390fd5b60025461ffff1695505b61ffff8681161415612d345760405162461bcd60e51b815260040180806020018281038252602f81526020018061361b602f913960400191505060405180910390fd5b61ffff808716600090815260016020526040908190205490517ff8e1734c00000000000000000000000000000000000000000000000000000000815291871660048301908152336024840181905260448401889052608060648501908152608485018790526001600160a01b039093169363f8e1734c938a938a928a928a929160a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015612df657600080fd5b505af1158015612e0a573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381166000908152600460205260408120805462010000900461ffff1615612e5057805462010000900461ffff16611120565b505060025462010000900461ffff16919050565b60085460ff1660021490565b6003546001600160a01b031681565b612e876132d7565b6001600160a01b0316612e98611c10565b6001600160a01b031614612ef3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116612f385760405162461bcd60e51b815260040180806020018281038252602681526020018061343b6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6004602052600090815260409020805460019091015461ffff80831692620100008104909116916001600160a01b036401000000009092048216911684565b600054606090859061ffff740100000000000000000000000000000000000000009091048116908216111580613023575061ffff818116145b61305e5760405162461bcd60e51b815260040180806020018281038252602c8152602001806133b8602c913960400191505060405180910390fd5b61ffff86166130be5760025461ffff8082166201000090920416146130b45760405162461bcd60e51b815260040180806020018281038252602c815260200180613461602c913960400191505060405180910390fd5b60025461ffff1695505b61ffff86811614156131015760405162461bcd60e51b815260040180806020018281038252602f815260200180613576602f913960400191505060405180910390fd5b61ffff8087166000908152600160205260408082205481517f52d2871f00000000000000000000000000000000000000000000000000000000815293891660048501526001600160a01b0388811660248601526044850188905291519116926352d2871f926064808301939192829003018186803b15801561318257600080fd5b505afa158015613196573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156131bf57600080fd5b81019080805160405193929190846401000000008211156131df57600080fd5b9083019060208201858111156131f457600080fd5b825164010000000081118282018810171561320e57600080fd5b82525081516020918201929091019080838360005b8381101561323b578181015183820152602001613223565b50505050905090810190601f1680156132685780820380516001836020036101000a031916815260200191505b50604052505050915050949350505050565b60025462010000900461ffff1681565b61ffff831660009081526005602052604080822090518490849080838380828437919091019485525050604051928390036020019092205467ffffffffffffffff16925050509392505050565b3390565b805460009061ffff166133485760025461ffff908116141561332e5760405162461bcd60e51b81526004018080602001828103825260238152602001806135d06023913960400191505060405180910390fd5b5060025464010000000090046001600160a01b0316611124565b815461ffff90811614156133a3576040805162461bcd60e51b815260206004820152601b60248201527f4c617965725a65726f3a20696e20424c4f434b5f56455253494f4e0000000000604482015290519081900360640190fd5b5060018101546001600160a01b031661112456fe4c617965725a65726f3a20696e76616c6964206d6573736167696e67206c6962726172792076657273696f6e4c617965725a65726f3a20726563656976652076657273696f6e202864656661756c742920697320424c4f434b5f56455253494f4e4c617965725a65726f3a20696e76616c69642064656661756c74206c6962726172794f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c617965725a65726f3a206e6f2044454641554c5420636f6e666967207768696c65206d6967726174696f6e4c617965725a65726f3a2073656e642076657273696f6e202864656661756c742920697320424c4f434b5f56455253494f4e4c617965725a65726f3a2063616e206e6f742073657420436f6e66696720647572696e672044454641554c54206d6967726174696f6e4c617965725a65726f3a2073656e642076657273696f6e20697320424c4f434b5f56455253494f4e4c617965725a65726f3a2063616e206e6f7420616464206e6577206d6573736167696e67206c6962726172794c617965725a65726f3a206e65772076657273696f6e2063616e6e6f74206265207a65726f20616464726573734c617965725a65726f3a2063616e206e6f742067657420636f6e66696720666f7220424c4f434b5f56455253494f4e4c617965725a65726f3a2064656661756c7420726563656976652076657273696f6e206d757374203e20304c617965725a65726f3a2064656661756c7420696e20424c4f434b5f56455253494f4e4c617965725a65726f3a2064656661756c742073656e642076657273696f6e206d757374203e20304c617965725a65726f3a2063616e206e6f742073657420636f6e66696720666f7220424c4f434b5f56455253494f4e4c617965725a65726f3a20726563656976652076657273696f6e20697320424c4f434b5f56455253494f4ea26469706673582212208ed5abf804b10b0f71da77c570eb372ab4e36974c6a955e66c94b397fe506a9e64736f6c63430007060033" + }, + { + "address": "0x5440625752aa1b8a83a43200bfbcdedfbc174971", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x735440625752aa1b8a83a43200bfbcdedfbc1749713014608060405260043610603d5760003560e01c806313a1ec75146042578063a95cb7f7146076575b600080fd5b606260048036036040811015605657600080fd5b508035906020013560a8565b604080519115158252519081900360200190f35b609660048036036040811015608a57600080fd5b508035906020013560bf565b60408051918252519081900360200190f35b6000600160b4848460d0565b111590505b92915050565b600060c9838360d0565b9392505050565b60008183111560e1575080820360b9565b50039056fea2646970667358221220554517a7a8434fce581139ced73be1bb15b464ea345dcd7951fe7ab5b7e5748864736f6c634300060c0033" + }, + { + "address": "0x58ce903c4c5ef8e09218500bc2db5cea84115743", + "nonce": 25, + "balance": "0x000000000000000000000000000000000000000000000000003c5a9150acc8ac", + "code": "0x" + }, + { + "address": "0xc1c1ec966e159d1bed34f84cd3dfbd5720a40ed9", + "nonce": 14, + "balance": "0x000000000000000000000000000000000000000000000000000cdf68257a9077", + "code": "0x" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "nonce": 1, + "balance": "0x00000000000000000000000000000000000000000000015d833eb9f3fc9a9cf8", + "code": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a723058208d3edf7db4844714876b32fda942877ec6615c3149edaabca1abed15e77e52100029" + }, + { + "address": "0x629658970d075d0d50f88110238787b3d10c21fe", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061007b5760003560e01c80637859bb8d1161004e5780637859bb8d146100f25780638129fc1c146101125780638da5cb5b14610127578063f2fde38b1461014f57600080fd5b80633659cfe6146100805780634f1ef286146100a257806352d1902d146100b5578063715018a6146100dd575b600080fd5b34801561008c57600080fd5b506100a061009b366004610ad2565b61016f565b005b6100a06100b0366004610b03565b610257565b3480156100c157600080fd5b506100ca610327565b6040519081526020015b60405180910390f35b3480156100e957600080fd5b506100a06103da565b3480156100fe57600080fd5b506100a061010d366004610bc5565b6103ee565b34801561011e57600080fd5b506100a0610428565b34801561013357600080fd5b506033546040516001600160a01b0390911681526020016100d4565b34801561015b57600080fd5b506100a061016a366004610ad2565b610540565b6001600160a01b037f000000000000000000000000629658970d075d0d50f88110238787b3d10c21fe1630036101c05760405162461bcd60e51b81526004016101b790610bef565b60405180910390fd5b7f000000000000000000000000629658970d075d0d50f88110238787b3d10c21fe6001600160a01b0316610209600080516020610d5f833981519152546001600160a01b031690565b6001600160a01b03161461022f5760405162461bcd60e51b81526004016101b790610c3b565b610238816105b6565b60408051600080825260208201909252610254918391906105be565b50565b6001600160a01b037f000000000000000000000000629658970d075d0d50f88110238787b3d10c21fe16300361029f5760405162461bcd60e51b81526004016101b790610bef565b7f000000000000000000000000629658970d075d0d50f88110238787b3d10c21fe6001600160a01b03166102e8600080516020610d5f833981519152546001600160a01b031690565b6001600160a01b03161461030e5760405162461bcd60e51b81526004016101b790610c3b565b610317826105b6565b610323828260016105be565b5050565b6000306001600160a01b037f000000000000000000000000629658970d075d0d50f88110238787b3d10c21fe16146103c75760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016101b7565b50600080516020610d5f83398151915290565b6103e261072e565b6103ec6000610788565b565b60405167ffffffffffffffff82169033907f019b3013705c8fbc4bfbebfaccb6b5dd82b7442cbbd37d656844ce845736747b90600090a350565b600054610100900460ff16158080156104485750600054600160ff909116105b806104625750303b158015610462575060005460ff166001145b6104c55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101b7565b6000805460ff1916600117905580156104e8576000805461ff0019166101001790555b6104f06107da565b6104f8610809565b8015610254576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b61054861072e565b6001600160a01b0381166105ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b7565b61025481610788565b61025461072e565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156105f6576105f183610830565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610650575060408051601f3d908101601f1916820190925261064d91810190610c87565b60015b6106b35760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016101b7565b600080516020610d5f83398151915281146107225760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016101b7565b506105f18383836108cc565b6033546001600160a01b031633146103ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b7565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166108015760405162461bcd60e51b81526004016101b790610ca0565b6103ec6108f7565b600054610100900460ff166103ec5760405162461bcd60e51b81526004016101b790610ca0565b6001600160a01b0381163b61089d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016101b7565b600080516020610d5f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6108d583610927565b6000825111806108e25750805b156105f1576108f18383610967565b50505050565b600054610100900460ff1661091e5760405162461bcd60e51b81526004016101b790610ca0565b6103ec33610788565b61093081610830565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061098c8383604051806060016040528060278152602001610d7f60279139610993565b9392505050565b6060600080856001600160a01b0316856040516109b09190610d0f565b600060405180830381855af49150503d80600081146109eb576040519150601f19603f3d011682016040523d82523d6000602084013e6109f0565b606091505b5091509150610a0186838387610a0b565b9695505050505050565b60608315610a7a578251600003610a73576001600160a01b0385163b610a735760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101b7565b5081610a84565b610a848383610a8c565b949350505050565b815115610a9c5781518083602001fd5b8060405162461bcd60e51b81526004016101b79190610d2b565b80356001600160a01b0381168114610acd57600080fd5b919050565b600060208284031215610ae457600080fd5b61098c82610ab6565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610b1657600080fd5b610b1f83610ab6565b9150602083013567ffffffffffffffff80821115610b3c57600080fd5b818501915085601f830112610b5057600080fd5b813581811115610b6257610b62610aed565b604051601f8201601f19908116603f01168101908382118183101715610b8a57610b8a610aed565b81604052828152886020848701011115610ba357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208284031215610bd757600080fd5b813567ffffffffffffffff8116811461098c57600080fd5b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215610c9957600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015610d06578181015183820152602001610cee565b50506000910152565b60008251610d21818460208701610ceb565b9190910192915050565b6020815260008251806020840152610d4a816040850160208701610ceb565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122065823ac628f9775ca69da1a9cd38502128e13eeb731b97853d0382f8dbb1e73764736f6c63430008130033" + }, + { + "address": "0x69f7c3f66f5b1cc53f33c06dce56297a016131fc", + "nonce": 26, + "balance": "0x000000000000000000000000000000000000000000000000002eebaa2fffe2cc", + "code": "0x" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405236601d57600054601b906001600160a01b0316602d565b005b600054601b906001600160a01b03165b60405136600082376000803683855af43d806000843e818015604d578184f35b8184fdfea2646970667358221220600f90c0e59ddffb769074d4cc74283ea59df1a89099816dd6169b248142b48764736f6c63430008090033" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000000009184e72a000", + "code": "0x60806040526004361061021a5760003560e01c80635c975abb11610123578063a217fddf116100ab578063d547741f1161006f578063d547741f146107e0578063e63ab1e914610809578063e985e9c514610834578063eb79554914610871578063f2fde38b1461089a5761021a565b8063a217fddf14610708578063a22cb46514610733578063b88d4fde1461075c578063c87b56dd14610778578063d5391393146107b55761021a565b80638456cb59116100f25780638456cb59146106215780638462151c146106385780638da5cb5b1461067557806391d14854146106a057806395d89b41146106dd5761021a565b80635c975abb146105655780636352211e1461059057806370a08231146105cd578063715018a61461060a5761021a565b80632f2ff15d116101a6578063423f6cef11610175578063423f6cef1461047d57806342842e0e146104a657806342966c68146104c25780634f6ccce7146104eb57806350bb4e7f146105285761021a565b80632f2ff15d146103d75780632f745c591461040057806336568abe1461043d5780633f4ba83a146104665761021a565b8063095ea7b3116101ed578063095ea7b31461030157806318160ddd1461032a5780631a3e7c8b1461035557806323b872dd14610371578063248a9ca31461039a5761021a565b806301ffc9a71461021f57806303f167391461025c57806306fdde0314610299578063081812fc146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613480565b6108c3565b60405161025391906134c8565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190613577565b6108d5565b60405161029091906135d0565b60405180910390f35b3480156102a557600080fd5b506102ae610908565b6040516102bb919061367b565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061369d565b61099a565b6040516102f891906136d9565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190613577565b610a1f565b005b34801561033657600080fd5b5061033f610b36565b60405161034c9190613703565b60405180910390f35b61036f600480360381019061036a91906138b3565b610b43565b005b34801561037d57600080fd5b5061039860048036038101906103939190613969565b610c92565b005b3480156103a657600080fd5b506103c160048036038101906103bc91906139e8565b610cf2565b6040516103ce91906135d0565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190613a15565b610d12565b005b34801561040c57600080fd5b5061042760048036038101906104229190613577565b610d78565b6040516104349190613703565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613a15565b610e1d565b005b34801561047257600080fd5b5061047b610ea0565b005b34801561048957600080fd5b506104a4600480360381019061049f9190613577565b610f1a565b005b6104c060048036038101906104bb9190613969565b610f40565b005b3480156104ce57600080fd5b506104e960048036038101906104e4919061369d565b610f60565b005b3480156104f757600080fd5b50610512600480360381019061050d919061369d565b610fbc565b60405161051f9190613703565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613a55565b61102d565b60405161055c91906134c8565b60405180910390f35b34801561057157600080fd5b5061057a6110d3565b60405161058791906134c8565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b2919061369d565b6110ea565b6040516105c491906136d9565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef9190613ac4565b61119b565b6040516106019190613703565b60405180910390f35b34801561061657600080fd5b5061061f611252565b005b34801561062d57600080fd5b506106366112da565b005b34801561064457600080fd5b5061065f600480360381019061065a9190613ac4565b611354565b60405161066c9190613baf565b60405180910390f35b34801561068157600080fd5b5061068a61144b565b60405161069791906136d9565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190613a15565b611474565b6040516106d491906134c8565b60405180910390f35b3480156106e957600080fd5b506106f26114df565b6040516106ff919061367b565b60405180910390f35b34801561071457600080fd5b5061071d611571565b60405161072a91906135d0565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190613bfd565b611578565b005b61077660048036038101906107719190613cde565b6116f8565b005b34801561078457600080fd5b5061079f600480360381019061079a919061369d565b61175a565b6040516107ac919061367b565b60405180910390f35b3480156107c157600080fd5b506107ca61176c565b6040516107d791906135d0565b60405180910390f35b3480156107ec57600080fd5b5061080760048036038101906108029190613a15565b611790565b005b34801561081557600080fd5b5061081e6117f6565b60405161082b91906135d0565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613d61565b61181a565b60405161086891906134c8565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613da1565b6118ae565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190613ac4565b61190b565b005b60006108ce82611a02565b9050919050565b600082826040516020016108ea929190613e15565b60405160208183030381529060405280519060200120905092915050565b60606001805461091790613e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461094390613e6d565b80156109905780601f1061096557610100808354040283529160200191610990565b820191906000526020600020905b81548152906001019060200180831161097357829003601f168201915b5050505050905090565b60006109a582611a7c565b6109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db90613f10565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2a826110ea565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9190613fa2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ab9611ae8565b73ffffffffffffffffffffffffffffffffffffffff161480610ae85750610ae781610ae2611ae8565b61181a565b5b610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90614034565b60405180910390fd5b610b318383611af0565b505050565b6000600980549050905090565b610b6d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a687611474565b610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba3906140c6565b60405180910390fd5b6000610bb886866108d5565b90508673ffffffffffffffffffffffffffffffffffffffff16610c1f8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611ba9565b73ffffffffffffffffffffffffffffffffffffffff1614610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90614158565b60405180910390fd5b610c7f8686611c18565b610c898585611c36565b50505050505050565b610ca3610c9d611ae8565b82611ca3565b610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd9906141ea565b60405180910390fd5b610ced838383611d81565b505050565b6000600d6000838152602001908152602001600020600101549050919050565b610d2b610d1e83610cf2565b610d26611ae8565b611474565b610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d619061427c565b60405180910390fd5b610d748282611fdc565b5050565b6000610d838361119b565b8210610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb9061430e565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e25611ae8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e89906143a0565b60405180910390fd5b610e9c82826120bd565b5050565b610ed17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ecc611ae8565b611474565b610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790614432565b60405180910390fd5b610f1861219f565b565b610f3c610f25611ae8565b838360405180602001604052806000815250612241565b5050565b610f5b838383604051806020016040528060008152506116f8565b505050565b610f71610f6b611ae8565b82611ca3565b610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa7906144c4565b60405180910390fd5b610fb98161229d565b50565b6000610fc6610b36565b8210611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90614556565b60405180910390fd5b6009828154811061101b5761101a614576565b5b90600052602060002001549050919050565b6000600e60009054906101000a900460ff166110b4576110747f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661106f611ae8565b611474565b6110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90614617565b60405180910390fd5b5b6110be8484611c18565b6110c88383611c36565b600190509392505050565b6000600c60009054906101000a900460ff16905090565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611189906146a9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361120b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112029061473b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125a611ae8565b73ffffffffffffffffffffffffffffffffffffffff1661127861144b565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c5906147a7565b60405180910390fd5b6112d860006122a9565b565b61130b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611306611ae8565b611474565b61134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190614432565b60405180910390fd5b61135261236d565b565b606060006113618361119b565b67ffffffffffffffff81111561137a57611379613728565b5b6040519080825280602002602001820160405280156113a85781602001602082028036833780820191505090505b50905060005b6113b78461119b565b81101561144157600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000205482828151811061142257611421614576565b5b6020026020010181815250508080611439906147f6565b9150506113ae565b5080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600280546114ee90613e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461151a90613e6d565b80156115675780601f1061153c57610100808354040283529160200191611567565b820191906000526020600020905b81548152906001019060200180831161154a57829003601f168201915b5050505050905090565b6000801b81565b611580611ae8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e49061488a565b60405180910390fd5b80600660006115fa611ae8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116a7611ae8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116ec91906134c8565b60405180910390a35050565b611709611703611ae8565b83611ca3565b611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f906141ea565b60405180910390fd5b61175484848484612241565b50505050565b606061176582612410565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6117a961179c83610cf2565b6117a4611ae8565b611474565b6117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df9061491c565b60405180910390fd5b6117f282826120bd565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119056118b9611ae8565b858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612241565b50505050565b611913611ae8565b73ffffffffffffffffffffffffffffffffffffffff1661193161144b565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e906147a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed906149ae565b60405180910390fd5b6119ff816122a9565b50565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a755750611a7482612561565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b63836110ea565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080600080611bb8856125db565b92509250925060018682858560405160008152602001604052604051611be194939291906149ea565b6020604051602081039080840390855afa158015611c03573d6000803e3d6000fd5b50505060206040510351935050505092915050565b611c32828260405180602001604052806000815250612643565b5050565b611c3f82611a7c565b611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7590614aa1565b60405180910390fd5b80600b60008481526020019081526020016000209081611c9e9190614c6d565b505050565b6000611cae82611a7c565b611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490614db1565b60405180910390fd5b6000611cf8836110ea565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d6757508373ffffffffffffffffffffffffffffffffffffffff16611d4f8461099a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d785750611d77818561181a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611da1826110ea565b73ffffffffffffffffffffffffffffffffffffffff1614611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee90614e43565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d90614ed5565b60405180910390fd5b611e7183838361269e565b611e7c600082611af0565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ecc9190614ef5565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f239190614f29565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611fe68282611474565b6120b9576001600d600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061205e611ae8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6120c78282611474565b1561219b576000600d600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612140611ae8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6121a76110d3565b6121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614fa9565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61222a611ae8565b60405161223791906136d9565b60405180910390a1565b61224c848484611d81565b61225884848484612765565b612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e9061503b565b60405180910390fd5b50505050565b6122a6816128ec565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123756110d3565b156123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac906150a7565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586123f9611ae8565b60405161240691906136d9565b60405180910390a1565b606061241b82611a7c565b61245a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245190615139565b60405180910390fd5b6000600b6000848152602001908152602001600020805461247a90613e6d565b80601f01602080910402602001604051908101604052809291908181526020018280546124a690613e6d565b80156124f35780601f106124c8576101008083540402835291602001916124f3565b820191906000526020600020905b8154815290600101906020018083116124d657829003601f168201915b50505050509050600061250461293f565b9050600081510361251957819250505061255c565b60008251111561254e578082604051602001612536929190615195565b6040516020818303038152906040529250505061255c565b61255784612956565b925050505b919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125d457506125d3826129fd565b5b9050919050565b60008060006041845114612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90615205565b60405180910390fd5b6020840151925060408401519150606084015160001a90509193909250565b61264d8383612adf565b61265a6000848484612765565b612699576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126909061503b565b60405180910390fd5b505050565b6126a66110d3565b156126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd906150a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c90615271565b60405180910390fd5b612760838383612cac565b505050565b60006127868473ffffffffffffffffffffffffffffffffffffffff16612dbe565b156128df578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127af611ae8565b8786866040518563ffffffff1660e01b81526004016127d194939291906152e6565b6020604051808303816000875af192505050801561280d57506040513d601f19601f8201168201806040525081019061280a9190615347565b60015b61288f573d806000811461283d576040519150601f19603f3d011682016040523d82523d6000602084013e612842565b606091505b506000815103612887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287e9061503b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128e4565b600190505b949350505050565b6128f581612dd1565b6000600b6000838152602001908152602001600020805461291590613e6d565b90501461293c57600b6000828152602001908152602001600020600061293b91906133b7565b5b50565b606060405180602001604052806000815250905090565b606061296182611a7c565b6129a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612997906153e6565b60405180910390fd5b60006129aa61293f565b905060008151116129ca57604051806020016040528060008152506129f5565b806129d484612ee2565b6040516020016129e5929190615195565b6040516020818303038152906040525b915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612ac857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612ad85750612ad782613042565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4590615452565b60405180910390fd5b612b5781611a7c565b15612b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8e906154be565b60405180910390fd5b612ba36000838361269e565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bf39190614f29565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612cb78383836130ac565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cf957612cf4816130b1565b612d38565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d3757612d3683826130fa565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d7a57612d7581613267565b612db9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612db857612db78282613338565b5b5b505050565b600080823b905060008111915050919050565b6000612ddc826110ea565b9050612dea8160008461269e565b612df5600083611af0565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e459190614ef5565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b606060008203612f29576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061303d565b600082905060005b60008214612f5b578080612f44906147f6565b915050600a82612f54919061550d565b9150612f31565b60008167ffffffffffffffff811115612f7757612f76613728565b5b6040519080825280601f01601f191660200182016040528015612fa95781602001600182028036833780820191505090505b5090505b6000851461303657600182612fc29190614ef5565b9150600a85612fd1919061553e565b6030612fdd9190614f29565b60f81b818381518110612ff357612ff2614576565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561302f919061550d565b9450612fad565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016131078461119b565b6131119190614ef5565b90506000600860008481526020019081526020016000205490508181146131f6576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061327b9190614ef5565b90506000600a60008481526020019081526020016000205490506000600983815481106132ab576132aa614576565b5b9060005260206000200154905080600983815481106132cd576132cc614576565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548061331c5761331b61556f565b5b6001900381819060005260206000200160009055905550505050565b60006133438361119b565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b5080546133c390613e6d565b6000825580601f106133d557506133f4565b601f0160209004906000526020600020908101906133f391906133f7565b5b50565b5b808211156134105760008160009055506001016133f8565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61345d81613428565b811461346857600080fd5b50565b60008135905061347a81613454565b92915050565b6000602082840312156134965761349561341e565b5b60006134a48482850161346b565b91505092915050565b60008115159050919050565b6134c2816134ad565b82525050565b60006020820190506134dd60008301846134b9565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061350e826134e3565b9050919050565b61351e81613503565b811461352957600080fd5b50565b60008135905061353b81613515565b92915050565b6000819050919050565b61355481613541565b811461355f57600080fd5b50565b6000813590506135718161354b565b92915050565b6000806040838503121561358e5761358d61341e565b5b600061359c8582860161352c565b92505060206135ad85828601613562565b9150509250929050565b6000819050919050565b6135ca816135b7565b82525050565b60006020820190506135e560008301846135c1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561362557808201518184015260208101905061360a565b60008484015250505050565b6000601f19601f8301169050919050565b600061364d826135eb565b61365781856135f6565b9350613667818560208601613607565b61367081613631565b840191505092915050565b600060208201905081810360008301526136958184613642565b905092915050565b6000602082840312156136b3576136b261341e565b5b60006136c184828501613562565b91505092915050565b6136d381613503565b82525050565b60006020820190506136ee60008301846136ca565b92915050565b6136fd81613541565b82525050565b600060208201905061371860008301846136f4565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61376082613631565b810181811067ffffffffffffffff8211171561377f5761377e613728565b5b80604052505050565b6000613792613414565b905061379e8282613757565b919050565b600067ffffffffffffffff8211156137be576137bd613728565b5b6137c782613631565b9050602081019050919050565b82818337600083830152505050565b60006137f66137f1846137a3565b613788565b90508281526020810184848401111561381257613811613723565b5b61381d8482856137d4565b509392505050565b600082601f83011261383a5761383961371e565b5b813561384a8482602086016137e3565b91505092915050565b600080fd5b600080fd5b60008083601f8401126138735761387261371e565b5b8235905067ffffffffffffffff8111156138905761388f613853565b5b6020830191508360018202830111156138ac576138ab613858565b5b9250929050565b60008060008060008060a087890312156138d0576138cf61341e565b5b60006138de89828a0161352c565b96505060206138ef89828a0161352c565b955050604061390089828a01613562565b945050606087013567ffffffffffffffff81111561392157613920613423565b5b61392d89828a01613825565b935050608087013567ffffffffffffffff81111561394e5761394d613423565b5b61395a89828a0161385d565b92509250509295509295509295565b6000806000606084860312156139825761398161341e565b5b60006139908682870161352c565b93505060206139a18682870161352c565b92505060406139b286828701613562565b9150509250925092565b6139c5816135b7565b81146139d057600080fd5b50565b6000813590506139e2816139bc565b92915050565b6000602082840312156139fe576139fd61341e565b5b6000613a0c848285016139d3565b91505092915050565b60008060408385031215613a2c57613a2b61341e565b5b6000613a3a858286016139d3565b9250506020613a4b8582860161352c565b9150509250929050565b600080600060608486031215613a6e57613a6d61341e565b5b6000613a7c8682870161352c565b9350506020613a8d86828701613562565b925050604084013567ffffffffffffffff811115613aae57613aad613423565b5b613aba86828701613825565b9150509250925092565b600060208284031215613ada57613ad961341e565b5b6000613ae88482850161352c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b2681613541565b82525050565b6000613b388383613b1d565b60208301905092915050565b6000602082019050919050565b6000613b5c82613af1565b613b668185613afc565b9350613b7183613b0d565b8060005b83811015613ba2578151613b898882613b2c565b9750613b9483613b44565b925050600181019050613b75565b5085935050505092915050565b60006020820190508181036000830152613bc98184613b51565b905092915050565b613bda816134ad565b8114613be557600080fd5b50565b600081359050613bf781613bd1565b92915050565b60008060408385031215613c1457613c1361341e565b5b6000613c228582860161352c565b9250506020613c3385828601613be8565b9150509250929050565b600067ffffffffffffffff821115613c5857613c57613728565b5b613c6182613631565b9050602081019050919050565b6000613c81613c7c84613c3d565b613788565b905082815260208101848484011115613c9d57613c9c613723565b5b613ca88482856137d4565b509392505050565b600082601f830112613cc557613cc461371e565b5b8135613cd5848260208601613c6e565b91505092915050565b60008060008060808587031215613cf857613cf761341e565b5b6000613d068782880161352c565b9450506020613d178782880161352c565b9350506040613d2887828801613562565b925050606085013567ffffffffffffffff811115613d4957613d48613423565b5b613d5587828801613cb0565b91505092959194509250565b60008060408385031215613d7857613d7761341e565b5b6000613d868582860161352c565b9250506020613d978582860161352c565b9150509250929050565b60008060008060608587031215613dbb57613dba61341e565b5b6000613dc98782880161352c565b9450506020613dda87828801613562565b935050604085013567ffffffffffffffff811115613dfb57613dfa613423565b5b613e078782880161385d565b925092505092959194509250565b6000604082019050613e2a60008301856136ca565b613e3760208301846136f4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e8557607f821691505b602082108103613e9857613e97613e3e565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613efa602c836135f6565b9150613f0582613e9e565b604082019050919050565b60006020820190508181036000830152613f2981613eed565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f8c6021836135f6565b9150613f9782613f30565b604082019050919050565b60006020820190508181036000830152613fbb81613f7f565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061401e6038836135f6565b915061402982613fc2565b604082019050919050565b6000602082019050818103600083015261404d81614011565b9050919050565b7f546865207369676e657220646f6573206e6f742068617665207468652072657160008201527f756972656420726f6c6500000000000000000000000000000000000000000000602082015250565b60006140b0602a836135f6565b91506140bb82614054565b604082019050919050565b600060208201905081810360008301526140df816140a3565b9050919050565b7f546865207369676e61747572652070726f766964656420646f6573206e6f742060008201527f6d61746368000000000000000000000000000000000000000000000000000000602082015250565b60006141426025836135f6565b915061414d826140e6565b604082019050919050565b6000602082019050818103600083015261417181614135565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006141d46031836135f6565b91506141df82614178565b604082019050919050565b60006020820190508181036000830152614203816141c7565b9050919050565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f206772616e740000000000000000000000000000000000602082015250565b6000614266602f836135f6565b91506142718261420a565b604082019050919050565b6000602082019050818103600083015261429581614259565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006142f8602b836135f6565b91506143038261429c565b604082019050919050565b60006020820190508181036000830152614327816142eb565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061438a602f836135f6565b91506143958261432e565b604082019050919050565b600060208201905081810360008301526143b98161437d565b9050919050565b7f536f6369616c5363616e42616467653a206d757374206861766520706175736560008201527f7220726f6c6520746f2070617573650000000000000000000000000000000000602082015250565b600061441c602f836135f6565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b60006144ae6030836135f6565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614540602c836135f6565b915061454b826144e4565b604082019050919050565b6000602082019050818103600083015261456f81614533565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f536f6369616c5363616e42616467653a206d7573742068617665206d696e746560008201527f7220726f6c6520746f206d696e74000000000000000000000000000000000000602082015250565b6000614601602e836135f6565b915061460c826145a5565b604082019050919050565b60006020820190508181036000830152614630816145f4565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006146936029836135f6565b915061469e82614637565b604082019050919050565b600060208201905081810360008301526146c281614686565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614725602a836135f6565b9150614730826146c9565b604082019050919050565b6000602082019050818103600083015261475481614718565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147916020836135f6565b915061479c8261475b565b602082019050919050565b600060208201905081810360008301526147c081614784565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061480182613541565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614833576148326147c7565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006148746019836135f6565b915061487f8261483e565b602082019050919050565b600060208201905081810360008301526148a381614867565b9050919050565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f207265766f6b6500000000000000000000000000000000602082015250565b60006149066030836135f6565b9150614911826148aa565b604082019050919050565b60006020820190508181036000830152614935816148f9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149986026836135f6565b91506149a38261493c565b604082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b600060ff82169050919050565b6149e4816149ce565b82525050565b60006080820190506149ff60008301876135c1565b614a0c60208301866149db565b614a1960408301856135c1565b614a2660608301846135c1565b95945050505050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b6000614a8b602e836135f6565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614b237fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614ae6565b614b2d8683614ae6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614b6a614b65614b6084613541565b614b45565b613541565b9050919050565b6000819050919050565b614b8483614b4f565b614b98614b9082614b71565b848454614af3565b825550505050565b600090565b614bad614ba0565b614bb8818484614b7b565b505050565b5b81811015614bdc57614bd1600082614ba5565b600181019050614bbe565b5050565b601f821115614c2157614bf281614ac1565b614bfb84614ad6565b81016020851015614c0a578190505b614c1e614c1685614ad6565b830182614bbd565b50505b505050565b600082821c905092915050565b6000614c4460001984600802614c26565b1980831691505092915050565b6000614c5d8383614c33565b9150826002028217905092915050565b614c76826135eb565b67ffffffffffffffff811115614c8f57614c8e613728565b5b614c998254613e6d565b614ca4828285614be0565b600060209050601f831160018114614cd75760008415614cc5578287015190505b614ccf8582614c51565b865550614d37565b601f198416614ce586614ac1565b60005b82811015614d0d57848901518255600182019150602085019450602081019050614ce8565b86831015614d2a5784890151614d26601f891682614c33565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614d9b602c836135f6565b9150614da682614d3f565b604082019050919050565b60006020820190508181036000830152614dca81614d8e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614e2d6029836135f6565b9150614e3882614dd1565b604082019050919050565b60006020820190508181036000830152614e5c81614e20565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ebf6024836135f6565b9150614eca82614e63565b604082019050919050565b60006020820190508181036000830152614eee81614eb2565b9050919050565b6000614f0082613541565b9150614f0b83613541565b9250828203905081811115614f2357614f226147c7565b5b92915050565b6000614f3482613541565b9150614f3f83613541565b9250828201905080821115614f5757614f566147c7565b5b92915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614f936014836135f6565b9150614f9e82614f5d565b602082019050919050565b60006020820190508181036000830152614fc281614f86565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006150256032836135f6565b915061503082614fc9565b604082019050919050565b6000602082019050818103600083015261505481615018565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006150916010836135f6565b915061509c8261505b565b602082019050919050565b600060208201905081810360008301526150c081615084565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b60006151236031836135f6565b915061512e826150c7565b604082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b600081905092915050565b600061516f826135eb565b6151798185615159565b9350615189818560208601613607565b80840191505092915050565b60006151a18285615164565b91506151ad8284615164565b91508190509392505050565b7f696e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b60006151ef6018836135f6565b91506151fa826151b9565b602082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b7f4572723a20746f6b656e207472616e7366657220697320424c4f434b45440000600082015250565b600061525b601e836135f6565b915061526682615225565b602082019050919050565b6000602082019050818103600083015261528a8161524e565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006152b882615291565b6152c2818561529c565b93506152d2818560208601613607565b6152db81613631565b840191505092915050565b60006080820190506152fb60008301876136ca565b61530860208301866136ca565b61531560408301856136f4565b818103606083015261532781846152ad565b905095945050505050565b60008151905061534181613454565b92915050565b60006020828403121561535d5761535c61341e565b5b600061536b84828501615332565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006153d0602f836135f6565b91506153db82615374565b604082019050919050565b600060208201905081810360008301526153ff816153c3565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061543c6020836135f6565b915061544782615406565b602082019050919050565b6000602082019050818103600083015261546b8161542f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006154a8601c836135f6565b91506154b382615472565b602082019050919050565b600060208201905081810360008301526154d78161549b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061551882613541565b915061552383613541565b925082615533576155326154de565b5b828204905092915050565b600061554982613541565b915061555483613541565b925082615564576155636154de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212209c0800dc566614d73c717eaa941a6c108a764d55d86f61c7835410035482175964736f6c63430008140033" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100435760003560e01c80635c60da1b1461005c578063715018a6146100875780638da5cb5b1461009e578063f2fde38b146100c957610052565b36610052576100506100f2565b005b61005a6100f2565b005b34801561006857600080fd5b5061007161010c565b60405161007e91906105dd565b60405180910390f35b34801561009357600080fd5b5061009c61011b565b005b3480156100aa57600080fd5b506100b36101a3565b6040516100c091906105dd565b60405180910390f35b3480156100d557600080fd5b506100f060048036038101906100eb9190610629565b6101cc565b005b6100fa6102fa565b61010a6101056102fc565b610353565b565b60006101166102fc565b905090565b610123610379565b73ffffffffffffffffffffffffffffffffffffffff166101416101a3565b73ffffffffffffffffffffffffffffffffffffffff1614610197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018e906106b3565b60405180910390fd5b6101a16000610381565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6101d4610379565b73ffffffffffffffffffffffffffffffffffffffff166101f26101a3565b73ffffffffffffffffffffffffffffffffffffffff1614610248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023f906106b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ae90610745565b60405180910390fd5b6102c081610381565b50565b6000819050919050565b60606102f283836040518060600160405280602781526020016108f760279139610445565b905092915050565b565b600061032a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6102c3565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3660008037600080366000845af43d6000803e8060008114610374573d6000f35b3d6000fd5b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606061045084610512565b61048f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610486906107d7565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516104b79190610868565b600060405180830381855af49150503d80600081146104f2576040519150601f19603f3d011682016040523d82523d6000602084013e6104f7565b606091505b5091509150610507828286610535565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060831561054557829050610595565b6000835111156105585782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058c91906108d4565b60405180910390fd5b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006105c78261059c565b9050919050565b6105d7816105bc565b82525050565b60006020820190506105f260008301846105ce565b92915050565b600080fd5b610606816105bc565b811461061157600080fd5b50565b600081359050610623816105fd565b92915050565b60006020828403121561063f5761063e6105f8565b5b600061064d84828501610614565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061069d602083610656565b91506106a882610667565b602082019050919050565b600060208201905081810360008301526106cc81610690565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061072f602683610656565b915061073a826106d3565b604082019050919050565b6000602082019050818103600083015261075e81610722565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006107c1602683610656565b91506107cc82610765565b604082019050919050565b600060208201905081810360008301526107f0816107b4565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561082b578082015181840152602081019050610810565b60008484015250505050565b6000610842826107f7565b61084c8185610802565b935061085c81856020860161080d565b80840191505092915050565b60006108748284610837565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b60006108a68261087f565b6108b08185610656565b93506108c081856020860161080d565b6108c98161088a565b840191505092915050565b600060208201905081810360008301526108ee818461089b565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122061ca5f2e22f789175c380ee99c370d82b015f032a3a837c298fa24e68cad88e064736f6c63430008120033" + }, + { + "address": "0x6ecff6cf7b8fc76903ba027bb639eafdd49b8d08", + "nonce": 31, + "balance": "0x000000000000000000000000000000000000000000000000005bfdeca99917f8", + "code": "0x" + }, + { + "address": "0x487e08aad08cfd10babf7a2219b8bba9f96e49ae", + "nonce": 15, + "balance": "0x00000000000000000000000000000000000000000000000355650106f71b2874", + "code": "0x" + }, + { + "address": "0xb5bedd42000b71fdde22d3ee8a79bd49a568fc8f", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033" + }, + { + "address": "0x354f5a3938a1bc282a6ae9878387aea31a626ea9", + "nonce": 31, + "balance": "0x0000000000000000000000000000000000000000000000000047e130aa926980", + "code": "0x" + }, + { + "address": "0x57d8311842f41ec811352f5d68616fd51551a391", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063800096301161008c578063da3d454c11610066578063da3d454c146101b5578063eabe7d91146101c8578063f2f4eb26146101db578063f2fde38b146101e3576100ea565b806380009630146101875780638da5cb5b1461019a578063c4d66de8146101a2576100ea565b80635ec88c79116100c85780635ec88c79146101425780636922d7b614610155578063715018a61461016a5780637dc0d1d014610172576100ea565b8063158ef93e146100ef5780631ed4a1741461010d57806325d024621461012f575b600080fd5b6100f76101f6565b6040516101049190611bb9565b60405180910390f35b61012061011b3660046118b3565b610206565b60405161010493929190611f8a565b6100f761013d3660046118f3565b6105cb565b61012061015036600461187b565b6106a6565b61016861016336600461187b565b610b08565b005b610168610b8f565b61017a610c18565b6040516101049190611b3e565b61016861019536600461187b565b610c27565b61017a610cd7565b6101686101b036600461187b565b610ce6565b6100f76101c33660046118b3565b610d7f565b6100f76101d63660046118b3565b61100b565b61017a611026565b6101686101f136600461187b565b611035565b600354600160a01b900460ff1681565b60015460405163fc57d4df60e01b8152600091829182916001600160a01b03169063fc57d4df9061023b908990600401611b3e565b60206040518083038186803b15801561025357600080fd5b505afa158015610267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028b9190611b05565b15801590610317575060015460405163fc57d4df60e01b81526001600160a01b039091169063fc57d4df906102c4908890600401611b3e565b60206040518083038186803b1580156102dc57600080fd5b505afa1580156102f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103149190611b05565b15155b61033c5760405162461bcd60e51b815260040161033390611bc4565b60405180910390fd5b6000856001600160a01b0316638b9db0376040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561037957600080fd5b505af115801561038d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b19190611b05565b9050806103d05760405162461bcd60e51b815260040161033390611ebc565b60006103db886110f5565b905060006103e8886110f5565b60015460405163fc57d4df60e01b81529192506000916105a59161047c9187916001600160a01b03169063fc57d4df90610426908f90600401611b3e565b60206040518083038186803b15801561043e57600080fd5b505afa158015610452573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104769190611b05565b906111ff565b61059f600160009054906101000a90046001600160a01b03166001600160a01b031663fc57d4df8e6040518263ffffffff1660e01b81526004016104c09190611b3e565b60206040518083038186803b1580156104d857600080fd5b505afa1580156104ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105109190611b05565b6002546040805163231d97a560e21b81529051610476926001600160a01b031691638c765e94916004808301926020929190829003018186803b15801561055657600080fd5b505afa15801561056a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058e9190611b05565b6104768e60128b9003600a0a6111ff565b90611242565b90506105b8816012849003600a0a611242565b9a60009a508b9950975050505050505050565b6000806105dc856000806000611274565b915050806105fc5760405162461bcd60e51b815260040161033390611dce565b6040516341cce05d60e11b81526000906001600160a01b03881690638399c0ba9061062b908990600401611b3e565b602060405180830381600087803b15801561064557600080fd5b505af1158015610659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067d9190611b05565b90506000610697670de0b6b3a764000061059f87856111ff565b90951115979650505050505050565b6002546040516305189e1160e41b8152600091829182916060916001600160a01b0390911690635189e110906106e0908890600401611b3e565b60006040518083038186803b1580156106f857600080fd5b505afa15801561070c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107349190810190611938565b6001546040516348a1371b60e01b81529192506060916001600160a01b03909116906348a1371b9061076a908590600401611b6c565b60006040518083038186803b15801561078257600080fd5b505afa158015610796573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107be91908101906119d6565b905060005b8251811015610afe578181815181106107d857fe5b6020026020010151600014156108005760405162461bcd60e51b815260040161033390611bc4565b600061081e84838151811061081157fe5b60200260200101516110f5565b905061082861185a565b84838151811061083457fe5b60200260200101516001600160a01b031663014a296f8a6040518263ffffffff1660e01b81526004016108679190611b3e565b60606040518083038186803b15801561087f57600080fd5b505afa158015610893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b79190611a76565b60035486519192506000916001600160a01b03909116908790869081106108da57fe5b60200260200101516001600160a01b0316148015610912575067010a741a4627800085858151811061090857fe5b6020026020010151115b15610926575067010a741a4627800061093d565b84848151811061093257fe5b602002602001015190505b60025486516000916001600160a01b031690636e8584fd9089908890811061096157fe5b60200260200101516040518263ffffffff1660e01b81526004016109859190611b3e565b60806040518083038186803b15801561099d57600080fd5b505afa1580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d59190611ab3565b6060015190506000610a0b6ec097ce7bc90715b34b9f100000000061059f846104768789604001516111ff90919063ffffffff16565b9050610a44610a3d670de0b6b3a764000061059f846104768a601203600a0a8a600001516111ff90919063ffffffff16565b8c906117af565b9a50610a9f610a986ec097ce7bc90715b34b9f100000000061059f8a8a81518110610a6b57fe5b60200260200101516104768a601203600a0a6104768b604001518c600001516111ff90919063ffffffff16565b8b906117af565b9950610aeb610ae4670de0b6b3a764000061059f8a8a81518110610abf57fe5b60200260200101516104768a601203600a0a8a602001516111ff90919063ffffffff16565b8a906117af565b985050600190940193506107c392505050565b5050509193909250565b610b106117d4565b6001600160a01b0316610b21610cd7565b6001600160a01b031614610b475760405162461bcd60e51b815260040161033390611e87565b6001600160a01b038116610b6d5760405162461bcd60e51b815260040161033390611ce9565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610b976117d4565b6001600160a01b0316610ba8610cd7565b6001600160a01b031614610bce5760405162461bcd60e51b815260040161033390611e87565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001546001600160a01b031681565b610c2f6117d4565b6001600160a01b0316610c40610cd7565b6001600160a01b031614610c665760405162461bcd60e51b815260040161033390611e87565b6001600160a01b038116610c8c5760405162461bcd60e51b815260040161033390611f53565b6002546001600160a01b031615610cb55760405162461bcd60e51b815260040161033390611e0f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b610cee6117d4565b6001600160a01b0316610cff610cd7565b6001600160a01b031614610d255760405162461bcd60e51b815260040161033390611e87565b600354600160a01b900460ff1615610d4f5760405162461bcd60e51b815260040161033390611da1565b6003805460ff60a01b196001600160a01b039093166001600160a01b03199091161791909116600160a01b179055565b60025460405163929fe9a160e01b81526000916001600160a01b03169063929fe9a190610db29086908890600401611b52565b60206040518083038186803b158015610dca57600080fd5b505afa158015610dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e029190611a5a565b610e1e5760405162461bcd60e51b815260040161033390611cb2565b60015460405163fc57d4df60e01b81526000916001600160a01b03169063fc57d4df90610e4f908890600401611b3e565b60206040518083038186803b158015610e6757600080fd5b505afa158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190611b05565b11610ebc5760405162461bcd60e51b815260040161033390611bf4565b600254604051636e8584fd60e01b81526000916001600160a01b031690636e8584fd90610eed908890600401611b3e565b60806040518083038186803b158015610f0557600080fd5b505afa158015610f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3d9190611ab3565b6040015190508015610ff0576000856001600160a01b031663ecdaff7e6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f8657600080fd5b505af1158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe9190611b05565b90506000610fcc82866117af565b9050828110610fed5760405162461bcd60e51b815260040161033390611f0f565b50505b6000610fff8587600087611274565b15979650505050505050565b60008061101b8486856000611274565b159695505050505050565b6002546001600160a01b031681565b61103d6117d4565b6001600160a01b031661104e610cd7565b6001600160a01b0316146110745760405162461bcd60e51b815260040161033390611e87565b6001600160a01b03811661109a5760405162461bcd60e51b815260040161033390611c35565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561113157600080fd5b505afa158015611145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111699190611897565b90506001600160a01b03811661118257601291506111f9565b806001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f39190611b1d565b60ff1691505b50919050565b60008261120e5750600061123c565b8282028284828161121b57fe5b04146112395760405162461bcd60e51b815260040161033390611e46565b90505b92915050565b60008082116112635760405162461bcd60e51b815260040161033390611d6a565b81838161126c57fe5b049392505050565b6002546040516305189e1160e41b81526000918291829182916060916001600160a01b031690635189e110906112ae908c90600401611b3e565b60006040518083038186803b1580156112c657600080fd5b505afa1580156112da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113029190810190611938565b6001546040516348a1371b60e01b81529192506060916001600160a01b03909116906348a1371b90611338908590600401611b6c565b60006040518083038186803b15801561135057600080fd5b505afa158015611364573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261138c91908101906119d6565b905060005b825181101561176c5760006113ab84838151811061081157fe5b90508282815181106113b957fe5b6020026020010151600014156113e15760405162461bcd60e51b815260040161033390611bc4565b6113e961185a565b8483815181106113f557fe5b60200260200101516001600160a01b03166392fa4e8e8e6040518263ffffffff1660e01b81526004016114289190611b3e565b606060405180830381600087803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147a9190611a76565b60035486519192506000916001600160a01b039091169087908690811061149d57fe5b60200260200101516001600160a01b03161480156114d5575067010a741a462780008585815181106114cb57fe5b6020026020010151115b156115aa5760025486516115a3916ec097ce7bc90715b34b9f10000000009161059f916001600160a01b031690636e8584fd908b908a90811061151457fe5b60200260200101516040518263ffffffff1660e01b81526004016115389190611b3e565b60806040518083038186803b15801561155057600080fd5b505afa158015611564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115889190611ab3565b6060015160408601516104769067010a741a462780006111ff565b9050611689565b6002548651611686916ec097ce7bc90715b34b9f10000000009161059f916001600160a01b031690636e8584fd908b908a9081106115e457fe5b60200260200101516040518263ffffffff1660e01b81526004016116089190611b3e565b60806040518083038186803b15801561162057600080fd5b505afa158015611634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116589190611ab3565b6060015161047689898151811061166b57fe5b602002602001015187604001516111ff90919063ffffffff16565b90505b6116c06116b9670de0b6b3a764000061059f8461047688601203600a0a88600001516111ff90919063ffffffff16565b89906117af565b975061170c611705670de0b6b3a764000061059f8888815181106116e057fe5b602002602001015161047688601203600a0a88602001516111ff90919063ffffffff16565b88906117af565b96508c6001600160a01b031686858151811061172457fe5b60200260200101516001600160a01b031614156117615761175e6117058d8d8489898151811061175057fe5b6020026020010151886117d8565b96505b505050600101611391565b5082841161177b576000611785565b6117858484611832565b955082841161179d576117988385611832565b6117a0565b60005b94505050505094509492505050565b6000828201838110156112395760405162461bcd60e51b815260040161033390611c7b565b3390565b60006117fb670de0b6b3a764000061059f866104768a6012889003600a0a6111ff565b9050611828611821670de0b6b3a764000061059f866104768a6012899003600a0a6111ff565b82906117af565b9695505050505050565b6000828211156118545760405162461bcd60e51b815260040161033390611d33565b50900390565b60405180606001604052806000815260200160008152602001600081525090565b60006020828403121561188c578081fd5b813561123981611fe7565b6000602082840312156118a8578081fd5b815161123981611fe7565b6000806000606084860312156118c7578182fd5b83356118d281611fe7565b925060208401356118e281611fe7565b929592945050506040919091013590565b60008060008060808587031215611908578081fd5b843561191381611fe7565b9350602085013561192381611fe7565b93969395505050506040820135916060013590565b6000602080838503121561194a578182fd5b825167ffffffffffffffff811115611960578283fd5b8301601f81018513611970578283fd5b805161198361197e82611fc7565b611fa0565b818152838101908385018584028501860189101561199f578687fd5b8694505b838510156119ca5780516119b681611fe7565b8352600194909401939185019185016119a3565b50979650505050505050565b600060208083850312156119e8578182fd5b825167ffffffffffffffff8111156119fe578283fd5b8301601f81018513611a0e578283fd5b8051611a1c61197e82611fc7565b8181528381019083850185840285018601891015611a38578687fd5b8694505b838510156119ca578051835260019490940193918501918501611a3c565b600060208284031215611a6b578081fd5b815161123981611fff565b600060608284031215611a87578081fd5b611a916060611fa0565b8251815260208301516020820152604083015160408201528091505092915050565b600060808284031215611ac4578081fd5b611ace6080611fa0565b8251611ad981611fff565b808252506020830151602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215611b16578081fd5b5051919050565b600060208284031215611b2e578081fd5b815160ff81168114611239578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015611bad5783516001600160a01b031683529284019291840191600101611b88565b50909695505050505050565b901515815260200190565b6020808252601690820152752b30b634b230ba37b91d10383934b1b29032b93937b960511b604082015260600190565b60208082526021908201527f56616c696461746f723a20556e6465726c79696e67207072696365206572726f6040820152603960f91b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601f908201527f56616c696461746f723a20656e7465724d61726b657420726571756972656400604082015260600190565b6020808252602a908201527f56616c696461746f723a20696e76616c696420707269636543616c63756c61746040820152696f72206164647265737360b01b606082015260800190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b602080825260139082015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604082015260600190565b60208082526021908201527f56616c696461746f723a20496e73756666696369656e742073686f727466616c6040820152601b60fa1b606082015260800190565b6020808252601b908201527f56616c696461746f723a20636f726520616c7265616479207365740000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f56616c696461746f723a2065786368616e676552617465206f662067546f6b656040820152726e436f6c6c61746572616c206973207a65726f60681b606082015260800190565b60208082526024908201527f56616c696461746f723a206d61726b657420626f72726f77206361702072656160408201526318da195960e21b606082015260800190565b6020808252601f908201527f56616c696461746f723a20696e76616c696420636f7265206164647265737300604082015260600190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff81118282101715611fbf57600080fd5b604052919050565b600067ffffffffffffffff821115611fdd578081fd5b5060209081020190565b6001600160a01b0381168114611ffc57600080fd5b50565b8015158114611ffc57600080fdfea2646970667358221220b0fe058d43ebba2832e195cd6401caab4fcd04366bf749c02c0fce98b256953b64736f6c634300060c0033" + }, + { + "address": "0x5eca542ba69755763af3cf6f670986cd56c06b7b", + "nonce": 2, + "balance": "0x000000000000000000000000000000000000000000000000002c331011a9dc62", + "code": "0x" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061007b5760003560e01c8063dcfbc0c71161004e578063dcfbc0c714610196578063e992a041146101b6578063e9c714f2146101d6578063f851a440146101eb5761007b565b806326782247146100f6578063b71d1a0c14610133578063bb82aa5e14610161578063c1e8033414610181575b6002546040516000916001600160a01b03169061009b908390369061055a565b600060405180830381855af49150503d80600081146100d6576040519150601f19603f3d011682016040523d82523d6000602084013e6100db565b606091505b505090506040513d6000823e8180156100f2573d82f35b3d82fd5b34801561010257600080fd5b50600154610116906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013f57600080fd5b5061015361014e36600461056a565b61020b565b60405190815260200161012a565b34801561016d57600080fd5b50600254610116906001600160a01b031681565b34801561018d57600080fd5b50610153610298565b3480156101a257600080fd5b50600354610116906001600160a01b031681565b3480156101c257600080fd5b506101536101d136600461056a565b61038e565b3480156101e257600080fd5b50610153610407565b3480156101f757600080fd5b50600054610116906001600160a01b031681565b600080546001600160a01b031633146102305761022a6001600e6104e1565b92915050565b600180546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a991015b60405180910390a160005b9392505050565b6003546000906001600160a01b0316331415806102be57506003546001600160a01b0316155b156102d3576102ce6001806104e1565b905090565b60028054600380546001600160a01b038082166001600160a01b031980861682179096559490911690915560408051919092168082526020820184905292917fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a1600354604080516001600160a01b03808516825290921660208301527fe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d81591015b60405180910390a160009250505090565b600080546001600160a01b031633146103ad5761022a6001600f6104e1565b600380546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d8159101610286565b6001546000906001600160a01b031633141580610422575033155b15610433576102ce600160006104e1565b60008054600180546001600160a01b038082166001600160a01b031980861682179096559490911690915560408051919092168082526020820184905292917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600154604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910161037d565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa083601181111561051657610516610593565b83601381111561052857610528610593565b60408051928352602083019190915260009082015260600160405180910390a182601181111561029157610291610593565b8183823760009101908152919050565b60006020828403121561057c57600080fd5b81356001600160a01b038116811461029157600080fd5b634e487b7160e01b600052602160045260246000fdfea264697066735822122025043ebd2cc17c3ec9d368a9bca3bc3ca1cf9f3bc23bdb723b204f2139ae06ff64736f6c634300080a0033" + }, + { + "address": "0xc30043e74ec1b2debb2774a0f10531bb6fdaf5ed", + "nonce": 26, + "balance": "0x00000000000000000000000000000000000000000000000002c2f1a817172d74", + "code": "0x" + }, + { + "address": "0xd5539d0360438a66661148c633a9f0965e482845", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370cf754a116100f9578063cc7e7fa211610097578063ddca3f4311610071578063ddca3f4314610842578063f305839914610862578063f30dba931461086a578063f637731d146108ec576101c4565b8063cc7e7fa2146107f5578063d0c93a7c1461081b578063d21220a71461083a576101c4565b8063a34123a7116100d3578063a34123a71461072d578063a38807f214610767578063b0d0d211146107c2578063c45a0155146107ed576101c4565b806370cf754a146105e157806385b66729146105e9578063883bdbfd14610626576101c4565b80633c8a7d8d116101665780634f1eb3d8116101405780634f1eb3d81461050f578063514ea4bf146105605780635339c296146105b9578063540d4918146105d9576101c4565b80633c8a7d8d146103cb578063461413191461046b578063490e6cbc14610485576101c4565b80631ad8b03b116101a25780631ad8b03b146102be578063252c09d7146102f557806332148f671461034c5780633850c7bd1461036f576101c4565b80630dfe1681146101c9578063128acb08146101ed5780631a6865021461029a575b600080fd5b6101d1610912565b604080516001600160a01b039092168252519081900360200190f35b610281600480360360a081101561020357600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a081016080820135600160201b81111561024357600080fd5b82018360208201111561025557600080fd5b803590602001918460018302840111600160201b8311171561027657600080fd5b509092509050610936565b6040805192835260208301919091528051918290030190f35b6102a2611633565b604080516001600160801b039092168252519081900360200190f35b6102c6611642565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6103126004803603602081101561030b57600080fd5b503561165c565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b61036d6004803603602081101561036257600080fd5b503561ffff166116a1565b005b610377611793565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015263ffffffff90911660a0840152151560c0830152519081900360e00190f35b610281600480360360a08110156103e157600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a081016080820135600160201b81111561042d57600080fd5b82018360208201111561043f57600080fd5b803590602001918460018302840111600160201b8311171561046057600080fd5b5090925090506117e8565b610473611aa6565b60408051918252519081900360200190f35b61036d6004803603608081101561049b57600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156104d157600080fd5b8201836020820111156104e357600080fd5b803590602001918460018302840111600160201b8311171561050457600080fd5b509092509050611aac565b6102c6600480360360a081101561052557600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611ef3565b61057d6004803603602081101561057657600080fd5b5035612111565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b610473600480360360208110156105cf57600080fd5b503560010b61214e565b6101d1612160565b6102a2612171565b6102c6600480360360608110156105ff57600080fd5b506001600160a01b03813516906001600160801b0360208201358116916040013516612195565b6106946004803603602081101561063c57600080fd5b810190602081018135600160201b81111561065657600080fd5b82018360208201111561066857600080fd5b803590602001918460208302840111600160201b8311171561068957600080fd5b509092509050612490565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106d85781810151838201526020016106c0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156107175781810151838201526020016106ff565b5050505090500194505050505060405180910390f35b6102816004803603606081101561074357600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612515565b6107916004803603604081101561077d57600080fd5b508035600290810b9160200135900b612691565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b61036d600480360360408110156107d857600080fd5b5063ffffffff81358116916020013516612879565b6101d1612aa1565b61036d6004803603602081101561080b57600080fd5b50356001600160a01b0316612ac5565b610823612be7565b6040805160029290920b8252519081900360200190f35b6101d1612c0b565b61084a612c2f565b6040805162ffffff9092168252519081900360200190f35b610473612c53565b61088a6004803603602081101561088057600080fd5b503560020b612c59565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b61036d6004803603602081101561090257600080fd5b50356001600160a01b0316612cc5565b7f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff81565b60008085610970576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b9004909116608082015260015463ffffffff811660a083015260ff600160201b90910416151560c08201819052610a28576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610a735780600001516001600160a01b0316866001600160a01b0316118015610a6e575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610aa5565b80600001516001600160a01b0316866001600160a01b0316108015610aa557506401000276a36001600160a01b038716115b610adc576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6001805460ff60201b191690556040805160c08101909152600090808a610b115760108460a0015163ffffffff16901c610b1b565b60a084015161ffff165b63ffffffff1681526005546001600160801b03166020820152604001610b3f612fca565b63ffffffff1681526000602082018190526040820181905260609091015262010008549091506001600160a01b031615610be557620100085460408083015181516310a537f160e11b815263ffffffff909116600482015290516001600160a01b039092169163214a6fe29160248082019260009290919082900301818387803b158015610bcc57600080fd5b505af1158015610be0573d6000803e3d6000fd5b505050505b6000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610c3357600354610c37565b6002545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610c865750886001600160a01b031681604001516001600160a01b031614155b156110f557610c93615942565b60408201516001600160a01b031681526060820151610cd6906007907f000000000000000000000000000000000000000000000000000000000000000a8f612fce565b15156040830152600290810b810b60208301819052620d89e719910b1215610d0757620d89e7196020820152610d26565b6020810151620d89e860029190910b1315610d2657620d89e860208201525b610d338160200151613110565b6001600160a01b031660608201526040820151610dc4908d610d6d578b6001600160a01b031683606001516001600160a01b031611610d87565b8b6001600160a01b031683606001516001600160a01b0316105b610d95578260600151610d97565b8b5b60c085015185517f00000000000000000000000000000000000000000000000000000000000001f4613441565b60c085015260a084015260808301526001600160a01b031660408301528215610e2657610dfa8160c00151826080015101613633565b825103825260a0810151610e1c90610e1190613633565b602084015190613649565b6020830152610e61565b610e338160a00151613633565b825101825260c08101516080820151610e5b91610e509101613633565b602084015190613665565b60208301525b835163ffffffff1615610ec1576000612710610e94866000015163ffffffff168460c0015161367b90919063ffffffff16565b81610e9b57fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610f0057610ef48160c00151600160801b8460c001516001600160801b031661369f565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b031614156110b45780604001511561108b578360a00151610f8a57610f68846040015160008760200151886040015188602001518a60600151600961374f909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b62010008546001600160a01b03161561101557620100085460208201516040805163a498463360e01b815260029290920b60048301528e15156024830152516001600160a01b039092169163a49846339160448082019260009290919082900301818387803b158015610ffc57600080fd5b505af1158015611010573d6000803e3d6000fd5b505050505b600061106182602001518e61102c57600254611032565b84608001515b8f611041578560800151611045565b6003545b608089015160608a015160408b015160069594939291906138e1565b90508c1561106d576000035b61107b8360c001518261399f565b6001600160801b031660c0840152505b8b61109a5780602001516110a3565b60018160200151035b600290810b900b60608301526110ef565b80600001516001600160a01b031682604001516001600160a01b0316146110ef576110e28260400151613a55565b600290810b900b60608301525b50610c60565b836020015160020b816060015160020b146111c35760008061114386604001518660400151886020015188602001518a606001518b608001516009613d7d909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b9390931692909202919091176001600160a01b0319166001600160a01b03909116179055506111e89050565b6040810151600080546001600160a01b0319166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b03161461122e5760c0810151600580546001600160801b0319166001600160801b039092169190911790555b6000808c1561128857608083015160025560a08301516001600160801b03161561127c5760a0830151600480546001600160801b031981166001600160801b03918216909301169190911790555b8260a0015191506112d5565b608083015160035560a08301516001600160801b0316156112ce5760a0830151600480546001600160801b03808216600160801b92839004821690940116029190911790555b5060a08201515b8315158d1515146112ee57602083015183518d036112fb565b82600001518c0383602001515b90985096508c1561143457600087121561133d5761133d7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f8f89600003613f18565b6000611347614066565b9050336001600160a01b03166323a69e758a8a8e8e6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156113cb57600080fd5b505af11580156113df573d6000803e3d6000fd5b505050506113eb614066565b6113f5828b61419f565b111561142e576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b5061155e565b600088121561146b5761146b7f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff8f8a600003613f18565b60006114756141af565b9050336001600160a01b03166323a69e758a8a8e8e6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156114f957600080fd5b505af115801561150d573d6000803e3d6000fd5b505050506115196141af565b611523828a61419f565b111561155c576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b8d6001600160a01b0316336001600160a01b03167f19b47279256b2a23a1665c810c8d55a1758940ee09377d4f8d26497a3577dc838a8a87604001518860c001518960600151898960405180888152602001878152602001866001600160a01b03168152602001856001600160801b031681526020018460020b8152602001836001600160801b03168152602001826001600160801b0316815260200197505050505050505060405180910390a350506001805460ff60201b1916600160201b17905550939a92995091975050505050505050565b6005546001600160801b031681565b6004546001600160801b0380821691600160801b90041682565b60098161ffff811061166d57600080fd5b015463ffffffff81169150600160201b810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600154600160201b900460ff166116e5576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60201b1916905560008054600160d81b900461ffff169061170e60098385614247565b6000805461ffff808416600160d81b810261ffff60d81b199093169290921790925591925083161461177b576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506001805460ff60201b1916600160201b17905550565b6000546001546001600160a01b03821691600160a01b810460020b9161ffff600160b81b8304811692600160c81b8104821692600160d81b9091049091169063ffffffff81169060ff600160201b9091041687565b6001546000908190600160201b900460ff16611831576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60201b191690556001600160801b03851661185157600080fd5b60008061189f60405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016118958a6001600160801b03166142ea565b600f0b90526142fb565b925092505081935080925060008060008611156118c1576118be614066565b91505b84156118d2576118cf6141af565b90505b336001600160a01b03166399eee9d087878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561195457600080fd5b505af1158015611968573d6000803e3d6000fd5b5050505060008611156119bf5761197d614066565b611987838861419f565b11156119bf576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b8415611a0f576119cd6141af565b6119d7828761419f565b1115611a0f576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506001805460ff60201b1916600160201b17905550919890975095505050505050565b60035481565b600154600160201b900460ff16611af0576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60201b191690556005546001600160801b031680611b3f576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b6000611b74867f00000000000000000000000000000000000000000000000000000000000001f462ffffff16620f4240614531565b90506000611bab867f00000000000000000000000000000000000000000000000000000000000001f462ffffff16620f4240614531565b90506000611bb7614066565b90506000611bc36141af565b90508815611bf657611bf67f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff8b8b613f18565b8715611c2757611c277f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f8b8a613f18565b336001600160a01b031663a1d4833685858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611ca957600080fd5b505af1158015611cbd573d6000803e3d6000fd5b505050506000611ccb614066565b90506000611cd76141af565b905081611ce4858861419f565b1115611d1c576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611d27848761419f565b1115611d5f576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611de85760015461ffff1660008115611d8c5761271063ffffffff8316850204611d8f565b60005b90506001600160801b03811615611dc257600480546001600160801b038082168401166001600160801b03199091161790555b611ddc818503600160801b8d6001600160801b031661369f565b60028054909101905550505b8015611e6d5760015460101c61ffff1660008115611e125761271063ffffffff8316840204611e15565b60005b90506001600160801b03811615611e4757600480546001600160801b03600160801b8083048216850182160291161790555b611e61818403600160801b8d6001600160801b031661369f565b60038054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001805460ff60201b1916600160201b179055505050505050505050505050565b6001546000908190600160201b900460ff16611f3c576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60201b191690556000611f58600833898961456b565b60038101549091506001600160801b0390811690861611611f795784611f88565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611fb05783611fc6565b6003810154600160801b90046001600160801b03165b91506001600160801b0383161561202b576003810180546001600160801b031981166001600160801b0391821686900382161790915561202b907f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff908a908616613f18565b6001600160801b03821615612091576003810180546001600160801b03600160801b808304821686900382160291811691909117909155612091907f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f908a908516613f18565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506001805460ff60201b1916600160201b17905590969095509350505050565b60086020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60076020526000908152604090205481565b62010008546001600160a01b031681565b7f0000000000000000000000000000000000005e8b2285f864419ac400be90719681565b6001546000908190600160201b900460ff166121de576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60201b19169055336001600160a01b037f0000000000000000000000000bfbcf9fa4f9c56b0f40a671ad40e0805a0918651614806122ae57507f0000000000000000000000000bfbcf9fa4f9c56b0f40a671ad40e0805a0918656001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561227657600080fd5b505afa15801561228a573d6000803e3d6000fd5b505050506040513d60208110156122a057600080fd5b50516001600160a01b031633145b6122b757600080fd5b6004546001600160801b03908116908516116122d357836122e0565b6004546001600160801b03165b6004549092506001600160801b03600160801b909104811690841611612306578261231a565b600454600160801b90046001600160801b03165b90506001600160801b0382161561239b576004546001600160801b038381169116141561234957600019909101905b600480546001600160801b031981166001600160801b0391821685900382161790915561239b907f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff9087908516613f18565b6001600160801b03811615612421576004546001600160801b03828116600160801b9092041614156123cc57600019015b600480546001600160801b03600160801b808304821685900382160291811691909117909155612421907f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f9087908416613f18565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36001805460ff60201b1916600160201b1790559094909350915050565b60608061250a61249e612fca565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600554600996959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b9004166145cf565b915091509250929050565b6001546000908190600160201b900460ff1661255e576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60201b1916905560408051608081018252338152600287810b602083015286900b91810191909152600090819081906125ba90606081016125ad6001600160801b038a166142ea565b600003600f0b90526142fb565b92509250925081600003945080600003935060008511806125db5750600084115b1561261a576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506001805460ff60201b1916600160201b179055509094909350915050565b60008060006126a08585614729565b600285810b810b600090815260066020819052604080832088850b90940b8352822060038401549182900b93600160381b83046001600160a01b0316928492600160d81b820463ffffffff16928492909190600160f81b900460ff168061270657600080fd5b6003820154600681900b9850600160381b81046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff168061274757600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b909204909316608083015260015463ffffffff811660a084015260ff600160201b90910416151560c08301529093508e820b910b121590506127ef57509390940396509003935090039050612872565b8a60020b816020015160020b121561286357600061280b612fca565b6020830151604084015160055460608601519394506000938493612841936009938893879392916001600160801b03169061374f565b9a9003989098039b505094909603929092039650909103039250612872915050565b50949093039650039350900390505b9250925092565b600154600160201b900460ff166128bd576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60201b19169055336001600160a01b037f0000000000000000000000000bfbcf9fa4f9c56b0f40a671ad40e0805a09186516148061298d57507f0000000000000000000000000bfbcf9fa4f9c56b0f40a671ad40e0805a0918656001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561295557600080fd5b505afa158015612969573d6000803e3d6000fd5b505050506040513d602081101561297f57600080fd5b50516001600160a01b031633145b61299657600080fd5b63ffffffff821615806129c457506103e88263ffffffff16101580156129c45750610fa08263ffffffff1611155b80156129f9575063ffffffff811615806129f957506103e88163ffffffff16101580156129f95750610fa08163ffffffff1611155b612a0257600080fd5b6001805465ffffffff0000601084901b16840163ffffffff90811663ffffffff19831617909255167fb3159fed3ddfba67bae294599eafe2d0ec98c08bb38e0e5fb87d33154b6e05aa62010000826040805163ffffffff939092068316825261ffff601086901c16602083015286831682820152918516606082015290519081900360800190a150506001805460ff60201b1916600160201b17905550565b7f0000000000000000000000000bfbcf9fa4f9c56b0f40a671ad40e0805a09186581565b336001600160a01b037f0000000000000000000000000bfbcf9fa4f9c56b0f40a671ad40e0805a091865161480612b8857507f0000000000000000000000000bfbcf9fa4f9c56b0f40a671ad40e0805a0918656001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b5057600080fd5b505afa158015612b64573d6000803e3d6000fd5b505050506040513d6020811015612b7a57600080fd5b50516001600160a01b031633145b612b9157600080fd5b6201000880546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f29983690a85a11696ce8a357993744f8d5a74fde14653e517cc2f8608a7235e99181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000a81565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b7f00000000000000000000000000000000000000000000000000000000000001f481565b60025481565b60066020819052600091825260409091208054600182015460028301546003909301546001600160801b03831694600160801b909304600f0b93919281900b90600160381b81046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b031615612d08576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612d1382613a55565b9050600080612d2b612d23612fca565b6009906147f2565b6040805160e0810182526001600160a01b038816808252600288810b60208401819052600094840185905261ffff8781166060860181905290871660808601819052630c800c8060a08701819052600160c090970187905287546001600160a01b03191690951762ffffff60a01b1916600160a01b62ffffff9490950b8416949094029390931763ffffffff60b81b1916600160c81b9091021761ffff60d81b1916600160d81b909202919091179093558154600160201b63ffffffff1990911690911760ff60201b191617905591935091507f00000000000000000000000000000000000000000000000000000000000001f41660641415612e40576001805463ffffffff1916630ce40ce4179055612f11565b7f00000000000000000000000000000000000000000000000000000000000001f462ffffff166101f41415612e87576001805463ffffffff1916630d480d48179055612f11565b7f00000000000000000000000000000000000000000000000000000000000001f462ffffff166109c41415612ece576001805463ffffffff1916630c800c80179055612f11565b7f00000000000000000000000000000000000000000000000000000000000001f462ffffff166127101415612f11576001805463ffffffff1916630c800c801790555b604080516001600160a01b0386168152600285900b602082015281517f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95929181900390910190a150505050565b60008082600281900b620d89e71981612f7357fe5b05029050600083600281900b620d89e881612f8a57fe5b0502905060008460020b83830360020b81612fa157fe5b0560010190508062ffffff166001600160801b03801681612fbe57fe5b0493505050505b919050565b4290565b60008060008460020b8660020b81612fe257fe5b05905060008660020b12801561300957508460020b8660020b8161300257fe5b0760020b15155b1561301357600019015b8315613088576000806130258361483e565b600182810b810b600090815260208d9052604090205460ff83169190911b8001600019019081168015159750929450909250908561306a57888360ff1686030261307d565b8861307482614850565b840360ff168603025b965050505050613106565b6000806130978360010161483e565b91509150600060018260ff166001901b031990506000818b60008660010b60010b81526020019081526020016000205416905080600014159550856130e957888360ff0360ff168660010101026130ff565b88836130f4836148ef565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12613127578260020b61312f565b8260020b6000035b9050620d89e881111561316d576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661318157600160801b613193565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156131c7576ffff97272373d413259a46990580e213a0260801c5b60048216156131e6576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613205576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613224576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613243576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613262576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613281576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156132a1576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156132c1576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156132e1576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613301576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613321576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613341576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613361576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613381576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156133a2576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156133c2576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156133e1576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156133fe576b048a170391f7dc42444e8fa20260801c5b60008460020b131561341957806000198161341557fe5b0490505b600160201b81061561342c57600161342f565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906134c657600061347a8989620f42400362ffffff16620f424061369f565b9050826134935761348e8c8c8c60016149d9565b6134a0565b6134a08b8d8c6001614a54565b95508581106134b1578a96506134c0565b6134bd8c8b8386614b08565b96505b50613510565b816134dd576134d88b8b8b6000614a54565b6134ea565b6134ea8a8c8b60006149d9565b93508388600003106134fe57899550613510565b61350d8b8a8a60000385614b54565b95505b6001600160a01b038a81169087161482156135735780801561352f5750815b61354557613540878d8c6001614a54565b613547565b855b9550808015613554575081155b61356a57613565878d8c60006149d9565b61356c565b845b94506135bd565b80801561357d5750815b6135935761358e8c888c60016149d9565b613595565b855b95508080156135a2575081155b6135b8576135b38c888c6000614a54565b6135ba565b845b94505b811580156135cd57508860000385115b156135d9578860000394505b8180156135f857508a6001600160a01b0316876001600160a01b031614155b15613607578589039350613624565b613621868962ffffff168a620f42400362ffffff16614531565b93505b50505095509550955095915050565b6000600160ff1b821061364557600080fd5b5090565b8082038281131560008312151461365f57600080fd5b92915050565b8181018281121560008312151461365f57600080fd5b60008215806136965750508181028183828161369357fe5b04145b61365f57600080fd5b60008080600019858709868602925082811090839003039050806136d557600084116136ca57600080fd5b508290049050613748565b8084116136e157600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff87166137f5576000898661ffff1661ffff811061377057fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a16146137e1576137de818a8988614ba0565b90505b8060200151816040015192509250506138d5565b86880360008061380a8c8c858c8c8c8c614c43565b91509150816000015163ffffffff168363ffffffff16141561383c5781602001518260400151945094505050506138d5565b805163ffffffff848116911614156138645780602001518160400151945094505050506138d5565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b8161389257fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b031602816138c457fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b03600160381b808504821690960316909402670100000000000000600160d81b031990921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b1215613a0457826001600160801b03168260000384039150816001600160801b0316106139ff576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b61365f565b826001600160801b03168284019150816001600160801b0316101561365f576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b03831610801590613a91575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613ac6576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110613b6757607f810383901c9150613b71565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c600160381b161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14613d6e57886001600160a01b0316613d5282613110565b6001600160a01b03161115613d675781613d69565b805b613d70565b815b9998505050505050505050565b6000806000898961ffff1661ffff8110613d9357fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089161415613e0257888592509250506138d5565b8461ffff168461ffff16118015613e2357506001850361ffff168961ffff16145b15613e3057839150613e34565b8491505b8161ffff168960010161ffff1681613e4857fe5b069250613e5781898989614ba0565b8a8461ffff1661ffff8110613e6857fe5b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16600160201b026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613f945780518252601f199092019160209182019101613f75565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613ff6576040519150601f19603f3d011682016040523d82523d6000602084013e613ffb565b606091505b5091509150818015614029575080511580614029575080806020019051602081101561402657600080fd5b50515b61405f576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff1693919290918291908083835b602083106140ff5780518252601f1990920191602091820191016140e0565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461415f576040519150601f19603f3d011682016040523d82523d6000602084013e614164565b606091505b509150915081801561417857506020815110155b61418157600080fd5b80806020019051602081101561419657600080fd5b50519250505090565b8082018281101561365f57600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f169391929091829190808383602083106140ff5780518252601f1990920191602091820191016140e0565b6000808361ffff1611614285576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff161161429b575081613748565b825b8261ffff168161ffff1610156142e1576001858261ffff1661ffff81106142c057fe5b01805463ffffffff191663ffffffff9290921691909117905560010161429d565b50909392505050565b80600f81900b8114612fc557600080fd5b600080600061431284602001518560400151614729565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b90940416608085015260015463ffffffff811660a086015260ff600160201b90910416151560c0850152885190890151948901519289015193946143b49491939092909190614e3d565b93508460600151600f0b60001461452957846020015160020b816020015160020b1215614409576144026143eb8660200151613110565b6143f88760400151613110565b8760600151614ff2565b9250614529565b846040015160020b816020015160020b12156144ff5760055460408201516001600160801b039091169061445b9061443f612fca565b6020850151606086015160808701516009949392918791613d7d565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b9390921692909202179055815160408701516144ab91906144a190613110565b8860600151614ff2565b93506144c96144bd8760200151613110565b83516060890151615036565b92506144d981876060015161399f565b600580546001600160801b0319166001600160801b039290921691909117905550614529565b61452661450f8660200151613110565b61451c8760400151613110565b8760600151615036565b91505b509193909250565b600061453e84848461369f565b90506000828061454a57fe5b848609111561374857600019811061456157600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff161161460f576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561462757600080fd5b50604051908082528060200260200182016040528015614651578160200160208202803683370190505b509150865167ffffffffffffffff8111801561466c57600080fd5b50604051908082528060200260200182016040528015614696578160200160208202803683370190505b50905060005b875181101561471c576146c78a8a8a84815181106146b657fe5b60200260200101518a8a8a8a61374f565b8483815181106146d357fe5b602002602001018484815181106146e657fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b8152505050808060010191505061469c565b5097509795505050505050565b8060020b8260020b12614769576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b12156147ac576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b13156147ee576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b600080821161485e57600080fd5b600160801b821061487157608091821c91015b68010000000000000000821061488957604091821c91015b600160201b821061489c57602091821c91015b6201000082106148ae57601091821c91015b61010082106148bf57600891821c91015b601082106148cf57600491821c91015b600482106148df57600291821c91015b60028210612fc557600101919050565b60008082116148fd57600080fd5b5060ff6001600160801b0382161561491857607f1901614920565b608082901c91505b67ffffffffffffffff82161561493957603f1901614941565b604082901c91505b63ffffffff82161561495657601f190161495e565b602082901c91505b61ffff82161561497157600f1901614979565b601082901c91505b60ff82161561498b5760071901614993565b600882901c91505b600f8216156149a557600319016149ad565b600482901c91505b60038216156149bf57600119016149c7565b600282901c91505b6001821615612fc55760001901919050565b6000836001600160a01b0316856001600160a01b031611156149f9579293925b81614a2657614a21836001600160801b03168686036001600160a01b0316600160601b61369f565b614a49565b614a49836001600160801b03168686036001600160a01b0316600160601b614531565b90505b949350505050565b6000836001600160a01b0316856001600160a01b03161115614a74579293925b6fffffffffffffffffffffffffffffffff60601b606084901b166001600160a01b038686038116908716614aa757600080fd5b83614ad757866001600160a01b0316614aca8383896001600160a01b031661369f565b81614ad157fe5b04614afd565b614afd614aee8383896001600160a01b0316614531565b886001600160a01b0316615065565b979650505050505050565b600080856001600160a01b031611614b1f57600080fd5b6000846001600160801b031611614b3557600080fd5b81614b4757614a218585856001615070565b614a498585856001615151565b600080856001600160a01b031611614b6b57600080fd5b6000846001600160801b031611614b8157600080fd5b81614b9357614a218585856000615151565b614a498585856000615070565b614ba861597e565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b031611614bfc576001614bfe565b845b6001600160801b031663ffffffff60801b608085901b1681614c1c57fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b614c4b61597e565b614c5361597e565b888561ffff1661ffff8110614c6457fe5b60408051608081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff16151560608201529250614cc89089908961523d565b15614d00578663ffffffff16826000015163ffffffff161415614cea576138d5565b81614cf783898988614ba0565b915091506138d5565b888361ffff168660010161ffff1681614d1557fe5b0661ffff1661ffff8110614d2557fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614dda57604080516080810182528a5463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614de98883600001518961523d565b614e20576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614e2d89898988876152fe565b9150915097509795505050505050565b6000614e4c600887878761456b565b60025460035491925090600080600f87900b15614f92576000614e6d612fca565b6000805460055492935090918291614eb79160099186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b90041661374f565b9092509050614ef160068d8b8d8b8b87898b60007f0000000000000000000000000000000000005e8b2285f864419ac400be90719661549c565b9450614f2860068c8b8d8b8b87898b60017f0000000000000000000000000000000000005e8b2285f864419ac400be90719661549c565b93508415614f5c57614f5c60078d7f000000000000000000000000000000000000000000000000000000000000000a615659565b8315614f8e57614f8e60078c7f000000000000000000000000000000000000000000000000000000000000000a615659565b5050505b600080614fa460068c8c8b8a8a6156bf565b9092509050614fb5878a848461576b565b600089600f0b1215614fe3578315614fd257614fd260068c615900565b8215614fe357614fe360068b615900565b50505050505095945050505050565b60008082600f0b126150185761501361500e8585856001614a54565b613633565b614a4c565b61502b61500e8585856000036000614a54565b600003949350505050565b60008082600f0b126150525761501361500e85858560016149d9565b61502b61500e85858560000360006149d9565b808204910615150190565b600081156150e35760006001600160a01b038411156150a6576150a184600160601b876001600160801b031661369f565b6150be565b6001600160801b038516606085901b816150bc57fe5b045b90506150db6150d66001600160a01b0388168361419f565b61592c565b915050614a4c565b60006001600160a01b038411156151115761510c84600160601b876001600160801b0316614531565b615128565b615128606085901b6001600160801b038716615065565b905080866001600160a01b03161161513f57600080fd5b6001600160a01b038616039050614a4c565b60008261515f575083614a4c565b6fffffffffffffffffffffffffffffffff60601b606085901b1682156151f6576001600160a01b0386168481029085828161519657fe5b0414156151c7578181018281106151c5576151bb83896001600160a01b031683614531565b9350505050614a4c565b505b6151ed826151e8878a6001600160a01b031686816151e157fe5b049061419f565b615065565b92505050614a4c565b6001600160a01b0386168481029085828161520d57fe5b0414801561521a57508082115b61522357600080fd5b8082036151bb6150d6846001600160a01b038b1684614531565b60008363ffffffff168363ffffffff161115801561526757508363ffffffff168263ffffffff1611155b15615283578163ffffffff168363ffffffff1611159050613748565b60008463ffffffff168463ffffffff16116152aa578363ffffffff16600160201b016152b2565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff16116152e2578363ffffffff16600160201b016152ea565b8363ffffffff165b64ffffffffff169091111595945050505050565b61530661597e565b61530e61597e565b60008361ffff168560010161ffff168161532457fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff8716828161535157fe5b0661ffff811061535d57fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082018190529095506153c75780600101925061533c565b898661ffff1682600101816153d857fe5b0661ffff81106153e457fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820152855190945060009061544e908b908b61523d565b905080801561546757506154678a8a876000015161523d565b15615472575061548f565b8061548257600182039250615489565b8160010193505b5061533c565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b0316826154c7828d61399f565b9050846001600160801b0316816001600160801b03161115615515576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b0382811615908216158114159450156155be578c60020b8e60020b136155a657600183018b9055600283018a9055600383018054670100000000000000600160d81b031916600160381b6001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180546001600160f81b0316600160f81b1790555b82546001600160801b0319166001600160801b03821617835585615607578254615602906155fd90600160801b9004600f90810b810b908f900b613665565b6142ea565b615628565b8254615628906155fd90600160801b9004600f90810b810b908f900b613649565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b8161566857fe5b0760020b1561567657600080fd5b6000806156918360020b8560020b8161568b57fe5b0561483e565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b1261570557505060018201546002830154615718565b8360010154880391508360020154870390505b6000808b60020b8b60020b121561573a5750506001830154600284015461574d565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b61580a5781516001600160801b0316615802576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b508051615819565b8151615816908661399f565b90505b600061583d8360200151860384600001516001600160801b0316600160801b61369f565b905060006158638460400151860385600001516001600160801b0316600160801b61369f565b905086600f0b60001461588a5787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b0382161515806158b857506000816001600160801b0316115b156158f6576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612fc557600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000a" + }, + { + "address": "0xd852b4696de610965e601ccc256135d4d91109b7", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x61018080604052600436101561001457600080fd5b60003560e01c90816316f0115b146118e5575080631848effa146118a05780632980be901461182d5780633cb5149e1461179c5780635b81c5b6146115675780635d3cfccc146106f557806374936c1614610562578063791b98bc1461051d578063bb02ec9b14610307578063be39f3aa14610190578063c34c08e514610167578063c415b95c14610122578063cb0269c9146101045763f9b6117f146100ba57600080fd5b346100ff5760003660031901126100ff576040517f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03168152602090f35b600080fd5b346100ff5760003660031901126100ff576020600054604051908152f35b346100ff5760003660031901126100ff576040517f00000000000000000000000053aa15bebaa37998d7adaf27e52b8a2b9a0c29776001600160a01b03168152602090f35b346100ff5760003660031901126100ff576001546040516001600160a01b039091168152602090f35b346100ff576020806003193601126100ff5760405162435da560e01b81526004803592916001600160a01b039183908290817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503786165afa80156102c55783916000916102d1575b50602460405180948193637be53ca160e01b8352336004840152165afa9081156102c557600091610264575b7fc4f93ed7d82b431d36b3c7670e42f8d5d8f19375008e1ab63c1f63c52e5c3f346040848661025186611bb7565b60005491816000558351928352820152a1005b9180915082813d83116102be575b61027c8183611a37565b810103126100ff577fc4f93ed7d82b431d36b3c7670e42f8d5d8f19375008e1ab63c1f63c52e5c3f34926102516102b4604094611baa565b9293505092610223565b503d610272565b6040513d6000823e3d90fd5b82819392503d8311610300575b6102e88183611a37565b810103126100ff576102fa8391611b96565b856101f7565b503d6102de565b346100ff5761031536611b47565b909160018060a01b0390600180948382541633148015610514575b61033990611be9565b6000915b61034357005b8051821015610512576103568282611c3f565b5180519060ff606082015116916080928383015160a0840151928960c0860151169060048c10156104fc57303b156100ff576103b18a8d938f976000966040519889978897631e5a8a4f60e11b895281159660048a016135a8565b038183305af190816104ed575b506104e057916103cc611c76565b6308c379a0146103ed575b50506102c5576103e78692611c1a565b9161033d565b6103f5611c94565b9182610402575b506103d7565b909192506000927f15079dd10bd9f21e9620eb4eb2f936987e6442faa3440ed3eaa88396f8104743825160405190815260406020820152806104476040820185611d05565b0390a1877f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d5916915191803b156100ff5789600080946104bb6104a6956040519889978896879563ecd1bbcb60e01b875260048701526024860190611c69565b84604485015260648401526084830190611d05565b03925af180156102c5576104d1575b80806103fc565b6104da90611985565b876104ca565b9390506103e79150611c1a565b6104f690611985565b8a6103be565b634e487b7160e01b600052602160045260246000fd5b005b50333014610330565b346100ff5760003660031901126100ff576040517f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e06001600160a01b03168152602090f35b346100ff576020806003193601126100ff5761057c611927565b60405162435da560e01b81526001600160a01b039083816004817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503786165afa9081156102c557829185916000916106be575b50602460405180948193637be53ca160e01b8352336004840152165afa9081156102c55760009161065b575b7f49aef47427a17b78024aa06f13d2c150bd483250f907caf46db8d81ef2331734606085858861062987611bb7565b81600154931691826bffffffffffffffffffffffff60a01b8516176001556040519333855216908301526040820152a1005b929190508383813d83116106b7575b6106748183611a37565b810103126100ff577f49aef47427a17b78024aa06f13d2c150bd483250f907caf46db8d81ef2331734936106296106ac606095611baa565b9293945050936105fa565b503d61066a565b92505081813d83116106ee575b6106d58183611a37565b810103126100ff57836106e88392611b96565b866105ce565b503d6106cb565b346100ff5760803660031901126100ff5761070e611927565b6044356001600160401b038082116100ff57366023830112156100ff57816004013561073981611a58565b926107476040519485611a37565b818452602460c0602086019302820101903682116100ff57602401915b8183106114ff575050506064359081116100ff57610786903690600401611a6f565b9160018060a01b0360015416331480156114f6575b6107a490611be9565b6000928391825b82518610156108d1576107be8684611c3f565b516020815191015160048110156104fc576107f090604051926340b4605b60e11b845260048401526024830190611c69565b6101e0816044817f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165afa9081156102c55760009161089f575b50610844602435604083015114614c62565b6101208101511561087c576108769161086a8260e060c061087095015191015190611fab565b90611dc0565b95611c1a565b946107ab565b61087691969461086a8260e060c061089995015191015190611fab565b93611c1a565b6108c391506101e03d6101e0116108ca575b6108bb8183611a37565b810190613607565b5087610832565b503d6108b1565b9284906040516330a66e1560e01b815260243560048201526101008160248160018060a01b037f00000000000000000000000003f61a185efeeefdd3ba032afa8a0259337ced64165afa9081156102c5576000916114c5575b50604051632f7ce47360e21b8152602480356004830152909190610160908390817f00000000000000000000000003f61a185efeeefdd3ba032afa8a0259337ced646001600160a01b03165afa80156102c5576109bd92600091611494575b50602001516001600160a01b03167f00000000000000000000000034df93f37f327757684ae502b47c787c38465037614d1a565b946000828211156113e35750906109d391611fab565b60408051630a899e9f60e21b8152602480356004830152600190820152604481019290925260648201869052816084817f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e06001600160a01b03165afa9081156102c5576000916113c2575b50925b610a4b8251614ca3565b93825192610a5884611a58565b93610a666040519586611a37565b808552610a75601f1991611a58565b0136602086013781610e68575b5050610a8e8151614ca3565b9160005b8251811015610de157610aa58184611c3f565b5190815191602081015160048110156104fc57610ad990604051946340b4605b60e11b865260048601526024850190611c69565b6101e09283816044817f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165afa9384156102c557600094610dc1575b5050610b3260c084015160e085015190611fab565b606084015160048110156104fc57600114610d80575b8151610b548489611c3f565b526040848101516101208601518251630a899e9f60e21b815260048101929092521515602482015260448101839052606481018c90529190826084816001600160a01b037f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e0165afa9182156102c557600090600093610d4c575b501580610d3f575b15610c7f575050606083519301519260048410156104fc576060820151608083015160a084015160c08501516020909501519094909260ff16906001600160a01b031660048410156104fc57303b156100ff57600095610c4f938d936040519a8b988998631e5a8a4f60e11b8a52159660048a016135a8565b038183305af19182156102c557610c6b92610c70575b50611c1a565b610a92565b610c7990611985565b88610c65565b9091606085519501519260048410156104fc5760ff606083015116610cbc60808401519260a08501519460c060018060a01b039101511695611fab565b94303b156100ff57604051631e5a8a4f60e11b81526001600160a01b038d1660048201526024810198909852610cf6906044890190611c69565b6064870152608486015260a485015260c4840152600160e484015261010483015260006101248301526000826101448183305af19182156102c557610c6b92610c705750611c1a565b5061018085015115610bd6565b9050610d7191925060403d604011610d79575b610d698183611a37565b8101906136df565b91908c610bce565b503d610d5f565b9861012084015115600014610dac5760a08401519080821015610da557505b98610b48565b9050610d9f565b60a08401519080821115610da5575098610b48565b610dd8929450803d106108ca576108bb8183611a37565b50918980610b1d565b508483610df960405192606084526060840190614ce6565b82810360208401526020808551928381520194019060005b818110610e52577f848f1ac058d7c8ba1794a5c4436909ac76b44482b4d716a15bab1aa1748dbec28580610e4d89888382036040850152614ce6565b0390a1005b8251865260209586019590920191600101610e11565b9160009691969493835194610e7c86611a58565b95610e8a6040519788611a37565b808752610e99601f1991611a58565b0160005b81811061135657505060005b855181101561134757898814610ffb57610ec38187611c3f565b518051604051636468402960e11b8152600481019190915260e0816024817f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e06001600160a01b03165afa9081156102c557600091610fcc575b50610f2e602435602083015114614c62565b608081018051610f3e8c8f611fab565b11610fc55750610f4e8a8d611fab565b915b82610f67575b505050610f6290611c1a565b610ea9565b610f7683610f6295949c611dc0565b9a610f81848c611c3f565b51928352602083015260408181015160ff1690830152606080820151908301526080808201519083015260a0908101516001600160a01b0316910152908b80610f56565b5191610f50565b610fee915060e03d60e011610ff4575b610fe68183611a37565b810190611f23565b8c610f1c565b503d610fdc565b509492975094509491505b60005b815181101561133a5761101c8183611c3f565b5190602082015180611039575b506110349150611c1a565b611009565b8251805160208201516040909201519192911515906001600160a01b03166001600160ff1b0383116112eb57611192938c61014093611079602096614cd5565b9160018060a01b038a51511693604051948886015287855261109a85611a00565b604051956110a7876119e4565b8652878601526000604086015260006060860152608085015260a084015260c0830152600060e0830152600061010083015260006101208301528282015260405193849283926301d8cec960e51b845285600485015260018060a01b03815116602485015285810151604485015261112760408201516064860190611c69565b60608101516084850152608081015160a485015260a0810151151560c485015260c081015160e485015260e0810151610104850152611170610100820151610124860190612048565b6101208101516101448501520151610160610164840152610184830190611d05565b038160007f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af19081156102c5576000916112b9575b5060ff604084015116926060810151608082015160018060a01b0360a08401511691303b156100ff5760405196631e5a8a4f60e11b885260018060a01b038b166004890152856024890152600060448901526064880152608487015260a486015260c4850152600160e4850152600061010485015260016101248501526000846101448183305af19182156102c55761103494611299936112aa575b506112788488611c3f565b525180516020820151604090920151151591906001600160a01b0316615b17565b6112a38288611c3f565b5288611029565b6112b390611985565b8b61126d565b90506020813d6020116112e3575b816112d460209383611a37565b810103126100ff5751896111d1565b3d91506112c7565b60405162461bcd60e51b815260206004820152602160248201527f56616c756520746f6f206c6172676520746f2066697420696e20696e743235366044820152601760f91b6064820152608490fd5b5050929190918580610a82565b50949297509450949150611006565b602090604051611365816119ae565b6000604051611373816119c9565b8181528185820152816040820152816060818184015281608084015260a09282848201528260c08201528552818786015281604086015284015281608084015282015282828b01015201610e9d565b6113db915060403d604011610d7957610d698183611a37565b905085610a3e565b94918082106113f4575b5050610a41565b6113ff929550611fab565b60408051630a899e9f60e21b8152602480356004830152600090820152604481019290925260648201869052816084817f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e06001600160a01b03165afa9081156102c557600091611473575b509285806113ed565b61148c915060403d604011610d7957610d698183611a37565b90508561146a565b6114b891506101603d610160116114be575b6114b08183611a37565b810190611e09565b88610989565b503d6114a6565b6114e991506101003d610100116114ef575b6114e18183611a37565b810190611eac565b8661092a565b503d6114d7565b5033301461079b565b60c0833603126100ff57602060c09160405161151a816119ae565b85358152828601358382015261153260408701611977565b6040820152606080870135908201526080860135608082015260a0611558818801611953565b90820152815201920191610764565b346100ff5761157536611b47565b909160018060a01b036001541633148015611793575b61159490611be9565b60005b8351811015610512576115aa8185611c3f565b5180516060820151608083015160a084015160c08501516001600160a01b03169290919060ff16303b156100ff576040516302980be960e41b81526001600160a01b03891660048201526024810195909552611609604486018a611c69565b6064850152608484015260a483015260c482015260008160e48183305af19081611784575b5061177a5760019061163e611c76565b6308c379a01461165c575b506102c55761165790611c1a565b611597565b611664611c94565b80611670575b50611649565b9091506000917f15079dd10bd9f21e9620eb4eb2f936987e6442faa3440ed3eaa88396f8104743815160405190815260406020820152806116b46040820186611d05565b0390a1517f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b156100ff5761172b91600091604051938492839263ecd1bbcb60e01b84526004840152611713602484018b611c69565b60016044840152608060648401526084830190611d05565b0381837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af180156102c55761176b575b8061166a565b61177490611985565b85611765565b5061165790611c1a565b61178d90611985565b8661162e565b5033301461158b565b346100ff576101403660031901126100ff576117b6611927565b60443560048110156100ff576117ca611967565b6117d261193d565b60e4359081151582036100ff57610124359384151585036100ff576105129560018060a01b036001541633148015611824575b61180e90611be9565b610104359460a4359260843592602435906136fc565b50333014611805565b346100ff5760e03660031901126100ff57611846611927565b6044359060048210156100ff576105129161185f611967565b9161186861193d565b9260018060a01b036001541633148015611897575b61188690611be9565b60a43592608435926024359061207f565b5033301461187d565b346100ff5760003660031901126100ff576040517f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03168152602090f35b346100ff5760003660031901126100ff577f00000000000000000000000003f61a185efeeefdd3ba032afa8a0259337ced646001600160a01b03168152602090f35b600435906001600160a01b03821682036100ff57565b60c435906001600160a01b03821682036100ff57565b35906001600160a01b03821682036100ff57565b6064359060ff821682036100ff57565b359060ff821682036100ff57565b6001600160401b03811161199857604052565b634e487b7160e01b600052604160045260246000fd5b60c081019081106001600160401b0382111761199857604052565b60e081019081106001600160401b0382111761199857604052565b61016081019081106001600160401b0382111761199857604052565b604081019081106001600160401b0382111761199857604052565b6101a081019081106001600160401b0382111761199857604052565b90601f801991011681019081106001600160401b0382111761199857604052565b6001600160401b0381116119985760051b60200190565b81601f820112156100ff57803590611a8682611a58565b92604090611a9682519586611a37565b838552602091828601918360e0809702860101948186116100ff578401925b858410611ac6575050505050505090565b86848303126100ff57825190611adb826119c9565b843582528585013560048110156100ff5786830152838501359081151582036100ff57828792868b9501526060611b13818901611977565b908201526080808801359082015260a0808801359082015260c0611b38818901611953565b90820152815201930192611ab5565b9060606003198301126100ff576004356001600160a01b03811681036100ff5791602435906001600160401b0382116100ff57611b8691600401611a6f565b9060443560048110156100ff5790565b51906001600160a01b03821682036100ff57565b519081151582036100ff57565b15611bbe57565b60405162461bcd60e51b81526020600482015260036024820152626f706160e81b6044820152606490fd5b15611bf057565b60405162461bcd60e51b81526020600482015260026024820152616f6560f01b6044820152606490fd5b6000198114611c295760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015611c535760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b9060048210156104fc5752565b60009060033d11611c8357565b905060046000803e60005160e01c90565b600060443d10611cf157604051600319913d83016004833e81516001600160401b03918282113d602484011117611cf457818401948551938411611cfc573d85010160208487010111611cf45750611cf192910160200190611a37565b90565b949350505050565b50949350505050565b919082519283825260005b848110611d31575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201611d10565b91908260409103126100ff57604051611d5d81611a00565b8092805160038110156100ff578252602090810151910152565b909160a092600180851b03168252602082015260606040820152600960608201526806164647265737320360bc1b60808201520190565b906305f5e100918201809211611c2957565b91908201809211611c2957565b15611dd457565b60405162461bcd60e51b815260206004820152600d60248201526c1bdc99195c88195e1c1a5c9959609a1b6044820152606490fd5b90816101609103126100ff5760405190611e22826119e4565b80518252611e3260208201611b96565b6020830152611e4360408201611b96565b6040830152611e5460608201611b96565b6060830152611e6560808201611baa565b608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080820151908301526101208082015190830152610140809101519082015290565b809161010092839103126100ff57604051918201908282106001600160401b038311176119985760e091604052805183526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c0840152015160e082015290565b908160e09103126100ff5760c060405191611f3d836119c9565b611f4681611b96565b835260208101516020840152611f5e60408201611baa565b6040840152606081015160608401526080810151608084015260a081015160a0840152015160c082015290565b6012039060128211611c2957565b906305f5e100918203918211611c2957565b91908203918211611c2957565b908160409103126100ff57602060405191611fd283611a00565b805183520151602082015290565b60048210156104fc5752565b91909160c08060e083019460018060a01b0381511684526020810151602085015260408101511515604085015260608101511515606085015261203760808201516080860190611c69565b60a081015160a08501520151910152565b9060038210156104fc5752565b6001600160a01b039091168152606081019392916040919061207b906020830190612048565b0152565b909291959395610120526000602060405161209981611a00565b828152015260009360006101406040516120b2816119e4565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152015260405163f9d244fd60e01b81528460048201526121126024820161012051611c69565b6101a0816044817f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165afa80156102c557600061010052600060a0526134c3575b5061010051602001516001600160a01b0316156134865761010051606081015160048110156104fc5715613463575b506101005160409081015160c09081529051632f7ce47360e21b81529051600482015295610160876024817f00000000000000000000000003f61a185efeeefdd3ba032afa8a0259337ced646001600160a01b03165afa9687156102c557600097613440575b50608087015115613363576040516330a66e1560e01b815260c0516004820152610100816024817f00000000000000000000000003f61a185efeeefdd3ba032afa8a0259337ced646001600160a01b03165afa8015613358578760e052613335575b5060e051602088015161228f91906001600160a01b03167f00000000000000000000000034df93f37f327757684ae502b47c787c38465037614d1a565b976101005160c0810151151590816132ea575b506060610100510151906004821015612c6357906122d4918b610100519161012060a08401519301519360e0516153cf565b6101005160208082015160408084015160c0909401519051630298e27360e01b81526001600160a01b0392831660048201526024810194909452151560448401529199918a9060649082907f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e0165afa9889156132df5788996132a7575b5061010051602081015160408083015160c090930151905163bc95baad60e01b81526001600160a01b039092166004830152602482019290925290151560448201529860e08a806064810103817f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e06001600160a01b03165afa998a1561316257899a613286575b5060808a0151159081156131e6575b50156131ae5760606101005101516004811015612c635760011461316d575b604051632500ed8d60e21b815260c05160048201529860a08a6024817f00000000000000000000000003f61a185efeeefdd3ba032afa8a0259337ced646001600160a01b03165afa998a1561316257899a6130dc575b506040516301274eb160e71b815260c05160048201526020816024817f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e06001600160a01b03165afa908115612d26578a916130aa575b506124cb6101005161010060e082015191015190611fab565b8a9b81612e2a575b5050508861014052610100518a8a608083015113600014612dd45750506101005161010081015115908115612daa575b5015612da45760806101005101515b610140525b60e051602080820151608090920151610100518083015160408083015160c09093015190516269055560e11b81526001600160a01b039283166004820152602481019390935215156044830152909491939290859060649082907f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e0165afa938415612d9957908e8e928e96612d5c575b506125b6966101405192615512565b5015612d3157610100518051602082015160c092830151604080516340086d2960e11b81529451600486015260ff9990991660248501529197911515916001600160a01b0391821691849060449082907f00000000000000000000000053aa15bebaa37998d7adaf27e52b8a2b9a0c2977165afa928315612d26579060209392918b93612cf5575b506040519863244edd2960e11b8a5260c05160048b015260248a0152604489015260018060a01b03871660648901528a608489015260a48801526101405160c4880152805160e4880152015161010486015261012485015261014484015260018060a01b0316610164830152856101848301526040826101a4818760018060a01b037f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e0165af1928315612b4d5784928594612cba575b506127058661010080510151611dc0565b61010080510152610100516060815191015160048110156128e1577f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b15612cb65761277190604051926331353f7960e11b845260048401526024830190611c69565b60016044820152606481018790528581608481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af18015612c5857908691612ca2575b505060606101005101516004811015612c8e57158015612c77575b6128f5575b50506101005160018060a01b03602082015116958151956060604084015193015160048110156128e157610100519060c0820151151560e08301519161010060a08501519401519660a051519a60038c10156128cd575060a051602001519b604051809e81526020015260408d015260608c0161285b91611c69565b60808b01526101405160a08b015260c08a015260e08901526101008801526101208701526101408601526101608501526101808401526101a0830161289f91612048565b6101c08201526101e07f4d12d133c743bc8c14429fd47f17fb29070e2f252d4294b1675da3bd779547e091a1565b634e487b7160e01b81526021600452602490fd5b634e487b7160e01b87526021600452602487fd5b6101005160018060a01b0360208201511690604081015190606060c08201511515910151906004821015612c63579061295a9160e0610100510151936040519561293e876119c9565b8652602086015260408501526001606085015260808401611fe0565b60a0820183905260c08201527f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b15612b5857856129b59160405180938192632670e98d60e01b835260048301611fec565b0381837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af18015612c5857908691612c44575b50506004610120511015612b5c576101205180612b9757507f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b15612b9357604051633e5005e560e01b815260048101919091528481602481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af18015612b8857908591612b70575b50505b60a051516003811015612b5c5760a05160200151917f00000000000000000000000053aa15bebaa37998d7adaf27e52b8a2b9a0c29776001600160a01b03163b15612b5857908591612af86040519485938493637f3fbf2b60e11b855260048501612055565b0381837f00000000000000000000000053aa15bebaa37998d7adaf27e52b8a2b9a0c29776001600160a01b03165af18015612b4d57908491156127df57612b3e90611985565b612b495782386127df565b8280fd5b6040513d86823e3d90fd5b8580fd5b634e487b7160e01b85526021600452602485fd5b612b7990611985565b612b84578338612a8f565b8380fd5b6040513d87823e3d90fd5b8480fd5b600114612ba5575b50612a92565b7f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b15612b935760405163121494ed60e31b815260048101919091528481602481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af18015612b8857908591612c30575b50612b9f565b612c3990611985565b612b84578338612c2a565b612c4d90611985565b612b935784386129f2565b6040513d88823e3d90fd5b634e487b7160e01b89526021600452602489fd5b506101005160e061010082015191015111156127da565b634e487b7160e01b86526021600452602486fd5b612cab90611985565b612b935784386127bf565b8680fd5b925092506040823d604011612ced575b81612cd760409383611a37565b81010312612b84576020825192015192386126f4565b3d9150612cca565b612d1891935060403d604011612d1f575b612d108183611a37565b810190611fb8565b913861263e565b503d612d06565b6040513d8c823e3d90fd5b60405162461bcd60e51b81526020600482015260036024820152627a706160e81b6044820152606490fd5b9250509493506020813d602011612d91575b81612d7b60209383611a37565b810103126100ff575192938c908e6125b66125a7565b3d9150612d6e565b6040513d8e823e3d90fd5b88612512565b6060915001516004811015612dc0571538612503565b634e487b7160e01b8a52602160045260248afd5b610100612de2920151611dc0565b610100519060e08201511190811591612e14575b5015612e0e5760806101005101515b61014052612517565b88612e05565b6060915001516004811015612dc0571538612df6565b6101005160c00151919c508c9290918e919015158d82126130075715612f905750508051602090910151808210612f8857612e6491611fab565b80915b11612f80575b508915612e7c573880806124d3565b505050505050505091505061010051606081519101516004811015612f6c577f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b15612b4957612eec906040519263ecd1bbcb60e01b845260048401526024830190611c69565b600160448201526080606482015260036084820152621b985b60ea1b60a4820152818160c481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af18015612f6157612f4d575050565b612f578291611985565b612f5e5750565b80fd5b6040513d84823e3d90fd5b634e487b7160e01b83526021600452602483fd5b995038612e6d565b505089612e64565b9091612fa98160606040612faf940151910151906151d5565b86615207565b8c811215612ff757612fc983612fc4836154cf565b615b89565b8211612fda57505050898091612e67565b612ff092612fc4612fea926154cf565b90611fab565b8091612e67565b612ff092612fc461086a926154cf565b909291501561306c578060206130219251910151906151d5565b8b81131561303e5761086a613038612ff093614cd5565b916154cf565b61304782614cd5565b613050826154cf565b1161306457612fea613038612ff093614cd5565b505089612ff0565b61308b91508060606040613085930151910151906151d5565b84615207565b8c8b82121561309e575050898091612e67565b612fc4612ff0926154cf565b90506020813d6020116130d4575b816130c560209383611a37565b810103126100ff5751386124b2565b3d91506130b8565b90995060a0813d60a01161315a575b816130f860a09383611a37565b8101031261315657604051908160a08101106001600160401b0360a0840111176119985760809060a083016040528051835260208101516020840152604081015160408401526060810151606084015201516080820152983861245c565b8880fd5b3d91506130eb565b6040513d8b823e3d90fd5b9860a06101005160c0810151151560001461319c570151908082101561319557505b98612406565b905061318f565b01519080821115613195575098612406565b60405162461bcd60e51b815260206004820152601060248201526f3732b2b2103634b8bab4b230ba34b7b760811b6044820152606490fd5b60405163096c2ca160e11b81526004810191909152602481018c905290506020816044817f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e06001600160a01b03165afa90811561316257899161324c575b5015386123e7565b90506020813d60201161327e575b8161326760209383611a37565b810103126131565761327890611baa565b38613244565b3d915061325a565b6132a0919a5060e03d60e011610ff457610fe68183611a37565b98386123d8565b9098506020813d6020116132d7575b816132c360209383611a37565b810103126132d357519738612351565b8780fd5b3d91506132b6565b6040513d8a823e3d90fd5b606091500151600481101561332157158015613307575b386122a2565b506060610100510151600481101561332157600114613301565b634e487b7160e01b88526021600452602488fd5b61334f906101003d610100116114ef576114e18183611a37565b60e05238612252565b6040513d89823e3d90fd5b5050505050505050610100516060815191015160048110156104fc577f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b156100ff576133d0906040519263ecd1bbcb60e01b845260048401526024830190611c69565b6001604482015260806064820152600760848201526621656e61626c6560c81b60a482015260008160c481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af180156102c5576134355750565b61343e90611985565b565b61345c9197506101603d610160116114be576114b08183611a37565b95386121f0565b61347861014061348092015160005490611dc0565b421115611dcd565b3861218a565b5092505091507ff9445e2284b28c1785e706b0a018d9d0a6f8ed8dc6e6cdf4da0135ef62c5ac1792506134be60405192839283611d77565b0390a1565b6101a03d6101a0116135a1575b6134da8183611a37565b81818101036101a081126100ff57610160136100ff57604051916134fd836119e4565b8051835261350d60208201611b96565b602084015260408101516040840152606081015160048110156100ff57613593926101609160608601526080830151608086015260a083015160a086015261355760c08401611baa565b60c086015260e083015160e086015261010083015161010086015261012083015161012086015261014083015161014086015282019101611d45565b906101005260a0523861215b565b503d6134d0565b9692610120969299989591946135db60ff926101408b019c60018060a01b038099168c5260208c015260408b0190611c69565b166060880152608087015260a08601521660c0840152600060e084015260006101008401521515910152565b9190828103906101e082126100ff576101a08092126100ff576040519161362d83611a1b565b8451835261363d60208601611b96565b60208401526040850151604084015260608501519260048410156100ff57611cf19360608201526080860151608082015260a086015160a082015260c086015160c082015260e086015160e082015261010080870151908201526101206136a5818801611baa565b908201526101406136b7818801611baa565b9082015261016080870151908201526101806136d4818801611baa565b908201529401611d45565b91908260409103126100ff5760206136f683611baa565b92015190565b96949290989593919798610100526000602060405161371a81611a00565b82815201526000608052600061018060405161373581611a1b565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015201526137a4604051986340b4605b60e11b8a526101005160048b015260248a0190611c69565b6101e0886044817f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165afa9485156102c557600098600096614c39575b5060208901516001600160a01b031615614bf957606089015160048110156104fc5715614bdf575b60408981015160e09081529051632f7ce47360e21b81529051600482015290610160826024817f00000000000000000000000003f61a185efeeefdd3ba032afa8a0259337ced646001600160a01b03165afa9182156102c557600092614bbc575b50608082015115614adb5760208a01516040808c01516101208d0151915163bc95baad60e01b81526001600160a01b039384166004820152602481019190915290151560448201529b907f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e0168c6064815a9360e094fa9b8c1561413a576080519c614aba575b5060808c0151156149dd576040516330a66e1560e01b815260e051600482015290610100826024817f00000000000000000000000003f61a185efeeefdd3ba032afa8a0259337ced646001600160a01b03165afa91821561413a57608051926149ba575b5080156149a1575b60808d0151608051610160528082106000146149975750610160525b60208301516139ba9082906001600160a01b03167f00000000000000000000000034df93f37f327757684ae502b47c787c38465037614d1a565b9b60608c01516004811015613f89576139e9908d8f610140820151151561010060a084015193015193876153cf565b60608c01516004811015613f8957600114614943575b908b9392916020608086015192015191602060018060a01b038188015116966101206040820151910151151597613a66604051998a9384936269055560e11b85526004850191926040919493606084019560018060a01b0316845260208401521515910152565b03817f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e06001600160a01b03165afa94851561413a578f906080519661490b575b613ab597506101605193615784565b50506040888101516101208a01518251630a899e9f60e21b815261016051600482019390935290151560248201526044810191909152606481018b905290816084816001600160a01b037f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e0165afa90811561413a57608051916148eb575b508061473e5750613bc0906080518060a05260808a0151136000146146fb5760e08901511580156146f4575b60805190156146ef575060808901515b60a0525b885160208a01516101208b0151604080516340086d2960e11b815260e051600482015260ff909516602486015293949293901515926001600160a01b039290921691859081906044820190565b03817f00000000000000000000000053aa15bebaa37998d7adaf27e52b8a2b9a0c29776001600160a01b03165afa92831561413a57602094608051946146ce575b506040518061014052630c0a361d60e41b905260e05160046101405101526024610140510152604461014051015260018060a01b038916606461014051015261016051608461014051015260a461014051015260a05160c4610140510152805160e4610140510152015161010461014051015261012461014051015261014461014051015260018060a01b0316610164610140510152846101846101405101526080516101a46101405101526060610140516101c48160805160018060a01b037f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e0165af190811561413a576080519283948493614681575b613d0a6101605160e0890151611dc0565b60e0880152865160608801516004811015613f89577f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b1561414757613d7090604051926331353f7960e11b845260048401526024830190611c69565b6080805160448301526101605160648301525181608481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af1801561413a5761466c575b5060208701516040808901516101208a0151915163bc95baad60e01b81526001600160a01b0390931660048401526024830152151560448201529160e083806064810103817f0000000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e06001600160a01b03165afa92831561413a576080519361464b575b508015614639575b801561462d575b614284575b506080015115613fa1575b60018060a01b03602086015116956060860151956004871015613f8957610120810151151560c08201519060e060a08401519301519480519960038b1015613f8957613f529b6020613edd93015160c05260405180610120525261010051602061012051015260e05160406101205101526060610120510190611c69565b608061012051015260a05160a061012051015260c061012051015260e061012051015261016051610100610120510152610120805101526101406101205101526080516101606101205101526101806101205101526101a06101205101526101c06101205101526101e0610120510190612048565b60c0516102006101205101527fbb3de0b2e2134fe005a42dd2f1106ed8939cee5890c390749097a3ea26788f7561022061012051a1565b634e487b7160e01b6080515260216004526024608051fd5b959391613fcb60018060a0989694981b036020850151166040850151610120860151151591615b17565b604051634cc42b5160e01b81526004810191909152608051909690876024817f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165afa96871561413a576080519761415a575b506080515b875181101561414d5761403e8189611c3f565b5160a0810151906080810151906004821015613f8957606001511515907f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b15614147576140ac906040519363ecd1bbcb60e01b855260048501526024840190611c69565b6044820152608060648201819052600f60848301526e31b637b9b2b2103837b9b4ba34b7b760891b60a4830152518160c481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af1801561413a57614125575b5061412090611c1a565b61402b565b61412e90611985565b60805180156141165780fd5b6040513d608051823e3d90fd5b60805180fd5b5091939550919395613e5f565b90963d8091833e61416b8183611a37565b6020828281010312614147578151906001600160401b03821161414757808301601f8385010112156141475781830151906141a582611a58565b936141b36040519586611a37565b8285526020850193828201602060e086028385010101116141475793602085830101945b602060e08602828501010186106141f5575050505050509538614026565b60e0868585010312614147576040519161420e836119c9565b61421787611b96565b83526020870151602084015261422f60408801611baa565b604084015261424060608801611baa565b6060840152608087015192600484101561414757602060e09282829660808695015260a08b015160a082015260c08b015160c08201528152019701969250506141d7565b60018060a01b036020880151166040880151610120890151151560608a01516004811015613f89576142dd918b5193604051956142c0876119c9565b865260208601526040850152608051606085015260808401611fe0565b60a08201526101605160c08201527f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b156141475760405190632670e98d60e01b8252818061433b6080519360048301611fec565b038160805160018060a01b037f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d59165af1801561413a57614618575b5060608701516004811015613f89576144d9577f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b156141475760405163be82e5b160e01b815261010051600482015260805181602481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af1801561413a576144c4575b505b8251906003821015613f895760208401517f00000000000000000000000053aa15bebaa37998d7adaf27e52b8a2b9a0c29776001600160a01b03163b1561414757614474926040519384928392637f3fbf2b60e11b84526080519560048501612055565b038160805160018060a01b037f00000000000000000000000053aa15bebaa37998d7adaf27e52b8a2b9a0c2977165af1801561413a5715613e54576144b890611985565b6080518015613e545780fd5b6144cd90611985565b608051801561440e5780fd5b60608701516004811015613f895760010361458e577f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b15614147576040516304d3cb8160e41b815261010051600482015260805181602481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af1801561413a57614579575b50614410565b61458290611985565b60805180156145735780fd5b7f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b15614147576040516304d3cb8160e41b815261010051600482015260805181602481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af1801561413a576145795750614410565b61462190611985565b60805180156143765780fd5b50608082015115613e4f565b5060e087015160c08801511115613e48565b61466591935060e03d60e011610ff457610fe68183611a37565b9138613e40565b61467590611985565b6080518015613dbf5780fd5b9250935091506060913d6060116146c6575b6146a08361014051611a37565b606061014051809481010312614147578251936040602085015194015194939492613cf9565b3d9250614693565b6146e891945060403d604011612d1f57612d108183611a37565b9238613c01565b613b6f565b5086613b5f565b61470c6101605160e08b0151611dc0565b60c08a015111801590614737575b6080519015614732575060808901515b60a052613b73565b61472a565b508661471a565b965050505050505060608201516004811015613f89577f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b156141475760405163c1872cf360e01b8152610100516004820152906147a9906024830190611c69565b811515604482015260805181606481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af1801561413a576148d6575b5060018060a01b036020830151169060608301516004811015613f89577fbb3de0b2e2134fe005a42dd2f1106ed8939cee5890c390749097a3ea26788f7594846101206102209601511515608082015160c08301519161487560e060a086015195015196604051998a526101005160208b015260e05160408b015260608a0190611c69565b608088015260a087015260c086015260e08501526101605161010085015261012084015261014083015215156101608201526080516101808201526080516101a08201526080516101c082015260006101e0820152608051610200820152a1565b6148df90611985565b60805180156147f05780fd5b614904915060403d604011610d7957610d698183611a37565b5038613b33565b9550506020863d60201161493b575b8161492760209383611a37565b810103126100ff578e613ab5965195613aa6565b3d915061491a565b9b908b9392916101208501511560001461497a5760a0850151908082101561497357505b9c5b90919293506139ff565b9050614967565b60a0850151908082111561499057505b9c614969565b905061498a565b6101605250613980565b506149b560c08c015160e08d015190611fab565b613964565b6149d69192506101003d610100116114ef576114e18183611a37565b903861395c565b50505060208801516040890151610120909901519899506001600160a01b0390811698151597507f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d59163b15955061414794505050505057604051638ffb8b2f60e01b81526080516001600160a01b039093166004820152602481019390935215156044830152818060648101038160805160018060a01b037f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d59165af1801561413a57614aa65750565b614aaf90611985565b60805180612f5e5750565b614ad4919c5060e03d60e011610ff457610fe68183611a37565b9a386138f8565b50505050505050505090506060815191015160048110156104fc577f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03163b156100ff57614b47906040519263ecd1bbcb60e01b845260048401526024830190611c69565b60006044820181905260806064830152600760848301526621656e61626c6560c81b60a48301528160c481837f00000000000000000000000069c6b6d88fc2f298473737d22bb9156d74b83d596001600160a01b03165af180156102c557614bac5750565b614bb590611985565b6000608052565b614bd89192506101603d610160116114be576114b08183611a37565b9038613872565b614bf46134786101608b015160005490611dc0565b613811565b505050505050507ff9445e2284b28c1785e706b0a018d9d0a6f8ed8dc6e6cdf4da0135ef62c5ac1792506134be9150604051918291610100519083611d77565b909550614c589198506101e03d6101e0116108ca576108bb8183611a37565b97909794386137e9565b15614c6957565b60405162461bcd60e51b81526020600482015260126024820152710dad2e6dac2e8c6d040e0c2d2e492dcc8caf60731b6044820152606490fd5b90614cad82611a58565b614cba6040519182611a37565b8281528092614ccb601f1991611a58565b0190602036910137565b600160ff1b8114611c295760000390565b90815180825260208080930193019160005b828110614d06575050505090565b835185529381019392810192600101614cf8565b60408051632b47bb3d60e21b8082526001600160a01b039560049560209591939092918816919086818981865afa908115615192578991889160009161519d575b5089885180948193636cf38c4960e01b8352165afa9081156151925760009161515d575b50614fa057508351632630c12f60e01b81529185838881855afa928315614f2457889392918791600094614f5e575b506024859188519b8c938492634bb3415360e01b84521696878d840152165afa978815614f2457600098614f2f575b5090858792865193848092635434a1df60e01b82525afa918215614f245790869291600092614ee9575b50602490865194859384926341976e0960e01b84528b840152165afa908115614ede57908691600091614ead575b5060e091614e55918181811115614ea45790614e5091611fab565b615c59565b91015110614e635750505090565b5162461bcd60e51b815291820152601a60248201527f657863656564206d617820707269636520646576696174696f6e000000000000604482015260649150fd5b614e5091611fab565b91508482813d8311614ed7575b614ec48183611a37565b81010312612f5e575051859060e0614e35565b503d614eba565b83513d6000823e3d90fd5b91909282813d8311614f1d575b614f008183611a37565b81010312612f5e5750906024614f168793611b96565b9190614e07565b503d614ef6565b85513d6000823e3d90fd5b90978682813d8311614f57575b614f468183611a37565b81010312612f5e5750519685614ddd565b503d614f3c565b82819495939296503d8311614f99575b614f788183611a37565b81010312612f5e57509085886024614f91829695611b96565b949150614dae565b503d614f6e565b90979596925083949351908152838188818b5afa908115614f24578392918591600091615123575b5088875180968193637e89925d60e01b8352165afa928315614f24576000936150e0575b508387988698979851998a8092632630c12f60e01b82525afa908115614f24578495969798600092615094575b50916001600160401b0393918160449489519a8b9788966310f5a88f60e31b88521690860152166024840152165afa91821561508a575060009161505e575b50905090565b82813d8311615083575b6150728183611a37565b81010312612f5e5750518038615058565b503d615068565b513d6000823e3d90fd5b919092939482813d83116150d9575b6150ad8183611a37565b81010312612f5e575092826044926001600160401b03946150ce8897611b96565b939550509092615019565b503d6150a3565b8481819a959a3d831161511c575b6150f88183611a37565b810103126131565751976001600160401b0389168903612f5e575091969183614fec565b503d6150ee565b9293509082813d8111615156575b61513b8183611a37565b81010312612f5e575090836151508493611b96565b38614fc8565b503d615131565b908782813d831161518b575b6151738183611a37565b81010312612f5e575061518590611baa565b38614d7f565b503d615169565b86513d6000823e3d90fd5b92509082813d81116151ce575b6151b48183611a37565b81010312612f5e5750866151c88a92611b96565b38614d5b565b503d6151aa565b81810392916000138015828513169184121617611c2957565b908160209103126100ff575160ff811681036100ff5790565b81156152875760208181015160405163313ce56760e01b815293916001600160a01b03918590600490829085165afa9283156102c557611cf194600094615254575b5060400151166152f0565b60409194506152799060203d8111615280575b6152718183611a37565b8101906151ee565b9390615249565b503d615267565b5050600090565b604d8111611c2957600a0a90565b818102929160008212600160ff1b821416611c29578184051490151715611c2957565b81156152da57600160ff1b8114600019831416611c29570590565b634e487b7160e01b600052601260045260246000fd5b811561537b5760405163313ce56760e01b815290602090829060049082906001600160a01b03165afa9283156102c55761535261534660ff61534b61534682611cf1996153589860009161535d575b5016611f8b565b61528e565b9316611f8b565b9261529c565b6152bf565b615375915060203d8111615280576152718183611a37565b3861533f565b505050600090565b1561538a57565b60405162461bcd60e51b815260206004820152601760248201527f6e6f7420726561636820747269676765722070726963650000000000000000006044820152606490fd5b9094939460048110156104fc5780615477575050506153f66153f083611f99565b84615cd5565b8110159283615457575b50501590811561544f575b501561541357565b60405162461bcd60e51b815260206004820152601460248201527365786365656473206d617820736c69707061676560601b6044820152606490fd5b90503861540b565b82935061546761546d9293611dae565b90615cd5565b1015903880615400565b9194935091906001036154bb5761343e93156154a45761546760c061549d930151611f99565b1115615383565b61546760c06154b4930151611dae565b1015615383565b905061343e926000146154b4571115615383565b600081126154da5790565b611cf190614cd5565b91909160008382019384129112908015821691151617611c2957565b81810292918115918404141715611c2957565b95979690949293801596878098615779575b6157635761553760808201928351611dc0565b998a116157275783818861555561556396606061555d9601516154e3565b945191615975565b906154e3565b9483615716575b6000938487126156d95784908215926156cf575b5050615592575b50505050611cf1906154cf565b60018060a01b0393604093858583015116855196879363313ce56760e01b9283865285600460209b8c935afa9485156156c5579089929185966156a4575b508201511691600488518094819382525afa9182156156995761562761562061534660ff61561961534682612fc4998f996156369d9c9a6156319a9261567c575b505016611f8b565b9516611f8b565b928c6154ff565b956156318a6154cf565b6154ff565b10615642578080615585565b60649250519062461bcd60e51b82526004820152601460248201527365786365656473206d6178206c6576657261676560601b6044820152fd5b6156929250803d10615280576152718183611a37565b8f80615611565b8651903d90823e3d90fd5b839196506156be90823d8411615280576152718183611a37565b95906155d0565b88513d86823e3d90fd5b129050833861557e565b60405162461bcd60e51b81526020600482015260156024820152740c6ded8d8c2e8cae4c2d840dcdee840cadcdeeaced605b1b6044820152606490fd5b9483615721916154e3565b9461556a565b60405162461bcd60e51b815260206004820152601460248201527332bc31b2b2b2399036b0bc103837b9b4ba34b7b760611b6044820152606490fd5b9850505050505050506060608083015192015190565b506000861215615524565b91949290939597969786159283809461596a575b6157635760808101976157cb89518260009181811015600014615962576157bf9250611fab565b9b5b60608401516154e3565b98831595866158f1575b50505050816158dd575b826158d2575b156156d957816158c7575b50615802575b505050611cf1906154cf565b604082810151815163313ce56760e01b8082526020969395919290916001600160a01b039188908590600490829086165afa9384156158bc579088929160009561589b575b508201511691600487518094819382525afa908115614f24579161563161562761562061534660ff61561961534682612fc4998f9b6158909d9c60009261567c57505016611f8b565b1061564257806157f6565b839195506158b590823d8411615280576152718183611a37565b9490615847565b87513d6000823e3d90fd5b6000915012386157f0565b5060008612156157e5565b956158e98284926154e3565b9690506157df565b91818a9493615907868c959e989e518688615975565b901580615958575b15615943576000811261594357509161593261555d949261593897969451611fab565b91615975565b955b388080806157d5565b945050505050615952916154e3565b9561593a565b508151831061590f565b50509b6157c1565b506000831215615798565b91909160a081019081518086148015615a1b575b8015615a13575b615a085760408692015115156000146159db57505080518411156159c357611cf1936159bd915190611fab565b91615a23565b90611cf1936159d46159bd92614cd5565b9251611fab565b11156159ef57611cf1936159bd9151611fab565b90611cf193615a006159bd92614cd5565b925190611fab565b505050505050600090565b508315615990565b508015615989565b919091821561537b57604081810151905163313ce56760e01b815293906001600160a01b03906020908690600490829085165afa9283156102c557611cf195600094615a75575b506020015116615a97565b6020919450615a9090823d8111615280576152718183611a37565b9390615a6a565b928115615b0e5760405163313ce56760e01b815293602090859060049082906001600160a01b03165afa9081156102c557615b05615b0a94615aff61534660ff61534b61534682615358996c0c9f2c9cd04674edea400000009d60009161535d575016611f8b565b9461529c565b61529c565b0590565b50505050600090565b909168010000000000000000831015615b5e5760009015615b56575060ff60015b169160201b906bffffffffffffffffffffffff199060601b16171790565b60ff90615b38565b60405162461bcd60e51b81526020600482015260036024820152621c1d1b60ea1b6044820152606490fd5b906c0c9f2c9cd04674edea40000000906000198284099282810292838086109503948086039514615c4b5784831115615c0e578291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b60405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606490fd5b5050809250156152da570490565b906305f5e100906000198284099282810292838086109503948086039514615c4b5784831115615c0e578291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b9060001981830981830291828083109203918083039214615d34576305f5e1009082821115615c0e577facbe0e98f503f8881186e60dbb7f727bf36b7213ee9f5a78c767074b22e90e21940990828211900360f81b910360081c170290565b50506305f5e1009150049056fea264697066735822122069383cb64b8b8c3c6e2ff76e3fff96a2a43c84a2e8fcba03331cd3faa9c4eebb64736f6c63430008130033" + }, + { + "address": "0x65934e2f228fde069a6255f46e6a15bc9de38545", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063848cc303116100b8578063b1efb8f41161007c578063b1efb8f414610271578063c30c616914610279578063ef6a5d791461028c578063f2fde38b1461029f578063fae783d8146102b2578063fd8bd849146102d457610137565b8063848cc303146102105780638614c552146102305780638c34329614610243578063a1e281de1461024b578063ae52aae71461025e57610137565b80634e71e0c8116100ff5780634e71e0c8146101b55780635454b842146101bd57806354fd4d50146101d057806368f0cb6f146101e55780638456db151461020857610137565b806301ea364b1461013c5780630d0092971461015157806316048bc4146101645780631822c0c01461018257806344c19402146101a2575b600080fd5b61014f61014a3660046116ff565b6102e7565b005b61014f61015f366004611628565b610336565b61016c610396565b60405161017991906118e0565b60405180910390f35b610195610190366004611628565b6103a5565b604051610179919061191f565b61014f6101b0366004611698565b6103ba565b61014f61043e565b61014f6101cb366004611698565b6104cc565b6101d861058d565b6040516101799190611942565b6101f86101f3366004611628565b6105ac565b60405161017994939291906118f4565b61016c6105e2565b61022361021e366004611660565b6105f1565b6040516101799190611b29565b61022361023e366004611628565b610e5d565b61016c610e6f565b61014f6102593660046117fd565b610e7e565b61014f61026c366004611628565b610ead565b610223610f35565b61014f610287366004611628565b610f3b565b61014f61029a366004611660565b610f87565b61014f6102ad366004611628565b61105c565b6102c56102c0366004611660565b6110e1565b6040516101799392919061192a565b61014f6102e2366004611628565b611355565b6000546001600160a01b0316331461031a5760405162461bcd60e51b815260040161031190611ac0565b60405180910390fd5b6001600160a01b03909116600090815260046020526040902055565b600154600160a01b900460ff16156103605760405162461bcd60e51b815260040161031190611a0d565b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b031681565b60056020526000908152604090205460ff1681565b6000546001600160a01b031633146103e45760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03948516600090815260036020819052604090912080549587166001600160a01b031996871617815560028101805494881694871694909417909355820180549190951693169290921790925560010155565b6001546001600160a01b031633146104685760405162461bcd60e51b815260040161031190611975565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b3360009081526005602052604090205460ff166104fb5760405162461bcd60e51b815260040161031190611a6e565b610503611601565b50604080516080810182526001600160a01b039586168152602080820195865293861681830190815292861660608201908152968616600090815260039485905291909120905181549086166001600160a01b0319918216178255935160018201559051600282018054918616918516919091179055935193018054939092169216919091179055565b6040805180820190915260058152640312e322e360dc1b602082015290565b600360208190526000918252604090912080546001820154600283015492909301546001600160a01b0391821693928216911684565b6001546001600160a01b031681565b6000826001600160a01b03166354fd4d506040518163ffffffff1660e01b815260040160006040518083038186803b15801561062c57600080fd5b505afa92505050801561066157506040513d6000823e601f3d908101601f1916820160405261065e9190810190611762565b60015b61069f573d80801561068f576040519150601f19603f3d011682016040523d82523d6000602084013e610694565b606091505b506000915050610e57565b6000816040516020016106b29190611815565b6040516020818303038152906040528051906020012090506106d3816113cf565b1561086c576000856001600160a01b031663ec2fd46d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561071357600080fd5b505afa158015610727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074b919061174a565b90506000866001600160a01b0316637d7215046040518163ffffffff1660e01b815260040160206040518083038186803b15801561078857600080fd5b505afa15801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c0919061174a565b90506000876001600160a01b031663bbf5ce786040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fd57600080fd5b505afa158015610811573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610835919061174a565b90508215801561084b575081158061084b575080155b156108685760405162461bcd60e51b81526004016103119061199c565b5050505b6006546001600160a01b0316158015906109035750600654604051633ded920b60e11b81526001600160a01b0390911690637bdb2416906108b19088906004016118e0565b60206040518083038186803b1580156108c957600080fd5b505afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610901919061172a565b155b1561098f576001856001600160a01b031663ab44a7a36040518163ffffffff1660e01b815260040160206040518083038186803b15801561094357600080fd5b505afa158015610957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097b919061174a565b670de0b6b3a7640000030392505050610e57565b6001600160a01b038516600090815260046020526040902054156109ce575050506001600160a01b038216600090815260046020526040902054610e57565b6109d781611487565b15610d5e576109e4611601565b506001600160a01b0380861660009081526003602081815260409283902083516080810185528154861680825260018301549382019390935260028201548616948101949094529091015490921660608201529080610a4a576000945050505050610e57565b6000610b48886001600160a01b031663bbf5ce786040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8857600080fd5b505afa158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac0919061174a565b6040516370a0823160e01b81526001600160a01b038516906370a0823190610aec908d906004016118e0565b60206040518083038186803b158015610b0457600080fd5b505afa158015610b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3c919061174a565b9063ffffffff6114c516565b90506000886001600160a01b031663f04da65b896040518263ffffffff1660e01b8152600401610b7891906118e0565b60206040518083038186803b158015610b9057600080fd5b505afa158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc8919061174a565b60408501516060860151602087015192935090916001600160a01b03821615610c6a576040516398a299e560e01b81526001600160a01b038316906398a299e590610c17908e906004016118e0565b60206040518083038186803b158015610c2f57600080fd5b505afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c67919061174a565b90505b806000191480610c9657508060001914158015610c96575080610c93868663ffffffff6114ed16565b13155b610cb25760405162461bcd60e51b815260040161031190611a37565b6001600160a01b038316610cd25760009950505050505050505050610e57565b60405163060f58c360e01b81526001600160a01b0384169063060f58c390610cfe908e906004016118e0565b60206040518083038186803b158015610d1657600080fd5b505afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e919061174a565b9950505050505050505050610e57565b610d6781611519565b80610d765750610d7681611557565b15610e50576000856001600160a01b031663ab44a7a36040518163ffffffff1660e01b815260040160206040518083038186803b158015610db657600080fd5b505afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee919061174a565b90506000610e186064610e0c6002548561159590919063ffffffff16565b9063ffffffff6115cf16565b9050670de0b6b3a7640000610e33838363ffffffff6114ed16565b10610e45576000945050505050610e57565b9350610e5792505050565b6000925050505b92915050565b60046020526000908152604090205481565b6006546001600160a01b031681565b6000546001600160a01b03163314610ea85760405162461bcd60e51b815260040161031190611ac0565b600255565b6000546001600160a01b03163314610ed75760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03811660009081526005602052604090819020805460ff19166001179055517fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba90610f2a9083906118e0565b60405180910390a150565b60025481565b6000546001600160a01b03163314610f655760405162461bcd60e51b815260040161031190611ac0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b816001600160a01b03166316048bc46040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fc257600080fd5b505af1158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190611644565b6001600160a01b0316336001600160a01b03161461102a5760405162461bcd60e51b815260040161031190611a95565b6001600160a01b0391821660009081526003602081905260409091200180546001600160a01b03191691909216179055565b6000546001600160a01b031633146110865760405162461bcd60e51b815260040161031190611ac0565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060006110ee611601565b506001600160a01b03808616600090815260036020818152604092839020835160808101855281548616808252600183015493820193909352600282015486169481019490945290910154909216606082015290611158576000935060001992506000915061134d565b6060810151602082015193506001600160a01b038116156111f2576040516398a299e560e01b81526001600160a01b038216906398a299e59061119f9089906004016118e0565b60206040518083038186803b1580156111b757600080fd5b505afa1580156111cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ef919061174a565b93505b83600019141561120557600094506112af565b60405163f04da65b60e01b8152600195506000906001600160a01b0389169063f04da65b90611238908a906004016118e0565b60206040518083038186803b15801561125057600080fd5b505afa158015611264573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611288919061174a565b90508085106112a8576112a1858263ffffffff6114c516565b94506112ad565b600094505b505b60408201516001600160a01b0381166112cb576000935061134a565b60405163060f58c360e01b81526001600160a01b0382169063060f58c3906112f7908a906004016118e0565b60206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611347919061174a565b93505b50505b509250925092565b6000546001600160a01b0316331461137f5760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03811660009081526005602052604090819020805460ff19169055517f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b90610f2a9083906118e0565b60006040516020016113e090611846565b60405160208183030381529060405280519060200120821480611426575060405160200161140d90611884565b6040516020818303038152906040528051906020012082145b80611454575060405160200161143b90611899565b6040516020818303038152906040528051906020012082145b80610e575750604051602001611469906118c2565b60405160208183030381529060405280519060200120821492915050565b600060405160200161149890611870565b60405160208183030381529060405280519060200120821480610e575750604051602001611469906118ae565b6000828211156114e75760405162461bcd60e51b8152600401610311906119ea565b50900390565b6000828201838110156115125760405162461bcd60e51b815260040161031190611ae3565b9392505050565b600060405160200161152a90611846565b60405160208183030381529060405280519060200120821480610e5757506040516020016114699061185b565b600060405160200161156890611884565b60405160208183030381529060405280519060200120821480610e57575060405160200161146990611831565b6000826115a457506000610e57565b828202828482816115b157fe5b04146115125760405162461bcd60e51b815260040161031190611b06565b60008082116115f05760405162461bcd60e51b8152600401610311906119c2565b8183816115f957fe5b049392505050565b60408051608081018252600080825260208201819052918101829052606081019190915290565b600060208284031215611639578081fd5b813561151281611b62565b600060208284031215611655578081fd5b815161151281611b62565b60008060408385031215611672578081fd5b823561167d81611b62565b9150602083013561168d81611b62565b809150509250929050565b600080600080600060a086880312156116af578081fd5b85356116ba81611b62565b945060208601356116ca81611b62565b93506040860135925060608601356116e181611b62565b915060808601356116f181611b62565b809150509295509295909350565b60008060408385031215611711578182fd5b823561171c81611b62565b946020939093013593505050565b60006020828403121561173b578081fd5b81518015158114611512578182fd5b60006020828403121561175b578081fd5b5051919050565b600060208284031215611773578081fd5b815167ffffffffffffffff8082111561178a578283fd5b81840185601f82011261179b578384fd5b80519250818311156117ab578384fd5b604051601f8401601f1916810160200183811182821017156117cb578586fd5b6040528381528184016020018710156117e2578485fd5b6117f3846020830160208501611b32565b9695505050505050565b60006020828403121561180e578081fd5b5035919050565b60008251611827818460208701611b32565b9190910192915050565b682229a810189718171960b91b815260090190565b68222b2690189718171960b91b815260090190565b6844564d20312e302e3360b81b815260090190565b670435020312e302e360c41b815260080190565b6844535020312e302e3160b81b815260090190565b68044505020312e302e360bc1b815260090190565b670435020322e302e360c41b815260080190565b71044505020416476616e63656420312e302e360741b815260120190565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815260208101939093529083166040830152909116606082015260800190565b901515815260200190565b92151583526020830191909152604082015260600190565b6000602082528251806020840152611961816040850160208701611b32565b601f01601f19169190910160400192915050565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b6020808252600c908201526b25a52aa223a2afa2a92927a960a11b604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b60208082526010908201526f1113d113d7d25392551250531256915160821b604082015260600190565b6020808252601e908201527f444f444f466565496d706c3a204558434545445f594f55525f51554f54410000604082015260600190565b6020808252600d908201526c1050d0d154d4d7d11153925151609a1b604082015260600190565b6020808252601190820152701393d50813d5d391548813d1881413d3d3607a1b604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b60208082526009908201526820a2222fa2a92927a960b91b604082015260600190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b90815260200190565b60005b83811015611b4d578181015183820152602001611b35565b83811115611b5c576000848401525b50505050565b6001600160a01b0381168114611b7757600080fd5b5056fea2646970667358221220d2e8d52a6c5f5567a6d93556dd1bfe60a2638bb493dc72826e081510f6941abc64736f6c63430006090033" + }, + { + "address": "0x927c0e63783513120c5f35bc55f5ab33b0e0b5a4", + "nonce": 141, + "balance": "0x0000000000000000000000000000000000000000000000000003c5953236fd3e", + "code": "0x" + }, + { + "address": "0x6ce63ce9c3f3436eb163338f0148d566e5b34bd5", + "nonce": 76, + "balance": "0x00000000000000000000000000000000000000000000000000128d721eb3c67d", + "code": "0x" + }, + { + "address": "0x9638b74bb12c769114d15e0325c7d75f5ebc2e88", + "nonce": 0, + "balance": "0x0000000000000000000000000000000000000000000000000012795f58d50000", + "code": "0x" + }, + { + "address": "0x6e0c50657b610f4613b1c6b1dae95262a3f6c4f7", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061035d5760003560e01c80637f1e06be116101d3578063bd6d894d11610104578063f2b3abbd116100a2578063f851a4401161007c578063f851a44014610732578063f8f9da281461074a578063fca7820b14610752578063fe9c44ae1461076557600080fd5b8063f2b3abbd146106f9578063f3fdb15a1461070c578063f5e3c4621461071f57600080fd5b8063c5ebeaec116100de578063c5ebeaec14610692578063db006a75146106a5578063dd62ed3e146106b8578063e9c714f2146106f157600080fd5b8063bd6d894d14610644578063c37f68e21461064c578063c39b127f1461067f57600080fd5b8063a6afed9511610171578063ae9d70b01161014b578063ae9d70b014610603578063b2a02ff11461060b578063b57a4a721461061e578063b71d1a0c1461063157600080fd5b8063a6afed95146105df578063a9059cbb146105e7578063aa5af0fd146105fa57600080fd5b806395d89b41116101ad57806395d89b411461059e57806395dd9193146105a657806399d8c1b4146105b9578063a0712d68146105cc57600080fd5b80637f1e06be1461056f578063852a12e3146105825780638f840ddd1461059557600080fd5b8063313ce567116102ad578063601a0bf11161024b5780636c540baf116102255780636c540baf146105225780636f307dc31461052b57806370a082311461053e57806373acee981461056757600080fd5b8063601a0bf1146104f95780636752e7021461050c57806369ab32501461051a57600080fd5b80633e941010116102875780633e941010146104b75780634576b5db146104ca57806347bd3718146104dd5780635fe3b567146104e657600080fd5b8063313ce5671461047d5780633af9e6691461049c5780633b1d21a2146104af57600080fd5b806318160ddd1161031a5780631be19560116102f45780631be195601461043157806323b872dd146104445780632608f81814610457578063267822471461046a57600080fd5b806318160ddd1461040b578063182df0f5146104145780631a31d4651461041c57600080fd5b806306fdde0314610362578063095ea7b3146103805780630d983cc6146103a35780630e752702146103ce578063173b9904146103ef57806317bfdfbc146103f8575b600080fd5b61036a61076d565b60405161037791906137de565b60405180910390f35b61039361038e36600461384b565b6107fb565b6040519015158152602001610377565b6011546103b6906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b6103e16103dc366004613877565b610869565b604051908152602001610377565b6103e160085481565b6103e1610406366004613890565b61087c565b6103e1600d5481565b6103e16108e4565b61042f61042a366004613966565b6108f3565b005b61042f61043f366004613890565b610988565b610393610452366004613a1c565b610b54565b6103e161046536600461384b565b610bb0565b6004546103b6906001600160a01b031681565b60035461048a9060ff1681565b60405160ff9091168152602001610377565b6103e16104aa366004613890565b610bc5565b6103e1610c0b565b6103e16104c5366004613877565b610c15565b6103e16104d8366004613890565b610c26565b6103e1600b5481565b6005546103b6906001600160a01b031681565b6103e1610507366004613877565b610d78565b6103e1666379da05b6000081565b6103e1600081565b6103e160095481565b6012546103b6906001600160a01b031681565b6103e161054c366004613890565b6001600160a01b03166000908152600e602052604090205490565b6103e1610dbf565b61042f61057d366004613890565b610e15565b6103e1610590366004613877565b610eec565b6103e1600c5481565b61036a610ef7565b6103e16105b4366004613890565b610f04565b61042f6105c7366004613a5d565b610f0f565b6103e16105da366004613877565b611172565b6103e161117d565b6103936105f536600461384b565b61136a565b6103e1600a5481565b6103e16113c5565b6103e1610619366004613a1c565b61145d565b61042f61062c366004613aff565b6114b8565b6103e161063f366004613890565b61160f565b6103e161169c565b61065f61065a366004613890565b6116f8565b604080519485526020850193909352918301526060820152608001610377565b6103e161068d366004613890565b611739565b6103e16106a0366004613877565b6117c6565b6103e16106b3366004613877565b6117d1565b6103e16106c6366004613bca565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6103e16117dc565b6103e1610707366004613890565b6118e3565b6006546103b6906001600160a01b031681565b6103e161072d366004613c03565b6118f7565b6003546103b69061010090046001600160a01b031681565b6103e161190e565b6103e1610760366004613877565b611961565b610393600181565b6001805461077a90613c45565b80601f01602080910402602001604051908101604052809291908181526020018280546107a690613c45565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108579087815260200190565b60405180910390a35060019392505050565b6000610874826119a8565b506000919050565b6000805462010000900460ff166108ae5760405162461bcd60e51b81526004016108a590613c80565b60405180910390fd5b6000805462ff0000191690556108c261117d565b506108cc82610f04565b90506000805462ff0000191662010000179055919050565b60006108ee611a05565b905090565b610901868686868686610f0f565b601280546001600160a01b0319166001600160a01b038916908117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190613ca4565b5050505050505050565b60035461010090046001600160a01b031633146109ff5760405162461bcd60e51b815260206004820152602f60248201527f4345726332303a3a7377656570546f6b656e3a206f6e6c792061646d696e206360448201526e616e20737765657020746f6b656e7360881b60648201526084016108a5565b6012546001600160a01b0382811691161415610a785760405162461bcd60e51b815260206004820152603260248201527f4345726332303a3a7377656570546f6b656e3a2063616e206e6f74207377656560448201527138103ab73232b9363cb4b733903a37b5b2b760711b60648201526084016108a5565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae39190613ca4565b60035460405163a9059cbb60e01b81526001600160a01b03610100909204821660048201526024810183905291925083169063a9059cbb90604401600060405180830381600087803b158015610b3857600080fd5b505af1158015610b4c573d6000803e3d6000fd5b505050505050565b6000805462010000900460ff16610b7d5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019168155610b9533868686611a6f565b1490506000805462ff00001916620100001790559392505050565b6000610bbc8383611c9d565b50600092915050565b6000806040518060200160405280610bdb61169c565b90526001600160a01b0384166000908152600e6020526040902054909150610c04908290611cfb565b9392505050565b60006108ee611d1b565b6000610c2082611d90565b92915050565b60035460009061010090046001600160a01b03163314610c595760405163d219dc1f60e01b815260040160405180910390fd5b60055460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd29160048083019260209291908290030181865afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190613cbd565b610d135760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016108a5565b600580546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d91015b60405180910390a150600092915050565b6000805462010000900460ff16610da15760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055610db561117d565b506108cc82611df3565b6000805462010000900460ff16610de85760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055610dfc61117d565b5050600b546000805462ff000019166201000017905590565b60035461010090046001600160a01b03163314610e8a5760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652061646d696e206d6179207365742074686520636f6d702d60448201526c6c696b652064656c656761746560981b60648201526084016108a5565b6012546040516317066a5760e21b81526001600160a01b03838116600483015290911690635c19a95c90602401600060405180830381600087803b158015610ed157600080fd5b505af1158015610ee5573d6000803e3d6000fd5b5050505050565b600061087482611f15565b6002805461077a90613c45565b6000610c2082611f72565b60035461010090046001600160a01b03163314610f7a5760405162461bcd60e51b8152602060048201526024808201527f6f6e6c792061646d696e206d617920696e697469616c697a6520746865206d616044820152631c9ad95d60e21b60648201526084016108a5565b600954158015610f8a5750600a54155b610fe25760405162461bcd60e51b815260206004820152602360248201527f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f6044820152626e636560e81b60648201526084016108a5565b60078490558361104d5760405162461bcd60e51b815260206004820152603060248201527f696e697469616c2065786368616e67652072617465206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b60648201526084016108a5565b600061105887610c26565b905080156110a85760405162461bcd60e51b815260206004820152601a60248201527f73657474696e6720636f6d7074726f6c6c6572206661696c656400000000000060448201526064016108a5565b42600955670de0b6b3a7640000600a556110c186611fbc565b9050801561111c5760405162461bcd60e51b815260206004820152602260248201527f73657474696e6720696e7465726573742072617465206d6f64656c206661696c604482015261195960f21b60648201526084016108a5565b835161112f90600190602087019061374e565b50825161114390600290602086019061374e565b50506003805460ff90921660ff1990921691909117905550506000805462ff0000191662010000179055505050565b600061087482612131565b6009546000904290808214156111965760009250505090565b60006111a0611d1b565b600b54600c54600a546006546040516315f2405360e01b81526004810186905260248101859052604481018490529495509293919290916000916001600160a01b0316906315f2405390606401602060405180830381865afa15801561120a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122e9190613ca4565b9050645d21dba0008111156112855760405162461bcd60e51b815260206004820152601c60248201527f626f72726f772072617465206973206162737572646c7920686967680000000060448201526064016108a5565b60006112918789613cf5565b905060006112ad60405180602001604052808581525083612178565b905060006112bb8288611cfb565b905060006112c98883613d0c565b905060006112e86040518060200160405280600854815250848a6121a9565b905060006112f785898a6121a9565b60098e9055600a819055600b849055600c839055604080518d815260208101879052908101829052606081018590529091507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc049060800160405180910390a160009d505050505050505050505050505090565b6000805462010000900460ff166113935760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191681556113ab33808686611a6f565b1490506000805462ff000019166201000017905592915050565b6006546000906001600160a01b031663b81688166113e1611d1b565b600b54600c546008546040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015611439573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee9190613ca4565b6000805462010000900460ff166114865760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561149e338585856121ca565b50600080805462ff00001916620100001790559392505050565b600054610100900460ff16158080156114d85750600054600160ff909116105b806114f25750303b1580156114f2575060005460ff166001145b6115555760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108a5565b6000805460ff191660011790558015611578576000805461ff0019166101001790555b60038054610100600160a81b031916336101000217905561159e898989898989896108f3565b60038054610100600160a81b0319166101006001600160a01b038516021790558015611604576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60035460009061010090046001600160a01b0316331461164257604051635cb56c2b60e01b815260040160405180910390fd5b600480546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99101610d67565b6000805462010000900460ff166116c55760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191690556116d961117d565b506116e26108e4565b90506000805462ff000019166201000017905590565b6001600160a01b0381166000908152600e6020526040812054819081908190819061172287611f72565b61172a611a05565b93509350935093509193509193565b60035460009061010090046001600160a01b0316331461176c57604051632f7aaee760e01b815260040160405180910390fd5b601180546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fe3f5272426aa3e70e583474d1155b19c7d9a5394147c40191dfaf32b792bc9789101610d67565b600061087482612443565b60006108748261248a565b6004546000906001600160a01b0316331415806117f7575033155b1561181557604051631ba24f2960e21b815260040160405180910390fd5b60038054600480546001600160a01b03808216610100818102610100600160a81b0319871617968790556001600160a01b031990931690935560408051948390048216808652929095041660208401529290917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600454604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160009250505090565b60006118ed61117d565b50610c2082611fbc565b60006119048484846124d3565b5060009392505050565b6006546000906001600160a01b03166315f2405361192a611d1b565b600b54600c546040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260640161141c565b6000805462010000900460ff1661198a5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561199e61117d565b506108cc826125bd565b60005462010000900460ff166119d05760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191690556119e461117d565b506119f0333383612679565b50506000805462ff0000191662010000179055565b600d5460009080611a1857505060075490565b6000611a22611d1b565b90506000600c54600b5483611a379190613d0c565b611a419190613cf5565b9050600083611a58670de0b6b3a764000084613d24565b611a629190613d43565b95945050505050565b5090565b6005546040516317b9b84b60e31b81523060048201526001600160a01b038581166024830152848116604483015260648201849052600092839291169063bdcdc258906084016020604051808303816000875af1158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190613ca4565b90508015611b1c5760405163089d427760e11b8152600481018290526024016108a5565b836001600160a01b0316856001600160a01b03161415611b4f57604051638cd22d1960e01b815260040160405180910390fd5b6000856001600160a01b0316876001600160a01b03161415611b745750600019611b9c565b506001600160a01b038086166000908152600f60209081526040808320938a16835292905220545b6000611ba88583613cf5565b6001600160a01b0388166000908152600e602052604081205491925090611bd0908790613cf5565b6001600160a01b0388166000908152600e602052604081205491925090611bf8908890613d0c565b6001600160a01b03808b166000908152600e6020526040808220869055918b1681522081905590506000198414611c52576001600160a01b03808a166000908152600f60209081526040808320938e168352929052208390555b876001600160a01b0316896001600160a01b0316600080516020613dcf83398151915289604051611c8591815260200190565b60405180910390a35060009998505050505050505050565b60005462010000900460ff16611cc55760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055611cd961117d565b50611ce5338383612679565b50506000805462ff000019166201000017905550565b600080611d088484612178565b9050611d1381612822565b949350505050565b6012546040516370a0823160e01b81523060048201526000916001600160a01b03169081906370a0823190602401602060405180830381865afa158015611d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8a9190613ca4565b91505090565b6000805462010000900460ff16611db95760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055611dcd61117d565b50611dd78261283a565b5050600090506000805462ff0000191662010000179055919050565b600354600090819061010090046001600160a01b03163314801590611e2357506011546001600160a01b03163314155b15611e4157604051630f7e5e6d60e41b815260040160405180910390fd5b4260095414611e6357604051630dff50cb60e41b815260040160405180910390fd5b82611e6c611d1b565b1015611e8b57604051633345e99960e01b815260040160405180910390fd5b600c54831115611eae576040516378d2980560e11b815260040160405180910390fd5b82600c54611ebc9190613cf5565b600c8190559050611ecd33846128ce565b7f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e600360019054906101000a90046001600160a01b03168483604051610d6793929190613d65565b60005462010000900460ff16611f3d5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055611f5161117d565b50611f5e336000836129b8565b506000805462ff0000191662010000179055565b6001600160a01b03811660009081526010602052604081208054611f995750600092915050565b600a548154600091611faa91613d24565b9050816001015481611d139190613d43565b600354600090819061010090046001600160a01b03163314611ff15760405163407fded560e01b815260040160405180910390fd5b426009541461201357604051630be2a5cb60e11b815260040160405180910390fd5b600660009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208d9190613cbd565b6120d95760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016108a5565b600680546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f9269101610d67565b60005462010000900460ff166121595760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561216d61117d565b50611f5e3382612c95565b60408051602081019091526000815260405180602001604052806121a0856000015185612ebe565b90529392505050565b6000806121b68585612178565b9050611a626121c482612822565b84612eca565b60055460405163d02f735160e01b81523060048201526001600160a01b0386811660248301528581166044830152848116606483015260848201849052600092169063d02f73519060a4016020604051808303816000875af1158015612234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122589190613ca4565b9050801561227c576040516363e00e3360e11b8152600481018290526024016108a5565b836001600160a01b0316836001600160a01b031614156122af57604051633a94626760e11b815260040160405180910390fd5b60006122d0836040518060200160405280666379da05b60000815250612ed6565b905060006122de8285613cf5565b9050600060405180602001604052806122f5611a05565b9052905060006123058285611cfb565b9050600081600c546123179190613d0c565b600c819055600d5490915061232d908690613cf5565b600d556001600160a01b0388166000908152600e6020526040902054612354908890613cf5565b6001600160a01b03808a166000908152600e602052604080822093909355908b1681522054612384908590613d0c565b6001600160a01b03808b166000818152600e602052604090819020939093559151908a1690600080516020613dcf833981519152906123c69088815260200190565b60405180910390a360405185815230906001600160a01b038a1690600080516020613dcf8339815191529060200160405180910390a37fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc530838360405161242f93929190613d65565b60405180910390a150505050505050505050565b60005462010000900460ff1661246b5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561247f61117d565b50611f5e3382612ef9565b60005462010000900460ff166124b25760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191690556124c661117d565b50611f5e338260006129b8565b60005462010000900460ff166124fb5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561250f61117d565b506000816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612552573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125769190613ca4565b9050801561259a57604051633eea49b760e11b8152600481018290526024016108a5565b6125a633858585613098565b50506000805462ff00001916620100001790555050565b60035460009061010090046001600160a01b031633146125f057604051631205b57b60e11b815260040160405180910390fd5b426009541461261257604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a764000082111561263b5760405163717220f360e11b815260040160405180910390fd5b600880549083905560408051828152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609101610d67565b600554604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283929116906324008a62906084016020604051808303816000875af11580156126de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127029190613ca4565b9050801561272657604051638c81362d60e01b8152600481018290526024016108a5565b42600954146127485760405163c9021e2f60e01b815260040160405180910390fd5b600061275385611f72565b9050600060001985146127665784612768565b815b905060006127768883613552565b905060006127848285613cf5565b9050600082600b546127969190613cf5565b6001600160a01b038a8116600081815260106020908152604091829020878155600a54600190910155600b8590558151938f168452830191909152810185905260608101849052608081018290529091507f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060a00160405180910390a1509098975050505050505050565b8051600090610c2090670de0b6b3a764000090613d43565b60008080804260095414612864576040516338acf79960e01b8152600481018290526024016108a5565b61286e3386613552565b905080600c5461287e9190613d0c565b915081600c819055507fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc53382846040516128ba93929190613d65565b60405180910390a160009590945092505050565b60125460405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905290911690819063a9059cbb90604401600060405180830381600087803b15801561291e57600080fd5b505af1158015612932573d6000803e3d6000fd5b5050505060003d6000811461294e576020811461295857600080fd5b6000199150612964565b60206000803e60005191505b50806129b25760405162461bcd60e51b815260206004820152601960248201527f544f4b454e5f5452414e534645525f4f55545f4641494c45440000000000000060448201526064016108a5565b50505050565b8115806129c3575080155b612a2c5760405162461bcd60e51b815260206004820152603460248201527f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416044820152736d6f756e74496e206d757374206265207a65726f60601b60648201526084016108a5565b60006040518060200160405280612a41611a05565b905290506000808415612a6257849150612a5b8386611cfb565b9050612a72565b612a6c8484613729565b91508390505b60055460405163eabe7d9160e01b81526000916001600160a01b03169063eabe7d9190612aa79030908b908890600401613d86565b6020604051808303816000875af1158015612ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aea9190613ca4565b90508015612b0e5760405163480f424760e01b8152600481018290526024016108a5565b4260095414612b30576040516397b5cfcd60e01b815260040160405180910390fd5b81612b39611d1b565b1015612b58576040516391240a1b60e01b815260040160405180910390fd5b82600d54612b669190613cf5565b600d556001600160a01b0387166000908152600e6020526040902054612b8d908490613cf5565b6001600160a01b0388166000908152600e6020526040902055612bb087836128ce565b60405183815230906001600160a01b03891690600080516020613dcf8339815191529060200160405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929878385604051612c1193929190613d65565b60405180910390a16005546040516351dff98960e01b81523060048201526001600160a01b0389811660248301526044820185905260648201869052909116906351dff98990608401600060405180830381600087803b158015612c7457600080fd5b505af1158015612c88573d6000803e3d6000fd5b5050505050505050505050565b600554604051634ef4c3e160e01b81526000916001600160a01b031690634ef4c3e190612cca90309087908790600401613d86565b6020604051808303816000875af1158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d9190613ca4565b90508015612d31576040516349abd4fd60e01b8152600481018290526024016108a5565b4260095414612d53576040516338d8859760e01b815260040160405180910390fd5b60006040518060200160405280612d68611a05565b905290506000612d788585613552565b90506000612d868284613729565b905080600d54612d969190613d0c565b600d556001600160a01b0386166000908152600e6020526040902054612dbd908290613d0c565b6001600160a01b0387166000908152600e60205260409081902091909155517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f90612e0d90889085908590613d65565b60405180910390a16040518181526001600160a01b038716903090600080516020613dcf8339815191529060200160405180910390a36005546040516341c728b960e01b81523060048201526001600160a01b0388811660248301526044820185905260648201849052909116906341c728b990608401600060405180830381600087803b158015612e9e57600080fd5b505af1158015612eb2573d6000803e3d6000fd5b50505050505050505050565b6000610c048284613d24565b6000610c048284613d0c565b6000670de0b6b3a7640000612eef848460000151612ebe565b610c049190613d43565b60055460405163368f515360e21b81526000916001600160a01b03169063da3d454c90612f2e90309087908790600401613d86565b6020604051808303816000875af1158015612f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f719190613ca4565b90508015612f955760405163918db40f60e01b8152600481018290526024016108a5565b4260095414612fb757604051630e8d8c6160e21b815260040160405180910390fd5b81612fc0611d1b565b1015612fdf576040516348c2588160e01b815260040160405180910390fd5b6000612fea84611f72565b90506000612ff88483613d0c565b9050600084600b5461300a9190613d0c565b6001600160a01b0387166000908152601060205260409020838155600a54600190910155600b819055905061303f86866128ce565b604080516001600160a01b038816815260208101879052908101839052606081018290527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a1505050505050565b600554604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000921690635fc7e71e9060a4016020604051808303816000875af1158015613102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131269190613ca4565b9050801561314a57604051630a14d17960e11b8152600481018290526024016108a5565b426009541461316c576040516380965b1b60e01b815260040160405180910390fd5b42826001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cf9190613ca4565b146131ed57604051631046f38d60e31b815260040160405180910390fd5b846001600160a01b0316846001600160a01b0316141561322057604051631bd1a62160e21b815260040160405180910390fd5b8261323e5760405163d29da7ef60e01b815260040160405180910390fd5b60001983141561326157604051635982c5bb60e11b815260040160405180910390fd5b600061326e868686612679565b60055460405163c488847b60e01b815291925060009182916001600160a01b03169063c488847b906132a890309089908890600401613d86565b6040805180830381865afa1580156132c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e89190613daa565b91509150600082146133585760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016108a5565b6040516370a0823160e01b81526001600160a01b0388811660048301528291908716906370a0823190602401602060405180830381865afa1580156133a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c59190613ca4565b10156134135760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016108a5565b6001600160a01b03851630141561343557613430308989846121ca565b6134ef565b60405163b2a02ff160e01b81526000906001600160a01b0387169063b2a02ff190613468908c908c908790600401613d86565b6020604051808303816000875af1158015613487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ab9190613ca4565b146134ef5760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b881cd95a5e9d5c994819985a5b195960621b60448201526064016108a5565b604080516001600160a01b038a811682528981166020830152818301869052871660608201526080810183905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a15050505050505050565b6012546040516370a0823160e01b81523060048201526000916001600160a01b0316908190839082906370a0823190602401602060405180830381865afa1580156135a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c59190613ca4565b6040516323b872dd60e01b81529091506001600160a01b038316906323b872dd906135f890899030908a90600401613d86565b600060405180830381600087803b15801561361257600080fd5b505af1158015613626573d6000803e3d6000fd5b5050505060003d60008114613642576020811461364c57600080fd5b6000199150613658565b60206000803e60005191505b50806136a65760405162461bcd60e51b815260206004820152601860248201527f544f4b454e5f5452414e534645525f494e5f4641494c4544000000000000000060448201526064016108a5565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156136ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137119190613ca4565b905061371d8382613cf5565b98975050505050505050565b6000610c0461374084670de0b6b3a7640000612ebe565b83516000610c048284613d43565b82805461375a90613c45565b90600052602060002090601f01602090048101928261377c57600085556137c2565b82601f1061379557805160ff19168380011785556137c2565b828001600101855582156137c2579182015b828111156137c25782518255916020019190600101906137a7565b50611a6b9291505b80821115611a6b57600081556001016137ca565b600060208083528351808285015260005b8181101561380b578581018301518582016040015282016137ef565b8181111561381d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461384857600080fd5b50565b6000806040838503121561385e57600080fd5b823561386981613833565b946020939093013593505050565b60006020828403121561388957600080fd5b5035919050565b6000602082840312156138a257600080fd5b8135610c0481613833565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126138d457600080fd5b813567ffffffffffffffff808211156138ef576138ef6138ad565b604051601f8301601f19908116603f01168101908282118183101715613917576139176138ad565b8160405283815286602085880101111561393057600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff8116811461396157600080fd5b919050565b600080600080600080600060e0888a03121561398157600080fd5b873561398c81613833565b9650602088013561399c81613833565b955060408801356139ac81613833565b945060608801359350608088013567ffffffffffffffff808211156139d057600080fd5b6139dc8b838c016138c3565b945060a08a01359150808211156139f257600080fd5b506139ff8a828b016138c3565b925050613a0e60c08901613950565b905092959891949750929550565b600080600060608486031215613a3157600080fd5b8335613a3c81613833565b92506020840135613a4c81613833565b929592945050506040919091013590565b60008060008060008060c08789031215613a7657600080fd5b8635613a8181613833565b95506020870135613a9181613833565b945060408701359350606087013567ffffffffffffffff80821115613ab557600080fd5b613ac18a838b016138c3565b94506080890135915080821115613ad757600080fd5b50613ae489828a016138c3565b925050613af360a08801613950565b90509295509295509295565b600080600080600080600080610100898b031215613b1c57600080fd5b8835613b2781613833565b97506020890135613b3781613833565b96506040890135613b4781613833565b955060608901359450608089013567ffffffffffffffff80821115613b6b57600080fd5b613b778c838d016138c3565b955060a08b0135915080821115613b8d57600080fd5b50613b9a8b828c016138c3565b935050613ba960c08a01613950565b915060e0890135613bb981613833565b809150509295985092959890939650565b60008060408385031215613bdd57600080fd5b8235613be881613833565b91506020830135613bf881613833565b809150509250929050565b600080600060608486031215613c1857600080fd5b8335613c2381613833565b9250602084013591506040840135613c3a81613833565b809150509250925092565b600181811c90821680613c5957607f821691505b60208210811415613c7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600a90820152691c994b595b9d195c995960b21b604082015260600190565b600060208284031215613cb657600080fd5b5051919050565b600060208284031215613ccf57600080fd5b81518015158114610c0457600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613d0757613d07613cdf565b500390565b60008219821115613d1f57613d1f613cdf565b500190565b6000816000190483118215151615613d3e57613d3e613cdf565b500290565b600082613d6057634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008060408385031215613dbd57600080fd5b50508051602090910151909290915056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d4df95c5c8f54f7f4acbfb2d7a897a6443d06603441cc4447cd2434eb357351764736f6c634300080a0033" + }, + { + "address": "0x9a74388bd74c3ee252bb1af32b7d3fba1ea41ada", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100ef5760003560e01c806301ffc9a7146100f4578063248a9ca3146101295780632f2ff15d1461015757806334aedecd1461017957806336568abe1461019b578063485cc955146101bb5780634e71d92d146101db5780634f1ef286146101e357806352d1902d146101f65780635c975abb1461020b578063822b096e1461022057806391d14854146102405780639d76ea5814610260578063a217fddf1461028d578063ad3cb1cc146102a2578063d547741f146102e0578063d798f86e14610300578063efdc83aa14610320578063f8ac93e814610340578063fb89f3b114610348575b600080fd5b34801561010057600080fd5b5061011461010f3660046110cf565b610350565b60405190151581526020015b60405180910390f35b34801561013557600080fd5b506101496101443660046110f9565b610387565b604051908152602001610120565b34801561016357600080fd5b5061017761017236600461112e565b6103a7565b005b34801561018557600080fd5b5061014960008051602061149e83398151915281565b3480156101a757600080fd5b506101776101b636600461112e565b6103c9565b3480156101c757600080fd5b506101776101d636600461115a565b610401565b610177610558565b6101776101f136600461119a565b610594565b34801561020257600080fd5b506101496105b3565b34801561021757600080fd5b506101146105d0565b34801561022c57600080fd5b5061017761023b3660046112a6565b6105e5565b34801561024c57600080fd5b5061011461025b36600461112e565b610844565b34801561026c57600080fd5b50600054610280906001600160a01b031681565b6040516101209190611311565b34801561029957600080fd5b50610149600081565b3480156102ae57600080fd5b506102d3604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101209190611349565b3480156102ec57600080fd5b506101776102fb36600461112e565b61087a565b34801561030c57600080fd5b5061017761031b36600461137c565b610896565b34801561032c57600080fd5b5061017761033b366004611397565b610a03565b610177610a3e565b610177610a70565b60006001600160e01b03198216637965db0b60e01b148061038157506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080610392610aa2565b60009384526020525050604090206001015490565b6103b082610387565b6103b981610ac6565b6103c38383610ad3565b50505050565b6001600160a01b03811633146103f25760405163334bd91960e11b815260040160405180910390fd5b6103fc8282610b74565b505050565b600061040b610bec565b805490915060ff600160401b82041615906001600160401b03166000811580156104325750825b90506000826001600160401b0316600114801561044e5750303b155b90508115801561045c575080155b1561047a5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156104a357845460ff60401b1916600160401b1785555b6104ae600088610ad3565b506104c760008051602061149e83398151915288610ad3565b506104e060008051602061149e83398151915287610ad3565b506104e9610c10565b6104f1610c10565b6104f9610c18565b610501610c31565b610509610c10565b831561054f57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610560610c4e565b610568610c84565b600354341461058a576040516337a515db60e21b815260040160405180910390fd5b610592610c20565b565b61059c610caa565b6105a582610d4f565b6105af8282610d5a565b5050565b60006105bd610e0e565b5060008051602061147e83398151915290565b6000806105db610e57565b5460ff1692915050565b60008051602061149e8339815191526105fd81610ac6565b610605610c84565b83821461066d5760405162461bcd60e51b815260206004820152602b60248201527f596f6f6c646f5374616e6475703a20496e76616c6964206e756d626572206f6660448201526a20706172616d657465727360a81b60648201526084015b60405180910390fd5b60005b8481101561083c57600084848381811061068c5761068c6113d0565b90506020020135116106f55760405162461bcd60e51b815260206004820152602c60248201527f596f6f6c646f5374616e6475703a20416d6f756e74206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608401610664565b6000546001600160a01b03168063a9059cbb888885818110610719576107196113d0565b905060200201602081019061072e919061137c565b878786818110610740576107406113d0565b905060200201356040518363ffffffff1660e01b81526004016107649291906113e6565b6020604051808303816000875af1158015610783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a791906113ff565b508686838181106107ba576107ba6113d0565b90506020020160208101906107cf919061137c565b6001600160a01b03167f69ca02dd4edd7bf0a4abb9ed3b7af3f14778db5d61921c7dc7cd545266326de286868581811061080b5761080b6113d0565b9050602002013560405161082191815260200190565b60405180910390a2508061083481611421565b915050610670565b505050505050565b60008061084f610aa2565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b61088382610387565b61088c81610ac6565b6103c38383610b74565b60006108a181610ac6565b6040516370a0823160e01b815282906001600160a01b0382169063a9059cbb90339083906370a08231906108d9903090600401611311565b602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190611448565b6040518363ffffffff1660e01b81526004016109379291906113e6565b6020604051808303816000875af1158015610956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097a91906113ff565b6109d75760405162461bcd60e51b815260206004820152602860248201527f596f6f6c646f5374616e6475703a205472616e7366657220746f2073656e64656044820152671c8819985a5b195960c21b6064820152608401610664565b60405133904780156108fc02916000818181858888f193505050501580156103c3573d6000803e3d6000fd5b6000610a0e81610ac6565b50600080546001600160a01b0319166001600160a01b039590951694909417909355600191909155600255600355565b610a46610c4e565b610a4e610c84565b600254341461058a576040516337a515db60e21b815260040160405180910390fd5b610a78610c4e565b610a80610c84565b600154341461058a576040516337a515db60e21b815260040160405180910390fd5b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b610ad08133610e7b565b50565b600080610ade610aa2565b9050610aea8484610844565b610b6a576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610b203390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610381565b6000915050610381565b600080610b7f610aa2565b9050610b8b8484610844565b15610b6a576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610381565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b610592610ea6565b610c20610ea6565b6000610c2a610ecb565b6001905550565b610c39610ea6565b6000610c43610e57565b805460ff1916905550565b6000610c58610ecb565b805490915060011901610c7e57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b610c8c6105d0565b156105925760405163d93c066560e01b815260040160405180910390fd5b306001600160a01b037f0000000000000000000000009a74388bd74c3ee252bb1af32b7d3fba1ea41ada161480610d3157507f0000000000000000000000009a74388bd74c3ee252bb1af32b7d3fba1ea41ada6001600160a01b0316610d2560008051602061147e833981519152546001600160a01b031690565b6001600160a01b031614155b156105925760405163703e46dd60e11b815260040160405180910390fd5b60006105af81610ac6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610db4575060408051601f3d908101601f19168201909252610db191810190611448565b60015b610dd35781604051634c9c8ce360e01b81526004016106649190611311565b60008051602061147e8339815191528114610e0457604051632a87526960e21b815260048101829052602401610664565b6103fc8383610eef565b306001600160a01b037f0000000000000000000000009a74388bd74c3ee252bb1af32b7d3fba1ea41ada16146105925760405163703e46dd60e11b815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b610e858282610844565b6105af57808260405163e2517d3f60e01b81526004016106649291906113e6565b610eae610f45565b61059257604051631afcd79f60e31b815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b610ef882610f5f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610f3d576103fc8282610fbb565b6105af611031565b6000610f4f610bec565b54600160401b900460ff16919050565b806001600160a01b03163b600003610f8c5780604051634c9c8ce360e01b81526004016106649190611311565b60008051602061147e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610fd89190611461565b600060405180830381855af49150503d8060008114611013576040519150601f19603f3d011682016040523d82523d6000602084013e611018565b606091505b5091509150611028858383611050565b95945050505050565b34156105925760405163b398979f60e01b815260040160405180910390fd5b60608261106557611060826110a6565b61109f565b815115801561107c57506001600160a01b0384163b155b1561109c5783604051639996b31560e01b81526004016106649190611311565b50805b9392505050565b8051156110b65780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000602082840312156110e157600080fd5b81356001600160e01b03198116811461109f57600080fd5b60006020828403121561110b57600080fd5b5035919050565b80356001600160a01b038116811461112957600080fd5b919050565b6000806040838503121561114157600080fd5b8235915061115160208401611112565b90509250929050565b6000806040838503121561116d57600080fd5b61117683611112565b915061115160208401611112565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156111ad57600080fd5b6111b683611112565b915060208301356001600160401b03808211156111d257600080fd5b818501915085601f8301126111e657600080fd5b8135818111156111f8576111f8611184565b604051601f8201601f19908116603f0116810190838211818310171561122057611220611184565b8160405282815288602084870101111561123957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f84011261126d57600080fd5b5081356001600160401b0381111561128457600080fd5b6020830191508360208260051b850101111561129f57600080fd5b9250929050565b600080600080604085870312156112bc57600080fd5b84356001600160401b03808211156112d357600080fd5b6112df8883890161125b565b909650945060208701359150808211156112f857600080fd5b506113058782880161125b565b95989497509550505050565b6001600160a01b0391909116815260200190565b60005b83811015611340578181015183820152602001611328565b50506000910152565b6020815260008251806020840152611368816040850160208701611325565b601f01601f19169190910160400192915050565b60006020828403121561138e57600080fd5b61109f82611112565b600080600080608085870312156113ad57600080fd5b6113b685611112565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121561141157600080fd5b8151801515811461109f57600080fd5b60006001820161144157634e487b7160e01b600052601160045260246000fd5b5060010190565b60006020828403121561145a57600080fd5b5051919050565b60008251611473818460208701611325565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc0914bb97ca83e85ef385857d9d418f187ff630589e0c9f44db92976d8e4519cba26469706673582212201ff06f1107d0ff50b56d42c8f27a43353aa942cd1136fcff43845fe6b42d954964736f6c63430008140033" + }, + { + "address": "0x8dffdcd8fef7d27928fa84ca74f85bca3f1ca906", + "nonce": 53, + "balance": "0x000000000000000000000000000000000000000000000000001724bca2eda3d3", + "code": "0x" + }, + { + "address": "0xf081470f5c6fbccf48cc4e5b82dd926409dcdd67", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000000000000002ab3a", + "code": "0x60806040526004361061012d5760003560e01c80637d6a4568116100a5578063ad5c464811610074578063c683630d11610059578063c683630d1461057d578063d9c45357146105bd578063f2fde38b146105d057610134565b8063ad5c464814610529578063bf298c341461055d57610134565b80637d6a45681461047b5780638b674f5d146104be5780638da5cb5b146104de5780639ccfd8c11461050957610134565b80633334e663116100fc578063715018a6116100e1578063715018a614610426578063774b6b7e1461043b57806378e3214f1461045b57610134565b80633334e663146103f35780633d4a345c1461040657610134565b806303a18fa3146103175780630b129abf1461036e578063263cc4fd146103b157806333320de3146103d357610134565b3661013457005b34801561014057600080fd5b50600061014d3682612511565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff168061022a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4167677265676174696f6e4578656375746f723a207468652063616c6c62616360448201527f6b2066756e6374696f6e20646f65736e2774206578697374000000000000000060648201526084015b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16600036604051610255929190612559565b600060405180830381855af49150503d8060008114610290576040519150601f19603f3d011682016040523d82523d6000602084013e610295565b606091505b509150915081610311576102de816040518060400160405280601181526020017f63616c6c6261636b206661696c65643a200000000000000000000000000000008152506105f0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022191906125df565b50505050005b34801561032357600080fd5b506001546103449073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561037a57600080fd5b50610344610389366004612629565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bd57600080fd5b506103d16103cc366004612666565b610a29565b005b3480156103df57600080fd5b506103d16103ee3660046127fe565b610a78565b6103d1610401366004612aae565b610b34565b34801561041257600080fd5b506103d1610421366004612b58565b610f99565b34801561043257600080fd5b506103d16110cf565b34801561044757600080fd5b506103d1610456366004612c61565b6110e3565b34801561046757600080fd5b506103d1610476366004612cdd565b61137e565b34801561048757600080fd5b50610344610496366004612629565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156104ca57600080fd5b506103d16104d9366004612d09565b6113d1565b3480156104ea57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610344565b34801561051557600080fd5b506103d1610524366004612d4b565b61148d565b34801561053557600080fd5b506103447f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b34801561056957600080fd5b506103d1610578366004612b58565b61150c565b34801561058957600080fd5b506105ad610598366004612666565b60046020526000908152604090205460ff1681565b6040519015158152602001610365565b6103d16105cb366004612d09565b611642565b3480156105dc57600080fd5b506103d16105eb366004612666565b6116f1565b6060604483511015801561065d57508260008151811061061257610612612d82565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f0800000000000000000000000000000000000000000000000000000000000000145b80156106c257508260018151811061067757610677612d82565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167fc300000000000000000000000000000000000000000000000000000000000000145b80156107275750826002815181106106dc576106dc612d82565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7900000000000000000000000000000000000000000000000000000000000000145b801561078c57508260038151811061074157610741612d82565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167fa000000000000000000000000000000000000000000000000000000000000000145b15610838576044838101805190916107a49190612de0565b8451101561080e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e76616c69642072657665727420726561736f6e00000000000000000000006044820152606401610221565b8281604051602001610821929190612df8565b604051602081830303815290604052915050610a23565b825160241480156108a257508260008151811061085757610857612d82565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f4e00000000000000000000000000000000000000000000000000000000000000145b80156109075750826001815181106108bc576108bc612d82565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f4800000000000000000000000000000000000000000000000000000000000000145b801561096c57508260028151811061092157610921612d82565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7b00000000000000000000000000000000000000000000000000000000000000145b80156109d157508260038151811061098657610986612d82565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7100000000000000000000000000000000000000000000000000000000000000145b156109f6576024830151826109e5826117a8565b604051602001610821929190612e7a565b81610a00846117d0565b604051602001610a11929190612ec6565b60405160208183030381529060405290505b92915050565b610a31611a75565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610a80611a75565b8051825114610a8e57600080fd5b60005b8251811015610b2f57818181518110610aac57610aac612d82565b602002602001015160046000858481518110610aca57610aca612d82565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101610a91565b505050565b8142811015610b9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f526f757465723a204558504952454400000000000000000000000000000000006044820152606401610221565b3360009081526004602052604090205460ff16610c18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41646472657373206973206e6f742077686974656c69737465640000000000006044820152606401610221565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff87161415610ccc577f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cb257600080fd5b505af1158015610cc6573d6000803e3d6000fd5b50505050505b60005b8751811015610d4e576000805b898381518110610cee57610cee612d82565b602002602001015151811015610d4457610d3a8a8481518110610d1357610d13612d82565b60200260200101518281518110610d2c57610d2c612d82565b602002602001015183611af6565b9150600101610cdc565b5050600101610ccf565b506000610d5a86611de1565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff87161415610e605780610d9a576000610dbe565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01805b506040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b505050505b825115610f03576000610e738483611f2a565b60408101516020820151919250018015610f0057600154825160408085015181518581526020810191909152958490039573ffffffffffffffffffffffffffffffffffffffff93841693928316928c169184917f4bc8151c051441255339d01fbaeb38cf109cbfd75e9a5c62fb8f1dfb37fe6fd6910160405180910390a4610efe8982846000612113565b505b50505b6000610f0e88611de1565b9050610f4f888783610f21576000610f48565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192835b6001612113565b610f8e878784610f60576000610f87565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193845b6000612113565b505050505050505050565b610fa1611a75565b805182511461100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4578656375746f723a20696e76616c6964206c656e67746800000000000000006044820152606401610221565b60005b8251811015610b2f5781818151811061102a5761102a612d82565b60200260200101516003600085848151811061104857611048612d82565b6020908102919091018101517fffffffff0000000000000000000000000000000000000000000000000000000016825281019190915260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560010161100f565b6110d7611a75565b6110e16000612216565b565b3360009081526004602052604090205460ff1661115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41646472657373206973206e6f742077686974656c69737465640000000000006044820152606401610221565b600061116785611de1565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8616141561126d57806111a75760006111cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01805b506040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561125457600080fd5b505af1158015611268573d6000803e3d6000fd5b505050505b81156113465760006112b684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250611f2a915050565b6040810151602082015191925001801561134357600154825160408085015181518581526020810191909152958490039573ffffffffffffffffffffffffffffffffffffffff93841693928316928b169184917f4bc8151c051441255339d01fbaeb38cf109cbfd75e9a5c62fb8f1dfb37fe6fd6910160405180910390a46113418882846000612113565b505b50505b600061135187611de1565b9050611364878683610f21576000610f48565b611375868684610f60576000610f87565b50505050505050565b611386611a75565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff831614156113c6576113c2338261228b565b5050565b6113c282338361239e565b3360009081526004602052604090205460ff1661144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41646472657373206973206e6f742077686974656c69737465640000000000006044820152606401610221565b600061145882840184612f48565b90506000805b82518110156114865761147c838281518110610d2c57610d2c612d82565b915060010161145e565b5050505050565b611495611a75565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116600090815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b611514611a75565b805182511461157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4578656375746f723a20696e76616c6964206c656e67746800000000000000006044820152606401610221565b60005b8251811015610b2f5781818151811061159d5761159d612d82565b6020026020010151600260008584815181106115bb576115bb612d82565b6020908102919091018101517fffffffff0000000000000000000000000000000000000000000000000000000016825281019190915260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600101611582565b3360009081526004602052604090205460ff166116bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41646472657373206973206e6f742077686974656c69737465640000000000006044820152606401610221565b60006116c982840184612f85565b9050610b2f816000015182602001518360400151846060015185608001518660a00151610b34565b6116f9611a75565b73ffffffffffffffffffffffffffffffffffffffff811661179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610221565b6117a581612216565b50565b6060610a23826040516020016117c091815260200190565b6040516020818303038152906040525b80516060907f303132333435363738396162636465660000000000000000000000000000000090600090611805906002613053565b611810906002612de0565b67ffffffffffffffff81111561182857611828612683565b6040519080825280601f01601f191660200182016040528015611852576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061188957611889612d82565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106118ec576118ec612d82565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b8451811015611a6d5782600486838151811061193c5761193c612d82565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c60f81c6010811061197857611978612d82565b1a60f81b82611988836002613053565b611993906002612de0565b815181106119a3576119a3612d82565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350828582815181106119e5576119e5612d82565b60209101015160f81c600f1660108110611a0157611a01612d82565b1a60f81b82611a11836002613053565b611a1c906003612de0565b81518110611a2c57611a2c612d82565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080611a6581613090565b91505061191e565b509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610221565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8210611ba557604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4167677265676174696f6e4578656375746f723a2070726576416d6f756e744f60448201527f7574206d757374206265206c657373207468616e206d61785f75696e743232346064820152608401610221565b6020808401517fffffffff00000000000000000000000000000000000000000000000000000000811660009081526003909252604090912054819073ffffffffffffffffffffffffffffffffffffffff1680611c83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4167677265676174696f6e4578656375746f723a204578656375746f7220666f60448201527f722064657820646f65736e2774206578697374656400000000000000000000006064820152608401610221565b60e08263ffffffff16901b851794506000808273ffffffffffffffffffffffffffffffffffffffff1685896000015189604051602001611cc49291906130c9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611d0092916020016130eb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611d3891613133565b600060405180830381855af49150503d8060008114611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d78565b606091505b509150915081611dc1576102de816040518060400160405280601781526020017f7377617053696e676c65506f6f6c206661696c65643a200000000000000000008152506105f0565b80806020019051810190611dd5919061314f565b98975050505050505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff83161415611ed3576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff16906370a08231906024015b60206040518083038186803b158015611e9b57600080fd5b505afa158015611eaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a23919061314f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401611e83565b919050565b611f6b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b6020835111156120af57600083806020019051810190611f8b9190613168565b905060808160200151901c81602001516fffffffffffffffffffffffffffffffff16018311156120a95780516113886bffffffffffffffffffffffff821610611fd657611388611fd8565b805b825160601c845260208301519091506fffffffffffffffffffffffffffffffff1684036127106113888202046020850152835173ffffffffffffffffffffffffffffffffffffffff166120315760208401819052612094565b600154845173ffffffffffffffffffffffffffffffffffffffff90811691161415612079576020840180516127106bffffffffffffffffffffffff8516840204019052612094565b6127106bffffffffffffffffffffffff831682020460408501525b60408401516020850151909103036060840152505b50610a23565b825160201415610a23576000838060200190518101906120cf919061314f565b9050608081901c816fffffffffffffffffffffffffffffffff160183111561210c576fffffffffffffffffffffffffffffffff8116830360208301525b5092915050565b8161211d57612210565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff851614156122055780156121f6576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b1580156121dd57600080fd5b505af11580156121f1573d6000803e3d6000fd5b505050505b612200838361228b565b612210565b61221084848461239e565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80612294575050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516122cb9190613133565b60006040518083038185875af1925050503d8060008114612308576040519150601f19603f3d011682016040523d82523d6000602084013e61230d565b606091505b5050905080610b2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201527f4c454400000000000000000000000000000000000000000000000000000000006064820152608401610221565b806123a857505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052915160009283929087169161243f9190613133565b6000604051808303816000865af19150503d806000811461247c576040519150601f19603f3d011682016040523d82523d6000602084013e612481565b606091505b50915091508180156124ab5750805115806124ab5750808060200190518101906124ab91906131b7565b611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610221565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156125515780818660040360031b1b83161692505b505092915050565b8183823760009101908152919050565b60005b8381101561258457818101518382015260200161256c565b838111156122105750506000910152565b600081518084526125ad816020860160208601612569565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006125f26020830184612595565b9392505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f2557600080fd5b60006020828403121561263b57600080fd5b6125f2826125f9565b73ffffffffffffffffffffffffffffffffffffffff811681146117a557600080fd5b60006020828403121561267857600080fd5b81356125f281612644565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156126d5576126d5612683565b60405290565b60405160c0810167ffffffffffffffff811182821017156126d5576126d5612683565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561274557612745612683565b604052919050565b600067ffffffffffffffff82111561276757612767612683565b5060051b60200190565b8035611f2581612644565b600082601f83011261278d57600080fd5b813560206127a261279d8361274d565b6126fe565b82815260059290921b840181019181810190868411156127c157600080fd5b8286015b848110156127e55780356127d881612644565b83529183019183016127c5565b509695505050505050565b80151581146117a557600080fd5b6000806040838503121561281157600080fd5b823567ffffffffffffffff8082111561282957600080fd5b6128358683870161277c565b935060209150818501358181111561284c57600080fd5b85019050601f8101861361285f57600080fd5b803561286d61279d8261274d565b81815260059190911b8201830190838101908883111561288c57600080fd5b928401925b828410156128b35783356128a4816127f0565b82529284019290840190612891565b80955050505050509250929050565b600082601f8301126128d357600080fd5b813567ffffffffffffffff8111156128ed576128ed612683565b61291e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016126fe565b81815284602083860101111561293357600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261296157600080fd5b8135602061297161279d8361274d565b82815260059290921b8401810191818101908684111561299057600080fd5b8286015b848110156127e557803567ffffffffffffffff808211156129b55760008081fd5b81890191506040807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d030112156129ee5760008081fd5b6129f66126b2565b8784013583811115612a085760008081fd5b612a168d8a838801016128c2565b82525092013586830152508352918301918301612994565b600082601f830112612a3f57600080fd5b81356020612a4f61279d8361274d565b82815260059290921b84018101918181019086841115612a6e57600080fd5b8286015b848110156127e557803567ffffffffffffffff811115612a925760008081fd5b612aa08986838b0101612950565b845250918301918301612a72565b60008060008060008060c08789031215612ac757600080fd5b863567ffffffffffffffff80821115612adf57600080fd5b612aeb8a838b01612a2e565b975060208901359150612afd82612644565b909550604088013590612b0f82612644565b909450606088013590612b2182612644565b9093506080880135925060a08801359080821115612b3e57600080fd5b50612b4b89828a016128c2565b9150509295509295509295565b60008060408385031215612b6b57600080fd5b823567ffffffffffffffff80821115612b8357600080fd5b818501915085601f830112612b9757600080fd5b81356020612ba761279d8361274d565b82815260059290921b84018101918181019089841115612bc657600080fd5b948201945b83861015612beb57612bdc866125f9565b82529482019490820190612bcb565b96505086013592505080821115612c0157600080fd5b50612c0e8582860161277c565b9150509250929050565b60008083601f840112612c2a57600080fd5b50813567ffffffffffffffff811115612c4257600080fd5b602083019150836020828501011115612c5a57600080fd5b9250929050565b600080600080600060808688031215612c7957600080fd5b8535612c8481612644565b94506020860135612c9481612644565b93506040860135612ca481612644565b9250606086013567ffffffffffffffff811115612cc057600080fd5b612ccc88828901612c18565b969995985093965092949392505050565b60008060408385031215612cf057600080fd5b8235612cfb81612644565b946020939093013593505050565b60008060208385031215612d1c57600080fd5b823567ffffffffffffffff811115612d3357600080fd5b612d3f85828601612c18565b90969095509350505050565b60008060408385031215612d5e57600080fd5b612d67836125f9565b91506020830135612d7781612644565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612df357612df3612db1565b500190565b60008351612e0a818460208801612569565b7f4572726f722800000000000000000000000000000000000000000000000000009083019081528351612e44816006840160208801612569565b7f290000000000000000000000000000000000000000000000000000000000000060069290910191820152600701949350505050565b60008351612e8c818460208801612569565b7f50616e69632800000000000000000000000000000000000000000000000000009083019081528351612e44816006840160208801612569565b60008351612ed8818460208801612569565b7f556e6b6e6f776e280000000000000000000000000000000000000000000000009083019081528351612f12816008840160208801612569565b7f290000000000000000000000000000000000000000000000000000000000000060089290910191820152600901949350505050565b600060208284031215612f5a57600080fd5b813567ffffffffffffffff811115612f7157600080fd5b612f7d84828501612950565b949350505050565b600060208284031215612f9757600080fd5b813567ffffffffffffffff80821115612faf57600080fd5b9083019060c08286031215612fc357600080fd5b612fcb6126db565b823582811115612fda57600080fd5b612fe687828601612a2e565b825250612ff560208401612771565b602082015261300660408401612771565b604082015261301760608401612771565b60608201526080830135608082015260a08301358281111561303857600080fd5b613044878286016128c2565b60a08301525095945050505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561308b5761308b612db1565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130c2576130c2612db1565b5060010190565b6040815260006130dc6040830185612595565b90508260208301529392505050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251613125816004850160208701612569565b919091016004019392505050565b60008251613145818460208701612569565b9190910192915050565b60006020828403121561316157600080fd5b5051919050565b60006040828403121561317a57600080fd5b6040516040810181811067ffffffffffffffff8211171561319d5761319d612683565b604052825181526020928301519281019290925250919050565b6000602082840312156131c957600080fd5b81516125f2816127f056fea264697066735822122017fc0253a28f030c200c28090d6d2d45e18146d6eb1ec034c7ab0ee04f544d4f64736f6c63430008090033" + }, + { + "address": "0x23b9cb6f49100c54fa2a13ba0f85832b38780cb7", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638f32d59b11610097578063b9f9850a11610066578063b9f9850a146101f2578063f14039de146101fb578063f2fde38b14610204578063fd2da3391461021757600080fd5b80638f32d59b146101b0578063a3193e2e146101c3578063a385fb96146101d6578063b8168816146101df57600080fd5b80636e71e2d8116100d35780636e71e2d814610171578063715018a6146101845780638726bb891461018c5780638da5cb5b1461019557600080fd5b806306fdde031461010557806315f24053146101235780632037f3e7146101445780632191f92a14610159575b600080fd5b61010d610220565b60405161011a9190610855565b60405180910390f35b6101366101313660046108aa565b6102ae565b60405190815260200161011a565b6101576101523660046108d6565b61037a565b005b610161600181565b604051901515815260200161011a565b61013661017f3660046108aa565b6103bf565b6101576103ff565b61013660025481565b6000546040516001600160a01b03909116815260200161011a565b6000546001600160a01b03163314610161565b6101576101d1366004610908565b610473565b61013660015481565b6101366101ed3660046108d6565b6104a2565b61013660045481565b61013660035481565b610157610212366004610921565b61050f565b61013660055481565b6006805461022d9061094a565b80601f01602080910402602001604051908101604052809291908181526020018280546102599061094a565b80156102a65780601f1061027b576101008083540402835291602001916102a6565b820191906000526020600020905b81548152906001019060200180831161028957829003601f168201915b505050505081565b6000806102bc8585856103bf565b90506005548111610302576102fa6003546102f4670de0b6b3a76400006102ee6002548661059090919063ffffffff16565b90610545565b90610604565b915050610373565b600061032d6003546102f4670de0b6b3a76400006102ee60025460055461059090919063ffffffff16565b905060006103466005548461065990919063ffffffff16565b905061036d826102f4670de0b6b3a76400006102ee6004548661059090919063ffffffff16565b93505050505b9392505050565b6000546001600160a01b031633146103ad5760405162461bcd60e51b81526004016103a490610985565b60405180910390fd5b6103b98484848461069b565b50505050565b6000826103ce57506000610373565b6103f76103e5836103df8787610604565b90610659565b6102ee85670de0b6b3a7640000610590565b949350505050565b6000546001600160a01b031633146104295760405162461bcd60e51b81526004016103a490610985565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461049d5760405162461bcd60e51b81526004016103a490610985565b600155565b6000806104b7670de0b6b3a764000084610659565b905060006104c68787876102ae565b905060006104e0670de0b6b3a76400006102ee8486610590565b9050610503670de0b6b3a76400006102ee836104fd8c8c8c6103bf565b90610590565b98975050505050505050565b6000546001600160a01b031633146105395760405162461bcd60e51b81526004016103a490610985565b6105428161072d565b50565b600061058783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506107ed565b90505b92915050565b60008261059f5750600061058a565b828202826105ad85836109ba565b146105875760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016103a4565b6000828201838110156105875760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103a4565b600061058783836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250610824565b6001546106a9908590610545565b6003556001546106bd906103e59083610590565b6002556001546106ce908390610545565b60048190556005829055600354600254604080519283526020830191909152810191909152606081018290527f6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d9060800160405180910390a150505050565b6001600160a01b0381166107925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000818361080e5760405162461bcd60e51b81526004016103a49190610855565b50600061081b84866109ba565b95945050505050565b600081848411156108485760405162461bcd60e51b81526004016103a49190610855565b50600061081b84866109dc565b600060208083528351808285015260005b8181101561088257858101830151858201604001528201610866565b81811115610894576000604083870101525b50601f01601f1916929092016040019392505050565b6000806000606084860312156108bf57600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156108ec57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561091a57600080fd5b5035919050565b60006020828403121561093357600080fd5b81356001600160a01b038116811461058757600080fd5b600181811c9082168061095e57607f821691505b6020821081141561097f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000826109d757634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156109fc57634e487b7160e01b600052601160045260246000fd5b50039056fea264697066735822122064f588c73c8f6fd2fc0ec9b4f5a2e449a949f3c38a1c34926e41ab4eac2cb87164736f6c634300080a0033" + }, + { + "address": "0x4468557b915770c2b93655fabc26bc2c7bac1cfe", + "nonce": 21, + "balance": "0x00000000000000000000000000000000000000000000000000159c45f25b8798", + "code": "0x" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b8578063a22cb4651161007c578063a22cb46514610276578063b88d4fde14610289578063c87b56dd1461029c578063e651c006146102af578063e985e9c5146102c2578063f2fde38b146102d557600080fd5b8063715018a61461022f5780638628e98b146102375780638aab230e1461024a5780638da5cb5b1461025d57806395d89b411461026e57600080fd5b806317d70f7c116100ff57806317d70f7c146101da57806323b872dd146101e357806342842e0e146101f65780636352211e1461020957806370a082311461021c57600080fd5b806301173a741461013c57806301ffc9a71461016257806306fdde0314610185578063081812fc1461019a578063095ea7b3146101c5575b600080fd5b61014f61014a366004611153565b6102e8565b6040519081526020015b60405180910390f35b61017561017036600461118b565b6103a6565b6040519015158152602001610159565b61018d6103f8565b60405161015991906111f8565b6101ad6101a836600461120b565b61048a565b6040516001600160a01b039091168152602001610159565b6101d86101d3366004611224565b6104b1565b005b61014f60085481565b6101d86101f136600461124e565b6105c6565b6101d861020436600461124e565b6105f7565b6101ad61021736600461120b565b610612565b61014f61022a366004611153565b610647565b6101d86106cd565b6101d8610245366004611153565b6106e1565b6101d8610258366004611316565b61070b565b6006546001600160a01b03166101ad565b61018d610723565b6101d861028436600461135f565b610732565b6101d861029736600461139b565b61073d565b61018d6102aa36600461120b565b610775565b6009546101ad906001600160a01b031681565b6101756102d0366004611417565b610839565b6101d86102e3366004611153565b610867565b6006546000906001600160a01b031633148061031757506009546001600160a01b0316336001600160a01b0316145b61037b5760405162461bcd60e51b815260206004820152602a60248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152691037b91036b0b9ba32b960b11b60648201526084015b60405180910390fd5b6008805490600061038b83611460565b919050555061039c826008546108e0565b506008545b919050565b60006001600160e01b031982166380ac58cd60e01b14806103d757506001600160e01b03198216635b5e139f60e01b145b806103f257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461040790611479565b80601f016020809104026020016040519081016040528092919081815260200182805461043390611479565b80156104805780601f1061045557610100808354040283529160200191610480565b820191906000526020600020905b81548152906001019060200180831161046357829003601f168201915b5050505050905090565b6000610495826108fa565b506000908152600460205260409020546001600160a01b031690565b60006104bc82610612565b9050806001600160a01b0316836001600160a01b0316036105295760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610372565b336001600160a01b038216148061054557506105458133610839565b6105b75760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610372565b6105c1838361091f565b505050565b6105d0338261098d565b6105ec5760405162461bcd60e51b8152600401610372906114b3565b6105c18383836109ec565b6105c18383836040518060200160405280600081525061073d565b6000818152600260205260408120546001600160a01b0316806103f25760405162461bcd60e51b815260040161037290611500565b60006001600160a01b0382166106b15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610372565b506001600160a01b031660009081526003602052604090205490565b6106d5610b5d565b6106df6000610bb7565b565b6106e9610b5d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b610713610b5d565b600761071f8282611580565b5050565b60606001805461040790611479565b61071f338383610c09565b610747338361098d565b6107635760405162461bcd60e51b8152600401610372906114b3565b61076f84848484610cd3565b50505050565b6060610780826108fa565b6108136007805461079090611479565b80601f01602080910402602001604051908101604052809291908181526020018280546107bc90611479565b80156108095780601f106107de57610100808354040283529160200191610809565b820191906000526020600020905b8154815290600101906020018083116107ec57829003601f168201915b5050505050610d06565b6040516020016108239190611640565b6040516020818303038152906040529050919050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61086f610b5d565b6001600160a01b0381166108d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610372565b6108dd81610bb7565b50565b61071f828260405180602001604052806000815250610e59565b61090381610e8c565b6108dd5760405162461bcd60e51b815260040161037290611500565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061095482610612565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061099983610612565b9050806001600160a01b0316846001600160a01b031614806109c057506109c08185610839565b806109e45750836001600160a01b03166109d98461048a565b6001600160a01b0316145b949350505050565b826001600160a01b03166109ff82610612565b6001600160a01b031614610a255760405162461bcd60e51b815260040161037290611685565b6001600160a01b038216610a875760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610372565b610a948383836001610ea9565b826001600160a01b0316610aa782610612565b6001600160a01b031614610acd5760405162461bcd60e51b815260040161037290611685565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b031633146106df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610372565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603610c665760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610372565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610cde8484846109ec565b610cea84848484610f20565b61076f5760405162461bcd60e51b8152600401610372906116ca565b60608151600003610d2557505060408051602081019091526000815290565b60006040518060600160405280604081526020016117fa6040913990506000600384516002610d54919061171c565b610d5e919061172f565b610d69906004611751565b67ffffffffffffffff811115610d8157610d8161128a565b6040519080825280601f01601f191660200182016040528015610dab576020820181803683370190505b509050600182016020820185865187015b80821015610e17576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250610dbc565b5050600386510660018114610e335760028114610e4657610e4e565b603d6001830353603d6002830353610e4e565b603d60018303535b509195945050505050565b610e638383611021565b610e706000848484610f20565b6105c15760405162461bcd60e51b8152600401610372906116ca565b6000908152600260205260409020546001600160a01b0316151590565b600654600160a01b900460ff1680610ec857506001600160a01b038416155b80610eda57506001600160a01b038316155b61076f5760405162461bcd60e51b8152602060048201526017602482015276436174206973206e6f74207472616e7366657261626c6560481b6044820152606401610372565b60006001600160a01b0384163b1561101657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610f64903390899088908890600401611768565b6020604051808303816000875af1925050508015610f9f575060408051601f3d908101601f19168201909252610f9c918101906117a5565b60015b610ffc573d808015610fcd576040519150601f19603f3d011682016040523d82523d6000602084013e610fd2565b606091505b508051600003610ff45760405162461bcd60e51b8152600401610372906116ca565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506109e4565b506001949350505050565b6001600160a01b0382166110775760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610372565b61108081610e8c565b1561109d5760405162461bcd60e51b8152600401610372906117c2565b6110ab600083836001610ea9565b6110b481610e8c565b156110d15760405162461bcd60e51b8152600401610372906117c2565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80356001600160a01b03811681146103a157600080fd5b60006020828403121561116557600080fd5b61116e8261113c565b9392505050565b6001600160e01b0319811681146108dd57600080fd5b60006020828403121561119d57600080fd5b813561116e81611175565b60005b838110156111c35781810151838201526020016111ab565b50506000910152565b600081518084526111e48160208601602086016111a8565b601f01601f19169290920160200192915050565b60208152600061116e60208301846111cc565b60006020828403121561121d57600080fd5b5035919050565b6000806040838503121561123757600080fd5b6112408361113c565b946020939093013593505050565b60008060006060848603121561126357600080fd5b61126c8461113c565b925061127a6020850161113c565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156112bb576112bb61128a565b604051601f8501601f19908116603f011681019082821181831017156112e3576112e361128a565b816040528093508581528686860111156112fc57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561132857600080fd5b813567ffffffffffffffff81111561133f57600080fd5b8201601f8101841361135057600080fd5b6109e4848235602084016112a0565b6000806040838503121561137257600080fd5b61137b8361113c565b91506020830135801515811461139057600080fd5b809150509250929050565b600080600080608085870312156113b157600080fd5b6113ba8561113c565b93506113c86020860161113c565b925060408501359150606085013567ffffffffffffffff8111156113eb57600080fd5b8501601f810187136113fc57600080fd5b61140b878235602084016112a0565b91505092959194509250565b6000806040838503121561142a57600080fd5b6114338361113c565b91506114416020840161113c565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b6000600182016114725761147261144a565b5060010190565b600181811c9082168061148d57607f821691505b6020821081036114ad57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b601f8211156105c157600081815260208120601f850160051c810160208610156115595750805b601f850160051c820191505b8181101561157857828155600101611565565b505050505050565b815167ffffffffffffffff81111561159a5761159a61128a565b6115ae816115a88454611479565b84611532565b602080601f8311600181146115e357600084156115cb5750858301515b600019600386901b1c1916600185901b178555611578565b600085815260208120601f198616915b82811015611612578886015182559484019460019091019084016115f3565b50858210156116305787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161167881601d8501602087016111a8565b91909101601d0192915050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b808201808211156103f2576103f261144a565b60008261174c57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176103f2576103f261144a565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061179b908301846111cc565b9695505050505050565b6000602082840312156117b757600080fd5b815161116e81611175565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060408201526060019056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220d1bc582920bc752f0c5ebfa5d8ad3ae60cc5018e8d12a03623b4524558f9e7b264736f6c63430008130033" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604081815260048036101561001557600080fd5b600092833560e01c90816301ffc9a714610d615750806306fdde0314610c96578063081812fc14610c76578063095ea7b314610b095780631249c58b1461093357806317d70f7c1461091457806318160ddd146108f557806323b872dd146108cb5780632f745c591461081f5780633f4ba83a146107bc57806342842e0e1461076d5780634f6ccce7146106da5780635c975abb146106b35780636352211e1461068257806370a0823114610655578063715018a6146105f85780638456cb591461058f5780638da5cb5b1461056657806395d89b411461044d578063a22cb4651461037e578063b88d4fde146102f5578063c87b56dd14610246578063e985e9c5146101f45763f2fde38b1461012b57600080fd5b346101f05760203660031901126101f057610144610e41565b9061014d610efb565b6001600160a01b0391821692831561019e575050600b54826001600160601b0360a01b821617600b55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8280fd5b50503461024257806003193601126102425760ff81602093610214610e41565b61021c610e5c565b6001600160a01b0391821683526005875283832091168252855220549151911615158152f35b5080fd5b5091903461024257602036600319011261024257805191606083019083821067ffffffffffffffff8311176102e257506102de93508152603f82527f68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f6460208301527f6561647a6f6e652d7374617469632f6173736574732f62616467652e706e67008183015251918291602083526020830190610e01565b0390f35b634e487b7160e01b815260418552602490fd5b5090346101f05760803660031901126101f057610310610e41565b610318610e5c565b846064359467ffffffffffffffff86116102425736602387011215610242578501359461035061034787610edf565b95519586610ea7565b8585523660248783010111610242578561037b966024602093018388013785010152604435916110dc565b80f35b5090346101f057806003193601126101f057610398610e41565b9060243591821515809303610449576001600160a01b0316923384146104075750338452600560205280842083855260205280842060ff1981541660ff8416179055519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b6020606492519162461bcd60e51b8352820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b8480fd5b5091346105635780600319360112610563578151918160019283549384811c91818616958615610559575b6020968785108114610546578899509688969785829a52918260001461051f5750506001146104c4575b5050506102de92916104b5910385610ea7565b51928284938452830190610e01565b91908693508083527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b82841061050757505050820101816104b56102de6104a2565b8054848a0186015288955087949093019281016104ee565b60ff19168782015293151560051b860190930193508492506104b591506102de90506104a2565b634e487b7160e01b835260228a52602483fd5b92607f1692610478565b80fd5b505034610242578160031936011261024257600b5490516001600160a01b039091168152602090f35b50503461024257816003193601126102425760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258916105cd610efb565b6105d56115ef565b6105dd6115ef565b600b805460ff60a01b1916600160a01b17905551338152a180f35b8334610563578060031936011261056357610611610efb565b600b80546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5050346102425760203660031901126102425760209061067b610676610e41565b610f53565b9051908152f35b50913461056357602036600319011261056357506106a260209235611016565b90516001600160a01b039091168152f35b50503461024257816003193601126102425760209060ff600b5460a01c1690519015158152f35b508234610563576020366003190112610563575080359060085482101561071557602083610707846115a2565b91905490519160031b1c8152f35b608490602084519162461bcd60e51b8352820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152fd5b509190346102425761077e36610e72565b91835193602085019085821067ffffffffffffffff8311176107a95761037b969750528584526110dc565b634e487b7160e01b875260418852602487fd5b50503461024257816003193601126102425760207f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa916107fa610efb565b610802611682565b61080a611682565b600b805460ff60a01b1916905551338152a180f35b509134610563578160031936011261056357610839610e41565b6024359061084681610f53565b821015610874576001600160a01b031682526006602090815283832091835290815290829020548251908152f35b835162461bcd60e51b8152602081870152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608490fd5b83346105635761037b6108dd36610e72565b916108f06108eb8433611177565b61107a565b61123f565b5050346102425781600319360112610242576020906008549051908152f35b505034610242578160031936011261024257602090600c549051908152f35b5090346101f057826003193601126101f05761094d6115ef565b600c546000198114610af6576001019182600c553315610ab45760008381526002602052604090205461098c906001600160a01b031615155b15611636565b600854838552602091600983528184872055600160401b821015610aa15750906109db846109c2846001600296016008556115a2565b90919082549060031b91821b91600019901b1916179055565b6109e433610f53565b3386526006825283862081875282528386208590558486526007825283862055600084815260026020526040902054610a27906001600160a01b03161515610986565b3385526003815282852060018154019055838552528220336001600160601b0360a01b82541617905533827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600c54337f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858380a380f35b634e487b7160e01b865260419052602485fd5b6020606492519162461bcd60e51b8352820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b634e487b7160e01b845260118352602484fd5b50346101f057816003193601126101f057610b22610e41565b6024359290916001600160a01b0391908280610b3d87611016565b16941693808514610c2957803314908115610c0a575b5015610ba257848652602052842080546001600160a01b03191683179055610b7a83611016565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258480a480f35b6020608492519162461bcd60e51b8352820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152fd5b90508652600560205281862033875260205260ff828720541638610b53565b506020608492519162461bcd60e51b8352820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152fd5b50913461056357602036600319011261056357506106a26020923561103c565b50913461056357806003193601126105635781519181825492600184811c91818616958615610d57575b6020968785108114610546578899509688969785829a52918260001461051f575050600114610cfc575050506102de92916104b5910385610ea7565b91908693508280527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410610d3f57505050820101816104b56102de6104a2565b8054848a018601528895508794909301928101610d26565b92607f1692610cc0565b925050346101f05760203660031901126101f0573563ffffffff60e01b81168091036101f05760209250632483248360e11b8114908115610da4575b5015158152f35b63780e9d6360e01b811491508115610dbe575b5038610d9d565b6380ac58cd60e01b811491508115610df0575b8115610ddf575b5038610db7565b6301ffc9a760e01b14905038610dd8565b635b5e139f60e01b81149150610dd1565b919082519283825260005b848110610e2d575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610e0c565b600435906001600160a01b0382168203610e5757565b600080fd5b602435906001600160a01b0382168203610e5757565b6060906003190112610e57576001600160a01b03906004358281168103610e5757916024359081168103610e57579060443590565b90601f8019910116810190811067ffffffffffffffff821117610ec957604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111610ec957601f01601f191660200190565b600b546001600160a01b03163303610f0f57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6001600160a01b03168015610f7357600052600360205260406000205490565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b15610fd157565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152600260205260409020546001600160a01b0316611039811515610fca565b90565b60008181526002602052604090205461105f906001600160a01b03161515610fca565b6000908152600460205260409020546001600160a01b031690565b1561108157565b60405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b906111009392916110f06108eb8433611177565b6110fb83838361123f565b611481565b1561110757565b60405162461bcd60e51b81528061112060048201611124565b0390fd5b60809060208152603260208201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60608201520190565b906001600160a01b03808061118b84611016565b169316918383149384156111be575b5083156111a8575b50505090565b6111b49192935061103c565b16143880806111a2565b909350600052600560205260406000208260005260205260ff60406000205416923861119a565b156111ec57565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b6112639161124c84611016565b6001600160a01b03938484169391851684146111e5565b83821693841561143057839182611377575090506008549085600052600960205281604060002055600160401b821015610ec9576112c9926112b0876109c28560018997016008556115a2565b828603611344575b506112c286611016565b16146111e5565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60008481526004602052604081206001600160601b0360a01b9081815416905583825260036020526040822060001981540190558482526040822060018154019055858252600260205284604083209182541617905580a4565b61134d90610f53565b604060008781526006602052818120838252602052888282205588815260076020522055386112b8565b858303611389575b506112c9926112b0565b611394919250610f53565b60001981019190821161141a576112c992849260009088825260209060078252604091828420548281036113e3575b508a8452838381205586845260068152828420918452528120559261137f565b87855260068252838520838652825283852054888652600683528486208287528352808587205585526007825283852055386113c3565b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b9293600093909291803b15611597579484916114db9660405180948193630a85bd0160e11b9788845233600485015260018060a01b0380921660248501526044840152608060648401528260209b8c976084830190610e01565b0393165af1849181611557575b50611546575050503d60001461153e573d61150281610edf565b906115106040519283610ea7565b81528091833d92013e5b8051918261153b5760405162461bcd60e51b81528061112060048201611124565b01fd5b50606061151a565b6001600160e01b0319161492509050565b9091508581813d8311611590575b61156f8183610ea7565b8101031261044957516001600160e01b0319811681036104495790386114e8565b503d611565565b505050915050600190565b6008548110156115d95760086000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30190600090565b634e487b7160e01b600052603260045260246000fd5b60ff600b5460a01c166115fe57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b1561163d57565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b60ff600b5460a01c161561169257565b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fdfea2646970667358221220f8e5c42013c9f660d829437300033748dec1da68ce1af8a19eee9b54d601016064736f6c63430008130033" + }, + { + "address": "0x23178d693eb5d0cb2b4f2e4a4b4cdca9b063dc89", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061014c5760003560e01c80638f0d7538116100c3578063d0fc9f831161007c578063d0fc9f831461035f578063d46f6a2c1461037b578063f20c1416146103ab578063f2fde38b146103c9578063f541295c146103e5578063f887ea40146104035761014c565b80638f0d7538146102a35780638ffa736b146102bf578063a3112a64146102db578063a8e2812d1461030b578063b75c7dc614610327578063c851cc32146103435761014c565b806354255be01161011557806354255be01461021b57806362fa3d45146102395780636ec4d4cb14610255578063715018a6146102715780638129fc1c1461027b5780638da5cb5b146102855761014c565b8062fdd58e1461015157806327258b22146101815780634ada8076146101b15780634cbe11cb146101cd5780634e1273f4146101eb575b600080fd5b61016b60048036038101906101669190612481565b610421565b60405161017891906124d0565b60405180910390f35b61019b60048036038101906101969190612521565b6107cc565b6040516101a89190612569565b60405180910390f35b6101cb60048036038101906101c691906126dd565b6107f2565b005b6101d5610835565b6040516101e29190612743565b60405180910390f35b610205600480360381019061020091906128e4565b6108d2565b6040516102129190612a1a565b60405180910390f35b6102236109e1565b6040516102309190612743565b60405180910390f35b610253600480360381019061024e9190612a60565b6109f9565b005b61026f600480360381019061026a9190612b6d565b6110ec565b005b610279611199565b005b6102836111ad565b005b61028d6112eb565b60405161029a9190612c11565b60405180910390f35b6102bd60048036038101906102b89190612c2c565b611315565b005b6102d960048036038101906102d49190612c59565b611327565b005b6102f560048036038101906102f09190612521565b6113b9565b6040516103029190612eb1565b60405180910390f35b61032560048036038101906103209190612ed3565b6116e5565b005b610341600480360381019061033c9190612521565b611737565b005b61035d60048036038101906103589190612f33565b611987565b005b61037960048036038101906103749190612ed3565b611a39565b005b61039560048036038101906103909190612f33565b611ebc565b6040516103a29190612569565b60405180910390f35b6103b3611fdd565b6040516103c09190612f7f565b60405180910390f35b6103e360048036038101906103de9190612f33565b611ff7565b005b6103ed61207a565b6040516103fa91906124d0565b60405180910390f35b61040b612084565b6040516104189190612ff9565b60405180910390f35b60008061042d836120aa565b9050600060666000838152602001908152602001600020604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016005820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016005820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016005820160109054906101000a900461ffff1661ffff1661ffff1681526020016005820160129054906101000a900460ff161515151581526020016006820180546105fb90613043565b80601f016020809104026020016040519081016040528092919081815260200182805461062790613043565b80156106745780601f1061064957610100808354040283529160200191610674565b820191906000526020600020905b81548152906001019060200180831161065757829003601f168201915b5050505050815260200160078201805461068d90613043565b80601f01602080910402602001604051908101604052809291908181526020018280546106b990613043565b80156107065780601f106106db57610100808354040283529160200191610706565b820191906000526020600020905b8154815290600101906020018083116106e957829003601f168201915b50505050508152505090506014816101400151511180156107585750846040516020016107339190612c11565b6040516020818303038152906040528051906020012081610140015180519060200120145b15610768576001925050506107c6565b6014816101400151511480156107af57508460405160200161078a91906130bc565b6040516020818303038152906040528051906020012081610140015180519060200120145b156107bf576001925050506107c6565b6000925050505b92915050565b60008060001b606660008481526020019081526020016000206000015414159050919050565b60005b815181101561083157610821828281518110610814576108136130d7565b5b6020026020010151611737565b61082a816120e9565b90506107f5565b5050565b600061083f6120f6565b6065601481819054906101000a900461ffff1661085b90613135565b91906101000a81548161ffff021916908361ffff1602179055507f5891971a9a7b7a3d45b4bec8fe5ec184b79ca6d26177fbbddad04baa14fdc72c606560149054906101000a900461ffff166040516108b49190612743565b60405180910390a1606560149054906101000a900461ffff16905090565b6060815183511461090f576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000835167ffffffffffffffff81111561092c5761092b61259a565b5b60405190808252806020026020018201604052801561095a5781602001602082028036833780820191505090505b50905060005b84518110156109d6576109a785828151811061097f5761097e6130d7565b5b602002602001015185838151811061099a576109996130d7565b5b6020026020010151610421565b8282815181106109ba576109b96130d7565b5b6020026020010181815250506109cf816120e9565b9050610960565b508091505092915050565b6000606560149054906101000a900461ffff16905090565b336000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7dac9766040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8d9190613174565b73ffffffffffffffffffffffffffffffffffffffff1663c3c5a547836040518263ffffffff1660e01b8152600401610ac59190612c11565b602060405180830381865afa158015610ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0691906131cd565b905080610b3f576040517f3d1b206c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f10b5cc86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd29190613174565b90508073ffffffffffffffffffffffffffffffffffffffff166327258b2286600001356040518263ffffffff1660e01b8152600401610c119190613209565b602060405180830381865afa158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5291906131cd565b610c88576040517f8cc004a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000858060400190610c9a9190613233565b905003610cd3576040517f6367e41100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000858060600190610ce59190613233565b905003610d1e576040517f4e46e0b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6065601681819054906101000a900463ffffffff1680929190610d4090613296565b91906101000a81548163ffffffff021916908363ffffffff160217905550506000610d82606560169054906101000a900463ffffffff1663ffffffff166120aa565b9050604051806101800160405280828152602001876000013581526020016000801b81526020018673ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152602001876020016020810190610e0491906132ee565b67ffffffffffffffff168152602001600067ffffffffffffffff168152602001606560149054906101000a900461ffff1661ffff168152602001600015158152602001878060400190610e579190613233565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152602001878060600190610eaf9190613233565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152506066600083815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c08201518160050160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060e08201518160050160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506101008201518160050160106101000a81548161ffff021916908361ffff1602179055506101208201518160050160126101000a81548160ff02191690831515021790555061014082015181600601908161109c91906134bd565b506101608201518160070190816110b391906134bd565b50905050807ffe10586889e06530420fe4a0d86aa4f7afc3c9dc84b0c77b731a9615496ef18a60405160405180910390a2505050505050565b82829050858590501461112b576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b858590508110156111915761118186868381811061114f5761114e6130d7565b5b90506020020135858584818110611169576111686130d7565b5b905060200281019061117b919061358f565b84611327565b61118a816120e9565b905061112e565b505050505050565b6111a16120f6565b6111ab6000612174565b565b60008060019054906101000a900460ff161590508080156111de5750600160008054906101000a900460ff1660ff16105b8061120b57506111ed3061223a565b15801561120a5750600160008054906101000a900460ff1660ff16145b5b61124a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112419061363a565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611287576001600060016101000a81548160ff0219169083151502179055505b61128f61225d565b80156112e85760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516112df91906136a2565b60405180910390a15b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61131d6120f6565b8060678190555050565b61133182826109f9565b61133a83611737565b600061135d606560169054906101000a900463ffffffff1663ffffffff166120aa565b90508060666000868152602001908152602001600020600201819055507f77d674474bd19340e11693fde02ab981634002a50709bcaf013916b59e40c07d84826040516113ab9291906136bd565b60405180910390a150505050565b6113c161231f565b6113ca826107cc565b611400576040517f0e35f2bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60666000838152602001908152602001600020604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016005820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016005820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016005820160109054906101000a900461ffff1661ffff1661ffff1681526020016005820160129054906101000a900460ff161515151581526020016006820180546115ca90613043565b80601f01602080910402602001604051908101604052809291908181526020018280546115f690613043565b80156116435780601f1061161857610100808354040283529160200191611643565b820191906000526020600020905b81548152906001019060200180831161162657829003601f168201915b5050505050815260200160078201805461165c90613043565b80601f016020809104026020016040519081016040528092919081815260200182805461168890613043565b80156116d55780601f106116aa576101008083540402835291602001916116d5565b820191906000526020600020905b8154815290600101906020018083116116b857829003601f168201915b5050505050815250509050919050565b60005b8383905081101561173157611721848483818110611709576117086130d7565b5b905060200281019061171b919061358f565b836109f9565b61172a816120e9565b90506116e8565b50505050565b611740816107cc565b611776576040517f0e35f2bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6066600082815260200190815260200160002060050160129054906101000a900460ff16156117d1576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6066600082815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461186c576040517fffb9fe7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118ab6066600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ebc565b6118e1576040517f5cfd5b8a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016066600083815260200190815260200160002060050160126101000a81548160ff021916908315150217905550426066600083815260200190815260200160002060050160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f04bed256ad23fe17d61d9248ee108825bf3b1d04527fee36f0ee2af633fc14528160405161197c9190613209565b60405180910390a150565b61198f6120f6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119f5576040517f4944068e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a416120f6565b60005b83839050811015611eb6576065601681819054906101000a900463ffffffff1680929190611a7190613296565b91906101000a81548163ffffffff021916908363ffffffff160217905550506000611ab3606560169054906101000a900463ffffffff1663ffffffff166120aa565b9050604051806101800160405280828152602001868685818110611ada57611ad96130d7565b5b9050602002810190611aec919061358f565b6000013581526020016000801b81526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152602001868685818110611b5957611b586130d7565b5b9050602002810190611b6b919061358f565b6020016020810190611b7d91906132ee565b67ffffffffffffffff168152602001600067ffffffffffffffff168152602001606560149054906101000a900461ffff1661ffff168152602001600015158152602001868685818110611bd357611bd26130d7565b5b9050602002810190611be5919061358f565b8060400190611bf49190613233565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152602001868685818110611c4f57611c4e6130d7565b5b9050602002810190611c61919061358f565b8060600190611c709190613233565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152506066600083815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c08201518160050160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060e08201518160050160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506101008201518160050160106101000a81548161ffff021916908361ffff1602179055506101208201518160050160126101000a81548160ff021916908315150217905550610140820151816006019081611e5d91906134bd565b50610160820151816007019081611e7491906134bd565b50905050807ffe10586889e06530420fe4a0d86aa4f7afc3c9dc84b0c77b731a9615496ef18a60405160405180910390a250611eaf816120e9565b9050611a44565b50505050565b600080606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7dac9766040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f509190613174565b90508073ffffffffffffffffffffffffffffffffffffffff1663c0fbc748846040518263ffffffff1660e01b8152600401611f8b9190612c11565b600060405180830381865afa158015611fa8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611fd19190613951565b60600151915050919050565b6000606560169054906101000a900463ffffffff16905090565b611fff6120f6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590613a0c565b60405180910390fd5b61207781612174565b50565b6000606754905090565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000816067546120ba9190613a2c565b6040516020016120ca91906124d0565b6040516020818303038152906040526120e290613a85565b9050919050565b6000600182019050919050565b6120fe6122b6565b73ffffffffffffffffffffffffffffffffffffffff1661211c6112eb565b73ffffffffffffffffffffffffffffffffffffffff1614612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216990613b38565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff166122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a390613bca565b60405180910390fd5b6122b46122be565b565b600033905090565b600060019054906101000a900460ff1661230d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230490613bca565b60405180910390fd5b61231d6123186122b6565b612174565b565b604051806101800160405280600080191681526020016000801916815260200160008019168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600061ffff16815260200160001515815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612418826123ed565b9050919050565b6124288161240d565b811461243357600080fd5b50565b6000813590506124458161241f565b92915050565b6000819050919050565b61245e8161244b565b811461246957600080fd5b50565b60008135905061247b81612455565b92915050565b60008060408385031215612498576124976123e3565b5b60006124a685828601612436565b92505060206124b78582860161246c565b9150509250929050565b6124ca8161244b565b82525050565b60006020820190506124e560008301846124c1565b92915050565b6000819050919050565b6124fe816124eb565b811461250957600080fd5b50565b60008135905061251b816124f5565b92915050565b600060208284031215612537576125366123e3565b5b60006125458482850161250c565b91505092915050565b60008115159050919050565b6125638161254e565b82525050565b600060208201905061257e600083018461255a565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125d282612589565b810181811067ffffffffffffffff821117156125f1576125f061259a565b5b80604052505050565b60006126046123d9565b905061261082826125c9565b919050565b600067ffffffffffffffff8211156126305761262f61259a565b5b602082029050602081019050919050565b600080fd5b600061265961265484612615565b6125fa565b9050808382526020820190506020840283018581111561267c5761267b612641565b5b835b818110156126a55780612691888261250c565b84526020840193505060208101905061267e565b5050509392505050565b600082601f8301126126c4576126c3612584565b5b81356126d4848260208601612646565b91505092915050565b6000602082840312156126f3576126f26123e3565b5b600082013567ffffffffffffffff811115612711576127106123e8565b5b61271d848285016126af565b91505092915050565b600061ffff82169050919050565b61273d81612726565b82525050565b60006020820190506127586000830184612734565b92915050565b600067ffffffffffffffff8211156127795761277861259a565b5b602082029050602081019050919050565b600061279d6127988461275e565b6125fa565b905080838252602082019050602084028301858111156127c0576127bf612641565b5b835b818110156127e957806127d58882612436565b8452602084019350506020810190506127c2565b5050509392505050565b600082601f83011261280857612807612584565b5b813561281884826020860161278a565b91505092915050565b600067ffffffffffffffff82111561283c5761283b61259a565b5b602082029050602081019050919050565b600061286061285b84612821565b6125fa565b9050808382526020820190506020840283018581111561288357612882612641565b5b835b818110156128ac5780612898888261246c565b845260208401935050602081019050612885565b5050509392505050565b600082601f8301126128cb576128ca612584565b5b81356128db84826020860161284d565b91505092915050565b600080604083850312156128fb576128fa6123e3565b5b600083013567ffffffffffffffff811115612919576129186123e8565b5b612925858286016127f3565b925050602083013567ffffffffffffffff811115612946576129456123e8565b5b612952858286016128b6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6129918161244b565b82525050565b60006129a38383612988565b60208301905092915050565b6000602082019050919050565b60006129c78261295c565b6129d18185612967565b93506129dc83612978565b8060005b83811015612a0d5781516129f48882612997565b97506129ff836129af565b9250506001810190506129e0565b5085935050505092915050565b60006020820190508181036000830152612a3481846129bc565b905092915050565b600080fd5b600060808284031215612a5757612a56612a3c565b5b81905092915050565b60008060408385031215612a7757612a766123e3565b5b600083013567ffffffffffffffff811115612a9557612a946123e8565b5b612aa185828601612a41565b9250506020612ab285828601612436565b9150509250929050565b600080fd5b60008083601f840112612ad757612ad6612584565b5b8235905067ffffffffffffffff811115612af457612af3612abc565b5b602083019150836020820283011115612b1057612b0f612641565b5b9250929050565b60008083601f840112612b2d57612b2c612584565b5b8235905067ffffffffffffffff811115612b4a57612b49612abc565b5b602083019150836020820283011115612b6657612b65612641565b5b9250929050565b600080600080600060608688031215612b8957612b886123e3565b5b600086013567ffffffffffffffff811115612ba757612ba66123e8565b5b612bb388828901612ac1565b9550955050602086013567ffffffffffffffff811115612bd657612bd56123e8565b5b612be288828901612b17565b93509350506040612bf588828901612436565b9150509295509295909350565b612c0b8161240d565b82525050565b6000602082019050612c266000830184612c02565b92915050565b600060208284031215612c4257612c416123e3565b5b6000612c508482850161246c565b91505092915050565b600080600060608486031215612c7257612c716123e3565b5b6000612c808682870161250c565b935050602084013567ffffffffffffffff811115612ca157612ca06123e8565b5b612cad86828701612a41565b9250506040612cbe86828701612436565b9150509250925092565b612cd1816124eb565b82525050565b612ce08161240d565b82525050565b600067ffffffffffffffff82169050919050565b612d0381612ce6565b82525050565b612d1281612726565b82525050565b612d218161254e565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d61578082015181840152602081019050612d46565b60008484015250505050565b6000612d7882612d27565b612d828185612d32565b9350612d92818560208601612d43565b612d9b81612589565b840191505092915050565b600061018083016000830151612dbf6000860182612cc8565b506020830151612dd26020860182612cc8565b506040830151612de56040860182612cc8565b506060830151612df86060860182612cd7565b506080830151612e0b6080860182612cd7565b5060a0830151612e1e60a0860182612cfa565b5060c0830151612e3160c0860182612cfa565b5060e0830151612e4460e0860182612cfa565b50610100830151612e59610100860182612d09565b50610120830151612e6e610120860182612d18565b50610140830151848203610140860152612e888282612d6d565b915050610160830151848203610160860152612ea48282612d6d565b9150508091505092915050565b60006020820190508181036000830152612ecb8184612da6565b905092915050565b600080600060408486031215612eec57612eeb6123e3565b5b600084013567ffffffffffffffff811115612f0a57612f096123e8565b5b612f1686828701612b17565b93509350506020612f2986828701612436565b9150509250925092565b600060208284031215612f4957612f486123e3565b5b6000612f5784828501612436565b91505092915050565b600063ffffffff82169050919050565b612f7981612f60565b82525050565b6000602082019050612f946000830184612f70565b92915050565b6000819050919050565b6000612fbf612fba612fb5846123ed565b612f9a565b6123ed565b9050919050565b6000612fd182612fa4565b9050919050565b6000612fe382612fc6565b9050919050565b612ff381612fd8565b82525050565b600060208201905061300e6000830184612fea565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061305b57607f821691505b60208210810361306e5761306d613014565b5b50919050565b60008160601b9050919050565b600061308c82613074565b9050919050565b600061309e82613081565b9050919050565b6130b66130b18261240d565b613093565b82525050565b60006130c882846130a5565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061314082612726565b915061ffff820361315457613153613106565b5b600182019050919050565b60008151905061316e8161241f565b92915050565b60006020828403121561318a576131896123e3565b5b60006131988482850161315f565b91505092915050565b6131aa8161254e565b81146131b557600080fd5b50565b6000815190506131c7816131a1565b92915050565b6000602082840312156131e3576131e26123e3565b5b60006131f1848285016131b8565b91505092915050565b613203816124eb565b82525050565b600060208201905061321e60008301846131fa565b92915050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126132505761324f613224565b5b80840192508235915067ffffffffffffffff82111561327257613271613229565b5b60208301925060018202360383131561328e5761328d61322e565b5b509250929050565b60006132a182612f60565b915063ffffffff82036132b7576132b6613106565b5b600182019050919050565b6132cb81612ce6565b81146132d657600080fd5b50565b6000813590506132e8816132c2565b92915050565b600060208284031215613304576133036123e3565b5b6000613312848285016132d9565b91505092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261337d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613340565b6133878683613340565b95508019841693508086168417925050509392505050565b60006133ba6133b56133b08461244b565b612f9a565b61244b565b9050919050565b6000819050919050565b6133d48361339f565b6133e86133e0826133c1565b84845461334d565b825550505050565b600090565b6133fd6133f0565b6134088184846133cb565b505050565b5b8181101561342c576134216000826133f5565b60018101905061340e565b5050565b601f821115613471576134428161331b565b61344b84613330565b8101602085101561345a578190505b61346e61346685613330565b83018261340d565b50505b505050565b600082821c905092915050565b600061349460001984600802613476565b1980831691505092915050565b60006134ad8383613483565b9150826002028217905092915050565b6134c682612d27565b67ffffffffffffffff8111156134df576134de61259a565b5b6134e98254613043565b6134f4828285613430565b600060209050601f8311600181146135275760008415613515578287015190505b61351f85826134a1565b865550613587565b601f1984166135358661331b565b60005b8281101561355d57848901518255600182019150602085019450602081019050613538565b8683101561357a5784890151613576601f891682613483565b8355505b6001600288020188555050505b505050505050565b6000823560016080038336030381126135ab576135aa613224565b5b80830191505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613624602e836135b7565b915061362f826135c8565b604082019050919050565b6000602082019050818103600083015261365381613617565b9050919050565b6000819050919050565b600060ff82169050919050565b600061368c6136876136828461365a565b612f9a565b613664565b9050919050565b61369c81613671565b82525050565b60006020820190506136b76000830184613693565b92915050565b60006040820190506136d260008301856131fa565b6136df60208301846131fa565b9392505050565b600080fd5b600080fd5b60006137036136fe8461275e565b6125fa565b9050808382526020820190506020840283018581111561372657613725612641565b5b835b8181101561374f578061373b888261315f565b845260208401935050602081019050613728565b5050509392505050565b600082601f83011261376e5761376d612584565b5b815161377e8482602086016136f0565b91505092915050565b600080fd5b600067ffffffffffffffff8211156137a7576137a661259a565b5b6137b082612589565b9050602081019050919050565b60006137d06137cb8461378c565b6125fa565b9050828152602081018484840111156137ec576137eb613787565b5b6137f7848285612d43565b509392505050565b600082601f83011261381457613813612584565b5b81516138248482602086016137bd565b91505092915050565b600060e08284031215613843576138426136e6565b5b61384d60e06125fa565b9050600061385d8482850161315f565b60008301525060206138718482850161315f565b602083015250604082015167ffffffffffffffff811115613895576138946136eb565b5b6138a184828501613759565b60408301525060606138b5848285016131b8565b606083015250608082015167ffffffffffffffff8111156138d9576138d86136eb565b5b6138e5848285016137ff565b60808301525060a082015167ffffffffffffffff811115613909576139086136eb565b5b613915848285016137ff565b60a08301525060c082015167ffffffffffffffff811115613939576139386136eb565b5b613945848285016137ff565b60c08301525092915050565b600060208284031215613967576139666123e3565b5b600082015167ffffffffffffffff811115613985576139846123e8565b5b6139918482850161382d565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139f66026836135b7565b9150613a018261399a565b604082019050919050565b60006020820190508181036000830152613a25816139e9565b9050919050565b6000613a378261244b565b9150613a428361244b565b9250828201905080821115613a5a57613a59613106565b5b92915050565b6000819050602082019050919050565b6000613a7c82516124eb565b80915050919050565b6000613a9082612d27565b82613a9a84613a60565b9050613aa581613a70565b92506020821015613ae557613ae07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802613340565b831692505b5050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b226020836135b7565b9150613b2d82613aec565b602082019050919050565b60006020820190508181036000830152613b5181613b15565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000613bb4602b836135b7565b9150613bbf82613b58565b604082019050919050565b60006020820190508181036000830152613be381613ba7565b905091905056fea2646970667358221220e38a11812a520f3b258c4d541ee60e9fdd6b9ffb9c92bd39784f976e3d2dc0cc64736f6c63430008150033" + }, + { + "address": "0xc8a4fb931e8d77df8497790381ca7d228e68a41b", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100745760003560e01c80639cd016051161004e5780639cd01605146100ef578063e78cea9214610104578063eea0d7b214610119578063fc6e3b3b1461012c5761007b565b80631ee1bf671461008057806328555125146100ab578063676c5ef6146100cd5761007b565b3661007b57005b600080fd5b34801561008c57600080fd5b50610095610141565b6040516100a29190610ef7565b60405180910390f35b3480156100b757600080fd5b506100c0610165565b6040516100a29190610eec565b3480156100d957600080fd5b506100ed6100e8366004610d86565b610189565b005b3480156100fb57600080fd5b5061009561082c565b34801561011057600080fd5b50610095610850565b6100ed610127366004610dfd565b610874565b34801561013857600080fd5b50610095610d39565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b7f000000000000000000000000000000000000000000000000000000000000000181565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba516906323b872dd906101ff90339030908890600401610e95565b602060405180830381600087803b15801561021957600080fd5b505af115801561022d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102519190610dbe565b610290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028790610f43565b60405180910390fd5b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba5169063095ea7b390610324907f0000000000000000000000002935173357c010f8b56c8719a44f9fbdda90f67c908790600401610ec6565b602060405180830381600087803b15801561033e57600080fd5b505af1158015610352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103769190610dbe565b6103ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610287906110a2565b6040517f9169558600000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000002935173357c010f8b56c8719a44f9fbdda90f67c169063916955869061042a906001908590899089908990600401610f18565b602060405180830381600087803b15801561044457600080fd5b505af1925050508015610492575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261048f91810190610de5565b60015b61049b5761049e565b90505b806105a5576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba5169063a9059cbb906105179088908890600401610ec6565b602060405180830381600087803b15801561053157600080fd5b505af1158015610545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105699190610dbe565b61059f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102879061100e565b50610826565b7f000000000000000000000000000000000000000000000000000000000000000115610728576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f1690632e1a7d4d9061063d9084906004016110d9565b600060405180830381600087803b15801561065757600080fd5b505af115801561066b573d6000803e3d6000fd5b50506040805160008082526020820192839052935073ffffffffffffffffffffffffffffffffffffffff8916925084916106a59190610e5c565b60006040518083038185875af1925050503d80600081146106e2576040519150601f19603f3d011682016040523d82523d6000602084013e6106e7565b606091505b5050905080610722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028790610f7a565b50610824565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f169063a9059cbb9061079c9088908590600401610ec6565b602060405180830381600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee9190610dbe565b610824576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102879061100e565b505b50505050565b7f0000000000000000000000002935173357c010f8b56c8719a44f9fbdda90f67c81565b7f000000000000000000000000cbb852a6274e03fa00fb4895de0463f66df27a1181565b848610156108ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028790611045565b7f0000000000000000000000000000000000000000000000000000000000000001156109935785341461090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028790610fb1565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0876040518263ffffffff1660e01b81526004016000604051808303818588803b15801561097557600080fd5b505af1158015610989573d6000803e3d6000fd5b5050505050610a91565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f16906323b872dd90610a0990339030908b90600401610e95565b602060405180830381600087803b158015610a2357600080fd5b505af1158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b9190610dbe565b610a91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028790610f43565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f169063095ea7b390610b25907f0000000000000000000000002935173357c010f8b56c8719a44f9fbdda90f67c908a90600401610ec6565b602060405180830381600087803b158015610b3f57600080fd5b505af1158015610b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b779190610dbe565b610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610287906110a2565b6040517f9169558600000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000002935173357c010f8b56c8719a44f9fbdda90f67c1690639169558690610c2b9084906001908c908b908b90600401610f18565b602060405180830381600087803b158015610c4557600080fd5b505af1158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d9190610de5565b6040517fa6bd1b3300000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000cbb852a6274e03fa00fb4895de0463f66df27a11169063a6bd1b3390610cfc908c908c9086908c908a908a906004016110e2565b600060405180830381600087803b158015610d1657600080fd5b505af1158015610d2a573d6000803e3d6000fd5b50505050505050505050505050565b7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba581565b803573ffffffffffffffffffffffffffffffffffffffff81168114610d8157600080fd5b919050565b60008060008060808587031215610d9b578384fd5b610da485610d5d565b966020860135965060408601359560600135945092505050565b600060208284031215610dcf578081fd5b81518015158114610dde578182fd5b9392505050565b600060208284031215610df6578081fd5b5051919050565b600080600080600080600080610100898b031215610e19578384fd5b88359750610e2960208a01610d5d565b979a9799505050506040860135956060810135956080820135955060a0820135945060c0820135935060e0909101359150565b60008251815b81811015610e7c5760208186018101518583015201610e62565b81811115610e8a5782828501525b509190910192915050565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60ff958616815293909416602084015260408301919091526060820152608081019190915260a00190565b6020808252601d908201527f4c325f414d4d5f573a205472616e7366657246726f6d206661696c6564000000604082015260600190565b6020808252601d908201527f4c325f414d4d5f573a20455448207472616e73666572206661696c6564000000604082015260600190565b60208082526025908201527f4c325f414d4d5f573a2056616c756520646f6573206e6f74206d61746368206160408201527f6d6f756e74000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4c325f414d4d5f573a205472616e73666572206661696c656400000000000000604082015260600190565b60208082526029908201527f4c325f414d4d5f573a20426f6e646572206665652063616e6e6f74206578636560408201527f656420616d6f756e740000000000000000000000000000000000000000000000606082015260800190565b60208082526018908201527f4c325f414d4d5f573a20417070726f7665206661696c65640000000000000000604082015260600190565b90815260200190565b95865273ffffffffffffffffffffffffffffffffffffffff94909416602086015260408501929092526060840152608083015260a082015260c0019056fea26469706673582212205fed1a0b58c665b58ab760e191e8fc20321a1cdeb964a2c4bdf9f9f89e44ee1a64736f6c63430007060033" + }, + { + "address": "0xdd491a3ca9b5bbb12a0e1d9725448c7bb6bbff04", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000004b2598917238d", + "code": "0x" + }, + { + "address": "0x80c67432656d59144ceff962e8faf8926599bcf8", + "nonce": 1164976, + "balance": "0x00000000000000000000000000000000000000000000000c930a62223cc09f63", + "code": "0x" + }, + { + "address": "0xf3eee655eab9896bf7537c2d1078669c4fd13b15", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436101561001257600080fd5b6000803560e01c806316d0c6fe14611e005780631848effa14611dbb5780632a267a7c14611cf5578063349fdb0914611b9057806337a66d8514611a435780633ef7293c1461167d5780635c975abb1461165a5780635f0c9781146113b25780636881d8cb14611222578063791b98bc146111f5578063a8a9a7cc1461105c578063b6cc273a14610ea6578063dee05e3f14610ca3578063f949a3ae146102e95763fdd99e2d146100c257600080fd5b806100cc36612352565b93916100d9939193612443565b6100e1612626565b60405162435da560e01b81526001600160a01b039460209491927f00000000000000000000000034df93f37f327757684ae502b47c787c384650378716928685600481875afa9485156102c157889588918c916102cc575b506024604051809881936335d2155560e11b8352336004840152165afa80156102c15787958b91610274575b5095610191939291610178600498612487565b80518251148061026c575b61018c906124b9565b612810565b60405163c4aa304160e01b815292839182905afa918215610261578592610234575b505016803b156102305760405163bb02ec9b60e01b81523360048201526060602482015291839183918290849082906101f0906064830190612569565b6000604483015203925af180156102255761020e575b506001905580f35b61021790611fc3565b610222578038610206565b80fd5b6040513d84823e3d90fd5b5050fd5b6102539250803d1061025a575b61024b818361200c565b8101906123db565b38806101b3565b503d610241565b6040513d87823e3d90fd5b506001610183565b86819594939792503d83116102ba575b61028e818361200c565b810103126102b65760049587956101786102aa610191966123fa565b92985050919293610165565b8980fd5b503d610284565b6040513d8c823e3d90fd5b6102e39150823d841161025a5761024b818361200c565b38610139565b506060366003190112610222576004356001600160401b03811161092357610315903690600401612058565b906024356001600160401b038111610923576103359036906004016120be565b6001600160401b0360443511610923573660236044350112156109235760443560040135926103638461202d565b93610371604051958661200c565b808552602085013660248360051b60443501011161096957602460443501905b60248360051b60443501018210610b75575050506103ad612443565b6103b5612626565b60405162435da560e01b81526020816004817f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03165afa908115610ab0576024916020918691610b58575b506040516335d2155560e11b815233600482015292839182906001600160a01b03165afa8015610ab0578490610b1d575b6104429150612487565b805182511480610b15575b610456906124b9565b604051635434a1df60e01b81526020816004817f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03165afa908115610ab0578491610af6575b506001600160a01b031690813b15610a59579183916104d99383604051809681958294631a2b825160e21b8452600484016126b9565b03925af1801561022557908291610ae2575b505b8251811015610ada576105008184612532565b51604051632b47bb3d60e21b81526020816004817f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03165afa908115610ab0578491610abb575b5060018060a01b03166001600160401b03606083015116813b15610969578491602483926040519485938492634c77e2e560e01b845260048401525af18015610ab057908491610a9c575b5050604051906105a882611ff1565b600182526020368184013780516001600160a01b03166105c78361250f565b526040516105d481611ff1565b60018152845b60208110610a8b575060208201516105f18261250f565b526105fb8161250f565b50604051632630c12f60e01b81526020816004817f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03165afa908115610a80578691610a61575b50604083015160608401516001600160401b031692906001600160a01b0383163b15610a5d57916106af918893604051809681958294633c8d30db60e11b84526060600485015261069d606485018d61267c565b84810360031901602486015290612746565b604483019190915203926001600160a01b03165af1801561026157908591610a45575b505060405163477a86ef60e01b81526020816004817f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03165afa908115610261578591610a26575b50608082015160c083015160e0840151610100850151610120860151919460ff90931693926001600160a01b03908116921690823b156102b657928980959360c4938296604051998a97889663063007c560e31b8852336004890152602488015260448701526064860152608485015260a48401525af19182610a12575b5050610a0d5760018460033d116109fd575b6308c379a01461099a575b610927575b604051632630c12f60e01b8152906020826004817f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03165afa91821561026157859261096d575b50606001516001600160401b03166001600160a01b0382163b156109695791849161085e938360405180968195829463cfb1d08760e01b8452600484015260406024840152604483019061267c565b03926001600160a01b03165af1801561092757908391610955575b5050604051632b47bb3d60e21b81526020816004817f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03165afa908115610927578391610936575b506001600160a01b0316803b156109325782809160046040518094819363042ec5cb60e11b83525af180156109275790839161090f575b505061090a906124ea565b6104ed565b61091890611fc3565b6109235781386108ff565b5080fd5b6040513d85823e3d90fd5b8280fd5b61094f915060203d60201161025a5761024b818361200c565b386108c8565b61095e90611fc3565b610923578138610879565b8480fd5b6001600160401b0391925061099260609160203d60201161025a5761024b818361200c565b92915061080f565b6109a26127a2565b806109ae575b506107bc565b90507fedd32c7c9778f5c32416a3b51524d565f0b6bd3bbe26fd7c951dbe3d65cd427f859160808401516109f46040519283928352604060208401526040830190612706565b0390a1386109a8565b50600485803e845160e01c6107b1565b6107c1565b610a1b90611fc3565b61096957843861079f565b610a3f915060203d60201161025a5761024b818361200c565b38610721565b610a4e90611fc3565b610a595783386106d2565b8380fd5b8780fd5b610a7a915060203d60201161025a5761024b818361200c565b38610649565b6040513d88823e3d90fd5b8060606020809385010152016105da565b610aa590611fc3565b610932578238610599565b6040513d86823e3d90fd5b610ad4915060203d60201161025a5761024b818361200c565b3861054e565b506001815580f35b610aeb90611fc3565b6102225780386104eb565b610b0f915060203d60201161025a5761024b818361200c565b386104a3565b50600161044d565b506020813d602011610b50575b81610b376020938361200c565b81010312610a5957610b4b610442916123fa565b610438565b3d9150610b2a565b610b6f9150823d841161025a5761024b818361200c565b38610407565b81356001600160401b038111610c9f576101409081602319826044350136030112610a5d576040519182818101106001600160401b038285011117610c89578201604052610bc96024826044350101612044565b82526001600160401b03604482813501013511610a5d57602492602092610c766101448594610c07368960448481350101358460443501010161211c565b84870152604435810160648101356040860152610c26906084016121f2565b6060850152604435810160a4810135608086015260c481013560a0860152610c509060e40161226c565b60c08501526044350161010481013560e085015261012481013561010085015201612044565b6101208201528152019201919050610391565b634e487b7160e01b600052604160045260246000fd5b8680fd5b50346102225780602080600319360112610ea3576001600160401b03600435818111610e9e5736602382011215610e9e578060040135918211610e9e578160051b91366024848401011161096957610cf9612443565b610d01612626565b60405162435da560e01b81526001600160a01b03907f00000000000000000000000034df93f37f327757684ae502b47c787c384650378216908681600481855afa908115610e7657839188918a91610e81575b506024604051809481936335d2155560e11b8352336004840152165afa8015610e765787918991610e38575b5091610d8d600493612487565b60405163477a86ef60e01b815292839182905afa908115610e2d578791610e10575b501690813b15610e0c5760405163dee05e3f60e01b81526004810195909552602485018190526001600160fb1b031061096957838560448286839760248398018484013781010301925af180156102255761020e57506001905580f35b8580fd5b610e279150863d881161025a5761024b818361200c565b38610daf565b6040513d89823e3d90fd5b82819392503d8311610e6f575b610e4f818361200c565b81010312610a5d57600491610d8d610e6789936123fa565b919350610d80565b503d610e45565b6040513d8a823e3d90fd5b610e989150823d841161025a5761024b818361200c565b38610d54565b505050fd5b50fd5b5080610eb136612352565b9391610ebe939193612443565b610ec6612626565b60405162435da560e01b81526001600160a01b039460209491927f00000000000000000000000034df93f37f327757684ae502b47c787c384650378716928685600481875afa9485156102c157889588918c9161103f575b506024604051809881936335d2155560e11b8352336004840152165afa80156102c15787958b91610ff6575b5095610f5d939291610178600498612487565b60405163c4aa304160e01b815292839182905afa918215610261578592610fd9575b505016803b156102305760405163bb02ec9b60e01b8152336004820152606060248201529183918391829084908290610fbc906064830190612569565b6001604483015203925af180156102255761020e57506001905580f35b610fef9250803d1061025a5761024b818361200c565b3880610f7f565b86819594939792503d8311611038575b611010818361200c565b810103126102b657600495879561017861102c610f5d966123fa565b92985050919293610f4a565b503d611006565b6110569150823d841161025a5761024b818361200c565b38610f1e565b508061106736612352565b9391611074939193612443565b61107c612626565b60405162435da560e01b81526001600160a01b039460209491927f00000000000000000000000034df93f37f327757684ae502b47c787c384650378716928685600481875afa9485156102c157889588918c916111d8575b506024604051809881936335d2155560e11b8352336004840152165afa80156102c15787958b9161118f575b5095611113939291610178600498612487565b60405163c4aa304160e01b815292839182905afa918215610261578592611172575b505016803b1561023057604051632dc0e2db60e11b81523360048201526060602482015291839183918290849082906101f0906064830190612569565b6111889250803d1061025a5761024b818361200c565b3880611135565b86819594939792503d83116111d1575b6111a9818361200c565b810103126102b65760049587956101786111c5611113966123fa565b92985050919293611100565b503d61119f565b6111ef9150823d841161025a5761024b818361200c565b386110d4565b503461022257806003193601126102225760015460405160089190911c6001600160a01b03168152602090f35b503461022257602080600319360112610923576001600160a01b039060043590828216908183036113ad5760405162435da560e01b815281816004817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503789165afa908115610a8057859183918891611390575b50602460405180948193637be53ca160e01b8352336004840152165afa908115610a8057869161132b575b50907f888f67ba778372c27e79bbfc2b6a7933c7f94ac44ea6110df376637c513641e4946112f16060959493612407565b60015493610100600160a81b039060081b16610100600160a81b03198516176001556040519333855260081c16908301526040820152a180f35b93929180915084813d8311611389575b611345818361200c565b81010312610e0c577f888f67ba778372c27e79bbfc2b6a7933c7f94ac44ea6110df376637c513641e4946112f161137d6060966123fa565b929394955050946112c0565b503d61133b565b6113a79150823d841161025a5761024b818361200c565b38611295565b600080fd5b506113bc36612352565b93916113c9939193612443565b6113d1612626565b60405162435da560e01b81526001600160a01b037f00000000000000000000000034df93f37f327757684ae502b47c787c3846503781169590946020949293909285856004818b5afa9384156102c15787958b9561163b575b508660405180966335d2155560e11b82523360048301528160249b8c92165afa948515611630578b956115f0575b5061017861146595612487565b855b85518110156115e85761147a8187612532565b5160408101511561155f5760405163c4aa304160e01b815284816004818a5afa80156115545784918a91611537575b501690846114b682612a00565b9101516004811015611524579082918a933b15610a59576114f192849283604051809681958294632dc0e2db60e11b845233600485016125f4565b03925af1801561022557611510575b505061150b906124ea565b611467565b61151990611fc3565b610c9f578638611500565b634e487b7160e01b8a526021600452868afd5b61154e9150863d881161025a5761024b818361200c565b386114a9565b6040513d8b823e3d90fd5b60405163c4aa304160e01b815284816004818a5afa80156115545784918a916115cb575b5016908461159082612a00565b9101516004811015611524579082918a933b15610a59576114f19284928360405180968195829463bb02ec9b60e01b845233600485016125f4565b6115e29150863d881161025a5761024b818361200c565b38611583565b866001815580f35b94508685813d8311611629575b611607818361200c565b810103126116255761017861161e611465966123fa565b9550611458565b8a80fd5b503d6115fd565b6040513d8d823e3d90fd5b611653919550873d891161025a5761024b818361200c565b933861142a565b5034610222578060031936011261022257602060ff600154166040519015158152f35b5060e0366003190112610222576001600160401b0390600435828111610923576116ab903690600401612058565b602435838111610932576116c39036906004016120be565b92604435818111610a59576116dc903690600401612172565b606435828111610969576116f4903690600401612206565b9060a43595838711610e0c5736602388011215610e0c5786600401359361171a8561202d565b97611728604051998a61200c565b8589526020890190602460c0839802820101903682116102b657602401915b8183106119cf5750505060c435908111610c9f5761176990369060040161227a565b94611772612443565b61177a612626565b60405162435da560e01b81526020816004817f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03165afa908115610e76576024916020918a916119b2575b506040516335d2155560e11b815233600482015292839182906001600160a01b03165afa908115610e76578891611969575b509061017861180f95949392612487565b60405163c4aa304160e01b81526020816004817f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03165afa908115610ab057849161194a575b506001600160a01b031690813b15610a59576040519263174f3f3360e21b84526084840133600486015260843560248601526080968760448701525180915260a485019290865b8181106118f35786850360031901606488015287808881818a8183816118c98e8e612569565b03925af18015610225576118df57506001905580f35b6118e890611fc3565b610222578082610206565b8251805186526020818101518188015260408083015160ff1690880152606080830151908801528a8201518b88015260a0918201516001600160a01b03169187019190915260c090950194909201916001016118a3565b611963915060203d60201161025a5761024b818361200c565b3861185c565b90506020813d6020116119aa575b816119846020938361200c565b81010312610a5d579061017861199f61180f969594936123fa565b9192939495506117fe565b3d9150611977565b6119c99150823d841161025a5761024b818361200c565b386117cc565b60c0833603126102b6576040519060c082019082821086831117610c895760c092602092604052853581528286013583820152611a0e6040870161226c565b6040820152606080870135908201526080808701359082015260a0611a34818801612044565b90820152815201920191611747565b503461022257806003193601126102225760405162435da560e01b81526001600160a01b039060209081816004817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503787165afa8015610ab05782918591611b73575b50602460405180958193637be53ca160e01b8352336004840152165afa918215610927578392611b19575b50611afb7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25892612407565b611b03612443565b600160ff1981541617600155604051338152a180f35b91508082813d8311611b6c575b611b30818361200c565b8101031261093257611afb611b657f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258936123fa565b9250611ad0565b503d611b26565b611b8a9150823d841161025a5761024b818361200c565b38611aa5565b503461022257806003193601126102225760405162435da560e01b81526020906001600160a01b039082816004817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503786165afa8015610ab05783918591611cd8575b50602460405180948193637be53ca160e01b8352336004840152165afa8015610927578390611ca2575b611c269150612407565b60015460ff811615611c665760ff19166001556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9190a180f35b60405162461bcd60e51b815260048101839052601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b508181813d8311611cd1575b611cb8818361200c565b8101031261093257611ccc611c26916123fa565b611c1c565b503d611cae565b611cef9150823d841161025a5761024b818361200c565b38611bf2565b5034610222576080366003190112610222576024358015158091036113ad57604060018060a01b0360015460081c16916084825180948193630a899e9f60e21b835260043560048401526024830152604435604483015260643560648301525afa80156102255782918391611d77575b60408383825191151582526020820152f35b9150506040813d604011611db3575b81611d936040938361200c565b8101031261092357604091506020611daa826123fa565b91015138611d65565b3d9150611d86565b50346102225780600319360112610222576040517f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03168152602090f35b5080611e0b36612352565b9391611e18939193612443565b611e20612626565b60405162435da560e01b81526001600160a01b039460209491927f00000000000000000000000034df93f37f327757684ae502b47c787c384650378716928685600481875afa9485156102c157889588918c91611fa6575b506024604051809881936335d2155560e11b8352336004840152165afa80156102c15787958b91611f5d575b5095611eb7939291610178600498612487565b60405163c4aa304160e01b815292839182905afa918215610261578592611f40575b50501690813b15610230578291611f1491604051948580948193632dc0e2db60e11b8352336004840152606060248401526064830190612569565b6001604483015203925af1801561022557611f3157506001815580f35b611f3a90611fc3565b38610ada565b611f569250803d1061025a5761024b818361200c565b3880611ed9565b86819594939792503d8311611f9f575b611f77818361200c565b810103126102b6576004958795610178611f93611eb7966123fa565b92985050919293611ea4565b503d611f6d565b611fbd9150823d841161025a5761024b818361200c565b38611e78565b6001600160401b038111610c8957604052565b60e081019081106001600160401b03821117610c8957604052565b604081019081106001600160401b03821117610c8957604052565b90601f801991011681019081106001600160401b03821117610c8957604052565b6001600160401b038111610c895760051b60200190565b35906001600160a01b03821682036113ad57565b81601f820112156113ad5780359161206f8361202d565b9261207d604051948561200c565b808452602092838086019260051b8201019283116113ad578301905b8282106120a7575050505090565b8380916120b384612044565b815201910190612099565b81601f820112156113ad578035916120d58361202d565b926120e3604051948561200c565b808452602092838086019260051b8201019283116113ad578301905b82821061210d575050505090565b813581529083019083016120ff565b81601f820112156113ad578035906001600160401b038211610c895760405192612150601f8401601f19166020018561200c565b828452602083830101116113ad57816000926020809301838601378301015290565b9080601f830112156113ad5781359061218a8261202d565b92612198604051948561200c565b828452602092838086019160051b830101928084116113ad57848301915b8483106121c65750505050505090565b82356001600160401b0381116113ad5786916121e78484809489010161211c565b8152019201916121b6565b35906001600160401b03821682036113ad57565b81601f820112156113ad5780359161221d8361202d565b9261222b604051948561200c565b808452602092838086019260051b8201019283116113ad578301905b828210612255575050505090565b838091612261846121f2565b815201910190612247565b359060ff821682036113ad57565b81601f820112156113ad578035906122918261202d565b926040906122a18251958661200c565b838552602091828601918360e0809702860101948186116113ad578401925b8584106122d1575050505050505090565b86848303126113ad578251906122e682611fd6565b843582528585013560048110156113ad5786830152838501359081151582036113ad57828792868b950152606061231e81890161226c565b908201526080808801359082015260a0808801359082015260c0612343818901612044565b908201528152019301926122c0565b60a06003198201126113ad576004906001600160401b0382358181116113ad578261237e918501612058565b936024358281116113ad57836123959186016120be565b936044358381116113ad57846123ac918301612172565b936064358481116113ad57816123c3918401612206565b936084359081116113ad576123d8920161227a565b90565b908160209103126113ad57516001600160a01b03811681036113ad5790565b519081151582036113ad57565b1561240e57565b60405162461bcd60e51b815260206004820152600d60248201526c37b7363ca837b7b620b236b4b760991b6044820152606490fd5b60ff6001541661244f57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b1561248e57565b60405162461bcd60e51b81526020600482015260036024820152626f706b60e81b6044820152606490fd5b156124c057565b60405162461bcd60e51b8152602060048201526002602482015261069760f41b6044820152606490fd5b60001981146124f95760010190565b634e487b7160e01b600052601160045260246000fd5b80511561251c5760200190565b634e487b7160e01b600052603260045260246000fd5b805182101561251c5760209160051b010190565b9060048210156125535752565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b828110612589575050505090565b909192938260e06001928751805182526125a98482015185840190612546565b60408181015115159083015260608082015160ff16908301526080808201519083015260a0808201518184015260c0918201519086901b86900316908201520195019392910161257b565b93929061261c6126249360409260018060a01b03168752606060208801526060870190612569565b940190612546565b565b600260005414612637576002600055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b90815180825260208080930193019160005b82811061269c575050505090565b83516001600160a01b03168552938101939281019260010161268e565b906126cc9060408352604083019061267c565b81810360209283015282518082529082019282019160005b8281106126f2575050505090565b8351855293810193928101926001016126e4565b919082519283825260005b848110612732575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201612711565b908082519081815260208091019281808460051b8301019501936000915b8483106127745750505050505090565b9091929394958480612792600193601f198682030187528a51612706565b9801930193019194939290612764565b600060443d106123d857604051600319913d83016004833e81516001600160401b03918282113d6024840111176127ff57818401948551938411612807573d850101602084870101116127ff57506123d89291016020019061200c565b949350505050565b50949350505050565b60408051635434a1df60e01b81526000959294919360209392916001600160a01b03917f00000000000000000000000034df93f37f327757684ae502b47c787c384650378316918681600481865afa9081156129f6579084918b916129d9575b5016803b156102b65761289c918a918a838b51809681958294631a2b825160e21b8452600484016126b9565b03925af180156129cf576129b9575b5084600491875192838092632630c12f60e01b82525afa9081156129af578891612992575b501692833b15610c9f5791612906959287949261291987519889966318c68c5b60e21b885260606004890152606488019061267c565b6003199283888303016024890152612746565b90858203016044860152818084519283815201930191865b82811061296f5750505050828091039134905af19081156129665750612955575050565b61295f8291611fc3565b6102225750565b513d84823e3d90fd5b83516001600160401b031685528a97508996509381019392810192600101612931565b6129a99150853d871161025a5761024b818361200c565b386128d0565b86513d8a823e3d90fd5b600491986129c78792611fc3565b9891506128ab565b87513d8b823e3d90fd5b6129f09150883d8a1161025a5761024b818361200c565b38612870565b88513d8c823e3d90fd5b60408051612a0d81611ff1565b6001815260005b602080821015612a6457835160209291612a2d82611fd6565b600082526000818301526000868301526000606083015260006080830152600060a0830152600060c0830152828501015201612a14565b5050612a7f91509291928093612a798261250f565b5261250f565b5056fea2646970667358221220da68bee99af93cc265beddb33f9f7ed76aced294105390ce48cf1c882c9a3a3164736f6c63430008130033" + }, + { + "address": "0xb6ae56d3981c26728c668fc6bf95d9b64b77b8c8", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a714610d075750816314ae9f2e14610cc45781631785f53c14610c225781631e4e0091146109d757816322650caf14610994578163248a9ca31461096a57816324d7806c146109255781632f2ff15d1461087c578163364bc15a1461085357816336568abe146107c15781634032b72b1461077e5781635544e4a51461073e5781636ba42aaa146106eb5781636d70f7ae1461069857816370480275146105f25781637be53ca11461059f57816391d148541461055957816396f0248a146105165781639870d7fe146104d3578163a217fddf146104b8578163ab56a29c14610402578163ac8a584a146103bf578163b36d691914610358578163b8f6dba714610396578163bd76fbc114610358578163cc0d50e614610305578163d547741f146102c757508063d5498edb14610282578063f0a3a97c1461025a578063f5b541a6146102325763f83695cb1461017a57600080fd5b3461022e576020908160031936011261022a57610195610d5a565b906000805160206112a1833981519152928385528481526101bb60018387200154610f74565b8385528481528185206001600160a01b039093168086529281528185205460ff166101e4578480f35b83855284815281852083865290528320805460ff1916905533917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8480a4388080808480f35b8280fd5b5080fd5b503461022e578160031936011261022e57602090516000805160206113018339815191528152f35b503461022e578160031936011261022e57602090516000805160206112c18339815191528152f35b503461022e57602036600319011261022e5761029c610d5a565b6102a4610d8b565b6001600160a01b0316825260016020819052908220805460ff1916909117905580f35b9190503461022a578060031936011261022a5761030291356102fd60016102ec610d75565b938387528660205286200154610f74565b6110f6565b80f35b50503461022e57602036600319011261022e5760ff81602093610326610d5a565b6000805160206112c183398151915282528186528282206001600160a01b039091168252855220549151911615158152f35b50503461022e57602036600319011261022e5760209160ff9082906001600160a01b03610383610d5a565b1681526001855220541690519015158152f35b50503461022e578160031936011261022e57602090516000805160206112a18339815191528152f35b50503461022e576020908160031936011261022a576103dc610d5a565b90600080516020611301833981519152928385528481526101bb60018387200154610f74565b50503461022e576020908160031936011261022a5761041f610d5a565b906000805160206112c18339815191529283855284815261044560018387200154610f74565b8385528481528185206001600160a01b039093168086529281528185205460ff161561046f578480f35b83855284815281852083865290528320805460ff1916600117905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8480a4388080808480f35b50503461022e578160031936011261022e5751908152602090f35b50503461022e576020908160031936011261022a576104f0610d5a565b906000805160206113018339815191529283855284815261044560018387200154610f74565b50503461022e576020908160031936011261022a57610533610d5a565b906000805160206112c1833981519152928385528481526101bb60018387200154610f74565b90503461022a578160031936011261022a578160209360ff9261057a610d75565b903582528186528282206001600160a01b039091168252855220549151911615158152f35b50503461022e57602036600319011261022e5760ff816020936105c0610d5a565b6000805160206112a183398151915282528186528282206001600160a01b039091168252855220549151911615158152f35b50503461022e576020908160031936011261022a5761060f610d5a565b9183805283815261062560018386200154610f74565b8380528381528184206001600160a01b039093168085529281528184205460ff161561064f578380f35b83805283815281842083855290528220805460ff191660011790553390827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a43880808380f35b50503461022e57602036600319011261022e5760ff816020936106b9610d5a565b60008051602061130183398151915282528186528282206001600160a01b039091168252855220549151911615158152f35b50503461022e57602036600319011261022e5760ff8160209361070c610d5a565b6000805160206112e183398151915282528186528282206001600160a01b039091168252855220549151911615158152f35b50503461022e57602036600319011261022e57610759610d5a565b610761610d8b565b6001600160a01b0316825260016020528120805460ff1916905580f35b50503461022e576020908160031936011261022a5761079b610d5a565b906000805160206112e18339815191529283855284815261044560018387200154610f74565b8391503461022e578260031936011261022e576107dc610d75565b90336001600160a01b038316036107f8579061030291356110f6565b608490602085519162461bcd60e51b8352820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152fd5b50503461022e578160031936011261022e57602090516000805160206112e18339815191528152f35b90503461022a578160031936011261022a573590610898610d75565b90828452836020526108af60018286200154610f74565b82845260208481528185206001600160a01b039093168086529290528084205460ff16156108db578380f35b828452836020528084208285526020528320600160ff1982541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8480a43880808380f35b50503461022e57602036600319011261022e5760ff81602093610946610d5a565b8180528186528282206001600160a01b039091168252855220549151911615158152f35b90503461022a57602036600319011261022a57816020936001923581528085522001549051908152f35b50503461022e576020908160031936011261022a576109b1610d5a565b906000805160206112a18339815191529283855284815261044560018387200154610f74565b9190503461022a578060031936011261022a578135906024803593858052602091868352838720338852835260ff848820541615610a4a5750509084600192848252528420019082825492557fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8480a480f35b8387610a5533611191565b82519082610a62836110a2565b60428352878301936060368637835115610c105760308553835190600191821015610bfe5790607860218601536041915b818311610b9557505050610b555783610b26604889610b479660449a9996610b17610aee9776020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b9b5198858a9687019d8e52825192839160378901910161107f565b8401917001034b99036b4b9b9b4b733903937b6329607d1b60378401525180938684019061107f565b010360288101855201836110d4565b5196879562461bcd60e51b875286015251928380928601528585019061107f565b601f01601f19168101030190fd5b60648688878188519362461bcd60e51b85528401528201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f81166010811015610bec576f181899199a1a9b1b9c1cb0b131b232b360811b901a610bc5858861116a565b53891c928015610bda57600019019190610a93565b634e487b7160e01b825260118a528882fd5b634e487b7160e01b835260328b528983fd5b634e487b7160e01b8152603289528790fd5b634e487b7160e01b8152603288528690fd5b50503461022e576020908160031936011261022a57610c3f610d5a565b91838052838152610c5560018386200154610f74565b8380528381528184206001600160a01b039093168085529281528184205460ff16610c7e578380f35b83805283815281842083855290528220805460ff191690553390827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8180a43880808380f35b50503461022e576020908160031936011261022a57610ce1610d5a565b906000805160206112e1833981519152928385528481526101bb60018387200154610f74565b84913461022a57602036600319011261022a573563ffffffff60e01b811680910361022a5760209250637965db0b60e01b8114908115610d49575b5015158152f35b6301ffc9a760e01b14905083610d42565b600435906001600160a01b0382168203610d7057565b600080fd5b602435906001600160a01b0382168203610d7057565b3360009081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f6020908152604080832054909291906000805160206113018339815191529060ff1615610ddf5750505050565b610de833611191565b90845190610df5826110a2565b60428252838201946060368737825115610f605760308653825190600191821015610f605790607860218501536041915b818311610ef257505050610eb05784610e8c6048610b47936044979851988991610e7d8984019876020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a52610aee815180928d60378901910161107f565b010360288101895201876110d4565b5194859362461bcd60e51b855260048501525180928160248601528585019061107f565b60648386519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f81166010811015610f4c576f181899199a1a9b1b9c1cb0b131b232b360811b901a610f22858761116a565b5360041c928015610f3857600019019190610e26565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b60008181526020818152604092838320338452825260ff848420541615610f9b5750505050565b610fa433611191565b90845190610fb1826110a2565b60428252838201946060368737825115610f605760308653825190600191821015610f605790607860218501536041915b81831161103957505050610eb05784610e8c6048610b47936044979851988991610e7d8984019876020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a52610aee815180928d60378901910161107f565b909192600f81166010811015610f4c576f181899199a1a9b1b9c1cb0b131b232b360811b901a611069858761116a565b5360041c928015610f3857600019019190610fe2565b60005b8381106110925750506000910152565b8181015183820152602001611082565b6080810190811067ffffffffffffffff8211176110be57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176110be57604052565b9060009180835282602052604083209160018060a01b03169182845260205260ff60408420541661112657505050565b80835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4565b90815181101561117b570160200190565b634e487b7160e01b600052603260045260246000fd5b604051906060820182811067ffffffffffffffff8211176110be57604052602a825260208201604036823782511561117b5760309053815160019081101561117b57607860218401536029905b8082116112325750506111ee5790565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f8116601081101561128b576f181899199a1a9b1b9c1cb0b131b232b360811b901a611261848661116a565b5360041c9180156112765760001901906111de565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fdfe12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d07fc8737ab85eb45125971625a9ebdb75cc78e01d5c1fa80c4c6e5203f47bc4fab97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a26469706673582212209db12bfe4abf7338977b51adb4348e454b4131e3228de5cf985383c4ee90724d64736f6c63430008130033" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033" + }, + { + "address": "0xf9326b9aa3c9beef6557a508cfffe519ab6ff560", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461013757806306fdde0314610132578063238ac9331461012d578063248a9ca3146101285780632f2ff15d1461012357806336568abe1461011e578063439766ce146101195780635424b6db146101145780635c7935861461010f5780635c975abb1461010a5780637e15d9ee1461010557806391d14854146101005780639a8a0592146100fb578063a217fddf146100f6578063b33712c5146100f1578063d547741f146100ec578063e02be7d9146100e75763f72bd368146100e257600080fd5b610cc5565b610bb3565b610b74565b610ad7565b610abb565b610a9d565b610a4a565b610887565b6107ed565b6107b0565b610763565b61062f565b61058d565b6104bb565b610476565b61044f565b61041b565b3461018d57602036600319011261018d5760043563ffffffff60e01b811680910361018d57602090637965db0b60e01b811490811561017c575b506040519015158152f35b6301ffc9a760e01b14905038610171565b600080fd5b90600182811c921680156101c2575b60208310146101ac57565b634e487b7160e01b600052602260045260246000fd5b91607f16916101a1565b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101fe57604052565b6101cc565b60a0810190811067ffffffffffffffff8211176101fe57604052565b6080810190811067ffffffffffffffff8211176101fe57604052565b90601f8019910116810190811067ffffffffffffffff8211176101fe57604052565b604051906000826003549161027183610192565b808352926001908181169081156102f9575060011461029a575b506102989250038361023b565b565b6003600090815291507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8483106102de575061029893505081016020013861028b565b81935090816020925483858a010152019101909185926102c5565b90506020925061029894915060ff191682840152151560051b8201013861028b565b906040519182600082549261032f84610192565b90818452600194858116908160001461039c5750600114610359575b50506102989250038361023b565b9093915060005260209081600020936000915b8183106103845750506102989350820101388061034b565b8554888401850152948501948794509183019161036c565b91505061029894506020925060ff191682840152151560051b820101388061034b565b60005b8381106103d25750506000910152565b81810151838201526020016103c2565b906020916103fb815180928185528580860191016103bf565b601f01601f1916010190565b9060206104189281815201906103e2565b90565b3461018d57600036600319011261018d5761044b61043761025d565b6040519182916020835260208301906103e2565b0390f35b3461018d57600036600319011261018d5760206001600160a01b0360045416604051908152f35b3461018d57602036600319011261018d5760043560005260006020526020600160406000200154604051908152f35b602435906001600160a01b038216820361018d57565b3461018d57604036600319011261018d576004356104d76104a5565b600091808352826020526104f1600160408520015461154d565b8083528260205260ff61051a8360408620906001600160a01b0316600052602052604060002090565b541615610525578280f35b8083528260205261054c8260408520906001600160a01b0316600052602052604060002090565b805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8480a438808280f35b3461018d57604036600319011261018d576105a66104a5565b336001600160a01b038216036105c4576105c290600435611606565b005b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608490fd5b3461018d57600036600319011261018d576106486113e6565b60015460ff811661068a5760019060ff1916176001557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b60405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606490fd5b81601f8201121561018d5780359067ffffffffffffffff82116101fe5760405192610704601f8401601f19166020018561023b565b8284526020838301011161018d57816000926020809301838601378301015290565b90610739602092828151948592016103bf565b0190565b60206107569181604051938285809451938492016103bf565b8101600781520301902090565b3461018d57602036600319011261018d5760043567ffffffffffffffff811161018d576001600160a01b036107a66107a160209336906004016106cf565b61073d565b5416604051908152f35b3461018d57602036600319011261018d576004356001600160a01b03811680910361018d57600052600860205261044b610437604060002061031b565b3461018d57600036600319011261018d57602060ff600154166040519015158152f35b60a060031982011261018d5767ffffffffffffffff9060043582811161018d578161083d916004016106cf565b926024356001600160a01b038116810361018d579260443581811161018d5783610869916004016106cf565b9260643591821161018d57610880916004016106cf565b9060843590565b3461018d577f65b177b6276835bd1b8699a177a008db44a152bff9e2a43439cc539a9130e8706109c46109e3610a296109dd610a246108c536610810565b9889928599949597926109d86108eb6108ff8b6108f86001600160a01b0393849261073d565b546001600160a01b031690565b1615610d15565b61093d61093861092a610925336001600160a01b03166000526008602052604060002090565b61031b565b610932610d75565b90611391565b610d99565b6109ae6109a78a8d6109998583169b6109578d3314610df9565b61096a61096382610e5b565b4210610e6f565b61097d4261097783610ebb565b10610ecb565b600554936109936006546001600160a01b031690565b936110a9565b916109a261025d565b611189565b80956112e1565b906109d06109c46004546001600160a01b031690565b6001600160a01b031690565b911614610f17565b6112e1565b14610f17565b610a0b816109f08561073d565b906001600160a01b03166001600160a01b0319825416179055565b6001600160a01b03166000526008602052604060002090565b610f7a565b610a45610a386108eb8361073d565b9260405193849384611049565b0390a1005b3461018d57604036600319011261018d57602060ff610a91610a6a6104a5565b600435600052600084526040600020906001600160a01b0316600052602052604060002090565b54166040519015158152f35b3461018d57600036600319011261018d576020600554604051908152f35b3461018d57600036600319011261018d57602060405160008152f35b3461018d57600036600319011261018d57610af06113e6565b60015460ff811615610b2f5760ff19166001557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606490fd5b3461018d57604036600319011261018d576105c2600435610b936104a5565b90806000526000602052610bae60016040600020015461154d565b611606565b3461018d577f30508b4017314c44306c08eef1e0ab047a0f2c047f4495996dfae0d42989d899610ca3610a24610a29610cae610bee36610810565b978497949592610c0d610c066109c46108eb8a61073d565b3314610df9565b610c38610c3361092a610925886001600160a01b03166000526008602052604060002090565b610d15565b610c446109638b610e5b565b610c51426109778c610ebb565b610c7f610c786005548c610999610c706006546001600160a01b031690565b918a8d6110a9565b80926112e1565b926109d8610c926109c46108eb8b61073d565b6001600160a01b0380961614610f17565b811690831614610f17565b6109e3610cc0610a0b6108eb8661073d565b611074565b3461018d57604036600319011261018d5760043567ffffffffffffffff811161018d57610d04610cfb60209236906004016106cf565b602435906112e1565b6001600160a01b0360405191168152f35b15610d1c57565b60405162461bcd60e51b815260206004820152602b60248201527f77616c6c6574206164647265737320616c72656164792073657420666f72207460448201526a1a1a5cc81cdd19585b525960aa1b6064820152608490fd5b604051906020820182811067ffffffffffffffff8211176101fe5760405260008252565b15610da057565b60405162461bcd60e51b815260206004820152602b60248201527f737465616d496420616c72656164792073657420666f7220746869732077616c60448201526a6c6574206164647265737360a81b6064820152608490fd5b15610e0057565b60405162461bcd60e51b815260206004820152600e60248201527f6e6f7420617574686f72697a65640000000000000000000000000000000000006044820152606490fd5b634e487b7160e01b600052601160045260246000fd5b906102588201809211610e6a57565b610e45565b15610e7657565b60405162461bcd60e51b815260206004820152601160248201527f74696d657374616d7020746f6f206f6c640000000000000000000000000000006044820152606490fd5b61025719810191908211610e6a57565b15610ed257565b60405162461bcd60e51b815260206004820152601360248201527f74696d657374616d7020666172206168656164000000000000000000000000006044820152606490fd5b1561018d57565b818110610f29575050565b60008155600101610f1e565b9190601f8111610f4457505050565b610298926000526020600020906020601f840160051c83019310610f70575b601f0160051c0190610f1e565b9091508190610f63565b919091825167ffffffffffffffff81116101fe57610fa281610f9c8454610192565b84610f35565b602080601f8311600114610fde575081929394600092610fd3575b50508160011b916000199060031b1c1916179055565b015190503880610fbd565b90601f19831695610ff485600052602060002090565b926000905b88821061103157505083600195969710611018575b505050811b019055565b015160001960f88460031b161c1916905538808061100e565b80600185968294968601518155019501930190610ff9565b6001600160a01b03611069604093969594966060845260608401906103e2565b951660208201520152565b6000906110818154610192565b601f811161108d575055565b818352602083206110a691601f0160051c810190610f1e565b55565b90929192604051936110ba856101e2565b603a918286526020927f53657457616c6c657428737472696e6720737465616d49642c61646472657373848801527f2077616c6c65742c75696e743235362074696d657374616d702900000000000060408801526040519060005b81811061117657506001600160a01b039394959697506000605a830152815261113d816101e2565b84815191012094848151910120604051948501958652604085015216606083015260808201526080815261117081610203565b51902090565b8881018601518382018701528501611115565b9161117091936112b79360409561128e8751946111a58661021f565b604386527f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353660208701527f20636861696e49642c6164647265737320766572696679696e67436f6e747261898701526263742960e81b606087015261128289519687611215602082018093610726565b0397611229601f19998a810183528261023b565b519020948a5161124d81611241602082018095610726565b038a810183528261023b565b5190208a5160208101968752604081019190915260608101949094526001600160a01b039091166080840152829060a0820190565b0385810183528261023b565b5190209451938491602083019687909160429261190160f01b8352600283015260228201520190565b0390810183528261023b565b60ff601b9116019060ff8211610e6a57565b6040513d6000823e3d90fd5b600091604182510361138c5760208201519260606040840151930151901a90601b821061137c575b60ff8216601b8114159081611370575b50156113285750505050600090565b611357600093602095604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa1561136b5760005190565b6112d5565b601c9150141538611319565b90611386906112c3565b90611309565b505090565b90604051916020926113bf8482816113b281830196878151938492016103bf565b810103808452018261023b565b519020916113df6040519182816113b281830196878151938492016103bf565b5190201490565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161561141f57565b61142833611754565b60009061143361169d565b91603061143f846116ce565b53607861144b846116db565b5360415b600181116115075761150360486114eb856114dd8861146e8815611709565b6040519485937f416363657373436f6e74726f6c3a206163636f756e742000000000000000000060208601526114ae8151809260206037890191016103bf565b84017f206973206d697373696e6720726f6c652000000000000000000000000000000060378201520190610726565b03601f19810183528261023b565b60405162461bcd60e51b815291829160048301610407565b0390fd5b90600f8116906010821015611548576f181899199a1a9b1b9c1cb0b131b232b360811b611543921a61153984876116eb565b5360041c916116fc565b61144f565b6116b8565b80600052600060205260ff611579336040600020906001600160a01b0316600052602052604060002090565b5416156115835750565b61158c33611754565b61159461169d565b9160306115a0846116ce565b5360786115ac846116db565b5360415b600181116115cf5761150360486114eb856114dd8861146e8815611709565b90600f8116906010821015611548576f181899199a1a9b1b9c1cb0b131b232b360811b611601921a61153984876116eb565b6115b0565b6000908082528160205260ff6116328460408520906001600160a01b0316600052602052604060002090565b541661163d57505050565b808252816020526116648360408420906001600160a01b0316600052602052604060002090565b60ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b6001600160a01b033394169280a4565b604051906116aa8261021f565b604282526060366020840137565b634e487b7160e01b600052603260045260246000fd5b8051156115485760200190565b8051600110156115485760210190565b908151811015611548570160200190565b8015610e6a576000190190565b1561171057565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b60405190611761826101e2565b602a825260403660208401376030611778836116ce565b536078611784836116db565b536029905b6001821161179c57610418915015611709565b600f8116906010821015611548576f181899199a1a9b1b9c1cb0b131b232b360811b6117cd921a61153984866116eb565b9061178956fea264697066735822122095c1074678d05702ceedce9adfc72cf8691313532d12c8290bdfdcade1d9ff0564736f6c63430008130033" + }, + { + "address": "0x95230220c9e577000b1794a8222ab9a75e8a792e", + "nonce": 21, + "balance": "0x0000000000000000000000000000000000000000000000000007f1893a51d224", + "code": "0x" + }, + { + "address": "0x630cf19324e1caf562042dc74eeaa7568dbb76dd", + "nonce": 4, + "balance": "0x000000000000000000000000000000000000000000000000001df7b570e7f500", + "code": "0x" + }, + { + "address": "0xcbb852a6274e03fa00fb4895de0463f66df27a11", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000078cad1e25d0000", + "code": "0x60806040526004361061032d5760003560e01c80639f600a0b116101a5578063cbd1642e116100ec578063e1825d0611610095578063f8398fa41161006f578063f8398fa4146108a7578063fc6e3b3b146108c7578063fd31c5ba146108dc578063ffa9286c146108fc57610334565b8063e1825d0614610852578063e40272d714610872578063e9cdfe511461089257610334565b8063d2442783116100c6578063d2442783146107fd578063d4e54c4714610812578063d5ef75511461083257610334565b8063cbd1642e14610790578063cc29a306146107b0578063ce803b4f146107d057610334565b8063af33ae691161014e578063c303526111610128578063c30352611461073b578063c7525dd314610750578063c97d172e1461077057610334565b8063af33ae69146106e6578063b162717e14610706578063bed93c841461072657610334565b8063a9fa4ed51161017f578063a9fa4ed514610693578063adc9772e146106b3578063af215f94146106c657610334565b80639f600a0b1461063e578063a3defce01461065e578063a6bd1b331461067357610334565b80633d12a85a1161027457806364c6fdb41161021d5780638f658198116101f75780638f658198146105c9578063960a7afa146105de57806398445caf146105fe5780639bf430281461061e57610334565b806364c6fdb4146105745780638295f2581461059457806382c69f9d146105b457610334565b80635325937f1161024e5780635325937f1461051f57806357344e6f1461053f5780635ab2a5581461055f57610334565b80633d12a85a146104bd5780633ef23f7f146104dd5780634742bbfb146104ff57610334565b80632e17de78116102d65780633408e470116102b05780633408e4701461046657806335e2c4af1461047b5780633a7af6311461049057610334565b80632e17de7814610406578063302830ab1461042657806332b949a21461044657610334565b80630f7aadb7116103075780630f7aadb7146103a657806313948c76146103c657806323c452cd146103e657610334565b806304e6c2c014610339578063051e72161461035b5780630f5e09e71461038657610334565b3661033457005b600080fd5b34801561034557600080fd5b50610359610354366004613497565b61091c565b005b34801561036757600080fd5b50610370610a06565b60405161037d9190613a3a565b60405180910390f35b34801561039257600080fd5b506103706103a13660046137cb565b610a61565b3480156103b257600080fd5b506103596103c136600461365b565b610a73565b3480156103d257600080fd5b506103706103e1366004613497565b610bd4565b3480156103f257600080fd5b506103596104013660046135d6565b610c00565b34801561041257600080fd5b506103596104213660046137cb565b610d12565b34801561043257600080fd5b50610370610441366004613529565b610e08565b34801561045257600080fd5b506103596104613660046137cb565b610e40565b34801561047257600080fd5b50610370610ec6565b34801561048757600080fd5b50610370610eca565b34801561049c57600080fd5b506104b06104ab3660046137cb565b610ed0565b60405161037d9190613a2f565b3480156104c957600080fd5b506103596104d8366004613610565b610ee5565b3480156104e957600080fd5b506104f2611003565b60405161037d919061391f565b34801561050b57600080fd5b5061035961051a3660046137cb565b61101f565b34801561052b57600080fd5b5061035961053a366004613497565b61102c565b34801561054b57600080fd5b5061037061055a366004613497565b61110e565b34801561056b57600080fd5b506104f2611136565b34801561058057600080fd5b5061035961058f366004613497565b611152565b3480156105a057600080fd5b506103596105af366004613497565b6111a1565b3480156105c057600080fd5b50610370611250565b3480156105d557600080fd5b50610370611256565b3480156105ea57600080fd5b506103706105f93660046137e3565b61125c565b34801561060a57600080fd5b506103706106193660046137e3565b61128f565b34801561062a57600080fd5b506103596106393660046137cb565b6112bd565b34801561064a57600080fd5b5061035961065936600461376b565b6112ca565b34801561066a57600080fd5b506104f2611342565b34801561067f57600080fd5b5061035961068e3660046138ac565b61135e565b34801561069f57600080fd5b506103596106ae3660046137e3565b61162d565b6103596106c1366004613529565b61167c565b3480156106d257600080fd5b506103706106e1366004613854565b61178d565b3480156106f257600080fd5b50610359610701366004613497565b6117cf565b34801561071257600080fd5b506103596107213660046134cf565b61181e565b34801561073257600080fd5b5061037061199b565b34801561074757600080fd5b506103706119a1565b34801561075c57600080fd5b5061035961076b366004613554565b6119a7565b34801561077c57600080fd5b506104b061078b3660046137cb565b611b2e565b34801561079c57600080fd5b506103596107ab366004613804565b611b43565b3480156107bc57600080fd5b506103596107cb36600461370e565b611c3a565b3480156107dc57600080fd5b506107f06107eb3660046137e3565b611d24565b60405161037d919061444e565b34801561080957600080fd5b506104f2611d79565b34801561081e57600080fd5b5061037061082d3660046137cb565b611d95565b34801561083e57600080fd5b506104b061084d366004613497565b611da7565b34801561085e57600080fd5b5061035961086d366004613497565b611dd2565b34801561087e57600080fd5b5061035961088d366004613497565b611e21565b34801561089e57600080fd5b506104f2611e70565b3480156108b357600080fd5b506103596108c236600461376b565b611e8c565b3480156108d357600080fd5b506104f2611eff565b3480156108e857600080fd5b506103596108f73660046137e3565b611f23565b34801561090857600080fd5b50610370610917366004613497565b611f4f565b610924611f89565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602081905260409091205460ff16151514610992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613c6d565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f4234ba611d325b3ba434c4e1b037967b955b1274d4185ee9847b7491111a48ff9190a250565b60007fcd24e8e9844849186ed93126ac365bc3a49362579aee585431811ea50bd1694c610a31610ec6565b601354604051602001610a4693929190613909565b60405160208183030381529060405280519060200120905090565b60116020526000908152604090205481565b60026000541415610ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614300565b60026000908155610acd610ac2610ec6565b8e8e8e8e8e8e61178d565b9050610b1381868686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508d959493925088915050611fad565b610b49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614040565b6000610b55888861125c565b9050610b61818e612117565b610b6e828f8f60006121b7565b8d73ffffffffffffffffffffffffffffffffffffffff16827f9475cdbde5fc71fe2ccd413c82878ee54d061b9f74f9e2e1a03ff1178821502c8f8f604051610bb79291906138fb565b60405180910390a350506001600055505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020545b919050565b3360009081526001602052604090205460ff16610c49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614009565b60026000541415610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614300565b60026000908155610ca4610c98610ec6565b8686868660008061178d565b9050610cb081856121e3565b610cbc818686856121b7565b506001600055610ccb33611f4f565b610cd43361110e565b1015610d0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613f77565b50505050565b60026000541415610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614300565b6002600055610d5e338261229a565b610d6833826122f7565b3373ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd82604051610dae9190613a3a565b60405180910390a26001600055610dc433611f4f565b610dcd3361110e565b1015610e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613f77565b50565b73ffffffffffffffffffffffffffffffffffffffff821660009081526006602090815260408083208484529091529020545b92915050565b600c546000828152601260205260408120549091610e5e9190612399565b905042811080610e725750610e7233611da7565b610ea8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613bb3565b6000828152601260205260409020429055610ec2826123df565b5050565b4690565b600e5481565b60009081526005602052604090205460ff1690565b3360009081526001602052604090205460ff16610f2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614009565b60026000541415610f6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614300565b60026000908155610f88610f7d610ec6565b88888888888861178d565b9050610f9481876121e3565b610f9d81612599565b610fab87878585338961261b565b506001600055610fba33611f4f565b610fc33361110e565b1015610ffb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613f77565b505050505050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b611027611f89565b600d55565b611034611f89565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613b0e565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517f2cec73b7434d3b91198ad1a618f63e6a0761ce281af5ec9ec76606d948d03e239190a250565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b61115a611f89565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6111a9611f89565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba5169063f2fde38b9061121b90849060040161391f565b600060405180830381600087803b15801561123557600080fd5b505af1158015611249573d6000803e3d6000fd5b5050505050565b60135481565b600c5481565b600082826040516020016112719291906138fb565b60405160208183030381529060405280519060200120905092915050565b601060205281600052604060002081815481106112a857fe5b90600052602060002001600091509150505481565b6112c5611f89565b600c55565b6112d2611f89565b60005b8181101561133d576000600b60008585858181106112ef57fe5b6020908102929092013583525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016112d5565b505050565b60145473ffffffffffffffffffffffffffffffffffffffff1681565b60008411611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614077565b828410156113d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610989906143f1565b6000868152600b602052604090205460ff1661141a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610989906140d4565b600061143d612710611437600e54886129bb90919063ffffffff16565b90612a0f565b90506000600f54821161145257600f54611454565b815b905080851015611490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613ebd565b6000888152601060205260409020600d548154106114b1576114b1896123df565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba51690639dc29fac906115259033908b90600401613940565b600060405180830381600087803b15801561153f57600080fd5b505af1158015611553573d6000803e3d6000fd5b505050506000611561610a06565b6013805460010190559050600061157d8b8b8b858c8c8c61178d565b83546001810185556000858152602080822083018490558e8252601190526040902054919250906115ae908b612399565b601160008e8152602001908152602001600020819055508a73ffffffffffffffffffffffffffffffffffffffff168c837fe35dddd4ea75d7e9b3fe93af4f4e40e778c3da4074c9d93e7c6536f1e803c1eb8d878e878f8f604051611617969594939291906144d8565b60405180910390a4505050505050505050505050565b611635611f89565b612710821115611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614337565b600e91909155600f55565b600260005414156116b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614300565b6002600090815573ffffffffffffffffffffffffffffffffffffffff831681526001602081905260409091205460ff16151514611722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613c6d565b61172c3382612a5b565b6117368282612acf565b8173ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a8260405161177c9190613a3a565b60405180910390a250506001600055565b6000878787878787876040516020016117ac979695949392919061446f565b604051602081830303815290604052805190602001209050979650505050505050565b6117d7611f89565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061185c848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612b2c92505050565b9050600061186a828461125c565b90506000805b8581101561192e5773ffffffffffffffffffffffffffffffffffffffff88166000908152600660205260408120818989858181106118aa57fe5b9050602002013581526020019081526020016000205490506000811115611925576118d58382612399565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260066020526040812091945090818a8a8681811061190b57fe5b905060200201358152602001908152602001600020819055505b50600101611870565b506119398282612117565b6119438782612acf565b828773ffffffffffffffffffffffffffffffffffffffff167f78e830d08be9d5f957414c84d685c061ecbd8467be98b42ebb64f0118b57d2ff8360405161198a9190613a3a565b60405180910390a350505050505050565b600d5481565b600f5481565b6119eb87858585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c959493925087915050611fad565b611a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614040565b6000611a2d878761125c565b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526006602090815260408083208c845290915290205490915080611a98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613aa0565b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526006602090815260408083208c8452909152812055611ad38282612117565b611add8a82612acf565b87898b73ffffffffffffffffffffffffffffffffffffffff167f84eb21b24c31b27a3bc67dde4a598aad06db6e9415cd66544492b9616996143c60405160405180910390a450505050505050505050565b600b6020526000908152604090205460ff1681565b611b4b611f89565b6000611b57848461125c565b9050611b616133d7565b611b6b8585611d24565b9050806040015160001415611bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613b45565b80518414611bb657fe5b6040810151600090611bcb906249d400612399565b905080421015611c07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613c10565b60208201518251600091611c1b9190612f63565b9050611c278482612117565b611c3185826122f7565b50505050505050565b600954611c5c9073ffffffffffffffffffffffffffffffffffffffff16612fa5565b60026000541415611c99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614300565b6002600055611cac86868686868661261b565b8173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f320958176930804eb66c2343c7343fc0367dc16249590c0f195783bee199d09487878786604051611d0f9493929190614500565b60405180910390a35050600160005550505050565b611d2c6133d7565b60046000611d3a858561125c565b81526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905092915050565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b60126020526000908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b611dda611f89565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611e29611f89565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600a5473ffffffffffffffffffffffffffffffffffffffff1681565b611e94611f89565b60005b8181101561133d576001600b6000858585818110611eb157fe5b6020908102929092013583525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101611e97565b7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba581565b600954611f459073ffffffffffffffffffffffffffffffffffffffff16612fa5565b610ec282826130e7565b6000610e3a611f5d836131ef565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205490612399565b600754611fab9073ffffffffffffffffffffffffffffffffffffffff16612fa5565b565b6000808211611fe8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613f1a565b818410612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613d6f565b61202a826131f5565b835114612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614109565b8460005b845181101561210a5785600116600114156120bf5784818151811061208857fe5b6020026020010151826040516020016120a29291906138fb565b6040516020818303038152906040528051906020012091506120fe565b818582815181106120cc57fe5b60200260200101516040516020016120e59291906138fb565b6040516020818303038152906040528051906020012091505b600195861c9501612067565b5090951495945050505050565b6000828152600460205260409020805461215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613ad7565b600181015460009061216f9084612399565b82549091508111156121ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610989906142a3565b6001909101555050565b6121c084612599565b6121d3836121ce8484612f63565b6122f7565b8015610d0c57610d0c33826122f7565b33600090815260066020908152604080832085845290915290205415612235576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610989906141e9565b61223f338261229a565b336000908152600660209081526040808320858452909152908190208290555182907f0c3d250c7831051e78aa6a56679e590374c7c424415ffe4aa474491def2fe7059061228e908490613a3a565b60405180910390a25050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020546122ca9082612399565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526003602052604090209190915550565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba516906340c10f199061236b9085908590600401613940565b600060405180830381600087803b15801561238557600080fd5b505af1158015610ffb573d6000803e3d6000fd5b6000828201838110156123d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613b7c565b9392505050565b60008181526010602052604090208054612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614246565b600061247f8280548060200260200160405190810160405280929190818152602001828054801561247557602002820191906000526020600020905b815481526020019060010190808311612461575b5050505050612b2c565b60008481526011602052604090819020549051919250904290839086907ff52ad20d3b4f50d1c40901dfb95a9ce5270b2fc32694e5c668354721cd87aa74906124cb90869086906138fb565b60405180910390a360606124dd610ec6565b848785856040516024016124f59594939291906144b5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fef6ebe5e00000000000000000000000000000000000000000000000000000000179052600089815260118252828120819055601090915290812091925061259091906133f8565b610ffb816132a4565b60008181526005602052604090205460ff16156125e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613d12565b600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b80156126c8576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba516906340c10f19906126959085908590600401613940565b600060405180830381600087803b1580156126af57600080fd5b505af11580156126c3573d6000803e3d6000fd5b505050505b60006126d48683612f63565b9050841580156126e2575083155b806127035750600a5473ffffffffffffffffffffffffffffffffffffffff16155b156127b3576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba516906340c10f199061277c908a908590600401613940565b600060405180830381600087803b15801561279657600080fd5b505af11580156127aa573d6000803e3d6000fd5b50505050611c31565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba516906340c10f19906128279030908590600401613940565b600060405180830381600087803b15801561284157600080fd5b505af1158015612855573d6000803e3d6000fd5b5050600a546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba58116945063095ea7b393506128d19216908590600401613940565b602060405180830381600087803b1580156128eb57600080fd5b505af11580156128ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292391906137ab565b50600a546040517f676c5ef600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063676c5ef690612980908a9085908a908a906004016139fc565b600060405180830381600087803b15801561299a57600080fd5b505af11580156129ae573d6000803e3d6000fd5b5050505050505050505050565b6000826129ca57506000610e3a565b828202828482816129d757fe5b04146123d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613e60565b6000808211612a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613cdb565b818381612a5357fe5b049392505050565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba51690639dc29fac9061236b9085908590600401613940565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054612aff9082612399565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526002602052604090209190915550565b600080825111612b68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990614394565b815160011415612b8e5781600081518110612b7f57fe5b60200260200101519050610bfb565b612b96613416565b5060408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c279f042e8206e0bd86060808301919091527fecd50eee38e386bd62be9bedb990706951b65fe053bd9d8a521af753d139e2da60808301527fdefff6d330bb5403f63b14f33b578274160de3a50df4efecf0e0db73bcdd3da560a08301527f617bdd11f7c0a11f49db22f629387a12da7596f9d1704d7465177c63d88ec7d760c08301527f292c23a9aa1d8bea7e2435e555a4a60e379a5a35f3f452bae60121073fb6eead60e08301527fe1cea92ed99acdcb045a6726b2f87107e8a61620a232cf4d7d5b5766b3952e106101008301527f7ad66c0a68c72cb89e4fb4303841966e4062a76ab97451e3b9fb526a5ceb7f826101208301527fe026cc5a4aed3c22a58cbd3d2ac754c9352c5436f638042dca99034e836365166101408301527f3d04cffd8b46a874edf5cfae63077de85f849a660426697b06a829c70dd1409c6101608301527fad676aa337a485e4728a0b240d92b3ef7b3c372d06d189322bfd5f61f1e7203e6101808301527fa2fca4a49658f9fab7aa63289c91b7c7b6c832a6d0e69334ff5b0a3483d09dab6101a08301527f4ebfd9cd7bca2505f7bef59cc1c12ecc708fff26ae4af19abe852afe9e20c8626101c08301527f2def10d13dd169f550f578bda343d9717a138562e0093b380a1120789d53cf106101e0830152825183815280820184529192909190602082018180368337505085519192506000918291508180805b6001841115612f3f5750506002820460018084161460005b82811015612ebb578a8160020281518110612e6257fe5b602002602001015196508a8160020260010181518110612e7e57fe5b6020026020010151955086602089015285604089015287805190602001208b8281518110612ea857fe5b6020908102919091010152600101612e4b565b508015612f1e57896001850381518110612ed157fe5b60200260200101519550878360108110612ee757fe5b602002015160001b945085602088015284604088015286805190602001208a8381518110612f1157fe5b6020026020010181815250505b80612f2a576000612f2d565b60015b60ff1682019350600190920191612e33565b89600081518110612f4c57fe5b602002602001015198505050505050505050919050565b600082821115612f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613ca4565b50900390565b601454604080517f67e404ce000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8085169316916367e404ce916004808301926020929190829003018186803b15801561301157600080fd5b505afa158015613025573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304991906134b3565b73ffffffffffffffffffffffffffffffffffffffff1614613096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109899061418c565b60145473ffffffffffffffffffffffffffffffffffffffff163314610e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613a43565b60006130f3838361125c565b6000818152600460205260409020549091501561313c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613e29565b60008211613176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613fac565b6040805160608101825283815260006020808301828152428486019081528684526004909252918490209251835590516001830155516002909101555183907fb33d2162aead99dab59e77a7a67ea025b776bf8ca8079e132afdf9b23e03bd42906131e2908590613a3a565b60405180910390a2505050565b50600090565b6000808211613230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098990613dcc565b816001141561324157506000610bfb565b81600060805b6001811061328f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b01811b8316156132875791821c91908101905b60011c613247565b506001811b84146123d8576001019392505050565b601454604080517f89945883000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916389945883916004808301926020929190829003018186803b15801561330f57600080fd5b505afa158015613323573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613347919061383c565b6014546008546040517f9f3ce55a00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff91821692639f3ce55a9285926133aa9291169083908890600401613966565b6000604051808303818588803b1580156133c357600080fd5b505af1158015611c31573d6000803e3d6000fd5b60405180606001604052806000815260200160008152602001600081525090565b5080546000825590600052602060002090810190610e059190613435565b6040518061020001604052806010906020820280368337509192915050565b5b8082111561344a5760008155600101613436565b5090565b60008083601f84011261345f578182fd5b50813567ffffffffffffffff811115613476578182fd5b602083019150836020808302850101111561349057600080fd5b9250929050565b6000602082840312156134a8578081fd5b81356123d88161451b565b6000602082840312156134c4578081fd5b81516123d88161451b565b600080600080606085870312156134e4578283fd5b84356134ef8161451b565b9350602085013567ffffffffffffffff81111561350a578384fd5b6135168782880161344e565b9598909750949560400135949350505050565b6000806040838503121561353b578182fd5b82356135468161451b565b946020939093013593505050565b60008060008060008060008060e0898b03121561356f578384fd5b883561357a8161451b565b97506020890135965060408901359550606089013594506080890135935060a089013567ffffffffffffffff8111156135b1578384fd5b6135bd8b828c0161344e565b999c989b50969995989497949560c00135949350505050565b600080600080608085870312156135eb578384fd5b84356135f68161451b565b966020860135965060408601359560600135945092505050565b60008060008060008060c08789031215613628578182fd5b86356136338161451b565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b6000806000806000806000806000806000806101608d8f03121561367d578384fd5b6136878d3561451b565b8c359b5060208d01359a5060408d0135995060608d0135985060808d0135975060a08d0135965060c08d0135955060e08d013594506101008d0135935067ffffffffffffffff6101208e013511156136dd578283fd5b6136ee8e6101208f01358f0161344e565b81945080935050506101408d013590509295989b509295989b509295989b565b60008060008060008060c08789031215613726578384fd5b86356137318161451b565b955060208701359450604087013593506060870135925060808701356137568161451b565b8092505060a087013590509295509295509295565b6000806020838503121561377d578182fd5b823567ffffffffffffffff811115613793578283fd5b61379f8582860161344e565b90969095509350505050565b6000602082840312156137bc578081fd5b815180151581146123d8578182fd5b6000602082840312156137dc578081fd5b5035919050565b600080604083850312156137f5578182fd5b50508035926020909101359150565b600080600060608486031215613818578081fd5b833592506020840135915060408401356138318161451b565b809150509250925092565b60006020828403121561384d578081fd5b5051919050565b600080600080600080600060e0888a03121561386e578081fd5b8735965060208801356138808161451b565b96999698505050506040850135946060810135946080820135945060a0820135935060c0909101359150565b60008060008060008060c087890312156138c4578384fd5b8635955060208701356138d68161451b565b95989597505050506040840135936060810135936080820135935060a0909101359150565b918252602082015260400190565b9283526020830191909152604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8516825260208481840152606060408401528351806060850152825b818110156139b557858101830151858201608001528201613999565b818111156139c65783608083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160800195945050505050565b73ffffffffffffffffffffffffffffffffffffffff94909416845260208401929092526040830152606082015260800190565b901515815260200190565b90815260200190565b6020808252602f908201527f4c325f4c494e45415f4252473a2043616c6c6572206973206e6f74207468652060408201527f65787065637465642073656e6465720000000000000000000000000000000000606082015260800190565b6020808252601e908201527f4c325f4252473a207472616e73666572496420686173206e6f20626f6e640000604082015260600190565b6020808252601c908201527f4252473a205472616e7366657220726f6f74206e6f7420666f756e6400000000604082015260600190565b6020808252601e908201527f4143543a204164647265737320697320616c726561647920626f6e6465720000604082015260600190565b6020808252601b908201527f4252473a205472616e73666572526f6f74206e6f7420666f756e640000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602f908201527f4c325f4252473a204f6e6c7920426f6e6465722063616e20636f6d6d6974206260408201527f65666f7265206d696e2064656c61790000000000000000000000000000000000606082015260800190565b6020808252603b908201527f4252473a205472616e73666572526f6f742063616e6e6f74206265207265736360408201527f756564206265666f726520746865205265736375652044656c61790000000000606082015260800190565b6020808252601a908201527f4143543a2041646472657373206973206e6f7420626f6e646572000000000000604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b6020808252602c908201527f4252473a20546865207472616e736665722068617320616c726561647920626560408201527f656e2077697468647261776e0000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f4c69625f4d65726b6c65547265653a20496e646578206f7574206f6620626f7560408201527f6e64732e00000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526030908201527f4c69625f4d65726b6c65547265653a2043616e6e6f7420636f6d70757465206360408201527f65696c286c6f675f3229206f6620302e00000000000000000000000000000000606082015260800190565b6020808252601e908201527f4252473a205472616e7366657220726f6f7420616c7265616479207365740000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526030908201527f4c325f4252473a20626f6e646572466565206d757374206d656574206d696e6960408201527f6d756d20726571756972656d656e747300000000000000000000000000000000606082015260800190565b60208082526037908201527f4c69625f4d65726b6c65547265653a20546f74616c206c6561766573206d757360408201527f742062652067726561746572207468616e207a65726f2e000000000000000000606082015260800190565b6020808252818101527f4143543a204e6f7420656e6f75676820617661696c61626c6520637265646974604082015260600190565b6020808252602d908201527f4252473a2043616e6e6f7420736574205472616e73666572526f6f7420746f7460408201527f616c416d6f756e74206f66203000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4143543a2043616c6c6572206973206e6f7420626f6e64657200000000000000604082015260600190565b6020808252601b908201527f4252473a20496e76616c6964207472616e736665722070726f6f660000000000604082015260600190565b60208082526027908201527f4c325f4252473a204d757374207472616e736665722061206e6f6e2d7a65726f60408201527f20616d6f756e7400000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4c325f4252473a20636861696e4964206973206e6f7420737570706f72746564604082015260600190565b6020808252604d908201527f4c69625f4d65726b6c65547265653a20546f74616c207369626c696e6773206460408201527f6f6573206e6f7420636f72726563746c7920636f72726573706f6e6420746f2060608201527f746f74616c206c65617665732e00000000000000000000000000000000000000608082015260a00190565b60208082526029908201527f4c325f4c494e45415f4252473a20496e76616c69642063726f73732d646f6d6160408201527f696e2073656e6465720000000000000000000000000000000000000000000000606082015260800190565b60208082526027908201527f4252473a205769746864726177616c2068617320616c7265616479206265656e60408201527f20626f6e64656400000000000000000000000000000000000000000000000000606082015260800190565b60208082526027908201527f4c325f4252473a204d75737420636f6d6d6974206174206c656173742031205460408201527f72616e7366657200000000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f4252473a205769746864726177616c2065786365656473205472616e7366657260408201527f526f6f7420746f74616c00000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602a908201527f4c325f4252473a206d696e426f6e646572427073206d757374206e6f7420657860408201527f6365656420313030303000000000000000000000000000000000000000000000606082015260800190565b60208082526034908201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060408201527f6c65617374206f6e65206c65616620686173682e000000000000000000000000606082015260800190565b60208082526027908201527f4c325f4252473a20426f6e646572206665652063616e6e6f742065786365656460408201527f20616d6f756e7400000000000000000000000000000000000000000000000000606082015260800190565b81518152602080830151908201526040918201519181019190915260600190565b96875273ffffffffffffffffffffffffffffffffffffffff95909516602087015260408601939093526060850191909152608084015260a083015260c082015260e00190565b948552602085019390935260408401919091526060830152608082015260a00190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b93845260208401929092526040830152606082015260800190565b73ffffffffffffffffffffffffffffffffffffffff81168114610e0557600080fdfea2646970667358221220c11bf2af6b8ba852e719236763a25bbe826e78c1825be5249023fca110b28d6c64736f6c634300060c0033" + }, + { + "address": "0x7d43aabc515c356145049227cee54b608342c0ad", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c806379cc6790116100cd578063a457c2d711610081578063ced67f0c11610066578063ced67f0c146102f1578063dd62ed3e1461032d578063f2fde38b1461036657600080fd5b8063a457c2d7146102cb578063a9059cbb146102de57600080fd5b80638da5cb5b116100b25780638da5cb5b146102b257806395d89b41146102c35780639dc29fac1461027f57600080fd5b806379cc67901461027f578063893d20e81461029257600080fd5b8063395093511161012457806342966c681161010957806342966c681461022e5780634ce2f71a1461024157806370a082311461025657600080fd5b8063395093511461020857806340c10f191461021b57600080fd5b806318160ddd1161015557806318160ddd146101b257806323b872dd146101c4578063313ce567146101d757600080fd5b806306fdde0314610171578063095ea7b31461018f575b600080fd5b610179610379565b6040516101869190610efa565b60405180910390f35b6101a261019d366004610f64565b61040b565b6040519015158152602001610186565b6002545b604051908152602001610186565b6101a26101d2366004610f8e565b610425565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000012168152602001610186565b6101a2610216366004610f64565b610449565b6101a2610229366004610f64565b610488565b6101a261023c366004610fca565b610562565b61025461024f366004610f64565b610576565b005b6101b6610264366004610fe3565b6001600160a01b031660009081526020819052604090205490565b6101a261028d366004610f64565b610637565b61029a61064a565b6040516001600160a01b039091168152602001610186565b6005546001600160a01b031661029a565b610179610663565b6101a26102d9366004610f64565b610672565b6101a26102ec366004610f64565b61071c565b6103186102ff366004610fe3565b6006602052600090815260409020805460019091015482565b60408051928352602083019190915201610186565b6101b661033b366004610ffe565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610254610374366004610fe3565b61072a565b60606003805461038890611031565b80601f01602080910402602001604051908101604052809291908181526020018280546103b490611031565b80156104015780601f106103d657610100808354040283529160200191610401565b820191906000526020600020905b8154815290600101906020018083116103e457829003601f168201915b5050505050905090565b60003361041981858561081b565b60019150505b92915050565b600033610433858285610940565b61043e8585856109d2565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906104199082908690610483908790611081565b61081b565b33600090815260066020526040812080546104ea5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642063616c6c657200000000000000000000000000000000000060448201526064015b60405180910390fd5b828160010160008282546104fe9190611081565b90915550508054600182015411156105585760405162461bcd60e51b815260206004820152601960248201527f657863656564732062726964676520737570706c79206361700000000000000060448201526064016104e1565b6104198484610bcf565b600061056e3383610cae565b506001919050565b336105896005546001600160a01b031690565b6001600160a01b0316146105df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e1565b6001600160a01b038216600081815260066020908152604091829020849055815192835282018390527f59e1e4348943de408b89af8ab71e502ea722dd41efd1ff4a3548c60e83e91c60910160405180910390a15050565b60006106438383610df4565b9392505050565b600061065e6005546001600160a01b031690565b905090565b60606004805461038890611031565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091908381101561070f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016104e1565b61043e828686840361081b565b6000336104198185856109d2565b3361073d6005546001600160a01b031690565b6001600160a01b0316146107935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e1565b6001600160a01b03811661080f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104e1565b61081881610e90565b50565b6001600160a01b03831661087d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104e1565b6001600160a01b0382166108de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104e1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146109cc57818110156109bf5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104e1565b6109cc848484840361081b565b50505050565b6001600160a01b038316610a4e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104e1565b6001600160a01b038216610ab05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104e1565b6001600160a01b03831660009081526020819052604090205481811015610b3f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016104e1565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610b76908490611081565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610bc291815260200190565b60405180910390a36109cc565b6001600160a01b038216610c255760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104e1565b8060026000828254610c379190611081565b90915550506001600160a01b03821660009081526020819052604081208054839290610c64908490611081565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610d0e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104e1565b6001600160a01b03821660009081526020819052604090205481811015610d825760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104e1565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610db1908490611094565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610933565b3360009081526006602052604081208054151580610e16575060008160010154115b15610e7b578281600101541015610e6f5760405162461bcd60e51b815260206004820152601c60248201527f6578636565647320627269646765206d696e74656420616d6f756e740000000060448201526064016104e1565b60018101805484900390555b610e86843385610940565b6104198484610cae565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610f2757858101830151858201604001528201610f0b565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f5f57600080fd5b919050565b60008060408385031215610f7757600080fd5b610f8083610f48565b946020939093013593505050565b600080600060608486031215610fa357600080fd5b610fac84610f48565b9250610fba60208501610f48565b9150604084013590509250925092565b600060208284031215610fdc57600080fd5b5035919050565b600060208284031215610ff557600080fd5b61064382610f48565b6000806040838503121561101157600080fd5b61101a83610f48565b915061102860208401610f48565b90509250929050565b600181811c9082168061104557607f821691505b60208210810361106557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561041f5761041f61106b565b8181038181111561041f5761041f61106b56fea2646970667358221220f0061d6652c3cdec3d7ea07b04ec46693ddd7cf01d385cc2b9bcb27f6f7c5f5164736f6c63430008110033" + }, + { + "address": "0x401c196454c5541c6c63713f14db2967fcc0b38a", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a7146104b857508163238ac93314610474578163374d145214610439578163378144b014610099575063928a5c8a1461005c57600080fd5b34610095578160031936011261009557602090517f8f2f90d8304f6eb382d037c47a041d8c8b4d18bdd8b082fa32828e016a584ca78152f35b5080fd5b919050346104355760031991608036840112610431576001600160401b039281359084821161042d5760809082360301126104295782519160808301838110868211176104165784528181013583526024820135928584168403610412576020938482015260448301358681116103a4576101199083369186010161055f565b928582019384526064810135908782116103fe578361013b923692010161055f565b95606082019687526024359081116103a45761015a903690840161055f565b6001600160a01b0391604435838116036103fe57517f6eddebd9646476e5f28bae68bfcf45ecdf82c40871aeacae9f62162275cc697a0161040257865186818051810103126103fe578501517f70d06f27cfb0914c7d2fc83b85fbe27374b2e742274f7d05cd7d71fe95a7b359016103ee578651845161020c8789518093826101ec81840197888151938492016105ab565b8201610200825180938680850191016105ab565b0103808452018261050b565b51902096518581519101209687895288865260ff878a2054166103de57878952888652868920805460ff191660011790557b0ca2ba3432b932bab69029b4b3b732b21026b2b9b9b0b3b29d05199960211b8952601c52603c8820907f000000000000000000000000f3b4e49fd77a959b704f6a045eea92bd55b3b5719061029381846105f3565b60058110156103cb57908b9392911595866103bc575b50508415610308575b50505050156102fa5750906102f47f1c978da31d5a734f3dd3b88a7801d344b522301e6d07006e51520330e6c0795d93925192519282849384528301906105ce565b0390a280f35b8351638baa579f60e01b8152fd5b8293945088516103488161033a8b820194630b135d3f60e11b998a875260248401528d604484015260648301906105ce565b03601f19810183528261050b565b51915afa903d156103b5573d61035d81610544565b9061036a8851928361050b565b81523d898783013e5b826103a8575b8261038a575b5050388781806102b2565b90915084818051810103126103a45784015114388061037f565b8780fd5b9150848251101591610379565b6060610373565b838116911614945038806102a9565b634e487b7160e01b8c526021875260248cfd5b86516335d9080560e01b81528490fd5b8551637f4d001d60e01b81528390fd5b8880fd5b85516330ccdca160e01b81528390fd5b8680fd5b634e487b7160e01b875260418252602487fd5b8480fd5b8580fd5b8380fd5b8280fd5b505034610095578160031936011261009557602090517f912214269b9b891a0d7451974030ba13207d3bf78e515351609de9dd8a3396868152f35b505034610095578160031936011261009557517f000000000000000000000000f3b4e49fd77a959b704f6a045eea92bd55b3b5716001600160a01b03168152602090f35b849134610435576020366003190112610435573563ffffffff60e01b8116809103610435576020925063367e8d1760e01b81149081156104fa575b5015158152f35b6301ffc9a760e01b149050836104f3565b601f909101601f19168101906001600160401b0382119082101761052e57604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b03811161052e57601f01601f191660200190565b81601f820112156105a65780359061057682610544565b92610584604051948561050b565b828452602083830101116105a657816000926020809301838601378301015290565b600080fd5b60005b8381106105be5750506000910152565b81810151838201526020016105ae565b906020916105e7815180928185528580860191016105ab565b601f01601f1916010190565b9060418151146000146106215761061d916020820151906060604084015193015160001a9061062b565b9091565b5050600090600290565b9291906fa2a8918ca85bafe22016d0b997e4df60600160ff1b0383116106a45791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156106975781516001600160a01b03811615610691579190565b50600190565b50604051903d90823e3d90fd5b5050505060009060039056fea26469706673582212202ea966622c6b69d01a9626d90ffc314b4b12824deba402ee412d23d8827a0e5b64736f6c63430008150033" + }, + { + "address": "0x2d366ab3e0e9483ff0e63a7a28b8c27770eac867", + "nonce": 35, + "balance": "0x000000000000000000000000000000000000000000000000000068870675ab30", + "code": "0x" + }, + { + "address": "0xdb4a350f7758a539e6f718b74c87a17c0a133c0a", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c806357806ada1161007157806357806ada146101d0578063702d75d2146101ee5780638910faf114610240578063a49846331461028b578063c3487ff8146102c8578063f8077fae146102f8576100a9565b806316f0115b146100ae578063214a6fe2146100e257806337182c1b146101165780633d6aa5e11461017e578063575a86b21461019c575b600080fd5b6100b661031c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610114600480360360208110156100f857600080fd5b81019080803563ffffffff169060200190929190505050610340565b005b6101456004803603602081101561012c57600080fd5b81019080803560020b90602001909291905050506106c9565b60405180846fffffffffffffffffffffffffffffffff16815260200183600f0b8152602001828152602001935050505060405180910390f35b61018661071c565b6040518082815260200191505060405180910390f35b6101a4610725565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101d8610749565b6040518082815260200191505060405180910390f35b61022a6004803603604081101561020457600080fd5b81019080803560020b9060200190929190803560020b906020019092919050505061074f565b6040518082815260200191505060405180910390f35b6102896004803603606081101561025657600080fd5b81019080803560020b9060200190929190803560020b90602001909291908035600f0b906020019092919050505061085c565b005b6102c6600480360360408110156102a157600080fd5b81019080803560020b9060200190929190803515159060200190929190505050610bce565b005b6102d0610d76565b60405180826fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610300610d98565b604051808263ffffffff16815260200191505060405180910390f35b7f000000000000000000000000d5539d0360438a66661148c633a9f0965e48284581565b7f000000000000000000000000d5539d0360438a66661148c633a9f0965e48284573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103e557507f00000000000000000000000022e2f236065b780fa33ec8c4e58b99ebc8b55c5773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420706f6f6c206f72204d4300000000000000000000000000000000000081525060200191505060405180910390fd5b600260109054906101000a900463ffffffff1663ffffffff168163ffffffff1611610481576106c6565b6000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16146106a4576000807f00000000000000000000000022e2f236065b780fa33ec8c4e58b99ebc8b55c5773ffffffffffffffffffffffffffffffffffffffff1663a15ea89f7f000000000000000000000000d5539d0360438a66661148c633a9f0965e4828456040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604080518083038186803b15801561056257600080fd5b505afa158015610576573d6000803e3d6000fd5b505050506040513d604081101561058c57600080fd5b81019080805190602001909291908051906020019092919050505091509150600081905060008463ffffffff168263ffffffff1611156105e257600260109054906101000a900463ffffffff1685039050610621565b600260109054906101000a900463ffffffff1663ffffffff168263ffffffff16111561062057600260109054906101000a900463ffffffff16820390505b5b60008163ffffffff161461069f576106908163ffffffff1661065a8670010000000000000000000000000000000064e8d4a51000610dae565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16610dae565b60008082825401925050819055505b505050505b80600260106101000a81548163ffffffff021916908363ffffffff1602179055505b50565b60016020528060005260406000206000915090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a9004600f0b908060010154905083565b64e8d4a5100081565b7f00000000000000000000000022e2f236065b780fa33ec8c4e58b99ebc8b55c5781565b60005481565b6000807f000000000000000000000000d5539d0360438a66661148c633a9f0965e48284573ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156107b857600080fd5b505afa1580156107cc573d6000803e3d6000fd5b505050506040513d60e08110156107e257600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505050505050509150506108538484836000546001610e8890949392919063ffffffff16565b91505092915050565b7f00000000000000000000000022e2f236065b780fa33ec8c4e58b99ebc8b55c5773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461091d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f4e6f74204d43000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60007f000000000000000000000000d5539d0360438a66661148c633a9f0965e48284573ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561098557600080fd5b505afa158015610999573d6000803e3d6000fd5b505050506040513d60e08110156109af57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050505050505091505060007f000000000000000000000000d5539d0360438a66661148c633a9f0965e48284573ffffffffffffffffffffffffffffffffffffffff166370cf754a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6c57600080fd5b505afa158015610a80573d6000803e3d6000fd5b505050506040513d6020811015610a9657600080fd5b81019080805190602001909291905050509050600080549050600080600086600f0b14610b0057610adc888688866000896001610f20909695949392919063ffffffff16565b9150610afd878688866001896001610f20909695949392919063ffffffff16565b90505b8760020b8560020b12158015610b1b57508660020b8560020b125b15610b8157610b48600260009054906101000a90046fffffffffffffffffffffffffffffffff1687611166565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b600086600f0b1215610bc4578115610ba857610ba78860016112bf90919063ffffffff16565b5b8015610bc357610bc28760016112bf90919063ffffffff16565b5b5b5050505050505050565b7f000000000000000000000000d5539d0360438a66661148c633a9f0965e48284573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f4e6f7420706f6f6c00000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160008460020b60020b815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff161415610ce757610d72565b6000610d0183600054600161132c9092919063ffffffff16565b90508115610d10578060000390505b610d38600260009054906101000a90046fffffffffffffffffffffffffffffffff1682611166565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505b5050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b600260109054906101000a900463ffffffff1681565b600080600080198587098587029250828110838203039150506000811415610de95760008411610ddd57600080fd5b83820492505050610e81565b808411610df557600080fd5b600084868809905082811182039150808303925060008586600003169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b6000808660008760020b60020b8152602001908152602001600020905060008760008760020b60020b8152602001908152602001600020905060008760020b8660020b12610edc5782600101549050610ee6565b8260010154850390505b60008760020b8760020b1215610f025782600101549050610f0c565b8260010154860390505b808287030394505050505095945050505050565b6000808860008960020b60020b8152602001908152602001600020905060008160000160009054906101000a90046fffffffffffffffffffffffffffffffff1690506000610f6e8289611166565b9050846fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff16111561100a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f4c4f00000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000826fffffffffffffffffffffffffffffffff161415156000826fffffffffffffffffffffffffffffffff16141515141593506000826fffffffffffffffffffffffffffffffff161415611071578860020b8a60020b13611070578683600101819055505b5b808360000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550856110e8576110e36110de89600f0b8560000160109054906101000a9004600f0b600f0b61137490919063ffffffff16565b611397565b61111b565b61111a61111589600f0b8560000160109054906101000a9004600f0b600f0b6113b090919063ffffffff16565b611397565b5b8360000160106101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550505050979650505050505050565b60008082600f0b121561121957826fffffffffffffffffffffffffffffffff168260000384039150816fffffffffffffffffffffffffffffffff1610611214576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f4c5300000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6112b9565b826fffffffffffffffffffffffffffffffff168284019150816fffffffffffffffffffffffffffffffff1610156112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f4c4100000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b92915050565b8160008260020b60020b8152602001908152602001600020600080820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556000820160106101000a8154906fffffffffffffffffffffffffffffffff0219169055600182016000905550505050565b6000808460008560020b60020b815260200190815260200160002090508060010154830381600101819055508060000160109054906101000a9004600f0b9150509392505050565b600080821215151583838501925082121515151461139157600080fd5b92915050565b60008182915081600f0b146113ab57600080fd5b919050565b60008082121515158383850392508213151515146113cd57600080fd5b9291505056fea26469706673582212207408e9f88a14be979f1ee498abd580c919909d9172efb5be8d0a8cb1cbac687864736f6c63430007060033" + }, + { + "address": "0xa712e958a1ee3185f36a89f9f67ea5b5df56bfb8", + "nonce": 15, + "balance": "0x000000000000000000000000000000000000000000000000002e3765b1071c9f", + "code": "0x" + }, + { + "address": "0xd82f30c68369f255b32be4864deef620a3c709fb", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608080604052600436101561001357600080fd5b60e0600035811c91826301ffc9a7146127e55750816306fdde0314612721578163081812fc146126e5578163095ea7b3146124da5781630f137b5b1461249f57816318160ddd146124635781631d2c0b38146123bf57816323b872dd1461239b5781632639f460146122175781632a55205a146121af5781632f745c59146120a65781633474a4a614611f5c57816342842e0e14611f295781634c0f38c214611eed5781634f558e7914611e835781634f6ccce714611daa57816355f804b314611c2257816361fea76814611bbd5781636352211e14611b6357816370970d56146118d457816370a0823114611893578163714c53981461184a578163715018a6146117ae57816384b0196e1461167c575080638da5cb5b1461162a57806395d89b411461152057806398b33aa3146114ac578063a1ea61ef14611424578063a22cb465146112f0578063a66b8f85146112af578063ac64a9b914611273578063b88d4fde146111cd578063c87b56dd14610f68578063cfb5bb1f14610f16578063d4d4c33314610eb1578063d6743d4c14610df2578063d8890f77146105fe578063e985e9c51461057c578063efef39a11461035a578063f2fde38b146102255763f39c179b146101e457600080fd5b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576020601254604051908152f35b600080fd5b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761025c6129d1565b610264612bca565b73ffffffffffffffffffffffffffffffffffffffff8091169081156102d657600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760043560165442101580610571575b15610547576103a06139cf565b6014546103ab6138d8565b906103bf836103ba8484613a3e565b613a4b565b3403610509578260155480151590816104a1575b50610477576103e28133613ae4565b6103eb81613a8b565b60008080806103fc85601454613a4b565b73ffffffffffffffffffffffffffffffffffffffff601d541662033450f1506104236132ff565b5033600052601f602052604060002061043d828254613a3e565b905560145490604051600181527f4e26b0356a15833a75d497ecc40ebbb716b99466ed0dba9454f1fff451e25a9060203392a46001601155005b60046040517f220ae94c000000000000000000000000000000000000000000000000000000008152fd5b905033600052601f6020526104bb82604060002054613a3e565b33600052601e60205260406000205481039081116104da5711826103d3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b916103ba61051992602494613a3e565b604051907f6a1c179e0000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517ff12dcc7f000000000000000000000000000000000000000000000000000000008152fd5b504260175411610393565b346102205760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576105b36129d1565b6105bb6129f4565b9073ffffffffffffffffffffffffffffffffffffffff809116600052600660205260406000209116600052602052602060ff604060002054166040519015158152f35b34610220576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760043567ffffffffffffffff81116102205761064e903690600401612bac565b60243567ffffffffffffffff81116102205761066e903690600401612bac565b60643567ffffffffffffffff81116102205761068e903690600401612bac565b9160843567ffffffffffffffff8111610220576106af903690600401612a77565b9260a4359273ffffffffffffffffffffffffffffffffffffffff841684036102205760205460ff8116610d94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011760205580519067ffffffffffffffff82116109e5578190610723600b546135d9565b601f8111610d24575b50602090601f8311600114610c6357600092610c58575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617600b555b80519067ffffffffffffffff82116109e5578190610795600c546135d9565b601f8111610bab575b50602090601f8311600114610aea57600092610adf575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617600c555b604435602155835167ffffffffffffffff81116109e5576108138161080e6022546135d9565b61395e565b602094601f8211600114610a1f57948192939495600092610a14575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176022555b67ffffffffffffffff83116109e557610885836108806023546135d9565b6138ed565b600090601f841160011461092057610906939160009183610915575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176023555b73ffffffffffffffffffffffffffffffffffffffff604051916108f683612ac2565b16815260c4356020820152613ec1565b60e43560125561010435601355005b0135905084806108a1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084169160236000527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42309260005b8181106109cd5750916001939186610906979410610995575b505050811b016023556108d4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055848080610987565b9193602060018192878701358155019501920161096e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b01519050858061082f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169560226000527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5109160005b888110610ac757508360019596979810610a90575b505050811b01602255610862565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080610a82565b91926020600181928685015181550194019201610a6d565b0151905086806107b5565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691600c6000527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79260005b818110610b935750908460019594939210610b5c575b505050811b01600c556107e8565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080610b4e565b92936020600181928786015181550195019301610b38565b909150600c600052601f830160051c7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7019060208410610c30575b90601f8493920160051c7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701905b818110610c21575061079e565b60008155849350600101610c14565b7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79150610be6565b015190508780610743565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691600b6000527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db99260005b818110610d0c5750908460019594939210610cd5575b505050811b01600b55610776565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055878080610cc7565b92936020600181928786015181550195019301610cb1565b909150600b6000527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9601f840160051c81019160208510610d8a575b90601f859493920160051c01905b818110610d7b575061072c565b60008155849350600101610d6e565b9091508190610d60565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f43616e206e6f74207265696e69746564000000000000000000000000000000006044820152fd5b34610220576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576101043573ffffffffffffffffffffffffffffffffffffffff811680910361022057610e4c612bca565b60043560145560243560155560443560165560643560175560843560185560a435601b5560c43560195560e435601a557fffffffffffffffffffffffff0000000000000000000000000000000000000000601d541617601d5561012435601c55600080f35b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205773ffffffffffffffffffffffffffffffffffffffff610efd6129d1565b16600052601f6020526020604060002054604051908152f35b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057610f64610f50613dce565b60405191829160208352602083019061298e565b0390f35b34610220576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760405181600435610fb383610fac8161362c565b0384612afa565b8251156111b457600090807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000081818110156111a6575b5050836d04ee2d6d415b85acef81000000008083101561119a575b5050662386f26fc100008082101561118d575b506305f5e10080821015611180575b5061271080821015611173575b506064811015611165575b600a8091101561115b575b60018084019281602161106f61105987612b3b565b966110676040519889612afa565b808852612b3b565b967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08988019801368937860101905b6110fa575b50505050926110e492916110d89460405195836110c9889551809288808901910161296b565b8401915180938684019061296b565b01038084520182612afa565b905b610f6460405192828493845283019061298e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff849101917f30313233343536373839616263646566000000000000000000000000000000008282061a8353049182156111565791908261109e565b6110a3565b9160010191611044565b606460029104920191611039565b600491049201918661102e565b6008910492019186611021565b6010910492019186611012565b93019290048387610fff565b604094500490508680610fe4565b5050506040516111c381612ade565b60008152906110e6565b346102205760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576112046129d1565b61120c6129f4565b906064359060443567ffffffffffffffff83116102205736602384011215610220576112719361124961126c943690602481600401359101612b75565b9261125c6112578433612f01565b612dea565b611267838383613007565b6134ec565b612e75565b005b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576020601354604051908152f35b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760206112e86138d8565b604051908152f35b346102205760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576113276129d1565b602435908115158092036102205773ffffffffffffffffffffffffffffffffffffffff16908133146113c65733600052600660205260406000208260005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760406114696114606138d8565b60043590613a4b565b81519073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000003f3609c47302aeb45b7208d8dc1042af75e723b1682526020820152f35b346102205760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576112716114e66129d1565b6114ee612bca565b73ffffffffffffffffffffffffffffffffffffffff6040519161151083612ac2565b1681526024356020820152613ec1565b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576040516000600c54611560816135d9565b808452906001908181169081156115e5575060011461158a575b610f6484610f5081860382612afa565b600c600090815292507fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c75b8284106115cd575050508101602001610f508261157a565b805460208587018101919091529093019281016115b5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208087019190915292151560051b85019092019250610f50915083905061157a565b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057611750906116d87f4372656174655853616c65496d706c000000000000000000000000000000000f6136ef565b906117027f340000000000000000000000000000000000000000000000000000000000000161381e565b9061175e6040519261171384612ade565b600084526040519586957f0f000000000000000000000000000000000000000000000000000000000000008752602094808689015287019061298e565b90858203604087015261298e565b466060850152306080850152600060a085015283810360c085015281808451928381520193019160005b82811061179757505050500390f35b835185528695509381019392810192600101611788565b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576117e5612bca565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057610f64604051610f508161188c8161362c565b0382612afa565b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760206112e86118cf6129d1565b612c49565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760243567ffffffffffffffff600435818311610220573660238401121561022057826004013591821161022057600582811b9060248286010193368511610220576119476139cf565b60185442101580611b58575b15611b2e57601c54946040516020978189809301903360601b82526014815261197b81612ac2565b5190209361198e83604051980188612afa565b86526024018186015b838210611b1f5750505050926000935b83518510156119ee5784831b840187015190818110156119db5760005286526119d560406000205b94613a5e565b936119a7565b9060005286526119d560406000206119cf565b9085879203611af5576119ff6138d8565b601954611a10836103ba8484613a3e565b340361050957505033600052601e82526040600020611a30828254613a3e565b905533600052601e8252604060002054601a5410611acb57611a528133613ae4565b6000808080611a6385601954613a4b565b73ffffffffffffffffffffffffffffffffffffffff601d541662033450f150611a8a6132ff565b50611a9481613a8b565b601954917f4e26b0356a15833a75d497ecc40ebbb716b99466ed0dba9454f1fff451e25a9060405191600083523392a46001601155005b60046040517fa7b32bb1000000000000000000000000000000000000000000000000000000008152fd5b60046040517f85b70e52000000000000000000000000000000000000000000000000000000008152fd5b81358152908201908201611997565b60046040517f95ed3c1a000000000000000000000000000000000000000000000000000000008152fd5b5042601b5411611953565b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576020611b9f600435612d5f565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205773ffffffffffffffffffffffffffffffffffffffff611c096129d1565b16600052601e6020526020604060002054604051908152f35b34610220576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205767ffffffffffffffff60043581811161022057611c73903690600401612bac565b91611c7c612bca565b82519182116109e557611c948261080e6022546135d9565b80601f8311600114611ced57508192600092611ce2575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617602255600080f35b015190508280611cab565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083169360226000527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e510926000905b868210611d925750508360019510611d5b575b505050811b01602255005b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055828080611d50565b80600185968294968601518155019501930190611d3d565b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057600435600954811015611dff57611df1602091613573565b90546040519160031b1c8152f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152fd5b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576020611ee3600435600052600360205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b6040519015158152f35b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576020602154604051908152f35b346102205761127161126c611f3d36612a17565b9060405192611f4b84612ade565b6000845261125c6112578433612f01565b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761014090604051611f9b81612aa5565b6000815260006020820152600060408201526000606082015260006080820152600060a0820152600060c0820152600082820152610100600081830152600061012080930152604051611fed81612aa5565b6014549182825260155494602083019586526016549060408401918252601754606085019081526018546080860190815260195460a08701908152601a549160c08801928352601b5493858901948552601c5496888a0197885273ffffffffffffffffffffffffffffffffffffffff9a8c8c601d54169b019a8b5260206040519e8f928352519101525160408d01525160608c01525160808b01525160a08a01525160c089015251908701525190850152511690820152f35b346102205760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576120dd6129d1565b602435906120ea81612c49565b82101561212b5773ffffffffffffffffffffffffffffffffffffffff1660005260076020526040600020906000526020526020604060002054604051908152f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152fd5b346102205760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057604073ffffffffffffffffffffffffffffffffffffffff600f541661271061220a602435601054613a4b565b0482519182526020820152f35b34610220576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205767ffffffffffffffff60043581811161022057612268903690600401612a77565b91612271612bca565b82116109e557612286826108806023546135d9565b600092601f83116001146122e257509181926000926122d7575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617602355600080f35b0135905082806122a0565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316937fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f4230926000905b868210612383575050836001951061234b575b505050811b01602355005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055828080612340565b8060018496829495870135815501950192019061232d565b34610220576112716123ac36612a17565b916123ba6112578433612f01565b613007565b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576101409060145490601554906016549060175490601854601954601a5491601b5494601c549673ffffffffffffffffffffffffffffffffffffffff601d5416986040519a8b5260208b015260408a01526060890152608088015260a087015260c0860152840152610100830152610120820152f35b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576020600954604051908152f35b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760206040516127108152f35b346102205760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576125116129d1565b6024359073ffffffffffffffffffffffffffffffffffffffff808061253585612d5f565b169216918083146126615780331490811561263c575b50156125b8578260005260056020526040600020827fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905561259083612d5f565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152fd5b9050600052600660205260406000203360005260205260ff604060002054168461254b565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576020611b9f600435612d8e565b346102205760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576040516000600b54612761816135d9565b808452906001908181169081156115e5575060011461278a57610f6484610f5081860382612afa565b600b600090815292507f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db95b8284106127cd575050508101602001610f508261157a565b805460208587018101919091529093019281016127b5565b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361022057817f2a55205a0000000000000000000000000000000000000000000000000000000060209314908115612877575b5015158152f35b7f79f154c4000000000000000000000000000000000000000000000000000000008114915081156128aa575b5083612870565b7f780e9d63000000000000000000000000000000000000000000000000000000008114915081156128dd575b50836128a3565b7f80ac58cd00000000000000000000000000000000000000000000000000000000811491508115612941575b8115612917575b50836128d6565b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483612910565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150612909565b60005b83811061297e5750506000910152565b818101518382015260200161296e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936129ca8151809281875287808801910161296b565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361022057565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361022057565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60609101126102205773ffffffffffffffffffffffffffffffffffffffff90600435828116810361022057916024359081168103610220579060443590565b9181601f840112156102205782359167ffffffffffffffff8311610220576020838186019501011161022057565b610140810190811067ffffffffffffffff8211176109e557604052565b6040810190811067ffffffffffffffff8211176109e557604052565b6020810190811067ffffffffffffffff8211176109e557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109e557604052565b67ffffffffffffffff81116109e557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612b8182612b3b565b91612b8f6040519384612afa565b829481845281830111610220578281602093846000960137010152565b9080601f8301121561022057816020612bc793359101612b75565b90565b73ffffffffffffffffffffffffffffffffffffffff600054163303612beb57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b73ffffffffffffffffffffffffffffffffffffffff168015612c7657600052600460205260406000205490565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152fd5b15612d0157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152fd5b600052600360205273ffffffffffffffffffffffffffffffffffffffff60406000205416612bc7811515612cfa565b612dc3612dbe82600052600360205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b612cfa565b600052600560205273ffffffffffffffffffffffffffffffffffffffff6040600020541690565b15612df157565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152fd5b15612e7c57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b9073ffffffffffffffffffffffffffffffffffffffff8080612f2284612d5f565b16931691838314938415612f55575b508315612f3f575b50505090565b612f4b91929350612d8e565b1614388080612f39565b909350600052600660205260406000208260005260205260ff604060002054169238612f31565b15612f8357565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152fd5b6130389161301484612d5f565b73ffffffffffffffffffffffffffffffffffffffff93848416939185168414612f7c565b83821693841561327c578391826131bb575090506009549085600052600a60205281604060002055680100000000000000008210156109e5576130d9926130c08761308a856001899701600955613573565b9091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83549160031b92831b921b1916179055565b828603613188575b506130d286612d5f565b1614612f7c565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60008481526005602052604081207fffffffffffffffffffffffff0000000000000000000000000000000000000000908181541690558382526004602052604082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81540190558482526040822060018154019055858252600360205284604083209182541617905580a4565b61319190612c49565b604060008781526007602052818120838252602052888282205588815260086020522055386130c8565b8583036131cd575b506130d9926130c0565b6131d8919250612c49565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116104da576130d99284926000908882526020906008825260409182842054828103613245575b508a845283838120558684526007815282842091845252812055926131c3565b8785526007825283852083865282528385205488865260078352848620828752835280858720558552600882528385205538613225565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b3d1561332a573d9061331082612b3b565b9161331e6040519384612afa565b82523d6000602084013e565b606090565b9091600091803b156134e3576133a860209173ffffffffffffffffffffffffffffffffffffffff93856040519586809581947f150b7a02000000000000000000000000000000000000000000000000000000009b8c8452336004850152856024850152604484015260806064840152608483019061298e565b0393165af19082908261347c575b5050613456576133c46132ff565b80519081613451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000161490565b909192506020813d82116134db575b8161349860209383612afa565b810103126134d75751907fffffffff00000000000000000000000000000000000000000000000000000000821682036134d457509038806133b6565b80fd5b5080fd5b3d915061348b565b50505050600190565b91926000929190813b15613569576020916133a891856040519586809581947f150b7a02000000000000000000000000000000000000000000000000000000009b8c845233600485015273ffffffffffffffffffffffffffffffffffffffff8095166024850152604484015260806064840152608483019061298e565b5050505050600190565b6009548110156135aa5760096000527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600182811c92168015613622575b60208310146135f357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916135e8565b6022546000929161363c826135d9565b808252916001908181169081156136b3575060011461365a57505050565b9192935060226000527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e510916000925b84841061369b57505060209250010190565b80546020858501810191909152909301928101613689565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b60ff81146137455760ff811690601f821161371b576040519161371183612ac2565b8252602082015290565b60046040517fb3512b0c000000000000000000000000000000000000000000000000000000008152fd5b50604051600d54816000613758836135d9565b808352926001908181169081156137de575060011461377f575b50612bc792500382612afa565b600d600090815291507fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb55b8483106137c35750612bc7935050810160200138613772565b819350908160209254838589010152019101909184926137aa565b60209350612bc79592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138613772565b60ff81146138405760ff811690601f821161371b576040519161371183612ac2565b50604051600e54816000613853836135d9565b808352926001908181169081156137de57506001146138795750612bc792500382612afa565b600e600090815291507fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd5b8483106138bd5750612bc7935050810160200138613772565b819350908160209254838589010152019101909184926138a4565b6013544211156138e85760125490565b600090565b601f81116138f9575050565b600090602382527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f4230906020601f850160051c83019410613954575b601f0160051c01915b82811061394957505050565b81815560010161393d565b9092508290613934565b601f811161396a575050565b600090602282527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e510906020601f850160051c830194106139c5575b601f0160051c01915b8281106139ba57505050565b8181556001016139ae565b90925082906139a5565b6002601154146139e0576002601155565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b919082018092116104da57565b818102929181159184041417156104da57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146104da5760010190565b60008080613a9c81946103ba6138d8565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000003f3609c47302aeb45b7208d8dc1042af75e723b1662033450f150613ae16132ff565b50565b906021548015908115613d53575b5015613cf5576009805460005b838110613b0d575050505050565b613b178183613a3e565b906040805192613b2684612ade565b6000845273ffffffffffffffffffffffffffffffffffffffff8816938415613c9957613b7e613b7883600052600360205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b15613d69565b865491806000526020600a8152838560002055680100000000000000008410156109e557613c9496613c8f95600384938c8f613bcc906118cf8861308a61126c9d6001968782019055613573565b85600052600783528460002081600052835286856000205586600052600883528460002055613c21613b7887600052600360205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b8460005260048252836000209081540190558460005252600020817fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a48961332f565b613a5e565b613aff565b606483517f08c379a0000000000000000000000000000000000000000000000000000000008152602080600483015260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d696e7420636f756e7420657863656564204d41585f535550504c59210000006044820152fd5b9050613d6182600954613a3e565b111538613af2565b15613d7057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152fd5b604051602354816000613de0836135d9565b80835292600190818116908115613e815750600114613e22575b50613e0792500382612afa565b805115613e115790565b50604051612bc78161188c8161362c565b6023600090815291507fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42305b848310613e665750613e07935050810160200138613dfa565b81935090816020925483858901015201910190918492613e4d565b60209350613e079592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138613dfa565b6020810190612710825111613f175773ffffffffffffffffffffffffffffffffffffffff9051167fffffffffffffffffffffffff0000000000000000000000000000000000000000600f541617600f5551601055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332393831526f79616c746965733a20546f6f20686967680000000000006044820152fdfea164736f6c6343000812000a" + }, + { + "address": "0x243e087001eb5aceb78fc39c5b49f9e2ab0b154a", + "nonce": 15, + "balance": "0x0000000000000000000000000000000000000000000000000013c32474018c80", + "code": "0x" + }, + { + "address": "0x34df93f37f327757684ae502b47c787c38465037", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608080604052600436101561001357600080fd5b60003560e01c908162435da51461100f5750806321f8a72114610fdb5780632630c12f14610f7c57806326e1c80b14610eb657806330a81a2114610de95780633e7f096214610d1d57806341d3c84c14610cbe578063477a86ef14610c5a578063530e784f14610b935780635434a1df14610b2e5780635ac6248a14610a89578063715018a614610a305780638da5cb5b14610a07578063ad1eecf4146109a9578063ad5c464814610964578063b96684821461089d578063bdacb303146107f3578063c4aa304114610791578063ca446dd914610728578063cc2a9a5b14610304578063d33219b4146102bb578063e4271e2d146101e95763f2fde38b1461011b57600080fd5b346101e45760203660031901126101e45761013461106a565b61013c611096565b6001600160a01b0390811690811561019057600054826bffffffffffffffffffffffff60a01b821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b600080fd5b346101e45760203660031901126101e45761020261106a565b6754494d454c4f434b60c01b60005260016020526000805160206111f9833981519152546001600160a01b0391829161023e90831633146110ee565b169061025361024b61112a565b831515611171565b6e455845435554494f4e5f4c4f47494360881b600081815260016020527f7040d9035199443f2087f1e29c3d28f1cc4a7de063dfd8c1aa6418430f0fb66780546001600160a01b031981168617909155909216916000805160206111d98339815191529080a4005b346101e45760003660031901126101e4576754494d454c4f434b60c01b600052600160209081526000805160206111f9833981519152546040516001600160a01b039091168152f35b346101e45760c03660031901126101e45761031d61106a565b610325611080565b604435916001600160a01b03831683036101e4576064356001600160a01b03811681036101e457608435906001600160a01b03821682036101e45760a435946001600160a01b03861686036101e45761037c611096565b6000549460ff8660a81c161595868097610718575b80156106fe575b156106a25760ff60a01b198116600160a01b176000558661068a575b506103bd611096565b6b50524943455f4f5241434c4560a01b600081815260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d52480546001600160a01b039889166001600160a01b0319821681179092556000805160206111d9833981519152989193911691889080a4610436611096565b71494e4445585f50524943455f4f5241434c4560701b600081815260016020527f2e573600b475045b060c72d5873093b3b53001bc009df6fa7c3c354d4e90593e80546001600160a01b039485166001600160a01b0319821681179092559093169190879080a46104a5611096565b6b46554e44494e475f5241544560a01b600081815260016020527fb897944fac891f0f3a8f530b4b9cc11516a12ceca8e00089453f08d3e78a493280546001600160a01b039485166001600160a01b0319821681179092559093169190869080a461050e611096565b6e455845435554494f4e5f4c4f47494360881b600081815260016020527f7040d9035199443f2087f1e29c3d28f1cc4a7de063dfd8c1aa6418430f0fb66780546001600160a01b039485166001600160a01b0319821681179092559093169190859080a461057a611096565b704c49515549444154494f4e5f4c4f47494360781b600081815260016020527f5bf9e092ab310df2ad9bcf838d8a2ae9078d8cefe2e978d3a92d17eaa75f710f80546001600160a01b039485166001600160a01b0319821681179092559093169190849080a46105e8611096565b6a2120a1a5aa2920a1a5a2a960a91b600081815260016020527f7237d0981820bd22adadeccfc9770d51848cfe06bab80ec420bfd79541f526fa80546001600160a01b039687166001600160a01b0319821681179092556040519691949116929180a461065157005b6000805460ff60a81b19169055600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a1005b61ffff60a01b191661010160a01b17600055876103b4565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156103985750600160ff8260a01c1614610398565b50600160ff8260a01c1610610391565b346101e45760403660031901126101e457600435610744611080565b9061074d611096565b600081815260016020526040812080546001600160a01b039485166001600160a01b03198216811790925590931691906000805160206111d98339815191529080a4005b346101e45760003660031901126101e4576e455845435554494f4e5f4c4f47494360881b600052600160209081527f7040d9035199443f2087f1e29c3d28f1cc4a7de063dfd8c1aa6418430f0fb667546040516001600160a01b039091168152f35b346101e45760203660031901126101e45761080c61106a565b6754494d454c4f434b60c01b600081905260016020526000805160206111f9833981519152546001600160a01b0392839161084a90831633146110ee565b169161085f61085761112a565b841515611171565b8160005260016020526040600020805490846bffffffffffffffffffffffff60a01b831617905516906000805160206111d9833981519152600080a4005b346101e45760203660031901126101e4576108b661106a565b6754494d454c4f434b60c01b60005260016020526000805160206111f9833981519152546001600160a01b039182916108f290831633146110ee565b16906108ff61024b61112a565b6b46554e44494e475f5241544560a01b600081815260016020527fb897944fac891f0f3a8f530b4b9cc11516a12ceca8e00089453f08d3e78a493280546001600160a01b031981168617909155909216916000805160206111d98339815191529080a4005b346101e45760003660031901126101e4576040517f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b03168152602090f35b346101e45760003660031901126101e4576a2120a1a5aa2920a1a5a2a960a91b600052600160209081527f7237d0981820bd22adadeccfc9770d51848cfe06bab80ec420bfd79541f526fa546040516001600160a01b039091168152f35b346101e45760003660031901126101e4576000546040516001600160a01b039091168152602090f35b346101e45760003660031901126101e457610a49611096565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101e45760203660031901126101e457610aa261106a565b610aaa611096565b6001600160a01b0390811690610ac161024b61112a565b610ac9611096565b6b2927a622afa6a0a720a3a2a960a11b600081815260016020527fac9786f842679119c45f55854d5a4cedee202e9fbaba6f0502cc3f41977aef0f80546001600160a01b031981168617909155909216916000805160206111d98339815191529080a4005b346101e45760003660031901126101e45771494e4445585f50524943455f4f5241434c4560701b600052600160209081527f2e573600b475045b060c72d5873093b3b53001bc009df6fa7c3c354d4e90593e546040516001600160a01b039091168152f35b346101e45760203660031901126101e457610bac61106a565b6754494d454c4f434b60c01b60005260016020526000805160206111f9833981519152546001600160a01b03918291610be890831633146110ee565b1690610bf561024b61112a565b6b50524943455f4f5241434c4560a01b600081815260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d52480546001600160a01b031981168617909155909216916000805160206111d98339815191529080a4005b346101e45760003660031901126101e457704c49515549444154494f4e5f4c4f47494360781b600052600160209081527f5bf9e092ab310df2ad9bcf838d8a2ae9078d8cefe2e978d3a92d17eaa75f710f546040516001600160a01b039091168152f35b346101e45760003660031901126101e4576b46554e44494e475f5241544560a01b600052600160209081527fb897944fac891f0f3a8f530b4b9cc11516a12ceca8e00089453f08d3e78a4932546040516001600160a01b039091168152f35b346101e45760203660031901126101e457610d3661106a565b6754494d454c4f434b60c01b60005260016020526000805160206111f9833981519152546001600160a01b03918291610d7290831633146110ee565b1690610d7f61024b61112a565b704c49515549444154494f4e5f4c4f47494360781b600081815260016020527f5bf9e092ab310df2ad9bcf838d8a2ae9078d8cefe2e978d3a92d17eaa75f710f80546001600160a01b031981168617909155909216916000805160206111d98339815191529080a4005b346101e45760203660031901126101e457610e0261106a565b6754494d454c4f434b60c01b60005260016020526000805160206111f9833981519152546001600160a01b03918291610e3e90831633146110ee565b1690610e4b61024b61112a565b71494e4445585f50524943455f4f5241434c4560701b600081815260016020527f2e573600b475045b060c72d5873093b3b53001bc009df6fa7c3c354d4e90593e80546001600160a01b031981168617909155909216916000805160206111d98339815191529080a4005b346101e45760203660031901126101e457610ecf61106a565b6754494d454c4f434b60c01b60005260016020526000805160206111f9833981519152546001600160a01b03918291610f0b90831633146110ee565b1690610f1861024b61112a565b6a2120a1a5aa2920a1a5a2a960a91b600081815260016020527f7237d0981820bd22adadeccfc9770d51848cfe06bab80ec420bfd79541f526fa80546001600160a01b031981168617909155909216916000805160206111d98339815191529080a4005b346101e45760003660031901126101e4576b50524943455f4f5241434c4560a01b600052600160209081527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d524546040516001600160a01b039091168152f35b346101e45760203660031901126101e4576004356000526001602052602060018060a01b0360406000205416604051908152f35b346101e45760003660031901126101e4576b2927a622afa6a0a720a3a2a960a11b600052600160209081527fac9786f842679119c45f55854d5a4cedee202e9fbaba6f0502cc3f41977aef0f546001600160a01b0316825290f35b600435906001600160a01b03821682036101e457565b602435906001600160a01b03821682036101e457565b6000546001600160a01b031633036110aa57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156110f557565b60405162461bcd60e51b815260206004820152600d60248201526c6f6e6c792074696d656c6f636b60981b6044820152606490fd5b604051906040820182811067ffffffffffffffff82111761115b5760405260048252630697320360e41b6020830152565b634e487b7160e01b600052604160045260246000fd5b156111795750565b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b8285106111bf575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935061119c56fe9ef0e8c8e52743bb38b83b17d9429141d494b8041ca6d616a6c77cebae9cd8b782364ef6a198b23dc8959ae6274daaa31e2af17f09065dff6c65e5452b3c09eea26469706673582212201d4bc2ef3416036314a66ac0547294d5b91f233bebc4fbf359e474ddd20f4a6c64736f6c63430008130033" + }, + { + "address": "0x7994e6879ed06a6959ca67d844de9d53e5e036ec", + "nonce": 82, + "balance": "0x0000000000000000000000000000000000000000000000000089ec7e8f4d9e4f", + "code": "0x" + }, + { + "address": "0x5c5515e537800295ad2be29077d981f7bf02d99f", + "nonce": 4, + "balance": "0x0000000000000000000000000000000000000000000000000044e89499175c83", + "code": "0x" + }, + { + "address": "0x4972bf6c4bc94d79e47b81f15e4abc28ac59f229", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106101295760003560e01c8063a3f4df7e116100a5578063c82e824511610074578063e8a32a8c11610059578063e8a32a8c146103b1578063f2fde38b146103d1578063ffa1ad74146103f157600080fd5b8063c82e82451461037c578063dba710581461039c57600080fd5b8063a3f4df7e1461029d578063a7ecd37e146102f3578063ad3cb1cc14610313578063c4d66de81461035c57600080fd5b806352d1902d116100fc57806384b0196e116100e157806384b0196e146101f85780638da5cb5b146102205780639e3b71aa1461025d57600080fd5b806352d1902d146101ce578063715018a6146101e357600080fd5b80631eedb6071461012e578063238ac93314610150578063290d75001461018d5780634f1ef286146101bb575b600080fd5b34801561013a57600080fd5b5061014e6101493660046115d2565b61041e565b005b34801561015c57600080fd5b50600054610170906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019957600080fd5b506101ad6101a8366004611636565b610514565b604051908152602001610184565b61014e6101c936600461166b565b61059f565b3480156101da57600080fd5b506101ad6105be565b3480156101ef57600080fd5b5061014e6105ed565b34801561020457600080fd5b5061020d610601565b60405161018497969594939291906116ff565b34801561022c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610170565b34801561026957600080fd5b5061028d610278366004611795565b60016020526000908152604090205460ff1681565b6040519015158152602001610184565b3480156102a957600080fd5b506102e66040518060400160405280601e81526020017f456e646572732047617465205369676e6174757265205665726966696572000081525081565b60405161018491906117ae565b3480156102ff57600080fd5b5061014e61030e3660046117c1565b6106c7565b34801561031f57600080fd5b506102e66040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561036857600080fd5b5061014e6103773660046117c1565b6106f1565b34801561038857600080fd5b5061028d6103973660046115d2565b610888565b3480156103a857600080fd5b506102e66108d1565b3480156103bd57600080fd5b5061028d6103cc3660046117dc565b6108ed565b3480156103dd57600080fd5b5061014e6103ec3660046117c1565b610927565b3480156103fd57600080fd5b506102e6604051806040016040528060018152602001603160f81b81525081565b600061042983610514565b905061043581836108ed565b6104865760405162461bcd60e51b815260206004820152601d60248201527f47656e6572696353696756657269666965723a2077726f6e672073696700000060448201526064015b60405180910390fd5b7f46e0076d5a064cdc22b7e000423513557b99ad0745646b541caa3a4122b1e5f28360200151846040015185606001516040516104c59392919061180d565b60405180910390a1600081815260016020818152604092839020805460ff19169092179091559084015160608501519185015161050e926001600160a01b039091169190610965565b50505050565b60006105996040518060600160405280603d81526020016119e4603d913980516020918201208451858301516040808801518051908601206060808a0151835197880196909652918601939093526001600160a01b0390911690840152608083015260a082015260c00160405160208183030381529060405280519060200120610a02565b92915050565b6105a7610a2f565b6105b082610ae6565b6105ba8282610aee565b5050565b60006105c8610bc2565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6105f5610c0b565b6105ff6000610c66565b565b600060608082808083817fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100805490915015801561064057506001810154155b61068c5760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a65640000000000000000000000604482015260640161047d565b610694610cd7565b61069c610dac565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6106cf610c0b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561073c5750825b905060008267ffffffffffffffff1660011480156107595750303b155b905081158015610767575080155b156107855760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107b957845468ff00000000000000001916680100000000000000001785555b6107c233610dfd565b61081a6040518060400160405280601e81526020017f456e646572732047617465205369676e61747572652056657269666965720000815250604051806040016040528060018152602001603160f81b815250610e0e565b600080546001600160a01b0319166001600160a01b038816179055831561088057845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b60008061089484610514565b6000549091506108ae906001600160a01b03168285610e20565b80156108c9575060008181526001602052604090205460ff16155b949350505050565b6040518060600160405280603d81526020016119e4603d913981565b60008054610905906001600160a01b03168484610e20565b8015610920575060008381526001602052604090205460ff16155b9392505050565b61092f610c0b565b6001600160a01b03811661095957604051631e4fbdf760e01b81526000600482015260240161047d565b61096281610c66565b50565b60608147101561098a5760405163cd78605960e01b815230600482015260240161047d565b600080856001600160a01b031684866040516109a6919061183f565b60006040518083038185875af1925050503d80600081146109e3576040519150601f19603f3d011682016040523d82523d6000602084013e6109e8565b606091505b50915091506109f8868383610e78565b9695505050505050565b6000610599610a0f610ed4565b8360405161190160f01b8152600281019290925260228201526042902090565b306001600160a01b037f0000000000000000000000004972bf6c4bc94d79e47b81f15e4abc28ac59f229161480610ac857507f0000000000000000000000004972bf6c4bc94d79e47b81f15e4abc28ac59f2296001600160a01b0316610abc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156105ff5760405163703e46dd60e11b815260040160405180910390fd5b610962610c0b565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b48575060408051601f3d908101601f19168201909252610b459181019061185b565b60015b610b7057604051634c9c8ce360e01b81526001600160a01b038316600482015260240161047d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610bb357604051632a87526960e21b81526004810182905260240161047d565b610bbd8383610ee3565b505050565b306001600160a01b037f0000000000000000000000004972bf6c4bc94d79e47b81f15e4abc28ac59f22916146105ff5760405163703e46dd60e11b815260040160405180910390fd5b33610c3d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105ff5760405163118cdaa760e01b815233600482015260240161047d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091610d2890611874565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5490611874565b8015610da15780601f10610d7657610100808354040283529160200191610da1565b820191906000526020600020905b815481529060010190602001808311610d8457829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091610d2890611874565b610e05610f39565b61096281610f87565b610e16610f39565b6105ba8282610f8f565b6000806000610e2f8585611002565b5090925090506000816003811115610e4957610e496118ae565b148015610e675750856001600160a01b0316826001600160a01b0316145b806109f857506109f886868661104f565b606082610e8d57610e888261113f565b610920565b8151158015610ea457506001600160a01b0384163b155b15610ecd57604051639996b31560e01b81526001600160a01b038516600482015260240161047d565b5080610920565b6000610ede611168565b905090565b610eec826111dc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610f3157610bbd8282611253565b6105ba6112c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105ff57604051631afcd79f60e31b815260040160405180910390fd5b61092f610f39565b610f97610f39565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610fe3848261190a565b5060038101610ff2838261190a565b5060008082556001909101555050565b6000806000835160410361103c5760208401516040850151606086015160001a61102e888285856112e8565b955095509550505050611048565b50508151600091506002905b9250925092565b6000806000856001600160a01b031685856040516024016110719291906119ca565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630b135d3f60e11b179052516110bb919061183f565b600060405180830381855afa9150503d80600081146110f6576040519150601f19603f3d011682016040523d82523d6000602084013e6110fb565b606091505b509150915081801561110f57506020815110155b80156109f857508051630b135d3f60e11b90611134908301602090810190840161185b565b149695505050505050565b80511561114f5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6111936113b7565b61119b611433565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b806001600160a01b03163b60000361121257604051634c9c8ce360e01b81526001600160a01b038216600482015260240161047d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611270919061183f565b600060405180830381855af49150503d80600081146112ab576040519150601f19603f3d011682016040523d82523d6000602084013e6112b0565b606091505b50915091506112c0858383610e78565b95945050505050565b34156105ff5760405163b398979f60e01b815260040160405180910390fd5b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561132357506000915060039050826113ad565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611377573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a3575060009250600191508290506113ad565b9250600091508190505b9450945094915050565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100816113e3610cd7565b8051909150156113fb57805160209091012092915050565b8154801561140a579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008161145f610dac565b80519091501561147757805160209091012092915050565b6001820154801561140a579392505050565b634e487b7160e01b600052604160045260246000fd5b80356001600160a01b03811681146114b657600080fd5b919050565b600082601f8301126114cc57600080fd5b813567ffffffffffffffff808211156114e7576114e7611489565b604051601f8301601f19908116603f0116810190828211818310171561150f5761150f611489565b8160405283815286602085880101111561152857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006080828403121561155a57600080fd5b6040516080810167ffffffffffffffff828210818311171561157e5761157e611489565b81604052829350843583526115956020860161149f565b602084015260408501359150808211156115ae57600080fd5b506115bb858286016114bb565b604083015250606083013560608201525092915050565b600080604083850312156115e557600080fd5b823567ffffffffffffffff808211156115fd57600080fd5b61160986838701611548565b9350602085013591508082111561161f57600080fd5b5061162c858286016114bb565b9150509250929050565b60006020828403121561164857600080fd5b813567ffffffffffffffff81111561165f57600080fd5b6108c984828501611548565b6000806040838503121561167e57600080fd5b6116878361149f565b9150602083013567ffffffffffffffff8111156116a357600080fd5b61162c858286016114bb565b60005b838110156116ca5781810151838201526020016116b2565b50506000910152565b600081518084526116eb8160208601602086016116af565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e08184015261171f60e084018a6116d3565b8381036040850152611731818a6116d3565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b8181101561178357835183529284019291840191600101611767565b50909c9b505050505050505050505050565b6000602082840312156117a757600080fd5b5035919050565b60208152600061092060208301846116d3565b6000602082840312156117d357600080fd5b6109208261149f565b600080604083850312156117ef57600080fd5b82359150602083013567ffffffffffffffff8111156116a357600080fd5b6001600160a01b038416815260606020820152600061182f60608301856116d3565b9050826040830152949350505050565b600082516118518184602087016116af565b9190910192915050565b60006020828403121561186d57600080fd5b5051919050565b600181811c9082168061188857607f821691505b6020821081036118a857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fd5b601f821115610bbd57600081815260208120601f850160051c810160208610156118eb5750805b601f850160051c820191505b81811015610880578281556001016118f7565b815167ffffffffffffffff81111561192457611924611489565b611938816119328454611874565b846118c4565b602080601f83116001811461196d57600084156119555750858301515b600019600386901b1c1916600185901b178555610880565b600085815260208120601f198616915b8281101561199c5788860151825594840194600190910190840161197d565b50858210156119ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8281526040602082015260006108c960408301846116d356fe4d696e742875696e743235362074696d657374616d702c6164647265737320746f2c6279746573333220646174612c75696e743235362076616c756529a164736f6c6343000814000a" + }, + { + "address": "0xee6a2f373b50400758cba9b743646ce2e8aa3e72", + "nonce": 58, + "balance": "0x0000000000000000000000000000000000000000000000000040a587a39197f5", + "code": "0x" + }, + { + "address": "0x8e2e455166d5a10f93ff4df0f19a8bd2b6487458", + "nonce": 5, + "balance": "0x000000000000000000000000000000000000000000000000000c2ec592c1205d", + "code": "0x" + }, + { + "address": "0xbe2cd58637a2e220de12864122f3d414ae0b9b29", + "nonce": 21, + "balance": "0x000000000000000000000000000000000000000000000000000552fd299c61a6", + "code": "0x" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061028a5760003560e01c80638e0566de1161015c578063c1075329116100ce578063e76d516811610087578063e76d516814610b7e578063eb45716314610b86578063eb5dcd6c14610bb8578063f2fde38b14610be6578063fbffd2c114610c0c578063feaf968c14610c325761028a565b8063c1075329146109a6578063c9807539146109d2578063d09dc33914610ae0578063dc7f012414610ae8578063e4902f8214610af0578063e5fe457714610b2d5761028a565b80639e3ceeab116101205780639e3ceeab146108b5578063a118f249146108db578063b121e14714610901578063b5ab58dc14610927578063b633620c14610944578063bd824706146109615761028a565b80638e0566de1461073157806398e5b12a14610761578063996e8298146107855780639a6fc8f51461078d5780639c849b30146107f75761028a565b80636b14daf81161020057806381411834116101b9578063814118341461064457806381ff70481461069c5780638205bf6a146106d55780638823da6c146106dd5780638ac28d5a146107035780638da5cb5b146107295761028a565b80636b14daf81461053857806370da2f671461060057806370efdf2d146106085780637284e4161461062c57806379ba5097146106345780638038e4a11461063c5761028a565b8063313ce56711610252578063313ce567146103ae5780634fb17470146103cc57806350d25bcd146103fa57806354fd4d5014610402578063585aa7de1461040a578063668a0f02146105305761028a565b80630a7569831461028f5780630eafb25b14610299578063181f5a77146102d157806322adbc781461034e578063299372681461036d575b600080fd5b610297610c3a565b005b6102bf600480360360208110156102af57600080fd5b50356001600160a01b0316610cc8565b60408051918252519081900360200190f35b6102d9610df7565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103135781810151838201526020016102fb565b50505050905090810190601f1680156103405780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610356610e17565b6040805160179290920b8252519081900360200190f35b610375610e3b565b6040805163ffffffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190f35b6103b6610e9c565b6040805160ff9092168252519081900360200190f35b610297600480360360408110156103e257600080fd5b506001600160a01b0381358116916020013516610ec0565b6102bf611148565b6102bf6111d5565b610297600480360360a081101561042057600080fd5b810190602081018135600160201b81111561043a57600080fd5b82018360208201111561044c57600080fd5b803590602001918460208302840111600160201b8311171561046d57600080fd5b919390929091602081019035600160201b81111561048a57600080fd5b82018360208201111561049c57600080fd5b803590602001918460208302840111600160201b831117156104bd57600080fd5b9193909260ff833516926001600160401b03602082013516929190606081019060400135600160201b8111156104f257600080fd5b82018360208201111561050457600080fd5b803590602001918460018302840111600160201b8311171561052557600080fd5b5090925090506111da565b6102bf611978565b6105ec6004803603604081101561054e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561057857600080fd5b82018360208201111561058a57600080fd5b803590602001918460018302840111600160201b831117156105ab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a00945050505050565b604080519115158252519081900360200190f35b610356611a28565b610610611a4c565b604080516001600160a01b039092168252519081900360200190f35b6102d9611a5b565b610297611ae3565b610297611b92565b61064c611c21565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610688578181015183820152602001610670565b505050509050019250505060405180910390f35b6106a4611c83565b6040805163ffffffff94851681529290931660208301526001600160801b0319168183015290519081900360600190f35b6102bf611ca3565b610297600480360360208110156106f357600080fd5b50356001600160a01b0316611d2b565b6102976004803603602081101561071957600080fd5b50356001600160a01b0316611df2565b610610611e69565b610739611e78565b604080516001600160a01b03909316835263ffffffff90911660208301528051918290030190f35b610769611eab565b604080516001600160501b039092168252519081900360200190f35b61061061207e565b6107b3600480360360208110156107a357600080fd5b50356001600160501b031661208d565b60405180866001600160501b03168152602001858152602001848152602001838152602001826001600160501b031681526020019550505050505060405180910390f35b6102976004803603604081101561080d57600080fd5b810190602081018135600160201b81111561082757600080fd5b82018360208201111561083957600080fd5b803590602001918460208302840111600160201b8311171561085a57600080fd5b919390929091602081019035600160201b81111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460208302840111600160201b831117156108aa57600080fd5b50909250905061212e565b610297600480360360208110156108cb57600080fd5b50356001600160a01b0316612331565b610297600480360360208110156108f157600080fd5b50356001600160a01b03166123f5565b6102976004803603602081101561091757600080fd5b50356001600160a01b031661244b565b6102bf6004803603602081101561093d57600080fd5b503561252c565b6102bf6004803603602081101561095a57600080fd5b50356125b5565b610297600480360360a081101561097757600080fd5b5063ffffffff81358116916020810135821691604082013581169160608101358216916080909101351661263e565b610297600480360360408110156109bc57600080fd5b506001600160a01b03813516906020013561276d565b610297600480360360808110156109e857600080fd5b810190602081018135600160201b811115610a0257600080fd5b820183602082011115610a1457600080fd5b803590602001918460018302840111600160201b83111715610a3557600080fd5b919390929091602081019035600160201b811115610a5257600080fd5b820183602082011115610a6457600080fd5b803590602001918460208302840111600160201b83111715610a8557600080fd5b919390929091602081019035600160201b811115610aa257600080fd5b820183602082011115610ab457600080fd5b803590602001918460208302840111600160201b83111715610ad557600080fd5b919350915035612a30565b6102bf61377e565b6105ec61380f565b610b1660048036036020811015610b0657600080fd5b50356001600160a01b0316613818565b6040805161ffff9092168252519081900360200190f35b610b356138c5565b604080516001600160801b0319909616865263ffffffff909416602086015260ff9092168484015260170b60608401526001600160401b03166080830152519081900360a00190f35b610610613975565b61029760048036036040811015610b9c57600080fd5b5080356001600160a01b0316906020013563ffffffff16613984565b61029760048036036040811015610bce57600080fd5b506001600160a01b0381358116916020013516613ab5565b61029760048036036020811015610bfc57600080fd5b50356001600160a01b0316613bf8565b61029760048036036020811015610c2257600080fd5b50356001600160a01b0316613c96565b6107b3613cec565b6000546001600160a01b03163314610c87576040805162461bcd60e51b81526020600482015260166024820152600080516020615132833981519152604482015290519081900360640190fd5b60315460ff1615610cc6576031805460ff191690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f53963890600090a15b565b6001600160a01b03811660009081526028602090815260408083208151808301909252805460ff808216845285948401916101009004166002811115610d0a57fe5b6002811115610d1557fe5b9052509050600081602001516002811115610d2c57fe5b1415610d3c576000915050610df2565b6040805160a08101825260025463ffffffff8082168352600160201b820481166020840152600160401b8204811693830193909352600160601b8104831660608301819052600160801b90910490921660808201528251909160009160019060059060ff16601f8110610dab57fe5b601091828204019190066002029054906101000a900461ffff160361ffff1602633b9aca0002905060016009846000015160ff16601f8110610de957fe5b01540301925050505b919050565b60606040518060600160405280602881526020016150e660289139905090565b7f000000000000000000000000000000000000000000000000000000000000000181565b6040805160a08101825260025463ffffffff808216808452600160201b8304821660208501819052600160401b84048316958501869052600160601b8404831660608601819052600160801b90940490921660809094018490529490939290565b7f000000000000000000000000000000000000000000000000000000000000000881565b6000546001600160a01b03163314610f0d576040805162461bcd60e51b81526020600482015260166024820152600080516020615132833981519152604482015290519081900360640190fd5b6003546001600160a01b03908116908316811415610f2b5750611144565b604080516370a0823160e01b815230600482015290516001600160a01b038516916370a08231916024808301926020929190829003018186803b158015610f7157600080fd5b505afa158015610f85573d6000803e3d6000fd5b505050506040513d6020811015610f9b57600080fd5b50610fa69050613d8b565b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ff557600080fd5b505afa158015611009573d6000803e3d6000fd5b505050506040513d602081101561101f57600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0386811660048301526024820184905291519293509084169163a9059cbb916044808201926020929091908290030181600087803b15801561107757600080fd5b505af115801561108b573d6000803e3d6000fd5b505050506040513d60208110156110a157600080fd5b50516110f4576040805162461bcd60e51b815260206004820152601f60248201527f7472616e736665722072656d61696e696e672066756e6473206661696c656400604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0386811691821790925560405190918416907f4966a50c93f855342ccf6c5c0d358b85b91335b2acedc7da0932f691f351711a90600090a350505b5050565b600061118b336000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0092505050565b6111c8576040805162461bcd60e51b81526020600482015260096024820152684e6f2061636365737360b81b604482015290519081900360640190fd5b6111d0614114565b905090565b600481565b868560ff8616601f831115611229576040805162461bcd60e51b815260206004820152601060248201526f746f6f206d616e79207369676e65727360801b604482015290519081900360640190fd5b6000811161127e576040805162461bcd60e51b815260206004820152601a60248201527f7468726573686f6c64206d75737420626520706f736974697665000000000000604482015290519081900360640190fd5b8183146112bc5760405162461bcd60e51b815260040180806020018281038252602481526020018061510e6024913960400191505060405180910390fd5b806003028311611313576040805162461bcd60e51b815260206004820181905260248201527f6661756c74792d6f7261636c65207468726573686f6c6420746f6f2068696768604482015290519081900360640190fd5b6000546001600160a01b03163314611360576040805162461bcd60e51b81526020600482015260166024820152600080516020615132833981519152604482015290519081900360640190fd5b6029541561145d57602980546000198101916000918390811061137f57fe5b6000918252602082200154602a80546001600160a01b03909216935090849081106113a657fe5b6000918252602090912001546001600160a01b031690506113c68161413d565b6001600160a01b03808316600090815260286020526040808220805461ffff199081169091559284168252902080549091169055602980548061140557fe5b600082815260209020810160001990810180546001600160a01b0319169055019055602a80548061143257fe5b600082815260209020810160001990810180546001600160a01b031916905501905550611360915050565b60005b8a8110156117b9576000602860008e8e8581811061147a57fe5b602090810292909201356001600160a01b031683525081019190915260400160002054610100900460ff1660028111156114b057fe5b14611502576040805162461bcd60e51b815260206004820152601760248201527f7265706561746564207369676e65722061646472657373000000000000000000604482015290519081900360640190fd5b6040805180820190915260ff8216815260016020820152602860008e8e8581811061152957fe5b602090810292909201356001600160a01b0316835250818101929092526040016000208251815460ff191660ff90911617808255918301519091829061ff00191661010083600281111561157957fe5b02179055506000915060079050818c8c8581811061159357fe5b6001600160a01b0360209182029390930135831684528301939093526040909101600020541691909114159050611605576040805162461bcd60e51b81526020600482015260116024820152701c185e5959481b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6000602860008c8c8581811061161757fe5b602090810292909201356001600160a01b031683525081019190915260400160002054610100900460ff16600281111561164d57fe5b1461169f576040805162461bcd60e51b815260206004820152601c60248201527f7265706561746564207472616e736d6974746572206164647265737300000000604482015290519081900360640190fd5b6040805180820190915260ff8216815260026020820152602860008c8c858181106116c657fe5b602090810292909201356001600160a01b0316835250818101929092526040016000208251815460ff191660ff90911617808255918301519091829061ff00191661010083600281111561171657fe5b021790555090505060298c8c8381811061172c57fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b039590920293909301359390931692909217905550602a8a8a8381811061177657fe5b835460018181018655600095865260209586902090910180546001600160a01b0319166001600160a01b0396909302949094013594909416179091555001611460565b50602b805460ff8916600160a81b0260ff60a81b19909116179055602d80544363ffffffff908116600160201b90810267ffffffff0000000019841617808316600101831663ffffffff1990911617938490559091048116911661182530828f8f8f8f8f8f8f8f614325565b602b60000160006101000a8154816001600160801b03021916908360801c02179055506000602b60000160106101000a81548164ffffffffff021916908364ffffffffff1602179055507f25d719d88a4512dd76c7442b910a83360845505894eb444ef299409e180f8fb982828f8f8f8f8f8f8f8f604051808b63ffffffff1681526020018a6001600160401b0316815260200180602001806020018760ff168152602001866001600160401b031681526020018060200184810384528c8c82818152602001925060200280828437600083820152601f01601f191690910185810384528a8152602090810191508b908b0280828437600083820152601f01601f191690910185810383528681526020019050868680828437600083820152604051601f909101601f19169092018290039f50909d5050505050505050505050505050a150505050505050505050505050565b60006119bb336000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0092505050565b6119f8576040805162461bcd60e51b81526020600482015260096024820152684e6f2061636365737360b81b604482015290519081900360640190fd5b6111d0614427565b6000611a0c838361443a565b80611a1f57506001600160a01b03831632145b90505b92915050565b7f00000000000000000000ffffffffffffffffffffffffffffffffffffffffffff81565b602f546001600160a01b031690565b6060611a9e336000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0092505050565b611adb576040805162461bcd60e51b81526020600482015260096024820152684e6f2061636365737360b81b604482015290519081900360640190fd5b6111d061446a565b6001546001600160a01b03163314611b3b576040805162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b604482015290519081900360640190fd5b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000546001600160a01b03163314611bdf576040805162461bcd60e51b81526020600482015260166024820152600080516020615132833981519152604482015290519081900360640190fd5b60315460ff16610cc6576031805460ff191660011790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c348090600090a1565b6060602a805480602002602001604051908101604052809291908181526020018280548015611c7957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c5b575b5050505050905090565b602d54602b5463ffffffff80831692600160201b9004169060801b909192565b6000611ce6336000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0092505050565b611d23576040805162461bcd60e51b81526020600482015260096024820152684e6f2061636365737360b81b604482015290519081900360640190fd5b6111d06144f7565b6000546001600160a01b03163314611d78576040805162461bcd60e51b81526020600482015260166024820152600080516020615132833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526032602052604090205460ff1615611def576001600160a01b038116600081815260326020908152604091829020805460ff19169055815192835290517f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d19281900390910190a15b50565b6001600160a01b03818116600090815260076020526040902054163314611e60576040805162461bcd60e51b815260206004820152601760248201527f4f6e6c792070617965652063616e207769746864726177000000000000000000604482015290519081900360640190fd5b611def8161413d565b6000546001600160a01b031681565b60408051808201909152602e546001600160a01b038116808352600160a01b90910463ffffffff16602090920182905291565b600080546001600160a01b0316331480611f6e5750602f5460408051630d629b5f60e31b815233600482018181526024830193845236604484018190526001600160a01b0390951694636b14daf894929360009391929190606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b158015611f4157600080fd5b505afa158015611f55573d6000803e3d6000fd5b505050506040513d6020811015611f6b57600080fd5b50515b611fbf576040805162461bcd60e51b815260206004820152601d60248201527f4f6e6c79206f776e6572267265717565737465722063616e2063616c6c000000604482015290519081900360640190fd5b6040805160808082018352602b549081901b6001600160801b031916808352600160801b820464ffffffffff8116602080860191909152600160a81b840460ff90811686880152600160b01b90940463ffffffff9081166060808801919091528751948552600884901c909116918401919091529216818501529251919233927f3ea16a923ff4b1df6526e854c9e3a995c43385d70e73359e10623c74f0b52037929181900390910190a2806060015160010163ffffffff1691505090565b6004546001600160a01b031690565b60008060008060006120d6336000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0092505050565b612113576040805162461bcd60e51b81526020600482015260096024820152684e6f2061636365737360b81b604482015290519081900360640190fd5b61211c86614529565b939a9299509097509550909350915050565b6000546001600160a01b0316331461217b576040805162461bcd60e51b81526020600482015260166024820152600080516020615132833981519152604482015290519081900360640190fd5b8281146121cf576040805162461bcd60e51b815260206004820181905260248201527f7472616e736d6974746572732e73697a6520213d207061796565732e73697a65604482015290519081900360640190fd5b60005b8381101561232a5760008585838181106121e857fe5b905060200201356001600160a01b03169050600084848481811061220857fe5b6001600160a01b0385811660009081526007602090815260409091205492029390930135831693509091169050801580806122545750826001600160a01b0316826001600160a01b0316145b612299576040805162461bcd60e51b81526020600482015260116024820152701c185e595948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b03848116600090815260076020526040902080546001600160a01b0319168583169081179091559083161461231a57826001600160a01b0316826001600160a01b0316856001600160a01b03167f78af32efdcad432315431e9b03d27e6cd98fb79c405fdc5af7c1714d9c0f75b360405160405180910390a45b5050600190920191506121d29050565b5050505050565b6000546001600160a01b0316331461237e576040805162461bcd60e51b81526020600482015260166024820152600080516020615132833981519152604482015290519081900360640190fd5b602f546001600160a01b03908116908216811461114457602f80546001600160a01b0319166001600160a01b03848116918217909255604080519284168352602083019190915280517f27b89aede8b560578baaa25ee5ce3852c5eecad1e114b941bbd89e1eb4bae6349281900390910190a15050565b6000546001600160a01b03163314612442576040805162461bcd60e51b81526020600482015260166024820152600080516020615132833981519152604482015290519081900360640190fd5b611def8161464d565b6001600160a01b038181166000908152600860205260409020541633146124b9576040805162461bcd60e51b815260206004820152601f60248201527f6f6e6c792070726f706f736564207061796565732063616e2061636365707400604482015290519081900360640190fd5b6001600160a01b0381811660008181526007602090815260408083208054336001600160a01b031980831682179093556008909452828520805490921690915590519416939092849290917f78af32efdcad432315431e9b03d27e6cd98fb79c405fdc5af7c1714d9c0f75b39190a45050565b600061256f336000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0092505050565b6125ac576040805162461bcd60e51b81526020600482015260096024820152684e6f2061636365737360b81b604482015290519081900360640190fd5b611a22826146c8565b60006125f8336000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0092505050565b612635576040805162461bcd60e51b81526020600482015260096024820152684e6f2061636365737360b81b604482015290519081900360640190fd5b611a22826146fe565b6004546000546001600160a01b0391821691163314806126ff575060408051630d629b5f60e31b815233600482018181526024830193845236604484018190526001600160a01b03861694636b14daf8946000939190606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b1580156126d257600080fd5b505afa1580156126e6573d6000803e3d6000fd5b505050506040513d60208110156126fc57600080fd5b50515b612750576040805162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722662696c6c696e6741646d696e2063616e2063616c6c604482015290519081900360640190fd5b612758613d8b565b612765868686868661473d565b505050505050565b6000546001600160a01b031633148061282e57506004805460408051630d629b5f60e31b8152339381018481526024820192835236604483018190526001600160a01b0390941694636b14daf8949093600093919291606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561280157600080fd5b505afa158015612815573d6000803e3d6000fd5b505050506040513d602081101561282b57600080fd5b50515b61287f576040805162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722662696c6c696e6741646d696e2063616e2063616c6c604482015290519081900360640190fd5b6000612889614826565b600354604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156128da57600080fd5b505afa1580156128ee573d6000803e3d6000fd5b505050506040513d602081101561290457600080fd5b5051905081811015612954576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015290519081900360640190fd5b6003546001600160a01b031663a9059cbb85612972858503876149da565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156129b857600080fd5b505af11580156129cc573d6000803e3d6000fd5b505050506040513d60208110156129e257600080fd5b5051612a2a576040805162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b50505050565b60005a9050612a438888888888886149f1565b3614612a96576040805162461bcd60e51b815260206004820152601960248201527f7472616e736d6974206d65737361676520746f6f206c6f6e6700000000000000604482015290519081900360640190fd5b612a9e614f7b565b6040805160808082018352602b549081901b6001600160801b0319168252600160801b810464ffffffffff166020830152600160a81b810460ff1692820192909252600160b01b90910463ffffffff166060808301919091529082526000908a908a90811015612b0d57600080fd5b813591602081013591810190606081016040820135600160201b811115612b3357600080fd5b820183602082011115612b4557600080fd5b803590602001918460208302840111600160201b83111715612b6657600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060408801525050506080840182905283515190925060589190911b906001600160801b0319808316911614612c0d576040805162461bcd60e51b81526020600482015260156024820152740c6dedcccd2ce88d2cecae6e840dad2e6dac2e8c6d605b1b604482015290519081900360640190fd5b608083015183516020015164ffffffffff808316911610612c64576040805162461bcd60e51b815260206004820152600c60248201526b1cdd185b19481c995c1bdc9d60a21b604482015290519081900360640190fd5b83516040015160ff168911612cb8576040805162461bcd60e51b81526020600482015260156024820152746e6f7420656e6f756768207369676e61747572657360581b604482015290519081900360640190fd5b601f891115612d04576040805162461bcd60e51b8152602060048201526013602482015272746f6f206d616e79207369676e61747572657360681b604482015290519081900360640190fd5b868914612d58576040805162461bcd60e51b815260206004820152601e60248201527f7369676e617475726573206f7574206f6620726567697374726174696f6e0000604482015290519081900360640190fd5b601f8460400151511115612db3576040805162461bcd60e51b815260206004820152601e60248201527f6e756d206f62736572766174696f6e73206f7574206f6620626f756e64730000604482015290519081900360640190fd5b83600001516040015160020260ff1684604001515111612e1a576040805162461bcd60e51b815260206004820152601e60248201527f746f6f206665772076616c75657320746f207472757374206d656469616e0000604482015290519081900360640190fd5b886001600160401b0381118015612e3057600080fd5b506040519080825280601f01601f191660200182016040528015612e5b576020820181803683370190505b50606085015260005b60ff81168a1115612eb457868160ff1660208110612e7e57fe5b1a60f81b85606001518260ff1681518110612e9557fe5b60200101906001600160f81b031916908160001a905350600101612e64565b508360400151516001600160401b0381118015612ed057600080fd5b506040519080825280601f01601f191660200182016040528015612efb576020820181803683370190505b506020850152612f09614faf565b60005b8560400151518160ff161015612ff7576000858260ff1660208110612f2d57fe5b1a90508281601f8110612f3c57fe5b602002015115612f93576040805162461bcd60e51b815260206004820152601760248201527f6f6273657276657220696e646578207265706561746564000000000000000000604482015290519081900360640190fd5b6001838260ff16601f8110612fa457fe5b91151560209283029190910152869060ff8416908110612fc057fe5b1a60f81b87602001518360ff1681518110612fd757fe5b60200101906001600160f81b031916908160001a90535050600101612f0c565b503360009081526028602090815260408083208151808301909252805460ff8082168452929391929184019161010090910416600281111561303557fe5b600281111561304057fe5b905250905060028160200151600281111561305757fe5b14801561308b5750602a816000015160ff168154811061307357fe5b6000918252602090912001546001600160a01b031633145b6130dc576040805162461bcd60e51b815260206004820152601860248201527f756e617574686f72697a6564207472616e736d69747465720000000000000000604482015290519081900360640190fd5b5050835164ffffffffff90911660209091015250506040516000908a908a90808383808284376040519201829003909120945061311d9350614faf92505050565b613125614fce565b60005b898110156133155760006001858760600151848151811061314557fe5b60209101015160f81c601b018e8e8681811061315d57fe5b905060200201358d8d8781811061317057fe5b9050602002013560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156131cb573d6000803e3d6000fd5b505060408051601f198101516001600160a01b03811660009081526028602090815290849020838501909452835460ff8082168552929650929450840191610100900416600281111561321a57fe5b600281111561322557fe5b905250925060018360200151600281111561323c57fe5b1461328e576040805162461bcd60e51b815260206004820152601e60248201527f61646472657373206e6f7420617574686f72697a656420746f207369676e0000604482015290519081900360640190fd5b8251849060ff16601f811061329f57fe5b6020020151156132ed576040805162461bcd60e51b81526020600482015260146024820152736e6f6e2d756e69717565207369676e617475726560601b604482015290519081900360640190fd5b600184846000015160ff16601f811061330257fe5b9115156020909202015250600101613128565b5050505060005b6001826040015151038110156133c65760008260400151826001018151811061334157fe5b602002602001015160170b8360400151838151811061335c57fe5b602002602001015160170b13159050806133bd576040805162461bcd60e51b815260206004820152601760248201527f6f62736572766174696f6e73206e6f7420736f72746564000000000000000000604482015290519081900360640190fd5b5060010161331c565b506040810151805160009190600281049081106133df57fe5b602002602001015190508060170b7f000000000000000000000000000000000000000000000000000000000000000160170b1315801561344557507f00000000000000000000ffffffffffffffffffffffffffffffffffffffffffff60170b8160170b13155b613496576040805162461bcd60e51b815260206004820152601e60248201527f6d656469616e206973206f7574206f66206d696e2d6d61782072616e67650000604482015290519081900360640190fd5b81516060908101805163ffffffff60019091018116909152604080518082018252601785810b8083526001600160401b0342811660208086019182528a5189015188166000908152602c8252878120965187549351909416600160c01b029390950b6001600160c01b039081166001600160c01b03199093169290921790911691909117909355875186015184890151848a01516080808c015188519586523386890181905291860181905260a0988601898152845199870199909952835194909916997ff6a97944f31ea060dfde0566e4167c1a1082551e64b60ecb14d599a9d023d451998c999298949793969095909492939185019260c086019289820192909102908190849084905b838110156135ba5781810151838201526020016135a2565b50505050905001838103825285818151815260200191508051906020019080838360005b838110156135f65781810151838201526020016135de565b50505050905090810190601f1680156136235780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a281516060015160408051428152905160009263ffffffff16917f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271919081900360200190a381600001516060015163ffffffff168160170b7f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f426040518082815260200191505060405180910390a36136d88260000151606001518260170b614a09565b5080518051602b8054602084015160408501516060909501516001600160801b031990921660809490941c9390931764ffffffffff60801b1916600160801b64ffffffffff909416939093029290921760ff60a81b1916600160a81b60ff909416939093029290921763ffffffff60b01b1916600160b01b63ffffffff9283160217909155821061376557fe5b613773828260200151614b0f565b505050505050505050565b600354604080516370a0823160e01b8152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b1580156137ce57600080fd5b505afa1580156137e2573d6000803e3d6000fd5b505050506040513d60208110156137f857600080fd5b505190506000613806614826565b90910391505090565b60315460ff1681565b6001600160a01b03811660009081526028602090815260408083208151808301909252805460ff80821684528594840191610100900416600281111561385a57fe5b600281111561386557fe5b905250905060008160200151600281111561387c57fe5b141561388c576000915050610df2565b60016005826000015160ff16601f81106138a257fe5b601091828204019190066002029054906101000a900461ffff1603915050919050565b600080808080333214613916576040805162461bcd60e51b81526020600482015260146024820152734f6e6c792063616c6c61626c6520627920454f4160601b604482015290519081900360640190fd5b5050602b5463ffffffff600160b01b820481166000908152602c6020526040902054608083901b96600160801b909304600881901c909216955064ffffffffff9091169350601781900b9250600160c01b90046001600160401b031690565b6003546001600160a01b031690565b6000546001600160a01b031633146139d1576040805162461bcd60e51b81526020600482015260166024820152600080516020615132833981519152604482015290519081900360640190fd5b60408051808201909152602e546001600160a01b03808216808452600160a01b90920463ffffffff1660208401528416141580613a1e57508163ffffffff16816020015163ffffffff1614155b15613ab0576040805180820182526001600160a01b0385811680835263ffffffff8681166020948501819052602e80546001600160a01b031916841763ffffffff60a01b1916600160a01b8302179055865187860151875193168352948201528451919493909216927fb04e3a37abe9c0fcdfebdeae019a8e2b12ddf53f5d55ffb0caccc1bedaca1541928290030190a35b505050565b6001600160a01b03828116600090815260076020526040902054163314613b23576040805162461bcd60e51b815260206004820152601d60248201527f6f6e6c792063757272656e742070617965652063616e20757064617465000000604482015290519081900360640190fd5b336001600160a01b0382161415613b81576040805162461bcd60e51b815260206004820152601760248201527f63616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015290519081900360640190fd5b6001600160a01b03808316600090815260086020526040902080548383166001600160a01b031982168117909255909116908114613ab0576040516001600160a01b038084169133918616907f84f7c7c80bb8ed2279b4aab5f61cd05e6374073d38f46d7f32de8c30e9e3836790600090a4505050565b6000546001600160a01b03163314613c45576040805162461bcd60e51b81526020600482015260166024820152600080516020615132833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000546001600160a01b03163314613ce3576040805162461bcd60e51b81526020600482015260166024820152600080516020615132833981519152604482015290519081900360640190fd5b611def81614d37565b6000806000806000613d35336000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0092505050565b613d72576040805162461bcd60e51b81526020600482015260096024820152684e6f2061636365737360b81b604482015290519081900360640190fd5b613d7a614dae565b945094509450945094509091929394565b6040805160a08101825260025463ffffffff8082168352600160201b820481166020840152600160401b8204811683850152600160601b820481166060840152600160801b90910416608082015260035482516103e081019384905291926001600160a01b0390911691600091600590601f908285855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411613e02575050604080516103e0810191829052959650600095945060099350601f9250905082845b815481526020019060010190808311613e5c57505050505090506000602a805480602002602001604051908101604052809291908181526020018280548015613ece57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613eb0575b5050505050905060005b81518110156140f857600060018483601f8110613ef157fe5b6020020151039050600060018684601f8110613f0957fe5b60200201510361ffff169050600082896060015163ffffffff168302633b9aca000201905060008111156140ed57600060076000878781518110613f4957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050886001600160a01b031663a9059cbb82846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613fde57600080fd5b505af1158015613ff2573d6000803e3d6000fd5b505050506040513d602081101561400857600080fd5b5051614050576040805162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b60018886601f811061405e57fe5b61ffff909216602092909202015260018786601f811061407a57fe5b602002018181525050886001600160a01b0316816001600160a01b03168787815181106140a357fe5b60200260200101516001600160a01b03167fd0b1dac935d85bd54cf0a33b0d41d39f8cf53a968465fc7ea2377526b8ac712c856040518082815260200191505060405180910390a4505b505050600101613ed8565b50614106600584601f614fe5565b50612765600983601f61507b565b602b54600160b01b900463ffffffff166000908152602c6020526040902054601790810b900b90565b6001600160a01b03811660009081526028602090815260408083208151808301909252805460ff8082168452929391929184019161010090910416600281111561418357fe5b600281111561418e57fe5b9052509050600061419e83610cc8565b90508015613ab0576001600160a01b03808416600090815260076020908152604080832054600354825163a9059cbb60e01b8152918616600483018190526024830188905292519295169363a9059cbb9360448084019491939192918390030190829087803b15801561421057600080fd5b505af1158015614224573d6000803e3d6000fd5b505050506040513d602081101561423a57600080fd5b5051614282576040805162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b60016005846000015160ff16601f811061429857fe5b601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060016009846000015160ff16601f81106142d357fe5b01556003546040805184815290516001600160a01b039283169284811692908816917fd0b1dac935d85bd54cf0a33b0d41d39f8cf53a968465fc7ea2377526b8ac712c9181900360200190a450505050565b60008a8a8a8a8a8a8a8a8a8a604051602001808b6001600160a01b031681526020018a6001600160401b0316815260200180602001806020018760ff168152602001866001600160401b031681526020018060200184810384528c8c82818152602001925060200280828437600083820152601f01601f191690910185810384528a8152602090810191508b908b0280828437600083820152601f01601f191690910185810383528681526020019050868680828437600081840152601f19601f8201169050808301925050509d50505050505050505050505050506040516020818303038152906040528051906020012090509a9950505050505050505050565b602b54600160b01b900463ffffffff1690565b6001600160a01b03821660009081526032602052604081205460ff1680611a1f57505060315460ff161592915050565b60308054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015611c795780601f106144cb57610100808354040283529160200191611c79565b820191906000526020600020905b8154815290600101906020018083116144d957509395945050505050565b602b54600160b01b900463ffffffff166000908152602c6020526040902054600160c01b90046001600160401b031690565b600080600080600063ffffffff866001600160501b031611156040518060400160405280600f81526020016e139bc819185d18481c1c995cd95b9d608a1b815250906145f35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145b85781810151838201526020016145a0565b50505050905090810190601f1680156145e55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5050505063ffffffff83166000908152602c6020908152604091829020825180840190935254601781810b810b810b808552600160c01b9092046001600160401b031693909201839052949594900b939092508291508490565b6001600160a01b03811660009081526032602052604090205460ff16611def576001600160a01b038116600081815260326020908152604091829020805460ff19166001179055815192835290517f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49281900390910190a150565b600063ffffffff8211156146de57506000610df2565b5063ffffffff166000908152602c6020526040902054601790810b900b90565b600063ffffffff82111561471457506000610df2565b5063ffffffff166000908152602c6020526040902054600160c01b90046001600160401b031690565b6040805160a0808201835263ffffffff88811680845288821660208086018290528984168688018190528985166060808901829052958a1660809889018190526002805463ffffffff1916871767ffffffff000000001916600160201b8702176bffffffff00000000000000001916600160401b85021763ffffffff60601b1916600160601b84021763ffffffff60801b1916600160801b830217905589519586529285019390935283880152928201529283015291517fd0d9486a2c673e2a4b57fc82e4c8a556b3e2b82dd5db07e2c04a920ca0f469b6929181900390910190a15050505050565b604080516103e0810191829052600091829190600590601f908285855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116148435790505050505050905060005b601f8110156148b35760018282601f811061489c57fe5b60200201510361ffff169290920191600101614885565b506040805160a08101825260025463ffffffff8082168352600160201b82048116602080850191909152600160401b8304821684860152600160601b8304821660608501819052600160801b9093049091166080840152602a805485518184028101840190965280865296909202633b9aca000295929360009390929183018282801561496957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161494b575b5050604080516103e0810191829052949550600094935060099250601f915082845b81548152602001906001019080831161498b575050505050905060005b82518110156149d25760018282601f81106149bf57fe5b60200201510395909501946001016149a8565b505050505090565b6000818310156149eb575081611a22565b50919050565b602083810286019082020160e4019695505050505050565b60408051808201909152602e546001600160a01b038116808352600160a01b90910463ffffffff166020830152614a405750611144565b600019830163ffffffff8181166000818152602c60209081526040918290205486820151875184516024810196909652601792830b90920b604486018190528a8716606487015260848087018b90528551808803909101815260a4909601909452918401805163beed9b5160e01b6001600160e01b039091161790529193614acb9391169190614e09565b61232a576040805162461bcd60e51b815260206004820152601060248201526f696e73756666696369656e742067617360801b604482015290519081900360640190fd5b3360009081526028602090815260408083208151808301909252805460ff80821684529293919291840191610100909104166002811115614b4c57fe5b6002811115614b5757fe5b9052506040805160a08101825260025463ffffffff8082168352600160201b820481166020840152600160401b8204811683850152600160601b820481166060840152600160801b90910416608082015281516103e081019283905292935091614c0b91859190600590601f90826000855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411614bc95790505050505050614e45565b614c1990600590601f614fe5565b50600282602001516002811115614c2c57fe5b14614c7e576040805162461bcd60e51b815260206004820181905260248201527f73656e7420627920756e64657369676e61746564207472616e736d6974746572604482015290519081900360640190fd5b6000614ca5633b9aca003a04836020015163ffffffff16846000015163ffffffff16614eba565b90506010360260005a90506000614cc48863ffffffff16858585614ee0565b6001600160801b031690506000620f4240866040015163ffffffff16830281614ce957fe5b049050856080015163ffffffff16633b9aca0002816009896000015160ff16601f8110614d1257fe5b015401016009886000015160ff16601f8110614d2a57fe5b0155505050505050505050565b6004546001600160a01b03908116908216811461114457600480546001600160a01b0319166001600160a01b03848116918217909255604080519284168352602083019190915280517f793cb73064f3c8cde7e187ae515511e6e56d1ee89bf08b82fa60fb70f8d489129281900390910190a15050565b602b54600160b01b900463ffffffff166000818152602c6020908152604091829020825180840190935254601781810b810b810b808552600160c01b9092046001600160401b031693909201839052929392900b9181908490565b60005a6113888110614e3d5761138881039050846040820482031115614e3d576000808451602086016000888af150600191505b509392505050565b614e4d614faf565b60005b8351811015614eb2576000848281518110614e6757fe5b016020015160f81c9050614e8c8482601f8110614e8057fe5b60200201516001614f63565b848260ff16601f8110614e9b57fe5b61ffff909216602092909202015250600101614e50565b509092915050565b60008383811015614ecd57600285850304015b614ed781846149da565b95945050505050565b600081851015614f37576040805162461bcd60e51b815260206004820181905260248201527f6761734c6566742063616e6e6f742065786365656420696e697469616c476173604482015290519081900360640190fd5b818503830161179301633b9aca00858202026001600160801b038110614f5957fe5b9695505050505050565b6000611a1f8261ffff168461ffff160161ffff6149da565b6040518060a00160405280614f8e6150a9565b81526060602082018190526040820181905280820152600060809091015290565b604051806103e00160405280601f906020820280368337509192915050565b604080518082019091526000808252602082015290565b60028301918390821561506b5791602002820160005b8382111561503b57835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302614ffb565b80156150695782816101000a81549061ffff021916905560020160208160010104928301926001030261503b565b505b506150779291506150d0565b5090565b82601f810192821561506b579160200282015b8281111561506b57825182559160200191906001019061508e565b60408051608081018252600080825260208201819052918101829052606081019190915290565b5b8082111561507757600081556001016150d156fe416363657373436f6e74726f6c6c65644f6666636861696e41676772656761746f7220342e302e306f7261636c6520616464726573736573206f7574206f6620726567697374726174696f6e4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000a26469706673582212202938f61342c36109a44868dd1c9a82c61c0c3b90ed86f8f0bd641bc4b1a217ee64736f6c63430007060033" + }, + { + "address": "0xc575fa4034ed81175647b6ac7cd78845253968d6", + "nonce": 118, + "balance": "0x000000000000000000000000000000000000000000000000005f897fb644a2c7", + "code": "0x" + }, + { + "address": "0xaad094f6a75a14417d39f04e690fc216f080a41a", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106103ae5760003560e01c80637ecebe00116101f4578063b0fab0bc1161011a578063e065608b116100ad578063f887ea401161007c578063f887ea401461076e578063faa24f0714610776578063fc0c546a1461077e578063feb56b1514610786576103ae565b8063e065608b1461071f578063e46e705814610732578063ea89e2aa1461073a578063f6cd35ee1461075b576103ae565b8063be310294116100e9578063be310294146106de578063cdfed0ab146106f1578063d505accf146106f9578063dd62ed3e1461070c576103ae565b8063b0fab0bc1461069d578063b30daeac146106b0578063b633b364146106c3578063b6addec7146106cb576103ae565b806399a22d6811610192578063a9059cbb11610161578063a9059cbb1461065c578063a985565f1461066f578063abe685cd14610682578063ac2cc36b1461068a576103ae565b806399a22d68146106125780639bb811191461061a578063a138ed6b14610622578063a457c2d714610649576103ae565b80638bd86d0a116101ce5780638bd86d0a146105dc578063902b8ab7146105ef57806395d89b411461060257806396c82e571461060a576103ae565b80637ecebe00146105ae5780637fb65265146105c1578063857749b0146105d4576103ae565b806328f079c2116102d957806340c10f191161027757806365152f2b1161024657806365152f2b1461056d57806369fe0e2d1461057557806370a08231146105885780637298a5dc1461059b576103ae565b806340c10f1914610521578063476efe40146105345780634b5cacbc1461054757806364c5f02d1461055a576103ae565b806336448777116102b357806336448777146104f65780633644e515146104fe57806339509351146105065780633e0dc34e14610519576103ae565b806328f079c2146104de57806330adf81f146104e6578063313ce567146104ee576103ae565b8063159f6add116103515780631e8e51da116103205780631e8e51da146104a657806320d6bc75146104ae57806323b872dd146104c357806327f92376146104d6576103ae565b8063159f6add14610456578063163ef4901461047657806318160ddd1461047e5780631b7319b614610486576103ae565b8063095ea7b31161038d578063095ea7b3146104065780630986b61a146104265780630a22d68c1461044657806315770f921461044e576103ae565b80621edfab146103b357806306fdde03146103d157806308e9d8c2146103e6575b600080fd5b6103bb61078e565b6040516103c89190613b9e565b60405180910390f35b6103d961079d565b6040516103c89190613d14565b6103f96103f43660046138d4565b61082b565b6040516103c89190614295565b6104196104143660046136c6565b610998565b6040516103c89190613c9b565b6104396104343660046136ef565b6109af565b6040516103c89190613d0b565b610439610b23565b610439610b29565b6104696104643660046138d4565b610b2f565b6040516103c89190614236565b610439610c10565b610439610c16565b610499610494366004613a31565b610c1c565b6040516103c891906142ac565b610439610fc2565b6104c16104bc366004613b38565b610fc8565b005b6104196104d136600461361a565b6112ce565b610419611362565b61041961136b565b61043961137a565b61043961139e565b6104396113a4565b6104396113aa565b6104196105143660046136c6565b6113b0565b6104396113eb565b61043961052f3660046136c6565b61140f565b6104c16105423660046135ce565b6114bd565b6104c16105553660046135ce565b61158a565b6104396105683660046138d4565b61164e565b61043961166b565b6104c1610583366004613b6a565b611671565b6104396105963660046135ce565b611710565b6104c16105a93660046139a1565b611722565b6104396105bc3660046135ce565b61188c565b6104c16105cf3660046137cb565b61189e565b6104396118ef565b6104c16105ea3660046138d4565b6118f5565b6104396105fd3660046138ef565b61197d565b6103d9611b72565b610439611bcc565b610419611bd2565b610439611be0565b610635610630366004613b6a565b611be6565b6040516103c8989796959493929190613ca6565b6104196106573660046136c6565b611c44565b61041961066a3660046136c6565b611c93565b6104c161067d366004613b06565b611ca0565b610439611d66565b6104c16106983660046137cb565b611d6c565b6104396106ab36600461372a565b611df2565b6104c16106be3660046139e4565b611fad565b610419612101565b6104c16106d9366004613a93565b61210a565b6104c16106ec3660046135ce565b612263565b610439612323565b6104c1610707366004613655565b612329565b61043961071a3660046135e8565b612528565b6104c161072d366004613803565b612545565b610439612638565b61074d610748366004613b38565b61263e565b6040516103c89291906143c2565b610439610769366004613b6a565b61276e565b6103bb612784565b6104396127a8565b6103bb6127ae565b6104396127d2565b6014546001600160a01b031681565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108235780601f106107f857610100808354040283529160200191610823565b820191906000526020600020905b81548152906001019060200180831161080657829003601f168201915b505050505081565b61083361350a565b60026008541415610879576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146108cf5760405162461bcd60e51b81526004016108c6906140c6565b60405180910390fd5b60006108db8484612853565b805490915060ff1615156001146109045760405162461bcd60e51b81526004016108c690613fc1565b60058101546004820154610917916128f0565b6004820155600f546002820154600e5461093c9291610936919061294a565b906129a3565b6020830181905260058201805480855260009091556040517f6939f93e3f21cf1362eb17155b740277de5687dae9a83a85909fd71da95944e7926109849288928892906143a1565b60405180910390a150600160085592915050565b60006109a5338484612a0a565b5060015b92915050565b6000600260085414156109f7576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75901614610a445760405162461bcd60e51b81526004016108c6906140c6565b6001600160a01b038416610a6a5760405162461bcd60e51b81526004016108c690613f8a565b6015546000610a7882612a6c565b905080851115610a86578094505b610a908686612aaa565b9250610a9c82846127f6565b6015556000610aaa84612b83565b9050610ad77f000000000000000000000000224d8fd7ab6ad4c6eb4611ce56ef35dec2277f038683612baf565b7f2125a70154569bd1686edd3cf981bb23dea7c1fa1637909dbb3c9a967cb0c2f287878688604051610b0c9493929190613bec565b60405180910390a150506001600855509392505050565b60115481565b600e5481565b610b37613524565b61ffff83166000908152600a60209081526040808320858452909152812054600980549091908110610b6557fe5b60009182526020918290206040805161010080820183526007909402909201805460ff81161515845261ffff94900484169483018590526001810154918301919091526002810154606083015260038101546080830152600481015460a0830152600581015460c08301526006015460e082015292508516148015610bed5750828160400151145b610c095760405162461bcd60e51b81526004016108c690613d97565b9392505050565b60095490565b60045481565b610c2461356f565b60026008541415610c6a576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75901614610cb75760405162461bcd60e51b81526004016108c6906140c6565b600d5460ff1615610cda5760405162461bcd60e51b81526004016108c6906141ff565b6000610ce68888612853565b805490915060ff161515600114610d0f5760405162461bcd60e51b81526004016108c690613fc1565b6000610d1a86612cf3565b90506000610d2786612cf3565b90506000601460009054906101000a90046001600160a01b03166001600160a01b0316631ab624307f000000000000000000000000000000000000000000000000000000000000000d8c8e8d886040518663ffffffff1660e01b8152600401610d949594939291906143d0565b60c060405180830381600087803b158015610dae57600080fd5b505af1158015610dc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de69190613861565b9050610e0181604001516013546127f690919063ffffffff16565b601355606081015160808201516020830151610e2b9291610e2591829088906127f6565b906127f6565b80825260408201518391610e3e916128f0565b1015610e5c5760405162461bcd60e51b81526004016108c690614182565b610e818160400151610e7b8360600151866127f690919063ffffffff16565b906128f0565b60a0820181905260038501541015610eab5760405162461bcd60e51b81526004016108c69061414b565b60a08101516003850154610ebe916127f6565b60038501558515610eee57610ee68160400151610e7b856015546128f090919063ffffffff16565b601555610f0d565b604081015115610f0d576040810151601554610f09916128f0565b6015555b60165460ff161580610f3d5750610f37612710610936601754600e5461294a90919063ffffffff16565b60155410155b15610f5657601654610f5690610100900460ff16612d1f565b7f34660fc8af304464529f48a778e03d03e4d34bcd5f9b6f0cfbf3cd238c642f7f8b8b8b84600001518560400151866020015187608001518860600151604051610fa7989796959493929190614322565b60405180910390a160016008559a9950505050505050505050565b60155481565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146110105760405162461bcd60e51b81526004016108c6906140c6565b60005b6009548110156110de5760006009828154811061102c57fe5b600091825260208083206040805161010080820183526007909502909201805460ff81161515845261ffff95900485169383018490526001810154918301919091526002810154606083015260038101546080830152600481015460a0830152600581015460c08301526006015460e082015293509087161480156110b45750848260400151145b905080156110d45760405162461bcd60e51b81526004016108c69061405c565b5050600101611013565b50600f546110ec90826128f0565b600f556009805461ffff8581166000818152600a602090815260408083208984528252808320869055805161010080820183528482529281019485528082018a8152606082018a81526080830186815260a0840187815260c0850188815260e0860189815260018d018e559c90985293517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af6007909b029a8b018054995160ff19909a169115159190911762ffff001916989099169095029690961790965594517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b087015592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b1860155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b285015591517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b384015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b483015591517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b590910155517f8fb3b21a941c2361df46475f9ae2f7b5dac5de7bd085fa22415ec0bb30c77e22906112c190859085908590614385565b60405180910390a1505050565b6001600160a01b03831660009081526006602090815260408083203384529091528120546000191461134d576001600160a01b038416600090815260066020908152604080832033845290915290205461132890836127f6565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b611358848484613111565b5060019392505050565b60165460ff1681565b60165462010000900460ff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60035481565b60185481565b60025481565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916109a59185906113e690866128f0565b612a0a565b7f000000000000000000000000000000000000000000000000000000000000000d81565b600060026008541415611457576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146114a45760405162461bcd60e51b81526004016108c6906140c6565b6114b183836001806131bf565b60016008559392505050565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146115055760405162461bcd60e51b81526004016108c6906140c6565b6012541561158757600061151a601254612b83565b6000601255905061154c7f000000000000000000000000224d8fd7ab6ad4c6eb4611ce56ef35dec2277f038383612baf565b7f87b3b2749102aa96f2d08396e34cd47673e57148af9cfff965d99bc0378a87dc828260405161157d929190613bb2565b60405180910390a1505b50565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146115d25760405162461bcd60e51b81526004016108c6906140c6565b6001600160a01b0381166115f85760405162461bcd60e51b81526004016108c690613f49565b601480546001600160a01b0319166001600160a01b0383161790556040517f5138b884a20454b6db937b9e11c8534e02e708750e0c465df6cd9701622952ce90611643908390613b9e565b60405180910390a150565b600a60209081526000928352604080842090915290825290205481565b60125481565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146116b95760405162461bcd60e51b81526004016108c6906140c6565b6127108111156116db5760405162461bcd60e51b81526004016108c690613edb565b60108190556040517f9fe6eeb0f0541c644a56c67efeb872dbadd803a60b909d7dde1b35a3fe230b0e90611643908390613d0b565b60056020526000908152604090205481565b60026008541415611768576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146117b55760405162461bcd60e51b81526004016108c6906140c6565b6001600160a01b0382166117db5760405162461bcd60e51b81526004016108c690613f8a565b60006117e78383612aaa565b60165490915060ff1615806118195750611814612710610936601854600e5461294a90919063ffffffff16565b601554115b15611833576016546118339062010000900460ff16612d1f565b600061183e82612b83565b90507fa33f5c0b76f00f6737b1780a8a7f18e19c3fe8fe9ee01a6c1b8ce1eae5ed54f986868686856040516118779594939291906142f0565b60405180910390a15050600160085550505050565b60076020526000908152604090205481565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146118e65760405162461bcd60e51b81526004016108c6906140c6565b61158781612d1f565b600b5481565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e7590161461193d5760405162461bcd60e51b81526004016108c6906140c6565b60006119498383612853565b805490915060ff161561196e5760405162461bcd60e51b81526004016108c690613e28565b805460ff191660011790555050565b6000600260085414156119c5576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75901614611a125760405162461bcd60e51b81526004016108c6906140c6565b6060820151600e54611a23916128f0565b600e556020820151601354611a37916128f0565b6013556080820151601154611a4b916128f0565b60115561ffff85166000908152600a6020908152604080832087845290915290205460a083015160098054611aa692919084908110611a8657fe5b9060005260206000209060070201600401546127f690919063ffffffff16565b60098281548110611ab357fe5b600091825260209091206004600790920201015560408301518351611ae191611adc91906128f0565b612b83565b9150611b0e7f000000000000000000000000224d8fd7ab6ad4c6eb4611ce56ef35dec2277f038584612baf565b604083015183517ffb2b592367452f1c437675bed47f5e1e6c25188c17d7ba01a12eb030bc41ccef918691611b42916128f0565b85608001518660200151604051611b5c9493929190613c75565b60405180910390a1506001600855949350505050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108235780601f106107f857610100808354040283529160200191610823565b600f5481565b601654610100900460ff1681565b60135481565b60098181548110611bf657600080fd5b6000918252602090912060079091020180546001820154600283015460038401546004850154600586015460069096015460ff8616975061010090950461ffff169593949293919290919088565b60006109a533846113e685604051806060016040528060258152602001614480602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190613319565b60006109a5338484613111565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75901614611ce85760405162461bcd60e51b81526004016108c6906140c6565b6000611cf48484612853565b9050611d178261ffff16610e7b8360020154600f546127f690919063ffffffff16565b600f5561ffff821660028201556040517f8fb3b21a941c2361df46475f9ae2f7b5dac5de7bd085fa22415ec0bb30c77e2290611d5890869086908690614367565b60405180910390a150505050565b61271081565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75901614611db45760405162461bcd60e51b81526004016108c6906140c6565b600d805460ff19168215151790556040517f59a9350977452c5240699f57f18b5915cd0440a56f08820a38b9f2432a82ba3e90611643908390613c9b565b600060026008541415611e3a576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75901614611e875760405162461bcd60e51b81526004016108c6906140c6565b6001600160a01b038716611ead5760405162461bcd60e51b81526004016108c690613f8a565b61ffff85166000908152600a60209081526040808320878452909152902054600980549091908110611edb57fe5b600091825260209091206007909102015460ff161515600114611f105760405162461bcd60e51b81526004016108c690613fc1565b611f1a8787612aaa565b60165490915060ff161580611f4c5750611f47612710610936601854600e5461294a90919063ffffffff16565b601554115b15611f5b57611f5b6000612d1f565b7f53c03ee0722b52efeb42444f48d90173854501b3de3c590fcb445743377115c287878388888888604051611f969796959493929190613c17565b60405180910390a160016008559695505050505050565b60026008541415611ff3576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146120405760405162461bcd60e51b81526004016108c6906140c6565b801561205d5761205b8361205383612b83565b6000806131bf565b505b60006120698686612853565b600481015490915061207b90846127f6565b6004820155600061208b84612b83565b90506120b87f000000000000000000000000224d8fd7ab6ad4c6eb4611ce56ef35dec2277f038683612baf565b7fa97166013ecf5305dd9a58d6d867f05e646d4275f52d2bd52a5c7f00a690ad1b8585856040516120eb93929190613bcb565b60405180910390a1505060016008555050505050565b600d5460ff1681565b60026008541415612150576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e7590161461219d5760405162461bcd60e51b81526004016108c6906140c6565b61ffff83166000908152600a602090815260408083208584529091528120546009805490919081106121cb57fe5b906000526020600020906007020190506121f6826000015182600301546128f090919063ffffffff16565b6003820155602082015160068201541461221557602082015160068201555b815160208301516040517fdbdd25248751feb2f3b66721dfdd11662a68bc155af3771e661aabec92fba81492612250928892889291906143a1565b60405180910390a1505060016008555050565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146122ab5760405162461bcd60e51b81526004016108c6906140c6565b601154156115875760006122c0601154612b83565b600060115590506122f27f000000000000000000000000224d8fd7ab6ad4c6eb4611ce56ef35dec2277f038383612baf565b7f70dc5a44816033bea80f836440f4b1fe1b3bb06b568c8dc2301901f03bf237c7828260405161157d929190613bb2565b60175481565b42841015612370576040805162461bcd60e51b815260206004820152600f60248201526e109c9a5919d94e8811561412549151608a1b604482015290519081900360640190fd5b6002546001600160a01b0380891660008181526007602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa15801561248b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906124c15750886001600160a01b0316816001600160a01b0316145b612512576040805162461bcd60e51b815260206004820152601960248201527f4272696467653a20494e56414c49445f5349474e415455524500000000000000604482015290519081900360640190fd5b61251d898989612a0a565b505050505050505050565b600660209081526000928352604080842090915290825290205481565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e7590161461258d5760405162461bcd60e51b81526004016108c6906140c6565b61271084111580156125a157506127108311155b6125bd5760405162461bcd60e51b81526004016108c690613f12565b601680546017869055601885905560ff19168615151761ff001916610100841515021762ff0000191662010000831515021790556040517f7cc11124872dc29ed41dd447ee7ab07d9eee5d8ebb55f65dd92bce19bb20224a906126299087908790879087908790613ce2565b60405180910390a15050505050565b600c5481565b60008060026008541415612687576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146126d45760405162461bcd60e51b81526004016108c6906140c6565b60006126e08686612853565b9050806003015484111561270557600381018054600090915592508284039150612721565b600381015461271490856127f6565b6003820155839250600091505b7f44d3575fd94f9e0a41d7ebbc7e952f9b615c3f8d1faf924e1e9e98c0edf0d3808686858560405161275694939291906143a1565b60405180910390a15060016008559094909350915050565b600061277c611adc836133b0565b90505b919050565b7f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759081565b60105481565b7f000000000000000000000000224d8fd7ab6ad4c6eb4611ce56ef35dec2277f0381565b7f000000000000000000000000000000000000000000000000000000000000000181565b60008282111561284d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6009546000906128755760405162461bcd60e51b81526004016108c690613ea4565b61ffff83166000908152600a602090815260408083208584529091528120546009805490919081106128a357fe5b60009182526020909120600790910201805490915061ffff85811661010090920416148015610bed575082816001015414610c095760405162461bcd60e51b81526004016108c690613d97565b600082820183811015610c09576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612959575060006109a9565b8282028284828161296657fe5b0414610c095760405162461bcd60e51b815260040180806020018281038252602181526020018061445f6021913960400191505060405180910390fd5b60008082116129f9576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a0257fe5b049392505050565b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600080600e5411612a8f5760405162461bcd60e51b81526004016108c690613d47565b61277c600e546109366004548561294a90919063ffffffff16565b60008060045411612acd5760405162461bcd60e51b81526004016108c690613ddf565b6001600160a01b03831660009081526005602052604090205482811015612b065760405162461bcd60e51b81526004016108c6906141b9565b6000612b23600454610936600e548761294a90919063ffffffff16565b600e54909150612b3390826127f6565b600e55612b4085856133ee565b7f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a858583604051612b7393929190613bcb565b60405180910390a1949350505050565b600061277c827f000000000000000000000000000000000000000000000000000000000000000161294a565b604080518082018252601981527f7472616e7366657228616464726573732c75696e7432353629000000000000006020909101525160009081906001600160a01b038616907fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b90612c269087908790602401613bb2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612c649190613b82565b6000604051808303816000865af19150503d8060008114612ca1576040519150601f19603f3d011682016040523d82523d6000602084013e612ca6565b606091505b5091509150818015612cd0575080511580612cd0575080806020019051810190612cd091906137e7565b612cec5760405162461bcd60e51b81526004016108c690613e6d565b5050505050565b600061277c827f00000000000000000000000000000000000000000000000000000000000000016129a3565b6000601554118015612d3357506000600f54115b156115875760095460008167ffffffffffffffff81118015612d5457600080fd5b50604051908082528060200260200182016040528015612d7e578160200160208202803683370190505b5090506000805b83811015612e4857600060098281548110612d9c57fe5b906000526020600020906007020190506000612dcd600f546109368460020154600e5461294a90919063ffffffff16565b90506000612dec836005015484600401546128f090919063ffffffff16565b905080821115612e3a57808203868581518110612e0557fe5b602002602001018181525050612e37868581518110612e2057fe5b6020026020010151866128f090919063ffffffff16565b94505b505050806001019050612d85565b50600081612ee657848015612e5f57506000601554115b15612ee15760005b84811015612edf57600060098281548110612e7e57fe5b906000526020600020906007020190506000612eaf600f54610936846002015460155461294a90919063ffffffff16565b9050612ebb84826128f0565b6005830154909450612ecd90826128f0565b60059092019190915550600101612e67565b505b6130fa565b6015548211613053578415612fbd5760155482900360005b85811015612fb6576000858281518110612f1457fe5b60200260200101511115612fae57600060098281548110612f3157fe5b906000526020600020906007020190506000612f85612f63600f5461093685600201548861294a90919063ffffffff16565b888581518110612f6f57fe5b60200260200101516128f090919063ffffffff16565b9050612f9185826128f0565b6005830154909550612fa390826128f0565b826005018190555050505b600101612efe565b5050612ee1565b60005b84811015612edf576000848281518110612fd657fe5b6020026020010151111561304b57600060098281548110612ff357fe5b90600052602060002090600702019050600085838151811061301157fe5b6020026020010151905061302e81856128f090919063ffffffff16565b600583015490945061304090826128f0565b826005018190555050505b600101612fc0565b60005b848110156130f857600084828151811061306c57fe5b602002602001015111156130f05760006009828154811061308957fe5b9060005260206000209060070201905060006130c7856109366015548987815181106130b157fe5b602002602001015161294a90919063ffffffff16565b90506130d384826128f0565b60058301549094506130e590826128f0565b826005018190555050505b600101613056565b505b60155461310790826127f6565b6015555050505050565b6001600160a01b03831660009081526005602052604090205461313490826127f6565b6001600160a01b03808516600090815260056020526040808220939093559084168152205461316390826128f0565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600f54116131e25760405162461bcd60e51b81526004016108c690614114565b6131eb84612cf3565b905060008315613230576132106127106109366010548561294a90919063ffffffff16565b905061321c82826127f6565b60125490925061322c90826128f0565b6012555b82156132475760155461324390836128f0565b6015555b60045482901561326f5761326c600e546109366004548661294a90919063ffffffff16565b90505b600e5461327c90846128f0565b600e55613289878261347f565b7fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb878285856040516132be9493929190613c75565b60405180910390a160165460ff1615806132f557506132f0612710610936601854600e5461294a90919063ffffffff16565b601554115b1561330f5760165461330f9062010000900460ff16612d1f565b5050949350505050565b600081848411156133a85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561336d578181015183820152602001613355565b50505050905090810190601f16801561339a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600454116133d35760405162461bcd60e51b81526004016108c690614009565b61277c600454610936600e548561294a90919063ffffffff16565b6001600160a01b03821660009081526005602052604090205461341190826127f6565b6001600160a01b03831660009081526005602052604090205560045461343790826127f6565b6004556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60045461348c90826128f0565b6004556001600160a01b0382166000908152600560205260409020546134b290826128f0565b6001600160a01b03831660008181526005602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b604051806040016040528060008152602001600081525090565b604051806101000160405280600015158152602001600061ffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b038116811461277f57600080fd5b803561ffff8116811461277f57600080fd5b6000602082840312156135df578081fd5b610c09826135a5565b600080604083850312156135fa578081fd5b613603836135a5565b9150613611602084016135a5565b90509250929050565b60008060006060848603121561362e578081fd5b613637846135a5565b9250613645602085016135a5565b9150604084013590509250925092565b600080600080600080600060e0888a03121561366f578283fd5b613678886135a5565b9650613686602089016135a5565b95506040880135945060608801359350608088013560ff811681146136a9578384fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156136d8578182fd5b6136e1836135a5565b946020939093013593505050565b600080600060608486031215613703578283fd5b61370c846135a5565b925060208401359150613721604085016135a5565b90509250925092565b60008060008060008060a08789031215613742578182fd5b61374b876135a5565b955060208701359450613760604088016135bc565b935060608701359250608087013567ffffffffffffffff80821115613783578384fd5b818901915089601f830112613796578384fd5b8135818111156137a4578485fd5b8a60208285010111156137b5578485fd5b6020830194508093505050509295509295509295565b6000602082840312156137dc578081fd5b8135610c0981614430565b6000602082840312156137f8578081fd5b8151610c0981614430565b600080600080600060a0868803121561381a578283fd5b853561382581614430565b94506020860135935060408601359250606086013561384381614430565b9150608086013561385381614430565b809150509295509295909350565b600060c08284031215613872578081fd5b60405160c0810181811067ffffffffffffffff8211171561388f57fe5b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b600080604083850312156138e6578182fd5b6136e1836135bc565b600080600080848603610120811215613906578283fd5b61390f866135bc565b945060208601359350613924604087016135a5565b925060c0605f1982011215613937578182fd5b5060405160c0810181811067ffffffffffffffff8211171561395557fe5b8060405250606086013581526080860135602082015260a0860135604082015260c0860135606082015260e0860135608082015261010086013560a08201528091505092959194509250565b600080600080608085870312156139b6578182fd5b6139bf856135bc565b9350602085013592506139d4604086016135a5565b9396929550929360600135925050565b600080600080600060a086880312156139fb578283fd5b613a04866135bc565b945060208601359350613a19604087016135a5565b94979396509394606081013594506080013592915050565b60008060008060008060c08789031215613a49578384fd5b613a52876135bc565b955060208701359450613a67604088016135a5565b9350606087013592506080870135915060a0870135613a8581614430565b809150509295509295509295565b60008060008385036080811215613aa8578182fd5b613ab1856135bc565b9350602085013592506040603f1982011215613acb578182fd5b506040516040810181811067ffffffffffffffff82111715613ae957fe5b604090815285013581526060909401356020850152509093909250565b600080600060608486031215613b1a578081fd5b613b23846135bc565b925060208401359150613721604085016135bc565b600080600060608486031215613b4c578081fd5b613b55846135bc565b95602085013595506040909401359392505050565b600060208284031215613b7b578081fd5b5035919050565b60008251613b94818460208701614400565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03948516815260208101939093526040830191909152909116606082015260800190565b600060018060a01b038916825287602083015286604083015261ffff8616606083015284608083015260c060a08301528260c0830152828460e084013781830160e090810191909152601f909201601f191601019695505050505050565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b901515815260200190565b971515885261ffff96909616602088015260408701949094526060860192909252608085015260a084015260c083015260e08201526101000190565b941515855260208501939093526040840191909152151560608301521515608082015260a00190565b90815260200190565b6000602082528251806020840152613d33816040850160208701614400565b601f01601f19169190910160400192915050565b60208082526030908201527f53746172676174653a2063616e7420636f6e76657274205344746f4c5020776860408201526f0656e20746f74616c4c6971203d3d20360841b606082015260800190565b60208082526028908201527f53746172676174653a206c6f63616c20636861696e5061746820646f6573206e6040820152671bdd08195e1a5cdd60c21b606082015260800190565b60208082526029908201527f53746172676174653a2063616e74206275726e207768656e20746f74616c5375604082015268070706c79203d3d20360bc1b606082015260800190565b60208082526025908201527f53746172676174653a20636861696e5061746820697320616c72656164792061604082015264637469766560d81b606082015260800190565b60208082526019908201527f53746172676174653a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601d908201527f53746172676174653a206e6f20636861696e7061746873206578697374000000604082015260600190565b60208082526017908201527f4272696467653a2063756d2066656573203e2031303025000000000000000000604082015260600190565b6020808252601b908201527f53746172676174653a2077726f6e672044656c746120706172616d0000000000604082015260600190565b60208082526021908201527f53746172676174653a20666565206c6962726172792063616e742062652030786040820152600360fc1b606082015260800190565b6020808252601d908201527f53746172676174653a205f66726f6d2063616e6e6f7420626520307830000000604082015260600190565b60208082526028908201527f53746172676174653a20636f756e74657220636861696e50617468206973206e6040820152676f7420726561647960c01b606082015260800190565b60208082526033908201527f53746172676174653a2063616e7420636f6e76657274204c50746f53442077686040820152720656e20746f74616c537570706c79203d3d203606c1b606082015260800190565b60208082526044908201527f53746172676174653a2063616e7420637265617465436861696e50617468206f60408201527f66206578697374696e6720647374436861696e496420616e64205f647374506f6060820152631bdb125960e21b608082015260a00190565b6020808252602e908201527f53746172676174653a206f6e6c792074686520726f757465722063616e20636160408201526d1b1b081d1a1a5cc81b595d1a1bd960921b606082015260800190565b6020808252601d908201527f53746172676174653a204e6f20436861696e5061746873206578697374000000604082015260600190565b6020808252601d908201527f53746172676174653a206473742062616c616e636520746f6f206c6f77000000604082015260600190565b6020808252601b908201527f53746172676174653a20736c69707061676520746f6f20686967680000000000604082015260600190565b60208082526026908201527f53746172676174653a206e6f7420656e6f756768204c5020746f6b656e7320746040820152653790313ab93760d11b606082015260800190565b6020808252601b908201527f53746172676174653a20737761702066756e632073746f707065640000000000604082015260600190565b60006101008201905082511515825261ffff602084015116602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b815181526020918201519181019190915260400190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b61ffff95909516855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b61ffff98909816885260208801969096526001600160a01b039490941660408701526060860192909252608085015260a084015260c083015260e08201526101000190565b61ffff93841681526020810192909252909116604082015260600190565b61ffff9390931683526020830191909152604082015260600190565b61ffff94909416845260208401929092526040830152606082015260800190565b918252602082015260400190565b948552602085019390935261ffff9190911660408401526001600160a01b03166060830152608082015260a00190565b60005b8381101561441b578181015183820152602001614403565b8381111561442a576000848401525b50505050565b801515811461158757600080fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207aaedc0ccd2d34f140152446b43279f2d93751be1b5b4321d4ba3041dfdc231164736f6c63430007060033" + }, + { + "address": "0x6c354d27b8e7e413a1e42a43100a6957d6af5256", + "nonce": 21, + "balance": "0x00000000000000000000000000000000000000000000000000179906d3e37318", + "code": "0x" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061022b5760003560e01c80636352211e11610130578063ac899c32116100b8578063d53913931161007c578063d539139314610688578063d547741f146106a6578063da3ef23f146106c2578063e63ab1e9146106de578063e985e9c5146106fc5761022c565b8063ac899c32146105d2578063b883ff97146105ee578063b88d4fde1461061e578063c66828621461063a578063c87b56dd146106585761022c565b806391d14854116100ff57806391d148541461052e57806395d89b411461055e578063a14481941461057c578063a217fddf14610598578063a22cb465146105b65761022c565b80636352211e146104a65780636c0360eb146104d657806370a08231146104f45780638456cb59146105245761022c565b80632f745c59116101b357806342966c681161018257806342966c68146103f0578063438b63001461040c5780634f6ccce71461043c57806355f804b31461046c5780635c975abb146104885761022c565b80632f745c591461037e57806336568abe146103ae5780633f4ba83a146103ca57806342842e0e146103d45761022c565b806318160ddd116101fa57806318160ddd146102c857806323b872dd146102e6578063248a9ca3146103025780632507c47a146103325780632f2ff15d146103625761022c565b806301ffc9a71461022e57806306fdde031461025e578063081812fc1461027c578063095ea7b3146102ac5761022c565b5b005b610248600480360381019061024391906131c2565b61072c565b604051610255919061320a565b60405180910390f35b61026661073e565b60405161027391906132b5565b60405180910390f35b6102966004803603810190610291919061330d565b6107d0565b6040516102a3919061337b565b60405180910390f35b6102c660048036038101906102c191906133c2565b610816565b005b6102d061092d565b6040516102dd9190613411565b60405180910390f35b61030060048036038101906102fb919061342c565b61093a565b005b61031c600480360381019061031791906134b5565b61099a565b60405161032991906134f1565b60405180910390f35b61034c6004803603810190610347919061330d565b6109ba565b60405161035991906135a5565b60405180910390f35b61037c600480360381019061037791906135c0565b610abb565b005b610398600480360381019061039391906133c2565b610adc565b6040516103a59190613411565b60405180910390f35b6103c860048036038101906103c391906135c0565b610b81565b005b6103d2610c04565b005b6103ee60048036038101906103e9919061342c565b610c39565b005b61040a6004803603810190610405919061330d565b610c59565b005b61042660048036038101906104219190613600565b610cb5565b60405161043391906136dc565b60405180910390f35b6104566004803603810190610451919061330d565b610d63565b6040516104639190613411565b60405180910390f35b61048660048036038101906104819190613833565b610dd4565b005b610490610df5565b60405161049d919061320a565b60405180910390f35b6104c060048036038101906104bb919061330d565b610e0c565b6040516104cd919061337b565b60405180910390f35b6104de610e92565b6040516104eb91906132b5565b60405180910390f35b61050e60048036038101906105099190613600565b610f20565b60405161051b9190613411565b60405180910390f35b61052c610fd7565b005b610548600480360381019061054391906135c0565b61100c565b604051610555919061320a565b60405180910390f35b610566611077565b60405161057391906132b5565b60405180910390f35b610596600480360381019061059191906133c2565b611109565b005b6105a06112e2565b6040516105ad91906134f1565b60405180910390f35b6105d060048036038101906105cb91906138a8565b6112e9565b005b6105ec60048036038101906105e791906138e8565b6112ff565b005b6106086004803603810190610603919061330d565b61133c565b604051610615919061320a565b60405180910390f35b610638600480360381019061063391906139c9565b61135c565b005b6106426113be565b60405161064f91906132b5565b60405180910390f35b610672600480360381019061066d919061330d565b61144c565b60405161067f91906132b5565b60405180910390f35b6106906114ad565b60405161069d91906134f1565b60405180910390f35b6106c060048036038101906106bb91906135c0565b6114d1565b005b6106dc60048036038101906106d79190613833565b6114f2565b005b6106e6611513565b6040516106f391906134f1565b60405180910390f35b61071660048036038101906107119190613a4c565b611537565b604051610723919061320a565b60405180910390f35b6000610737826115cb565b9050919050565b60606000805461074d90613abb565b80601f016020809104026020016040519081016040528092919081815260200182805461077990613abb565b80156107c65780601f1061079b576101008083540402835291602001916107c6565b820191906000526020600020905b8154815290600101906020018083116107a957829003601f168201915b5050505050905090565b60006107db82611645565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061082182610e0c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088890613b5e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108b0611690565b73ffffffffffffffffffffffffffffffffffffffff1614806108df57506108de816108d9611690565b611537565b5b61091e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091590613bf0565b60405180910390fd5b6109288383611698565b505050565b6000600880549050905090565b61094b610945611690565b82611751565b61098a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098190613c82565b60405180910390fd5b6109958383836117e6565b505050565b6000600c6000838152602001908152602001600020600101549050919050565b6109c2613097565b600e60008381526020019081526020016000206040518060c00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820154815260200160038201548152602001600482015481526020016005820154815250509050919050565b610ac48261099a565b610acd81611adf565b610ad78383611af3565b505050565b6000610ae783610f20565b8210610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f90613d14565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b89611690565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed90613da6565b60405180910390fd5b610c008282611bd4565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c2e81611adf565b610c36611cb6565b50565b610c548383836040518060200160405280600081525061135c565b505050565b610c6a610c64611690565b82611751565b610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca090613c82565b60405180910390fd5b610cb281611d19565b50565b60606000610cc283610f20565b905060008167ffffffffffffffff811115610ce057610cdf613708565b5b604051908082528060200260200182016040528015610d0e5781602001602082028036833780820191505090505b50905060005b82811015610d5857610d268582610adc565b828281518110610d3957610d38613dc6565b5b6020026020010181815250508080610d5090613e24565b915050610d14565b508092505050919050565b6000610d6d61092d565b8210610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613ede565b60405180910390fd5b60088281548110610dc257610dc1613dc6565b5b90600052602060002001549050919050565b6000801b610de181611adf565b8160109081610df091906140aa565b505050565b6000600b60009054906101000a900460ff16905090565b600080610e1883611d25565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e80906141c8565b60405180910390fd5b80915050919050565b60108054610e9f90613abb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ecb90613abb565b8015610f185780601f10610eed57610100808354040283529160200191610f18565b820191906000526020600020905b815481529060010190602001808311610efb57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f879061425a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61100181611adf565b611009611d62565b50565b6000600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606001805461108690613abb565b80601f01602080910402602001604051908101604052809291908181526020018280546110b290613abb565b80156110ff5780601f106110d4576101008083540402835291602001916110ff565b820191906000526020600020905b8154815290600101906020018083116110e257829003601f168201915b5050505050905090565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661113381611adf565b600f600083815260200190815260200160002060009054906101000a900460ff16611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a906142c6565b60405180910390fd5b600061119f600d611dc5565b90506111ab600d611dd3565b6040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001428152602001848152602001600181526020016001815250600e600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a082015181600501559050506112dc8482611de9565b50505050565b6000801b81565b6112fb6112f4611690565b8383611e07565b5050565b6000801b61130c81611adf565b81600f600085815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b61136d611367611690565b83611751565b6113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390613c82565b60405180910390fd5b6113b884848484611f73565b50505050565b601180546113cb90613abb565b80601f01602080910402602001604051908101604052809291908181526020018280546113f790613abb565b80156114445780601f1061141957610100808354040283529160200191611444565b820191906000526020600020905b81548152906001019060200180831161142757829003601f168201915b505050505081565b606061145782611645565b6000611461611fcf565b9050600081511161148157604051806020016040528060008152506114a5565b8060116040516020016114959291906143f1565b6040516020818303038152906040525b915050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6114da8261099a565b6114e381611adf565b6114ed8383611bd4565b505050565b6000801b6114ff81611adf565b816011908161150e91906140aa565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061163e575061163d82612061565b5b9050919050565b61164e816120c2565b61168d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611684906141c8565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661170b83610e0c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061175d83610e0c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061179f575061179e8185611537565b5b806117dd57508373ffffffffffffffffffffffffffffffffffffffff166117c5846107d0565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661180682610e0c565b73ffffffffffffffffffffffffffffffffffffffff161461185c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185390614492565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c290614524565b60405180910390fd5b6118d88383836001612103565b8273ffffffffffffffffffffffffffffffffffffffff166118f882610e0c565b73ffffffffffffffffffffffffffffffffffffffff161461194e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194590614492565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ada838383600161211d565b505050565b611af081611aeb611690565b612123565b50565b611afd828261100c565b611bd0576001600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b75611690565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611bde828261100c565b15611cb2576000600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c57611690565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611cbe6121a8565b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611d02611690565b604051611d0f919061337b565b60405180910390a1565b611d22816121f1565b50565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611d6a612244565b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611dae611690565b604051611dbb919061337b565b60405180910390a1565b600081600001549050919050565b6001816000016000828254019250508190555050565b611e0382826040518060200160405280600081525061228e565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c90614590565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f66919061320a565b60405180910390a3505050565b611f7e8484846117e6565b611f8a848484846122e9565b611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc090614622565b60405180910390fd5b50505050565b606060108054611fde90613abb565b80601f016020809104026020016040519081016040528092919081815260200182805461200a90613abb565b80156120575780601f1061202c57610100808354040283529160200191612057565b820191906000526020600020905b81548152906001019060200180831161203a57829003601f168201915b5050505050905090565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120bb57506120ba82612470565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166120e483611d25565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b61210b612244565b612117848484846124ea565b50505050565b50505050565b61212d828261100c565b6121a45761213a81612648565b6121488360001c6020612675565b6040516020016121599291906146da565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b91906132b5565b60405180910390fd5b5050565b6121b0610df5565b6121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e690614760565b60405180910390fd5b565b6121fa816128b1565b6000600a6000838152602001908152602001600020805461221a90613abb565b90501461224157600a6000828152602001908152602001600020600061224091906130f9565b5b50565b61224c610df5565b1561228c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612283906147cc565b60405180910390fd5b565b61229883836129ff565b6122a560008484846122e9565b6122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db90614622565b60405180910390fd5b505050565b600061230a8473ffffffffffffffffffffffffffffffffffffffff16612c1c565b15612463578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612333611690565b8786866040518563ffffffff1660e01b81526004016123559493929190614841565b6020604051808303816000875af192505050801561239157506040513d601f19601f8201168201806040525081019061238e91906148a2565b60015b612413573d80600081146123c1576040519150601f19603f3d011682016040523d82523d6000602084013e6123c6565b606091505b50600081510361240b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240290614622565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612468565b600190505b949350505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124e357506124e282612c3f565b5b9050919050565b6124f684848484612d21565b600181111561253a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253190614941565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036125815761257c81612d27565b6125c0565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146125bf576125be8582612d70565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612602576125fd81612edd565b612641565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146126405761263f8482612fae565b5b5b5050505050565b606061266e8273ffffffffffffffffffffffffffffffffffffffff16601460ff16612675565b9050919050565b6060600060028360026126889190614961565b61269291906149a3565b67ffffffffffffffff8111156126ab576126aa613708565b5b6040519080825280601f01601f1916602001820160405280156126dd5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061271557612714613dc6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061277957612778613dc6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026127b99190614961565b6127c391906149a3565b90505b6001811115612863577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061280557612804613dc6565b5b1a60f81b82828151811061281c5761281b613dc6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061285c906149d7565b90506127c6565b50600084146128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90614a4c565b60405180910390fd5b8091505092915050565b60006128bc82610e0c565b90506128cc816000846001612103565b6128d582610e0c565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129fb81600084600161211d565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6590614ab8565b60405180910390fd5b612a77816120c2565b15612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90614b24565b60405180910390fd5b612ac5600083836001612103565b612ace816120c2565b15612b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0590614b24565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c1860008383600161211d565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d0a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d1a5750612d198261302d565b5b9050919050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d7d84610f20565b612d879190614b44565b9050600060076000848152602001908152602001600020549050818114612e6c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ef19190614b44565b9050600060096000848152602001908152602001600020549050600060088381548110612f2157612f20613dc6565b5b906000526020600020015490508060088381548110612f4357612f42613dc6565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f9257612f91614b78565b5b6001900381819060005260206000200160009055905550505050565b6000612fb983610f20565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090565b50805461310590613abb565b6000825580601f106131175750613136565b601f0160209004906000526020600020908101906131359190613139565b5b50565b5b8082111561315257600081600090555060010161313a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61319f8161316a565b81146131aa57600080fd5b50565b6000813590506131bc81613196565b92915050565b6000602082840312156131d8576131d7613160565b5b60006131e6848285016131ad565b91505092915050565b60008115159050919050565b613204816131ef565b82525050565b600060208201905061321f60008301846131fb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561325f578082015181840152602081019050613244565b60008484015250505050565b6000601f19601f8301169050919050565b600061328782613225565b6132918185613230565b93506132a1818560208601613241565b6132aa8161326b565b840191505092915050565b600060208201905081810360008301526132cf818461327c565b905092915050565b6000819050919050565b6132ea816132d7565b81146132f557600080fd5b50565b600081359050613307816132e1565b92915050565b60006020828403121561332357613322613160565b5b6000613331848285016132f8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133658261333a565b9050919050565b6133758161335a565b82525050565b6000602082019050613390600083018461336c565b92915050565b61339f8161335a565b81146133aa57600080fd5b50565b6000813590506133bc81613396565b92915050565b600080604083850312156133d9576133d8613160565b5b60006133e7858286016133ad565b92505060206133f8858286016132f8565b9150509250929050565b61340b816132d7565b82525050565b60006020820190506134266000830184613402565b92915050565b60008060006060848603121561344557613444613160565b5b6000613453868287016133ad565b9350506020613464868287016133ad565b9250506040613475868287016132f8565b9150509250925092565b6000819050919050565b6134928161347f565b811461349d57600080fd5b50565b6000813590506134af81613489565b92915050565b6000602082840312156134cb576134ca613160565b5b60006134d9848285016134a0565b91505092915050565b6134eb8161347f565b82525050565b600060208201905061350660008301846134e2565b92915050565b6135158161335a565b82525050565b613524816132d7565b82525050565b60c082016000820151613540600085018261350c565b506020820151613553602085018261350c565b506040820151613566604085018261351b565b506060820151613579606085018261351b565b50608082015161358c608085018261351b565b5060a082015161359f60a085018261351b565b50505050565b600060c0820190506135ba600083018461352a565b92915050565b600080604083850312156135d7576135d6613160565b5b60006135e5858286016134a0565b92505060206135f6858286016133ad565b9150509250929050565b60006020828403121561361657613615613160565b5b6000613624848285016133ad565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000613665838361351b565b60208301905092915050565b6000602082019050919050565b60006136898261362d565b6136938185613638565b935061369e83613649565b8060005b838110156136cf5781516136b68882613659565b97506136c183613671565b9250506001810190506136a2565b5085935050505092915050565b600060208201905081810360008301526136f6818461367e565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137408261326b565b810181811067ffffffffffffffff8211171561375f5761375e613708565b5b80604052505050565b6000613772613156565b905061377e8282613737565b919050565b600067ffffffffffffffff82111561379e5761379d613708565b5b6137a78261326b565b9050602081019050919050565b82818337600083830152505050565b60006137d66137d184613783565b613768565b9050828152602081018484840111156137f2576137f1613703565b5b6137fd8482856137b4565b509392505050565b600082601f83011261381a576138196136fe565b5b813561382a8482602086016137c3565b91505092915050565b60006020828403121561384957613848613160565b5b600082013567ffffffffffffffff81111561386757613866613165565b5b61387384828501613805565b91505092915050565b613885816131ef565b811461389057600080fd5b50565b6000813590506138a28161387c565b92915050565b600080604083850312156138bf576138be613160565b5b60006138cd858286016133ad565b92505060206138de85828601613893565b9150509250929050565b600080604083850312156138ff576138fe613160565b5b600061390d858286016132f8565b925050602061391e85828601613893565b9150509250929050565b600067ffffffffffffffff82111561394357613942613708565b5b61394c8261326b565b9050602081019050919050565b600061396c61396784613928565b613768565b90508281526020810184848401111561398857613987613703565b5b6139938482856137b4565b509392505050565b600082601f8301126139b0576139af6136fe565b5b81356139c0848260208601613959565b91505092915050565b600080600080608085870312156139e3576139e2613160565b5b60006139f1878288016133ad565b9450506020613a02878288016133ad565b9350506040613a13878288016132f8565b925050606085013567ffffffffffffffff811115613a3457613a33613165565b5b613a408782880161399b565b91505092959194509250565b60008060408385031215613a6357613a62613160565b5b6000613a71858286016133ad565b9250506020613a82858286016133ad565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ad357607f821691505b602082108103613ae657613ae5613a8c565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b48602183613230565b9150613b5382613aec565b604082019050919050565b60006020820190508181036000830152613b7781613b3b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613bda603d83613230565b9150613be582613b7e565b604082019050919050565b60006020820190508181036000830152613c0981613bcd565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613c6c602d83613230565b9150613c7782613c10565b604082019050919050565b60006020820190508181036000830152613c9b81613c5f565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613cfe602b83613230565b9150613d0982613ca2565b604082019050919050565b60006020820190508181036000830152613d2d81613cf1565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613d90602f83613230565b9150613d9b82613d34565b604082019050919050565b60006020820190508181036000830152613dbf81613d83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e2f826132d7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e6157613e60613df5565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613ec8602c83613230565b9150613ed382613e6c565b604082019050919050565b60006020820190508181036000830152613ef781613ebb565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613f607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f23565b613f6a8683613f23565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613fa7613fa2613f9d846132d7565b613f82565b6132d7565b9050919050565b6000819050919050565b613fc183613f8c565b613fd5613fcd82613fae565b848454613f30565b825550505050565b600090565b613fea613fdd565b613ff5818484613fb8565b505050565b5b818110156140195761400e600082613fe2565b600181019050613ffb565b5050565b601f82111561405e5761402f81613efe565b61403884613f13565b81016020851015614047578190505b61405b61405385613f13565b830182613ffa565b50505b505050565b600082821c905092915050565b600061408160001984600802614063565b1980831691505092915050565b600061409a8383614070565b9150826002028217905092915050565b6140b382613225565b67ffffffffffffffff8111156140cc576140cb613708565b5b6140d68254613abb565b6140e182828561401d565b600060209050601f8311600181146141145760008415614102578287015190505b61410c858261408e565b865550614174565b601f19841661412286613efe565b60005b8281101561414a57848901518255600182019150602085019450602081019050614125565b868310156141675784890151614163601f891682614070565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006141b2601883613230565b91506141bd8261417c565b602082019050919050565b600060208201905081810360008301526141e1816141a5565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000614244602983613230565b915061424f826141e8565b604082019050919050565b6000602082019050818103600083015261427381614237565b9050919050565b7f706c6174666f726d20696e76616c696400000000000000000000000000000000600082015250565b60006142b0601083613230565b91506142bb8261427a565b602082019050919050565b600060208201905081810360008301526142df816142a3565b9050919050565b600081905092915050565b60006142fc82613225565b61430681856142e6565b9350614316818560208601613241565b80840191505092915050565b7f3100000000000000000000000000000000000000000000000000000000000000600082015250565b60006143586001836142e6565b915061436382614322565b600182019050919050565b6000815461437b81613abb565b61438581866142e6565b945060018216600081146143a057600181146143b5576143e8565b60ff19831686528115158202860193506143e8565b6143be85613efe565b60005b838110156143e0578154818901526001820191506020810190506143c1565b838801955050505b50505092915050565b60006143fd82856142f1565b91506144088261434b565b9150614414828461436e565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061447c602583613230565b915061448782614420565b604082019050919050565b600060208201905081810360008301526144ab8161446f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061450e602483613230565b9150614519826144b2565b604082019050919050565b6000602082019050818103600083015261453d81614501565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061457a601983613230565b915061458582614544565b602082019050919050565b600060208201905081810360008301526145a98161456d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061460c603283613230565b9150614617826145b0565b604082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006146786017836142e6565b915061468382614642565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006146c46011836142e6565b91506146cf8261468e565b601182019050919050565b60006146e58261466b565b91506146f182856142f1565b91506146fc826146b7565b915061470882846142f1565b91508190509392505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061474a601483613230565b915061475582614714565b602082019050919050565b600060208201905081810360008301526147798161473d565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006147b6601083613230565b91506147c182614780565b602082019050919050565b600060208201905081810360008301526147e5816147a9565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614813826147ec565b61481d81856147f7565b935061482d818560208601613241565b6148368161326b565b840191505092915050565b6000608082019050614856600083018761336c565b614863602083018661336c565b6148706040830185613402565b81810360608301526148828184614808565b905095945050505050565b60008151905061489c81613196565b92915050565b6000602082840312156148b8576148b7613160565b5b60006148c68482850161488d565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b600061492b603583613230565b9150614936826148cf565b604082019050919050565b6000602082019050818103600083015261495a8161491e565b9050919050565b600061496c826132d7565b9150614977836132d7565b9250828202614985816132d7565b9150828204841483151761499c5761499b613df5565b5b5092915050565b60006149ae826132d7565b91506149b9836132d7565b92508282019050808211156149d1576149d0613df5565b5b92915050565b60006149e2826132d7565b9150600082036149f5576149f4613df5565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614a36602083613230565b9150614a4182614a00565b602082019050919050565b60006020820190508181036000830152614a6581614a29565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614aa2602083613230565b9150614aad82614a6c565b602082019050919050565b60006020820190508181036000830152614ad181614a95565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b0e601c83613230565b9150614b1982614ad8565b602082019050919050565b60006020820190508181036000830152614b3d81614b01565b9050919050565b6000614b4f826132d7565b9150614b5a836132d7565b9250828203905081811115614b7257614b71613df5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220e2d472edd74231dc8cd8b5709437faeb2d39cec43b3130b4aaa7f6e9039c8ca564736f6c63430008130033" + }, + { + "address": "0x5572905d0c9ae6387c0ebea4f8f3caff501036b1", + "nonce": 274, + "balance": "0x0000000000000000000000000000000000000000000000000019e030a71af346", + "code": "0x" + }, + { + "address": "0xc083bfaf848b06664cca7732a39e8cfe36f0eae4", + "nonce": 31, + "balance": "0x000000000000000000000000000000000000000000000000007c43b19f61268f", + "code": "0x" + }, + { + "address": "0x7018fb69874eda14ccb35a025b08fc4ef7ec7eca", + "nonce": 9, + "balance": "0x00000000000000000000000000000000000000000000000000127e232051d2bb", + "code": "0x" + }, + { + "address": "0x6131b5fae19ea4f9d964eac0408e4408b66337b5", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000003b47c8f1b3000", + "code": "0x6080604052600436106100b55760003560e01c80638da5cb5b11610069578063c683630d1161004e578063c683630d146101e5578063e21fd0e914610225578063f2fde38b1461023857600080fd5b80638da5cb5b14610165578063ad5c4648146101b157600080fd5b8063715018a61161009a578063715018a61461011057806378e3214f146101255780638af033fb1461014557600080fd5b806333320de3146100c157806359e50fed146100e357600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc366004613d26565b610258565b005b6100f66100f1366004613dea565b61039a565b604080519283526020830191909152015b60405180910390f35b34801561011c57600080fd5b506100e1610b9d565b34801561013157600080fd5b506100e1610140366004613e25565b610c2a565b34801561015157600080fd5b506100f66101603660046140b7565b610cf6565b34801561017157600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610107565b3480156101bd57600080fd5b5061018c7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b3480156101f157600080fd5b5061021561020036600461415e565b60016020526000908152604090205460ff1681565b6040519015158152602001610107565b6100f6610233366004613dea565b611114565b34801561024457600080fd5b506100e161025336600461415e565b611607565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b80518251146102ec57600080fd5b60005b82518110156103955781818151811061030a5761030a61417b565b6020026020010151600160008584815181106103285761032861417b565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905561038e816141d9565b90506102ef565b505050565b60008060005a9050600160006103b3602087018761415e565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff16610443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f41646472657373206e6f742077686974656c697374656400000000000000000060448201526064016102d5565b610450602085018561415e565b73ffffffffffffffffffffffffffffffffffffffff16610476604086016020870161415e565b73ffffffffffffffffffffffffffffffffffffffff16141580156104c0575060006104a7604086016020870161415e565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561056957600160006104d9604087016020880161415e565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff16610569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f41646472657373206e6f742077686974656c697374656400000000000000000060448201526064016102d5565b60006105786060860186614212565b61058190614250565b90506000816101000151116105f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e76616c6964206d696e2072657475726e20616d6f756e740000000000000060448201526064016102d5565b6105fb81611737565b61061381600001518260e0015183610140015161187b565b60006106258261012001516080611aa1565b9050600080600073ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff161461066c578360c0015161066e565b335b90506106808461012001516040611aa1565b6107d4576106a284600001513386608001518760a001518860e0015188611aad565b60e085015283516000906106df9073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b1580156106f757506106f78561012001516004611aa1565b1561070f57610707853330611c88565b60e087015290505b61072a3361072360408c0160208d0161415e565b8784611d77565b6107c961073a60208b018b61415e565b61074760408c018c61425c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505089518a92506107b2915073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b6107bd5760006107c3565b8860e001515b86611f6e565b9850925061095a9050565b600061080d856000015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b15801561082557506108258561012001516004611aa1565b1561083d57610835853330611c88565b60e087015290505b600061084d8660200151846121a5565b905061086a3361086360408d0160208e0161415e565b8885611d77565b61090561087a60208c018c61415e565b61088760408d018d61425c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508a518b92506108f2915073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b6108fd5760006108ff565b345b30611f6e565b809a508195505050600061092987602001513089608001518a60a001518e8b611aad565b905061093b876020015130868461229d565b508061094b8760200151856121a5565b61095591906142c1565b985050505b6109658288866123c8565b835161099a9073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b1580156109cd575060006109b460408a0160208b0161415e565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610a0557610a056109e560408a0160208b0161415e565b855173ffffffffffffffffffffffffffffffffffffffff169060006124d4565b83516020808601516040805133815273ffffffffffffffffffffffffffffffffffffffff948516938101939093529083169082015290821660608201526080810183905260a081018890527fd6d4f5681c246c9f42c203e287975af1601f8df8035a9251f79aab5c8f09e2f89060c00160405180910390a17fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c48610aab60208a018a61415e565b88610ae3876020015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b610af1578660200151610b13565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f5b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152602081019390935292168183015290519081900360600190a17f095e66fa4dd6a6f7b43fb8444a7bd0edb870508c7abf639bc216efb0bcff9779610b7860808a018a61425c565b604051610b869291906142d8565b60405180910390a15a850395505050505050915091565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d5565b610c2860006126e3565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d5565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff83161415610ceb57610ce73382612758565b5050565b610ce782338361286b565b60008060005a9050610d35886000015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b15610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f737263206973206574682c2073686f756c6420757365206e6f726d616c20737760448201527f617000000000000000000000000000000000000000000000000000000000000060648201526084016102d5565b610dda88600001518960e001518a610140015161187b565b60c088015160009073ffffffffffffffffffffffffffffffffffffffff1615610e07578860c00151610e09565b335b90506000610e1d8a61012001516080611aa1565b9050610e2f8a61012001516040611aa1565b610e5b57610e518a60000151338c608001518d60a001518e60e0015186611aad565b60e08b0152610e5f565b3091505b506000610e708a60200151836121a5565b90506000610e828b60000151336121a5565b9050610e9f8c8c600001518d60e001518e60200151878f8f6129de565b81610eae8c60200151856121a5565b610eb891906142c1565b9550610eca8b61012001516040611aa1565b15610f66576000610ee18c61012001516080611aa1565b9050610efd8c60200151308e608001518f60a001518b86611aad565b60208d015160c08e0151919850915073ffffffffffffffffffffffffffffffffffffffff1615610f31578b60c00151610f33565b335b9350610f3f81856121a5565b9250610f4d8130868a61229d565b82610f5882866121a5565b610f6291906142c1565b9650505b6000610f768c60000151336121a5565b610f8090836142c1565b9050610f8d81888e6123c8565b8b516020808e01516040805133815273ffffffffffffffffffffffffffffffffffffffff948516938101939093529083169082015290851660608201526080810182905260a081018890527fd6d4f5681c246c9f42c203e287975af1601f8df8035a9251f79aab5c8f09e2f89060c00160405180910390a17fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c488d8861105f8f6020015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b61106d578e6020015161108f565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f5b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152602081019390935292168183015290519081900360600190a17f095e66fa4dd6a6f7b43fb8444a7bd0edb870508c7abf639bc216efb0bcff977989896040516110f79291906142d8565b60405180910390a15a850395505050505050965096945050505050565b60008060005a9050600061112b6060860186614212565b61113490614250565b90506000816101000151116111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d696e2072657475726e2073686f756c64206e6f74206265203000000000000060448201526064016102d5565b60006111b4604087018761425c565b90501161121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6578656375746f72446174612073686f756c64206265206e6f74207a65726f0060448201526064016102d5565b61122d8161012001516020611aa1565b156112685761125d611242602087018761415e565b82611250604089018961425c565b61016060808b018b61425c565b935093505050915091565b61127181611737565b61128981600001518260e0015183610140015161187b565b600061129b8261012001516080611aa1565b9050600080600073ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff16146112e2578360c001516112e4565b335b90506112f68461012001516040611aa1565b611485578351608085015160a08601516113509291339173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff851614611348578860e0015161134a565b345b88611aad565b60e08501526113623360008681611d77565b61147c61137260208a018a61415e565b7fd9c45357000000000000000000000000000000000000000000000000000000006113a060408c018c61425c565b6040516024016113b19291906142d8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152865187906114659073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b611470576000611476565b8760e001515b85611f6e565b975091506115fc565b60006114958560200151836121a5565b90506114a5336000876000611d77565b6115a86114b560208b018b61415e565b7fd9c45357000000000000000000000000000000000000000000000000000000006114e360408d018d61425c565b6040516024016114f49291906142d8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152875188906108f29073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b809950819450505060006115cc86602001513088608001518960a001518d8a611aad565b90506115de866020015130858461229d565b50806115ee8660200151846121a5565b6115f891906142c1565b9750505b610a058288866123c8565b60005473ffffffffffffffffffffffffffffffffffffffff163314611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d5565b73ffffffffffffffffffffffffffffffffffffffff811661172b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d5565b611734816126e3565b50565b6000611770826000015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b90506117828261012001516002611aa1565b156118015780611793576000611799565b8160e001515b3411610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964206d73672e76616c756500000000000000000000000000000060448201526064016102d5565b8061180d576000611813565b8160e001515b3414610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964206d73672e76616c756500000000000000000000000000000060448201526064016102d5565b805160e01415610395576000808473ffffffffffffffffffffffffffffffffffffffff1663d505accf60e01b846040516020016118b9929190614351565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526118f191614399565b6000604051808303816000865af19150503d806000811461192e576040519150601f19603f3d011682016040523d82523d6000602084013e611933565b606091505b509150915081611a9a57600061197e826040518060400160405280601481526020017f5065726d69742063616c6c206661696c65643a20000000000000000000000000815250612ece565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152909150859073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e9060440160206040518083038186803b1580156119ee57600080fd5b505afa158015611a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2691906143ab565b1015611a6057806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d5919061440e565b7f08c379a0afcc32b1a39302f7cb8073359698411ab5fd6e3edb2c02c0b5fba8aa81604051611a8f919061440e565b60405180910390a15b505b5050505050565b81811615155b92915050565b835182908015611c7d5773ffffffffffffffffffffffffffffffffffffffff881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146000611afb8a83611af5578a6121a5565b306121a5565b905082875114611b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f496e76616c6964206c656e67746800000000000000000000000000000000000060448201526064016102d5565b60005b83811015611c0e57600086611b9857888281518110611b8b57611b8b61417b565b6020026020010151611bca565b612710898381518110611bad57611bad61417b565b602002602001015189611bc09190614421565b611bca919061445e565b9050611bfd8c85611bdb578c611bdd565b305b8c8581518110611bef57611bef61417b565b60200260200101518461229d565b50611c07816141d9565b9050611b6a565b506000611c208b84611af5578b6121a5565b611c2a90836142c1565b9050611c3681886142c1565b94507f4c39b7ce5f4f514f45cb6f82b171b8b0b7f2cbf488ad28e4eff451588e2f014b8b88838c8c8b604051611c7196959493929190614499565b60405180910390a15050505b509695505050505050565b600080611cc2856000015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b15611d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436c61696d20746f6b656e20697320455448000000000000000000000000000060448201526064016102d5565b6000611d398660000151306121a5565b9050611d4f866000015186868960e0015161229d565b6001925080611d628760000151306121a5565b611d6c91906142c1565b915050935093915050565b81606001515182604001515114611dea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420737263526563656976657273206c656e677468000000000060448201526064016102d5565b8015611e5757611e01826101200151610100611aa1565b8015611e22575073ffffffffffffffffffffffffffffffffffffffff831615155b15611e575760e08201518251611e529173ffffffffffffffffffffffffffffffffffffffff909116908590613306565b611f68565b6000805b836040015151811015611ef95783606001518181518110611e7e57611e7e61417b565b602002602001015182611e919190614550565b9150611ee9846000015184611ea65787611ea8565b305b86604001518481518110611ebe57611ebe61417b565b602002602001015187606001518581518110611edc57611edc61417b565b602002602001015161229d565b611ef2816141d9565b9050611e5b565b508260e00151811115611a9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f457863656564656420646573632e616d6f756e7400000000000000000000000060448201526064016102d5565b50505050565b6000806000611f818660200151856121a5565b90506000611f938760000151306121a5565b90506000611fa58860200151306121a5565b905060008a73ffffffffffffffffffffffffffffffffffffffff16888b604051611fcf9190614399565b60006040518083038185875af1925050503d806000811461200c576040519150601f19603f3d011682016040523d82523d6000602084013e612011565b606091505b505090508061207c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f43616c6c206661696c656400000000000000000000000000000000000000000060448201526064016102d5565b5073ffffffffffffffffffffffffffffffffffffffff861630146120c9576000816120ab8a60200151306121a5565b6120b591906142c1565b90506120c7896020015130898461229d565b505b826120d88960200151886121a5565b6120e291906142c1565b93508760e0015194506120fb8861012001516001611aa1565b801561214d575087516121379073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b8061214d575061214d8861012001516004611aa1565b156121985760006121628960000151306121a5565b90508281146121965761217581846142c1565b955061219689600001513033898d60e0015161219191906142c1565b61229d565b505b5050509550959350505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff841614156121f7575073ffffffffffffffffffffffffffffffffffffffff811631611aa7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906370a082319060240160206040518083038186803b15801561225e57600080fd5b505afa158015612272573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229691906143ab565b9050611aa7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f73656e64657220213d20726563697069656e740000000000000000000000000060448201526064016102d5565b8015611f685773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff851614156123935773ffffffffffffffffffffffffffffffffffffffff8316301415611e5257611e528282612758565b73ffffffffffffffffffffffffffffffffffffffff83163014156123bc57611e5284838361286b565b611f6884848484613413565b6123d88161012001516001611aa1565b1561246557828161010001516123ee9190614421565b60e08201516123fd9084614421565b1015610395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f52657475726e20616d6f756e74206973206e6f7420656e6f756768000000000060448201526064016102d5565b806101000151821015610395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f52657475726e20616d6f756e74206973206e6f7420656e6f756768000000000060448201526064016102d5565b80158061258357506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e9060440160206040518083038186803b15801561254957600080fd5b505afa15801561255d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258191906143ab565b155b61260f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016102d5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526103959084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526135b3565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80612761575050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516127989190614399565b60006040518083038185875af1925050503d80600081146127d5576040519150601f19603f3d011682016040523d82523d6000602084013e6127da565b606091505b5050905080610395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201527f4c4544000000000000000000000000000000000000000000000000000000000060648201526084016102d5565b8061287557505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052915160009283929087169161290c9190614399565b6000604051808303816000865af19150503d8060008114612949576040519150601f19603f3d011682016040523d82523d6000602084013e61294e565b606091505b50915091508180156129785750805115806129785750808060200190518101906129789190614568565b611a9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016102d5565b60006129ec82840184614605565b90504281606001511015612a5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f524f555445523a2045787069726564000000000000000000000000000000000060448201526064016102d5565b602081015151815151148015612a785750604081015151815151145b612ade576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c696420737761702064617461206c656e677468000000000000000060448201526064016102d5565b80515160005b81811015612d8c576000612af88a336121a5565b9050612b338a3386600001518581518110612b1557612b1561417b565b602002602001015187602001518681518110611edc57611edc61417b565b8884602001518381518110612b4a57612b4a61417b565b60200260200101511115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c6964207377617020616d6f756e740000000000000000000000000060448201526064016102d5565b6000612bc68b336121a5565b612bd090836142c1565b9050612bdc818b6142c1565b995050506000808b73ffffffffffffffffffffffffffffffffffffffff16638b674f5d60e01b86604001518581518110612c1857612c1861417b565b6020026020010151604051602401612c30919061440e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051612cb99190614399565b6000604051808303816000865af19150503d8060008114612cf6576040519150601f19603f3d011682016040523d82523d6000602084013e612cfb565b606091505b509150915081612d7757612d44816040518060400160405280601b81526020017f7377617053696e676c6553657175656e6365206661696c65643a200000000000815250612ece565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d5919061440e565b50508080612d84906141d9565b915050612ae4565b506000808a73ffffffffffffffffffffffffffffffffffffffff1663774b6b7e60e01b8b8a8a8860800151604051602401612dca94939291906146e8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051612e539190614399565b6000604051808303816000865af19150503d8060008114612e90576040519150601f19603f3d011682016040523d82523d6000602084013e612e95565b606091505b509150915081612ec157612d448160405180606001604052806023815260200161488460239139612ece565b5050505050505050505050565b60606044835110158015612f3b575082600081518110612ef057612ef061417b565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f0800000000000000000000000000000000000000000000000000000000000000145b8015612fa0575082600181518110612f5557612f5561417b565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167fc300000000000000000000000000000000000000000000000000000000000000145b8015613005575082600281518110612fba57612fba61417b565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7900000000000000000000000000000000000000000000000000000000000000145b801561306a57508260038151811061301f5761301f61417b565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167fa000000000000000000000000000000000000000000000000000000000000000145b15613116576044838101805190916130829190614550565b845110156130ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e76616c69642072657665727420726561736f6e000000000000000000000060448201526064016102d5565b82816040516020016130ff929190614733565b604051602081830303815290604052915050611aa7565b825160241480156131805750826000815181106131355761313561417b565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f4e00000000000000000000000000000000000000000000000000000000000000145b80156131e557508260018151811061319a5761319a61417b565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f4800000000000000000000000000000000000000000000000000000000000000145b801561324a5750826002815181106131ff576131ff61417b565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7b00000000000000000000000000000000000000000000000000000000000000145b80156132af5750826003815181106132645761326461417b565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7100000000000000000000000000000000000000000000000000000000000000145b156132d4576024830151826132c3826136bf565b6040516020016130ff9291906147b5565b816132de846136e7565b6040516020016132ef929190614801565b604051602081830303815290604052905092915050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e9060440160206040518083038186803b15801561337857600080fd5b505afa15801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906143ab565b6133ba9190614550565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260448101829052909150611f689085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612661565b8061341d57611f68565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916134bc9190614399565b6000604051808303816000865af19150503d80600081146134f9576040519150601f19603f3d011682016040523d82523d6000602084013e6134fe565b606091505b50915091508180156135285750805115806135285750808060200190518101906135289190614568565b611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016102d5565b6000613615826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661398c9092919063ffffffff16565b80519091501561039557808060200190518101906136339190614568565b610395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016102d5565b6060611aa7826040516020016136d791815260200190565b6040516020818303038152906040525b80516060907f30313233343536373839616263646566000000000000000000000000000000009060009061371c906002614421565b613727906002614550565b67ffffffffffffffff81111561373f5761373f613b8e565b6040519080825280601f01601f191660200182016040528015613769576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106137a0576137a061417b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106138035761380361417b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b8451811015613984578260048683815181106138535761385361417b565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c60f81c6010811061388f5761388f61417b565b1a60f81b8261389f836002614421565b6138aa906002614550565b815181106138ba576138ba61417b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350828582815181106138fc576138fc61417b565b60209101015160f81c600f16601081106139185761391861417b565b1a60f81b82613928836002614421565b613933906003614550565b815181106139435761394361417b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061397c816141d9565b915050613835565b509392505050565b606061399b84846000856139a5565b90505b9392505050565b606082471015613a37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102d5565b73ffffffffffffffffffffffffffffffffffffffff85163b613ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102d5565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ade9190614399565b60006040518083038185875af1925050503d8060008114613b1b576040519150601f19603f3d011682016040523d82523d6000602084013e613b20565b606091505b5091509150613b30828286613b3b565b979650505050505050565b60608315613b4a57508161399e565b825115613b5a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d5919061440e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715613be157613be1613b8e565b60405290565b60405160a0810167ffffffffffffffff81118282101715613be157613be1613b8e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613c5157613c51613b8e565b604052919050565b600067ffffffffffffffff821115613c7357613c73613b8e565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461173457600080fd5b8035613caa81613c7d565b919050565b600082601f830112613cc057600080fd5b81356020613cd5613cd083613c59565b613c0a565b82815260059290921b84018101918181019086841115613cf457600080fd5b8286015b84811015611c7d578035613d0b81613c7d565b8352918301918301613cf8565b801515811461173457600080fd5b60008060408385031215613d3957600080fd5b823567ffffffffffffffff80821115613d5157600080fd5b613d5d86838701613caf565b9350602091508185013581811115613d7457600080fd5b85019050601f81018613613d8757600080fd5b8035613d95613cd082613c59565b81815260059190911b82018301908381019088831115613db457600080fd5b928401925b82841015613ddb578335613dcc81613d18565b82529284019290840190613db9565b80955050505050509250929050565b600060208284031215613dfc57600080fd5b813567ffffffffffffffff811115613e1357600080fd5b820160a0818503121561399e57600080fd5b60008060408385031215613e3857600080fd5b8235613e4381613c7d565b946020939093013593505050565b600082601f830112613e6257600080fd5b81356020613e72613cd083613c59565b82815260059290921b84018101918181019086841115613e9157600080fd5b8286015b84811015611c7d5780358352918301918301613e95565b600082601f830112613ebd57600080fd5b813567ffffffffffffffff811115613ed757613ed7613b8e565b613f0860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c0a565b818152846020838601011115613f1d57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101608284031215613f4d57600080fd5b613f55613bbd565b9050613f6082613c9f565b8152613f6e60208301613c9f565b6020820152604082013567ffffffffffffffff80821115613f8e57600080fd5b613f9a85838601613caf565b60408401526060840135915080821115613fb357600080fd5b613fbf85838601613e51565b60608401526080840135915080821115613fd857600080fd5b613fe485838601613caf565b608084015260a0840135915080821115613ffd57600080fd5b61400985838601613e51565b60a084015261401a60c08501613c9f565b60c084015260e08481013590840152610100808501359084015261012080850135908401526101409150818401358181111561405557600080fd5b61406186828701613eac565b8385015250505092915050565b60008083601f84011261408057600080fd5b50813567ffffffffffffffff81111561409857600080fd5b6020830191508360208285010111156140b057600080fd5b9250929050565b600080600080600080608087890312156140d057600080fd5b86356140db81613c7d565b9550602087013567ffffffffffffffff808211156140f857600080fd5b6141048a838b01613f3a565b9650604089013591508082111561411a57600080fd5b6141268a838b0161406e565b9096509450606089013591508082111561413f57600080fd5b5061414c89828a0161406e565b979a9699509497509295939492505050565b60006020828403121561417057600080fd5b813561399e81613c7d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561420b5761420b6141aa565b5060010190565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea183360301811261424657600080fd5b9190910192915050565b6000611aa73683613f3a565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261429157600080fd5b83018035915067ffffffffffffffff8211156142ac57600080fd5b6020019150368190038213156140b057600080fd5b6000828210156142d3576142d36141aa565b500390565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b60005b83811015614340578181015183820152602001614328565b83811115611f685750506000910152565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825161438b816004850160208701614325565b919091016004019392505050565b60008251614246818460208701614325565b6000602082840312156143bd57600080fd5b5051919050565b600081518084526143dc816020860160208601614325565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061399e60208301846143c4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614459576144596141aa565b500290565b600082614494577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060c0820173ffffffffffffffffffffffffffffffffffffffff808a1684526020898186015288604086015260c0606086015282885180855260e087019150828a01945060005b818110156144ff5785518516835294830194918301916001016144e1565b5050858103608087015287518082529082019350915080870160005b838110156145375781518552938201939082019060010161451b565b5050505083151560a08401529050979650505050505050565b60008219821115614563576145636141aa565b500190565b60006020828403121561457a57600080fd5b815161399e81613d18565b600082601f83011261459657600080fd5b813560206145a6613cd083613c59565b82815260059290921b840181019181810190868411156145c557600080fd5b8286015b84811015611c7d57803567ffffffffffffffff8111156145e95760008081fd5b6145f78986838b0101613eac565b8452509183019183016145c9565b60006020828403121561461757600080fd5b813567ffffffffffffffff8082111561462f57600080fd5b9083019060a0828603121561464357600080fd5b61464b613be7565b82358281111561465a57600080fd5b61466687828601613caf565b82525060208301358281111561467b57600080fd5b61468787828601613e51565b60208301525060408301358281111561469f57600080fd5b6146ab87828601614585565b604083015250606083013560608201526080830135828111156146cd57600080fd5b6146d987828601613eac565b60808301525095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401528085166040840152506080606083015261472960808301846143c4565b9695505050505050565b60008351614745818460208801614325565b7f4572726f72280000000000000000000000000000000000000000000000000000908301908152835161477f816006840160208801614325565b7f290000000000000000000000000000000000000000000000000000000000000060069290910191820152600701949350505050565b600083516147c7818460208801614325565b7f50616e6963280000000000000000000000000000000000000000000000000000908301908152835161477f816006840160208801614325565b60008351614813818460208801614325565b7f556e6b6e6f776e28000000000000000000000000000000000000000000000000908301908152835161484d816008840160208801614325565b7f29000000000000000000000000000000000000000000000000000000000000006008929091019182015260090194935050505056fe66696e616c5472616e73616374696f6e50726f63657373696e67206661696c65643a20a264697066735822122073249c29f56ba7e3015341dacb53ea3a19faef7bc6be145066f861aa024b010e64736f6c63430008090033" + }, + { + "address": "0x06f9914838903162515afa67d5b99ada0f9791cc", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80638456cb59116100715780638456cb591461012057806384b0196e146101285780638da5cb5b14610143578063b1324f7b14610154578063bd919f791461017b578063f2fde38b1461018e57600080fd5b806318b1b60e146100ae5780631b0d0ea8146100de5780633f4ba83a146100f35780635c975abb146100fb578063715018a614610118575b600080fd5b6003546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100f16100ec366004610afc565b6101a1565b005b6100f16103a7565b600054600160a01b900460ff1660405190151581526020016100d5565b6100f16103b9565b6100f16103cb565b6101306103db565b6040516100d59796959493929190610bc2565b6000546001600160a01b03166100c1565b6100c17f000000000000000000000000e3b5500039f401e48627e8025b37d4871cf34f3681565b6100f1610189366004610c58565b610421565b6100f161019c366004610c58565b61047d565b6101a96104c0565b428410156101ca57604051630819bdcd60e01b815260040160405180910390fd5b60006102377fba638b51cffb1e232f4aa9d2d09507c7430ee6e2ced06fdfdf4d66fa247b6c8686336040805160208101949094528301919091526001600160a01b031660608201526080810186905260a001604051602081830303815290604052805190602001206104eb565b600354604080516020601f87018190048102820181019092528581529293506001600160a01b039091169161028991849190879087908190840183828082843760009201919091525061051e92505050565b6001600160a01b0316146102b0576040516337e8456b60e01b815260040160405180910390fd5b60006001600160a01b037f000000000000000000000000e3b5500039f401e48627e8025b37d4871cf34f3616632cfd3005336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018890526044016020604051808303816000875af115801561032f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103539190610c88565b90507fe38f686a79f201b17037957e21844a9db92dbf5b1e2cfb0bf9135280d9ee040433604080516001600160a01b03909216825260208201849052810187905260600160405180910390a1505050505050565b6103af610548565b6103b7610575565b565b6103c1610548565b6103b760006105ca565b6103d3610548565b6103b761061a565b6000606080600080600060606103ef61065d565b6103f761068f565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b610429610548565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f431b93b531274b387b5c0098b65bf18c7d246ab17ece9980ce77547a73880eb29060200160405180910390a150565b610485610548565b6001600160a01b0381166104b457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6104bd816105ca565b50565b600054600160a01b900460ff16156103b75760405163d93c066560e01b815260040160405180910390fd5b60006105186104f86106bc565b8360405161190160f01b8152600281019290925260228201526042902090565b92915050565b60008060008061052e86866107e7565b92509250925061053e8282610834565b5090949350505050565b6000546001600160a01b031633146103b75760405163118cdaa760e01b81523360048201526024016104ab565b61057d6108f1565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6106226104c0565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586105ad3390565b606061068a7f53425447656e657369730000000000000000000000000000000000000000000a600161091b565b905090565b606061068a7f3100000000000000000000000000000000000000000000000000000000000001600261091b565b6000306001600160a01b037f00000000000000000000000006f9914838903162515afa67d5b99ada0f9791cc1614801561071557507f000000000000000000000000000000000000000000000000000000000000e70846145b1561073f57507f799eaa261744cf5094c3938c3a32910820855d0a3020f0202a3f385213f5ea1390565b61068a604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f9ce556c5d055e174b26148d1a80f595fa420f3f546d0373fd7448af1d9f0a8ac918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080600083516041036108215760208401516040850151606086015160001a610813888285856109c6565b95509550955050505061082d565b50508151600091506002905b9250925092565b600082600381111561084857610848610ca1565b03610851575050565b600182600381111561086557610865610ca1565b036108835760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561089757610897610ca1565b036108b85760405163fce698f760e01b8152600481018290526024016104ab565b60038260038111156108cc576108cc610ca1565b036108ed576040516335e2f38360e21b8152600481018290526024016104ab565b5050565b600054600160a01b900460ff166103b757604051638dfc202b60e01b815260040160405180910390fd5b606060ff83146109355761092e83610a95565b9050610518565b81805461094190610cb7565b80601f016020809104026020016040519081016040528092919081815260200182805461096d90610cb7565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b50505050509050610518565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610a015750600091506003905082610a8b565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610a55573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610a8157506000925060019150829050610a8b565b9250600091508190505b9450945094915050565b60606000610aa283610ad4565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f81111561051857604051632cd44ac360e21b815260040160405180910390fd5b60008060008060608587031215610b1257600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610b3857600080fd5b818701915087601f830112610b4c57600080fd5b813581811115610b5b57600080fd5b886020828501011115610b6d57600080fd5b95989497505060200194505050565b6000815180845260005b81811015610ba257602081850181015186830182015201610b86565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e081840152610be260e084018a610b7c565b8381036040850152610bf4818a610b7c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015610c4657835183529284019291840191600101610c2a565b50909c9b505050505050505050505050565b600060208284031215610c6a57600080fd5b81356001600160a01b0381168114610c8157600080fd5b9392505050565b600060208284031215610c9a57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b600181811c90821680610ccb57607f821691505b602082108103610ceb57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220ad6e9225c43b65a56ef2da6314c684fcf72a3884e10c45347bc777da0749fff164736f6c63430008140033" + }, + { + "address": "0x54c97c29021a12cacb31f8388b32dd5486083f7b", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106102c15760003560e01c80638da5cb5b116101775780638da5cb5b146107205780639010d07c1461073e57806391d148541461075e578063938e3d7b1461077e57806395d89b411461079e5780639bcf7a15146107b3578063a07ced9e146107d3578063a0a8e460146107f3578063a217fddf1461080f578063a22cb46514610824578063a32fa5b314610844578063ac9650d814610864578063b24f2d3914610891578063b6f10c79146108bc578063bd85b039146108dc578063c7337d6b14610909578063ca15c8731461093f578063cb2ef6f71461095f578063d37c353b14610980578063d45573f6146109a0578063d45b28d7146109b5578063d547741f146109e2578063de903ddd14610a02578063e159163414610a22578063e57553da14610a42578063e8a3d48514610a66578063e9703d2514610a7b578063e985e9c514610ac4578063ea1def9c14610b0d578063f242432a14610b2d578063f28083c314610b4d57600080fd5b8062fdd58e146102c657806301ffc9a7146102f957806306fdde0314610329578063079fe40e1461034b5780630e89341c1461036d57806313af40351461038d578063183718d1146103af5780631e7ac488146103cf5780632419f51b146103ef578063248a9ca31461040f57806324aaffaa1461043c57806329c49b9b146104695780632a55205a146104895780632eb2c2d6146104b75780632f2ff15d146104d757806336568abe146104f75780633b1475a7146105175780634cc157df1461052c5780634e1273f41461056e578063572b6c051461059b57806357bc3d78146105bb5780635811ddab146105ce5780635ab063e81461061b578063600dd5ea1461063b57806363b45e2d1461065b5780636b20c454146106705780636f4f2837146106905780637e54523c146106b057806383040532146106d057806387198cf214610700575b600080fd5b3480156102d257600080fd5b506102e66102e1366004614906565b610b74565b6040519081526020015b60405180910390f35b34801561030557600080fd5b50610319610314366004614948565b610c0f565b60405190151581526020016102f0565b34801561033557600080fd5b5061033e610c37565b6040516102f091906149b5565b34801561035757600080fd5b50610360610cc5565b6040516102f091906149c8565b34801561037957600080fd5b5061033e6103883660046149dc565b610cd4565b34801561039957600080fd5b506103ad6103a83660046149f5565b610d15565b005b3480156103bb57600080fd5b506103ad6103ca366004614a6b565b610d45565b3480156103db57600080fd5b506103ad6103ea366004614906565b611084565b3480156103fb57600080fd5b506102e661040a3660046149dc565b6110b6565b34801561041b57600080fd5b506102e661042a3660046149dc565b6000908152600d602052604090205490565b34801561044857600080fd5b506102e66104573660046149dc565b60de6020526000908152604090205481565b34801561047557600080fd5b506103ad610484366004614ac9565b611124565b34801561049557600080fd5b506104a96104a4366004614af9565b611196565b6040516102f0929190614b1b565b3480156104c357600080fd5b506103ad6104d2366004614c82565b6111d3565b3480156104e357600080fd5b506103ad6104f2366004614ac9565b611231565b34801561050357600080fd5b506103ad610512366004614ac9565b6112c7565b34801561052357600080fd5b50600b546102e6565b34801561053857600080fd5b5061054c6105473660046149dc565b611326565b604080516001600160a01b03909316835261ffff9091166020830152016102f0565b34801561057a57600080fd5b5061058e610589366004614da3565b611391565b6040516102f09190614e42565b3480156105a757600080fd5b506103196105b63660046149f5565b6114b2565b6103ad6105c9366004614e67565b6114d0565b3480156105da57600080fd5b506102e66105e9366004614f0c565b6000928352600f60209081526040808520938552600390930181528284206001600160a01b0390921684525290205490565b34801561062757600080fd5b506102e66106363660046149dc565b611613565b34801561064757600080fd5b506103ad610656366004614906565b6116c4565b34801561066757600080fd5b506008546102e6565b34801561067c57600080fd5b506103ad61068b366004614f45565b6116f2565b34801561069c57600080fd5b506103ad6106ab3660046149f5565b61178f565b3480156106bc57600080fd5b506103ad6106cb366004614906565b6117bc565b3480156106dc57600080fd5b506103196106eb3660046149dc565b600a6020526000908152604090205460ff1681565b34801561070c57600080fd5b506103ad61071b366004614af9565b6117ea565b34801561072c57600080fd5b506007546001600160a01b0316610360565b34801561074a57600080fd5b50610360610759366004614af9565b611846565b34801561076a57600080fd5b50610319610779366004614ac9565b611934565b34801561078a57600080fd5b506103ad610799366004614fba565b61195f565b3480156107aa57600080fd5b5061033e61198c565b3480156107bf57600080fd5b506103ad6107ce366004614fee565b611999565b3480156107df57600080fd5b506103ad6107ee3660046149dc565b6119c8565b3480156107ff57600080fd5b50604051600481526020016102f0565b34801561081b57600080fd5b506102e6600081565b34801561083057600080fd5b506103ad61083f366004615026565b6119eb565b34801561085057600080fd5b5061031961085f366004614ac9565b6119fd565b34801561087057600080fd5b5061088461087f366004615054565b611a53565b6040516102f09190615095565b34801561089d57600080fd5b506004546001600160a01b03811690600160a01b900461ffff1661054c565b3480156108c857600080fd5b506103ad6108d73660046150f9565b611bc6565b3480156108e857600080fd5b506102e66108f73660046149dc565b60dd6020526000908152604090205481565b34801561091557600080fd5b506103606109243660046149dc565b60df602052600090815260409020546001600160a01b031681565b34801561094b57600080fd5b506102e661095a3660046149dc565b611bf3565b34801561096b57600080fd5b506a44726f704552433131353560a81b6102e6565b34801561098c57600080fd5b506102e661099b36600461515b565b611c7c565b3480156109ac57600080fd5b5061054c611d89565b3480156109c157600080fd5b506109d56109d0366004614af9565b611da6565b6040516102f091906151d4565b3480156109ee57600080fd5b506103ad6109fd366004614ac9565b611f0d565b348015610a0e57600080fd5b506103ad610a1d366004615241565b611f26565b348015610a2e57600080fd5b506103ad610a3d3660046152a3565b611f80565b348015610a4e57600080fd5b506104a96002546003546001600160a01b0390911691565b348015610a7257600080fd5b5061033e6121c9565b348015610a8757600080fd5b50610aaf610a963660046149dc565b600f602052600090815260409020805460019091015482565b604080519283526020830191909152016102f0565b348015610ad057600080fd5b50610319610adf3660046153b5565b6001600160a01b03918216600090815260a76020908152604080832093909416825291909152205460ff1690565b348015610b1957600080fd5b50610319610b283660046153e3565b6121d6565b348015610b3957600080fd5b506103ad610b4836600461545c565b6125de565b348015610b5957600080fd5b50600254600160b01b900460ff166040516102f091906154da565b60006001600160a01b038316610be45760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b50600081815260a6602090815260408083206001600160a01b03861684529091529020545b92915050565b6000610c1a82612635565b80610c095750506001600160e01b03191663152a902d60e11b1490565b60d88054610c4490615502565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7090615502565b8015610cbd5780601f10610c9257610100808354040283529160200191610cbd565b820191906000526020600020905b815481529060010190602001808311610ca057829003601f168201915b505050505081565b6006546001600160a01b031690565b60606000610ce183612685565b905080610ced84612821565b604051602001610cfe929190615536565b604051602081830303815290604052915050919050565b610d1d6128b3565b610d395760405162461bcd60e51b8152600401610bdb90615565565b610d42816128c6565b50565b610d4d6128b3565b610d695760405162461bcd60e51b8152600401610bdb90615565565b6000848152600f6020526040902080546001820154818415610d9257610d8f82846155a3565b90505b600184018690558084556000805b87811015610f4057801580610dd85750888882818110610dc257610dc26155b6565b9050602002810190610dd491906155cc565b3582105b610e095760405162461bcd60e51b815260206004820152600260248201526114d560f21b6044820152606401610bdb565b60006002870181610e1a84876155a3565b8152602001908152602001600020600201549050898983818110610e4057610e406155b6565b9050602002810190610e5291906155cc565b60200135811115610e9a5760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e4818db185a5b595960721b6044820152606401610bdb565b898983818110610eac57610eac6155b6565b9050602002810190610ebe91906155cc565b600288016000610ece85886155a3565b81526020019081526020016000208181610ee89190615748565b50819050600288016000610efc85886155a3565b8152602081019190915260400160002060020155898983818110610f2257610f226155b6565b9050602002810190610f3491906155cc565b35925050600101610da0565b508515610fb757835b82811015610fb1576000818152600280880160205260408220828155600181018390559081018290556003810182905560048101829055600581018290556006810180546001600160a01b031916905590610fa76007830182614893565b5050600101610f49565b5061103d565b8683111561103d57865b8381101561103b57600286016000610fd983866155a3565b81526020810191909152604001600090812081815560018101829055600281018290556003810182905560048101829055600581018290556006810180546001600160a01b0319169055906110316007830182614893565b5050600101610fc1565b505b887f066f72a648b18490c0bc4ab07d508cdb5d6589fa188c63cfba1e0547f3a6556a89898960405161107193929190615834565b60405180910390a2505050505050505050565b61108c6128b3565b6110a85760405162461bcd60e51b8152600401610bdb90615565565b6110b28282612918565b5050565b60006110c160085490565b82106110ff5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610bdb565b60088281548110611112576111126155b6565b90600052602060002001549050919050565b600061113081336129cc565b600083815260df60205260409081902080546001600160a01b0319166001600160a01b0385161790555183907f359479172ba65a6639b0df237f704e030498cb7135d5e89b56f598bd1d84b016906111899085906149c8565b60405180910390a2505050565b6000806000806111a586611326565b90945084925061ffff1690506127106111be828761591c565b6111c89190615933565b925050509250929050565b6111db612a4c565b6001600160a01b0316856001600160a01b03161480611201575061120185610adf612a4c565b61121d5760405162461bcd60e51b8152600401610bdb90615955565b61122a8585858585612a56565b5050505050565b6000828152600d602052604090205461124a90336129cc565b6000828152600c602090815260408083206001600160a01b038516845290915290205460ff16156112bd5760405162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c79206772616e7420746f206e6f6e20686f6c646572730000006044820152606401610bdb565b6110b28282612c07565b336001600160a01b0382161461131c5760405162461bcd60e51b815260206004820152601a60248201527921b0b71037b7363c903932b737bab731b2903337b91039b2b63360311b6044820152606401610bdb565b6110b28282612c1b565b6000818152600560209081526040808320815180830190925280546001600160a01b03168083526001909101549282019290925282911561136d5780516020820151611387565b6004546001600160a01b03811690600160a01b900461ffff165b9250925050915091565b606081518351146113f65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610bdb565b600083516001600160401b0381111561141157611411614b34565b60405190808252806020026020018201604052801561143a578160200160208202803683370190505b50905060005b84518110156114aa5761148585828151811061145e5761145e6155b6565b6020026020010151858381518110611478576114786155b6565b6020026020010151610b74565b828281518110611497576114976155b6565b6020908102919091010152600101611440565b509392505050565b6001600160a01b031660009081526042602052604090205460ff1690565b6114df86888787878787612c72565b60006114ea87611613565b9050611502816114f8612d00565b89898989896121d6565b506000878152600f60209081526040808320848452600290810190925282200180548892906115329084906155a3565b90915550506000878152600f602090815260408083208484526003019091528120879161155d612d00565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461158c91906155a3565b909155506115a09050876000888888612d0a565b6115ab888888612e4d565b876001600160a01b03166115bd612d00565b6001600160a01b0316827ffa76a4010d9533e3e964f2930a65fb6042a12fa6ff5b08281837a10b0be7321e8a8a604051611601929190918252602082015260400190565b60405180910390a45050505050505050565b6000818152600f60205260408120600181015481548391611633916155a3565b90505b815481111561168d576002820160006116506001846159a3565b815260200190815260200160002060000154421061167b576116736001826159a3565b949350505050565b80611685816159b6565b915050611636565b5060405162461bcd60e51b815260206004820152600b60248201526a10a1a7a72224aa24a7a71760a91b6044820152606401610bdb565b6116cc6128b3565b6116e85760405162461bcd60e51b8152600401610bdb90615565565b6110b28282612e68565b6116fa612a4c565b6001600160a01b0316836001600160a01b03161480611720575061172083610adf612a4c565b61177f5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f726044820152691030b8383937bb32b21760b11b6064820152608401610bdb565b61178a838383612ee5565b505050565b6117976128b3565b6117b35760405162461bcd60e51b8152600401610bdb90615565565b610d42816130fb565b6117c46128b3565b6117e05760405162461bcd60e51b8152600401610bdb90615565565b6110b2828261316b565b60006117f681336129cc565b600083815260de602090815260409182902084905581518581529081018490527fc58cd6132bb46df23d468939c03dd023b74b509aaa6b04c39d5a6461c65963bd910160405180910390a1505050565b6000828152600e602052604081205481805b8281101561192b576000868152600e602090815260408083208484526001019091529020546001600160a01b0316156118d4578482036118c2576000868152600e602090815260408083209383526001909301905220546001600160a01b03169250610c09915050565b6118cd6001836155a3565b9150611919565b6118df866000611934565b801561190657506000868152600e6020908152604080832083805260020190915290205481145b15611919576119166001836155a3565b91505b6119246001826155a3565b9050611858565b50505092915050565b6000918252600c602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6119676128b3565b6119835760405162461bcd60e51b8152600401610bdb90615565565b610d42816131c9565b60d98054610c4490615502565b6119a16128b3565b6119bd5760405162461bcd60e51b8152600401610bdb90615565565b61178a838383613299565b60dc546119d581336129cc565b60006119e0836110b6565b905061178a81613341565b6110b26119f6612a4c565b838361345e565b6000828152600c6020908152604080832083805290915281205460ff16611a4a57506000828152600c602090815260408083206001600160a01b038516845290915290205460ff16610c09565b50600192915050565b6060816001600160401b03811115611a6d57611a6d614b34565b604051908082528060200260200182016040528015611aa057816020015b6060815260200190600190039081611a8b5790505b5090506000611aad612a4c565b9050336001600160a01b038216141560005b8481101561192b578115611b3e57611b1c30878784818110611ae357611ae36155b6565b9050602002810190611af591906155ec565b86604051602001611b08939291906159cd565b604051602081830303815290604052613536565b848281518110611b2e57611b2e6155b6565b6020026020010181905250611bbe565b611ba030878784818110611b5457611b546155b6565b9050602002810190611b6691906155ec565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061353692505050565b848281518110611bb257611bb26155b6565b60200260200101819052505b600101611abf565b611bce6128b3565b611bea5760405162461bcd60e51b8152600401610bdb90615565565b610d4281613562565b6000818152600e6020526040812054815b81811015611c57576000848152600e602090815260408083208484526001019091529020546001600160a01b031615611c4557611c426001846155a3565b92505b611c506001826155a3565b9050611c04565b50611c63836000611934565b15611c7657611c736001836155a3565b91505b50919050565b6000611c866135c6565b611ca25760405162461bcd60e51b8152600401610bdb90615565565b85600003611cda5760405162461bcd60e51b81526020600482015260056024820152640c08185b5d60da1b6044820152606401610bdb565b6000600b549050611d22818888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135d692505050565b600b919091559150807f2a0365091ef1a40953c670dce28177e37520648a6fdc91506bffac0ab045570d6001611d588a846155a3565b611d6291906159a3565b88888888604051611d779594939291906159ee565b60405180910390a25095945050505050565b6002546001600160a01b03811691600160a01b90910461ffff1690565b611dfa60405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b6000838152600f6020908152604080832085845260029081018352928190208151610100810183528154815260018201549381019390935292830154908201526003820154606082015260048201546080820152600582015460a082015260068201546001600160a01b031660c082015260078201805491929160e084019190611e8390615502565b80601f0160208091040260200160405190810160405280929190818152602001828054611eaf90615502565b8015611efc5780601f10611ed157610100808354040283529160200191611efc565b820191906000526020600020905b815481529060010190602001808311611edf57829003601f168201915b505050505081525050905092915050565b6000828152600d602052604090205461131c90336129cc565b60dc54611f3381336129cc565b6000611f3e856110b6565b905061122a8185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061363a92505050565b600054610100900460ff1615808015611fa05750600054600160ff909116105b80611fc15750611faf306136df565b158015611fc1575060005460ff166001145b6120245760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610bdb565b6000805460ff191660011790558015612047576000805461ff0019166101001790555b7f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a67f6bd6b5318a46e5fff572d5e4258a20774aab40cc35ac7680654b9081fcc82f806120b38a6136ee565b6120cb60405180602001604052806000815250613726565b6120d48b6131c9565b6120dd8e6128c6565b6120e860008f612c07565b6120f2828f612c07565b6120fc838f612c07565b612107836000612c07565b612111818f612c07565b61211b8182613756565b61212e85876001600160801b0316612918565b61214188886001600160801b0316612e68565b61214a896130fb565b60da83905560db82905560dc81905560d86121658e82615a27565b5060d96121728d82615a27565b5050505080156121bc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b60018054610c4490615502565b6000858152600f602090815260408083208a8452600290810183528184208251610100810184528154815260018201549481019490945290810154918301919091526003810154606083015260048101546080830152600581015460a083015260068101546001600160a01b031660c08301526007810180548493929160e084019161226190615502565b80601f016020809104026020016040519081016040528092919081815260200182805461228d90615502565b80156122da5780601f106122af576101008083540402835291602001916122da565b820191906000526020600020905b8154815290600101906020018083116122bd57829003601f168201915b50505091909252505050606081015160a082015160c083015160808401519394509192909190156123ba576123b66123128780615ae0565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505060808088015191508e9060208b01359060408c013590612367908d0160608e016149f5565b6040516001600160601b0319606095861b811660208301526034820194909452605481019290925290921b1660748201526088016040516020818303038152906040528051906020012061379e565b5094505b84156124415785602001356000036123d257826123d8565b85602001355b92506000198660400135036123ed57816123f3565b85604001355b91506000198660400135141580156124245750600061241860808801606089016149f5565b6001600160a01b031614155b61242e578061243e565b61243e60808701606088016149f5565b90505b6000600f60008c815260200190815260200160002060030160008e815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020549050816001600160a01b0316896001600160a01b03161415806124b15750828814155b156124f15760405162461bcd60e51b815260206004820152601060248201526f2150726963654f7243757272656e637960801b6044820152606401610bdb565b891580612506575083612504828c6155a3565b115b1561253c5760405162461bcd60e51b8152600401610bdb906020808252600490820152632151747960e01b604082015260600190565b84602001518a866040015161255191906155a3565b111561258c5760405162461bcd60e51b815260206004820152600a602482015269214d6178537570706c7960b01b6044820152606401610bdb565b84514210156125ce5760405162461bcd60e51b815260206004820152600e60248201526d18d85b9d0818db185a5b481e595d60921b6044820152606401610bdb565b5050505050979650505050505050565b6125e6612a4c565b6001600160a01b0316856001600160a01b0316148061260c575061260c85610adf612a4c565b6126285760405162461bcd60e51b8152600401610bdb90615955565b61122a8585858585613862565b60006001600160e01b03198216636cdb3d1360e11b148061266657506001600160e01b031982166303a24d0760e21b145b80610c0957506301ffc9a760e01b6001600160e01b0319831614610c09565b6060600061269260085490565b9050600060088054806020026020016040519081016040528092919081815260200182805480156126e257602002820191906000526020600020905b8154815260200190600101908083116126ce575b5050505050905060005b828110156127e657818181518110612706576127066155b6565b60200260200101518510156127d4576009600083838151811061272b5761272b6155b6565b60200260200101518152602001908152602001600020805461274c90615502565b80601f016020809104026020016040519081016040528092919081815260200182805461277890615502565b80156127c55780601f1061279a576101008083540402835291602001916127c5565b820191906000526020600020905b8154815290600101906020018083116127a857829003601f168201915b50505050509350505050919050565b6127df6001826155a3565b90506126ec565b5060405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081d1bdad95b9259608a1b6044820152606401610bdb565b6060600061282e836139a9565b60010190506000816001600160401b0381111561284d5761284d614b34565b6040519080825280601f01601f191660200182016040528015612877576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461288157509392505050565b60006128c181610779612a4c565b905090565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a35050565b61271081111561293a5760405162461bcd60e51b8152600401610bdb90615b29565b6001600160a01b0382166129605760405162461bcd60e51b8152600401610bdb90615b52565b600280546001600160b01b031916600160a01b61ffff8416026001600160a01b031916176001600160a01b0384169081179091556040518281527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f18304906020015b60405180910390a25050565b6000828152600c602090815260408083206001600160a01b038516845290915290205460ff166110b257612a0a816001600160a01b03166014613a7f565b612a15836020613a7f565b604051602001612a26929190615b7d565b60408051601f198184030181529082905262461bcd60e51b8252610bdb916004016149b5565b60006128c1613c1a565b8151835114612a775760405162461bcd60e51b8152600401610bdb90615bea565b6001600160a01b038416612a9d5760405162461bcd60e51b8152600401610bdb90615c32565b6000612aa7612a4c565b9050612ab7818787878787613c3f565b60005b8451811015612b99576000858281518110612ad757612ad76155b6565b602002602001015190506000858381518110612af557612af56155b6565b602090810291909101810151600084815260a6835260408082206001600160a01b038e168352909352919091205490915081811015612b465760405162461bcd60e51b8152600401610bdb90615c77565b600083815260a6602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612b859084906155a3565b909155505060019093019250612aba915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612be9929190615cc1565b60405180910390a4612bff818787878787613dea565b505050505050565b612c118282613f4c565b6110b28282613fa7565b612c258282614014565b6000828152600e602090815260408083206001600160a01b03851680855260028201808552838620805487526001909301855292852080546001600160a01b031916905584529152555050565b600087815260de60205260409020541580612cb15750600087815260de602090815260408083205460dd90925290912054612cae9087906155a3565b11155b612cf75760405162461bcd60e51b8152602060048201526017602482015276657863656564206d617820746f74616c20737570706c7960481b6044820152606401610bdb565b50505050505050565b60006128c1612a4c565b80600003612d35573415612d305760405162461bcd60e51b8152600401610bdb90615cef565b61122a565b600080612d40611d89565b909250905060006001600160a01b03871615612d5c5786612d9e565b600088815260df60205260409020546001600160a01b031615612d9657600088815260df60205260409020546001600160a01b0316612d9e565b612d9e610cc5565b90506000612dac858861591c565b90506000612710612dc161ffff86168461591c565b612dcb9190615933565b9050600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03891601612dfd5750348214612e01565b5034155b80612e1e5760405162461bcd60e51b8152600401610bdb90615cef565b612e3188612e2a612a4c565b8885614076565b6121bc88612e3d612a4c565b86612e4886886159a3565b614076565b61178a838383604051806020016040528060008152506140bc565b612710811115612e8a5760405162461bcd60e51b8152600401610bdb90615b29565b600480546001600160a01b0384166001600160b01b03199091168117600160a01b61ffff851602179091556040518281527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb906020016129c0565b6001600160a01b038316612f475760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610bdb565b8051825114612f685760405162461bcd60e51b8152600401610bdb90615bea565b6000612f72612a4c565b9050612f9281856000868660405180602001604052806000815250613c3f565b60005b835181101561308c576000848281518110612fb257612fb26155b6565b602002602001015190506000848381518110612fd057612fd06155b6565b602090810291909101810151600084815260a6835260408082206001600160a01b038c16835290935291909120549091508181101561305d5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610bdb565b600092835260a6602090815260408085206001600160a01b038b16865290915290922091039055600101612f95565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516130dd929190615cc1565b60405180910390a46040805160208101909152600090525b50505050565b6001600160a01b0381166131215760405162461bcd60e51b8152600401610bdb90615b52565b600680546001600160a01b0319166001600160a01b0383169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a250565b6003819055600280546001600160a01b0319166001600160a01b0384161790556040517ff8086cee80709bd44c82f89dbca54115ebd05e840a88ab81df9cf5be9754eb63906131bd9084908490614b1b565b60405180910390a15050565b6000600180546131d890615502565b80601f016020809104026020016040519081016040528092919081815260200182805461320490615502565b80156132515780601f1061322657610100808354040283529160200191613251565b820191906000526020600020905b81548152906001019060200180831161323457829003601f168201915b5050505050905081600190816132679190615a27565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a1681836040516131bd929190615d0b565b6127108111156132bb5760405162461bcd60e51b8152600401610bdb90615b29565b6040805180820182526001600160a01b038481168083526020808401868152600089815260058352869020945185546001600160a01b031916941693909317845591516001909301929092559151838152909185917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d91015b60405180910390a3505050565b6000818152600960205260408120805461335a90615502565b80601f016020809104026020016040519081016040528092919081815260200182805461338690615502565b80156133d35780601f106133a8576101008083540402835291602001916133d3565b820191906000526020600020905b8154815290600101906020018083116133b657829003601f168201915b50505050509050600081511161341b5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840c4c2e8c6d609b1b6044820152606401610bdb565b6000828152600a6020526040808220805460ff19166001179055517feef043febddf4e1d1cf1f72ff1407b84e036e805aa0934418cb82095da8d71649190a15050565b816001600160a01b0316836001600160a01b0316036134d15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610bdb565b6001600160a01b03838116600081815260a76020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101613334565b606061355b8383604051806060016040528060278152602001615f40602791396141e3565b9392505050565b6002805482919060ff60b01b1916600160b01b836001811115613587576135876154c4565b02179055507fd246da9440709ce0dd3f4fd669abc85ada012ab9774b8ecdcc5059ba1486b9c1816040516135bb91906154da565b60405180910390a150565b60006128c160db54610779612a4c565b6000806135e384866155a3565b60088054600181019091557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30181905560008181526009602052604090209092508291506136318482615a27565b50935093915050565b6000828152600a602052604090205460ff16156136885760405162461bcd60e51b815260206004820152600c60248201526b2130ba31b410333937bd32b760a11b6044820152606401610bdb565b60008281526009602052604090206136a08282615a27565b507f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c6136cb8361425b565b6040805191825260208201859052016131bd565b6001600160a01b03163b151590565b600054610100900460ff166137155760405162461bcd60e51b8152600401610bdb90615d30565b61371d61436b565b610d4281614394565b600054610100900460ff1661374d5760405162461bcd60e51b8152600401610bdb90615d30565b610d4281614419565b6000828152600d6020526040808220805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000808281805b8751811015613856576137b960028361591c565b915060008882815181106137cf576137cf6155b6565b6020026020010151905080841161381157604080516020810186905290810182905260600160405160208183030381529060405280519060200120935061384d565b604080516020810183905290810185905260600160405160208183030381529060405280519060200120935060018361384a91906155a3565b92505b506001016137a5565b50941495939450505050565b6001600160a01b0384166138885760405162461bcd60e51b8152600401610bdb90615c32565b6000613892612a4c565b9050600061389f85614425565b905060006138ac85614425565b90506138bc838989858589613c3f565b600086815260a6602090815260408083206001600160a01b038c168452909152902054858110156138ff5760405162461bcd60e51b8152600401610bdb90615c77565b600087815260a6602090815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061393e9084906155a3565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461399e848a8a8a8a8a614470565b505050505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106139e85772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310613a12576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310613a3057662386f26fc10000830492506010015b6305f5e1008310613a48576305f5e100830492506008015b6127108310613a5c57612710830492506004015b60648310613a6e576064830492506002015b600a8310610c095760010192915050565b60606000613a8e83600261591c565b613a999060026155a3565b6001600160401b03811115613ab057613ab0614b34565b6040519080825280601f01601f191660200182016040528015613ada576020820181803683370190505b509050600360fc1b81600081518110613af557613af56155b6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613b2457613b246155b6565b60200101906001600160f81b031916908160001a9053506000613b4884600261591c565b613b539060016155a3565b90505b6001811115613bcb576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613b8757613b876155b6565b1a60f81b828281518110613b9d57613b9d6155b6565b60200101906001600160f81b031916908160001a90535060049490941c93613bc4816159b6565b9050613b56565b50831561355b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610bdb565b6000613c25336114b2565b15613c37575060131936013560601c90565b503390565b90565b613c4c60da546000611934565b158015613c6157506001600160a01b03851615155b8015613c7557506001600160a01b03841615155b15613cf057613c8660da5486611934565b80613c985750613c9860da5485611934565b613cf05760405162461bcd60e51b8152602060048201526024808201527f7265737472696374656420746f205452414e534645525f524f4c4520686f6c6460448201526332b9399760e11b6064820152608401610bdb565b6001600160a01b038516613d6e5760005b8351811015613d6c57828181518110613d1c57613d1c6155b6565b602002602001015160dd6000868481518110613d3a57613d3a6155b6565b602002602001015181526020019081526020016000206000828254613d5f91906155a3565b9091555050600101613d01565b505b6001600160a01b038416612bff5760005b8351811015612cf757828181518110613d9a57613d9a6155b6565b602002602001015160dd6000868481518110613db857613db86155b6565b602002602001015181526020019081526020016000206000828254613ddd91906159a3565b9091555050600101613d7f565b613dfc846001600160a01b03166136df565b15612bff5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190613e359089908990889088908890600401615d7b565b6020604051808303816000875af1925050508015613e70575060408051601f3d908101601f19168201909252613e6d91810190615dcd565b60015b613f1c57613e7c615dea565b806308c379a003613eb55750613e90615e05565b80613e9b5750613eb7565b8060405162461bcd60e51b8152600401610bdb91906149b5565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610bdb565b6001600160e01b0319811663bc197c8160e01b14612cf75760405162461bcd60e51b8152600401610bdb90615e8e565b6000828152600c602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000828152600e6020526040812080549160019190613fc683856155a3565b90915550506000928352600e6020908152604080852083865260018101835281862080546001600160a01b039096166001600160a01b03199096168617905593855260029093019052912055565b61401e82826129cc565b6000828152600c602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b80156130f55773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038516016140b0576140ab8282614532565b6130f5565b6130f5848484846145d4565b6001600160a01b03841661411c5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610bdb565b6000614126612a4c565b9050600061413385614425565b9050600061414085614425565b905061415183600089858589613c3f565b600086815260a6602090815260408083206001600160a01b038b168452909152812080548792906141839084906155a3565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612cf783600089898989614470565b6060600080856001600160a01b0316856040516142009190615ed6565b600060405180830381855af49150503d806000811461423b576040519150601f19603f3d011682016040523d82523d6000602084013e614240565b606091505b509150915061425186838387614627565b9695505050505050565b60008061426760085490565b9050600060088054806020026020016040519081016040528092919081815260200182805480156142b757602002820191906000526020600020905b8154815260200190600101908083116142a3575b5050505050905060005b82811015614330578181815181106142db576142db6155b6565b6020026020010151850361432857801561431d57816142fb6001836159a3565b8151811061430b5761430b6155b6565b60200260200101519350505050919050565b506000949350505050565b6001016142c1565b5060405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a590818985d18da1259608a1b6044820152606401610bdb565b600054610100900460ff166143925760405162461bcd60e51b8152600401610bdb90615d30565b565b600054610100900460ff166143bb5760405162461bcd60e51b8152600401610bdb90615d30565b60005b81518110156110b2576001604260008484815181106143df576143df6155b6565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016143be565b60a86110b28282615a27565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061445f5761445f6155b6565b602090810291909101015292915050565b614482846001600160a01b03166136df565b15612bff5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906144bb9089908990889088908890600401615ee8565b6020604051808303816000875af19250505080156144f6575060408051601f3d908101601f191682019092526144f391810190615dcd565b60015b61450257613e7c615dea565b6001600160e01b0319811663f23a6e6160e01b14612cf75760405162461bcd60e51b8152600401610bdb90615e8e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461457f576040519150601f19603f3d011682016040523d82523d6000602084013e614584565b606091505b505090508061178a5760405162461bcd60e51b815260206004820152601c60248201527b1b985d1a5d99481d1bdad95b881d1c985b9cd9995c8819985a5b195960221b6044820152606401610bdb565b816001600160a01b0316836001600160a01b031603156130f557306001600160a01b03841603614612576140ab6001600160a01b038516838361469e565b6130f56001600160a01b0385168484846146f4565b6060831561469457825160000361468d57614641856136df565b61468d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bdb565b5081611673565b611673838361472c565b61178a8363a9059cbb60e01b84846040516024016146bd929190614b1b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261473c565b6040516001600160a01b03808516602483015283166044820152606481018290526130f59085906323b872dd60e01b906084016146bd565b815115613e9b5781518083602001fd5b6000614791826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661480e9092919063ffffffff16565b80519091501561178a57808060200190518101906147af9190615f22565b61178a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610bdb565b6060611673848460008585600080866001600160a01b031685876040516148359190615ed6565b60006040518083038185875af1925050503d8060008114614872576040519150601f19603f3d011682016040523d82523d6000602084013e614877565b606091505b509150915061488887838387614627565b979650505050505050565b50805461489f90615502565b6000825580601f106148af575050565b601f016020900490600052602060002090810190610d4291905b808211156148dd57600081556001016148c9565b5090565b6001600160a01b0381168114610d4257600080fd5b8035614901816148e1565b919050565b6000806040838503121561491957600080fd5b8235614924816148e1565b946020939093013593505050565b6001600160e01b031981168114610d4257600080fd5b60006020828403121561495a57600080fd5b813561355b81614932565b60005b83811015614980578181015183820152602001614968565b50506000910152565b600081518084526149a1816020860160208601614965565b601f01601f19169290920160200192915050565b60208152600061355b6020830184614989565b6001600160a01b0391909116815260200190565b6000602082840312156149ee57600080fd5b5035919050565b600060208284031215614a0757600080fd5b813561355b816148e1565b60008083601f840112614a2457600080fd5b5081356001600160401b03811115614a3b57600080fd5b6020830191508360208260051b8501011115614a5657600080fd5b9250929050565b8015158114610d4257600080fd5b60008060008060608587031215614a8157600080fd5b8435935060208501356001600160401b03811115614a9e57600080fd5b614aaa87828801614a12565b9094509250506040850135614abe81614a5d565b939692955090935050565b60008060408385031215614adc57600080fd5b823591506020830135614aee816148e1565b809150509250929050565b60008060408385031215614b0c57600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715614b6f57614b6f614b34565b6040525050565b60006001600160401b03821115614b8f57614b8f614b34565b5060051b60200190565b600082601f830112614baa57600080fd5b81356020614bb782614b76565b604051614bc48282614b4a565b80915083815260208101915060208460051b870101935086841115614be857600080fd5b602086015b84811015614c045780358352918301918301614bed565b509695505050505050565b600082601f830112614c2057600080fd5b81356001600160401b03811115614c3957614c39614b34565b604051614c50601f8301601f191660200182614b4a565b818152846020838601011115614c6557600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215614c9a57600080fd5b8535614ca5816148e1565b94506020860135614cb5816148e1565b935060408601356001600160401b0380821115614cd157600080fd5b614cdd89838a01614b99565b94506060880135915080821115614cf357600080fd5b614cff89838a01614b99565b93506080880135915080821115614d1557600080fd5b50614d2288828901614c0f565b9150509295509295909350565b600082601f830112614d4057600080fd5b81356020614d4d82614b76565b604051614d5a8282614b4a565b80915083815260208101915060208460051b870101935086841115614d7e57600080fd5b602086015b84811015614c04578035614d96816148e1565b8352918301918301614d83565b60008060408385031215614db657600080fd5b82356001600160401b0380821115614dcd57600080fd5b614dd986838701614d2f565b93506020850135915080821115614def57600080fd5b50614dfc85828601614b99565b9150509250929050565b60008151808452602080850194506020840160005b83811015614e3757815187529582019590820190600101614e1b565b509495945050505050565b60208152600061355b6020830184614e06565b600060808284031215611c7657600080fd5b600080600080600080600060e0888a031215614e8257600080fd5b8735614e8d816148e1565b965060208801359550604088013594506060880135614eab816148e1565b93506080880135925060a08801356001600160401b0380821115614ece57600080fd5b614eda8b838c01614e55565b935060c08a0135915080821115614ef057600080fd5b50614efd8a828b01614c0f565b91505092959891949750929550565b600080600060608486031215614f2157600080fd5b83359250602084013591506040840135614f3a816148e1565b809150509250925092565b600080600060608486031215614f5a57600080fd5b8335614f65816148e1565b925060208401356001600160401b0380821115614f8157600080fd5b614f8d87838801614b99565b93506040860135915080821115614fa357600080fd5b50614fb086828701614b99565b9150509250925092565b600060208284031215614fcc57600080fd5b81356001600160401b03811115614fe257600080fd5b61167384828501614c0f565b60008060006060848603121561500357600080fd5b833592506020840135615015816148e1565b929592945050506040919091013590565b6000806040838503121561503957600080fd5b8235615044816148e1565b91506020830135614aee81614a5d565b6000806020838503121561506757600080fd5b82356001600160401b0381111561507d57600080fd5b61508985828601614a12565b90969095509350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156150ec57603f198886030184526150da858351614989565b945092850192908501906001016150be565b5092979650505050505050565b60006020828403121561510b57600080fd5b81356002811061355b57600080fd5b60008083601f84011261512c57600080fd5b5081356001600160401b0381111561514357600080fd5b602083019150836020828501011115614a5657600080fd5b60008060008060006060868803121561517357600080fd5b8535945060208601356001600160401b038082111561519157600080fd5b61519d89838a0161511a565b909650945060408801359150808211156151b657600080fd5b506151c38882890161511a565b969995985093965092949392505050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c082015260018060a01b0360c08301511660e0820152600060e0830151610100808185015250611673610120840182614989565b60008060006040848603121561525657600080fd5b8335925060208401356001600160401b0381111561527357600080fd5b61527f8682870161511a565b9497909650939450505050565b80356001600160801b038116811461490157600080fd5b6000806000806000806000806000806101408b8d0312156152c357600080fd5b6152cc8b6148f6565b995060208b01356001600160401b03808211156152e857600080fd5b6152f48e838f01614c0f565b9a5060408d013591508082111561530a57600080fd5b6153168e838f01614c0f565b995060608d013591508082111561532c57600080fd5b6153388e838f01614c0f565b985060808d013591508082111561534e57600080fd5b5061535b8d828e01614d2f565b96505061536a60a08c016148f6565b945061537860c08c016148f6565b935061538660e08c0161528c565b92506153956101008c0161528c565b91506153a46101208c016148f6565b90509295989b9194979a5092959850565b600080604083850312156153c857600080fd5b82356153d3816148e1565b91506020830135614aee816148e1565b600080600080600080600060e0888a0312156153fe57600080fd5b873596506020880135615410816148e1565b95506040880135945060608801359350608088013561542e816148e1565b925060a0880135915060c08801356001600160401b0381111561545057600080fd5b614efd8a828b01614e55565b600080600080600060a0868803121561547457600080fd5b853561547f816148e1565b9450602086013561548f816148e1565b9350604086013592506060860135915060808601356001600160401b038111156154b857600080fd5b614d2288828901614c0f565b634e487b7160e01b600052602160045260246000fd5b60208101600283106154fc57634e487b7160e01b600052602160045260246000fd5b91905290565b600181811c9082168061551657607f821691505b602082108103611c7657634e487b7160e01b600052602260045260246000fd5b60008351615548818460208801614965565b83519083019061555c818360208801614965565b01949350505050565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0957610c0961558d565b634e487b7160e01b600052603260045260246000fd5b6000823560fe198336030181126155e257600080fd5b9190910192915050565b6000808335601e1984360301811261560357600080fd5b8301803591506001600160401b0382111561561d57600080fd5b602001915036819003821315614a5657600080fd5b601f82111561178a576000816000526020600020601f850160051c8101602086101561565b5750805b601f850160051c820191505b81811015612bff57828155600101615667565b600019600383901b1c191660019190911b1790565b6001600160401b038311156156a6576156a6614b34565b6156ba836156b48354615502565b83615632565b6000601f8411600181146156e857600085156156d65750838201355b6156e0868261567a565b84555061122a565b600083815260209020601f19861690835b8281101561571957868501358255602094850194600190920191016156f9565b50868210156157365760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b813581556020820135600182015560408201356002820155606082013560038201556080820135600482015560a082013560058201556006810160c0830135615790816148e1565b81546001600160a01b0319166001600160a01b03919091161790556157b860e08301836155ec565b6130f581836007860161568f565b6000808335601e198436030181126157dd57600080fd5b83016020810192503590506001600160401b038111156157fc57600080fd5b803603821315614a5657600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408082528181018490526000906060808401600587901b850182018885805b8a81101561590657888403605f190185528235368d900360fe19018112615879578283fd5b8c018035855260208082013581870152888201358987015287820135888701526080808301359087015260a080830135908701526101009060c0808401356158c0816148e1565b6001600160a01b03169088015260e06158db848201856157c6565b945083828a01526158ef848a01868361580b565b998301999850505094909401935050600101615854565b5050508615156020870152935061167392505050565b8082028115828204841417610c0957610c0961558d565b60008261595057634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b81810381811115610c0957610c0961558d565b6000816159c5576159c561558d565b506000190190565b8284823760609190911b6001600160601b0319169101908152601401919050565b858152606060208201526000615a0860608301868861580b565b8281036040840152615a1b81858761580b565b98975050505050505050565b81516001600160401b03811115615a4057615a40614b34565b615a5481615a4e8454615502565b84615632565b602080601f831160018114615a835760008415615a715750858301515b615a7b858261567a565b865550612bff565b600085815260208120601f198616915b82811015615ab257888601518255948401946001909101908401615a93565b5085821015615ad05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808335601e19843603018112615af757600080fd5b8301803591506001600160401b03821115615b1157600080fd5b6020019150600581901b3603821315614a5657600080fd5b6020808252600f908201526e45786365656473206d61782062707360881b604082015260600190565b602080825260119082015270125b9d985b1a59081c9958da5c1a595b9d607a1b604082015260600190565b7402832b936b4b9b9b4b7b7399d1030b1b1b7bab73a1605d1b815260008351615bad816015850160208801614965565b7001034b99036b4b9b9b4b733903937b6329607d1b6015918401918201528351615bde816026840160208801614965565b01602601949350505050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000615cd46040830185614e06565b8281036020840152615ce68185614e06565b95945050505050565b60208082526002908201526110ab60f11b604082015260600190565b604081526000615d1e6040830185614989565b8281036020840152615ce68185614989565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090615da790830186614e06565b8281036060840152615db98186614e06565b90508281036080840152615a1b8185614989565b600060208284031215615ddf57600080fd5b815161355b81614932565b600060033d1115613c3c5760046000803e5060005160e01c90565b600060443d1015615e135790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715615e4257505050505090565b8285019150815181811115615e5a5750505050505090565b843d8701016020828501011115615e745750505050505090565b615e8360208286010187614b4a565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b600082516155e2818460208701614965565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061488890830184614989565b600060208284031215615f3457600080fd5b815161355b81614a5d56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205c8988b95d2731b030dc633f47f1b46c83be22ba4ef88a327412e55f43b1021d64736f6c63430008170033" + }, + { + "address": "0xc614e9c511a5149f1969f2cb0199d508bbb5b915", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106102bb5760003560e01c8063741bef1a1161016e578063bedb86fb116100cb578063ef9309511161007f578063f2fde38b11610064578063f2fde38b1461073a578063f8c8765e1461075a578063fd9be5221461077a576102bb565b8063ef930951146106fa578063f136a8741461071a576102bb565b8063c03f1529116100b0578063c03f15291461069a578063c3b04e7f146106ba578063d5f8b014146106da576102bb565b8063bedb86fb1461065a578063bf4dab511461067a576102bb565b80638644c5781161012257806398dabd501161010757806398dabd5014610610578063ac353e0414610625578063b8f8bad41461063a576102bb565b80638644c578146105cd5780638da5cb5b146105fb576102bb565b8063801db1fe11610153578063801db1fe1461057857806381ba209a146105985780638576db67146105ad576102bb565b8063741bef1a14610536578063765a8a541461054b576102bb565b806355b352491161021c578063673448dd116101d05780636c473aff116101b55780636c473aff146104ec578063715018a614610501578063724e78da14610516576102bb565b8063673448dd146104aa57806369cf4e3a146104ca576102bb565b80635886ea65116102015780635886ea65146104535780635c975abb146104735780636348d26914610495576102bb565b806355b3524914610413578063575765e214610433576102bb565b80633352b608116102735780633f103487116102585780633f103487146103a457806343b9a0c4146103c45780634eeba250146103e6576102bb565b80633352b6081461036d5780633bfb40471461038f576102bb565b80630508941e116102a45780630508941e1461030257806323161ff814610315578063252f7b011461034d576102bb565b806301e33667146102c057806303343f54146102e2575b600080fd5b3480156102cc57600080fd5b506102e06102db366004612bcb565b61079a565b005b3480156102ee57600080fd5b506102e06102fd366004612af1565b6108b3565b6102e0610310366004612ddb565b610929565b34801561032157600080fd5b50610335610330366004612eb8565b610afb565b604051610344939291906133fc565b60405180910390f35b34801561035957600080fd5b506102e0610368366004612d59565b610b69565b34801561037957600080fd5b50610382610c97565b6040516103449190613039565b34801561039b57600080fd5b50610382610ca6565b3480156103b057600080fd5b506102e06103bf366004612f69565b610cb5565b3480156103d057600080fd5b506103d9610e40565b6040516103449190613522565b3480156103f257600080fd5b50610406610401366004612d3f565b610e46565b60405161034491906133bc565b34801561041f57600080fd5b5061040661042e366004612d3f565b610e6a565b34801561043f57600080fd5b506102e061044e366004612c0b565b610e8e565b34801561045f57600080fd5b506103d961046e366004612eea565b610f64565b34801561047f57600080fd5b50610488611124565b6040516103449190613081565b3480156104a157600080fd5b5061038261112d565b3480156104b657600080fd5b506104886104c5366004612af1565b61113c565b3480156104d657600080fd5b506104df61115e565b6040516103449190613430565b3480156104f857600080fd5b5061038261117e565b34801561050d57600080fd5b506102e061118d565b34801561052257600080fd5b506102e0610531366004612af1565b611263565b34801561054257600080fd5b506103826112de565b34801561055757600080fd5b5061056b610566366004612d3f565b6112f2565b6040516103449190613390565b34801561058457600080fd5b506102e0610593366004612c0b565b6113d7565b3480156105a457600080fd5b506104df6114a1565b3480156105b957600080fd5b506104886105c8366004612af1565b6114c3565b3480156105d957600080fd5b506105ed6105e8366004612d3f565b6114d8565b6040516103449291906133d9565b34801561060757600080fd5b50610382611514565b34801561061c57600080fd5b506104df611523565b34801561063157600080fd5b50610406611541565b34801561064657600080fd5b506102e0610655366004612e70565b611559565b34801561066657600080fd5b506102e0610675366004612c78565b61159a565b34801561068657600080fd5b506102e0610695366004612c38565b611621565b3480156106a657600080fd5b506103d96106b5366004612eea565b611725565b3480156106c657600080fd5b506102e06106d5366004612d23565b611797565b3480156106e657600080fd5b506102e06106f5366004612c38565b611816565b34801561070657600080fd5b506102e0610715366004612b38565b61191a565b34801561072657600080fd5b50610488610735366004612af1565b6119bf565b34801561074657600080fd5b506102e0610755366004612af1565b6119d4565b34801561076657600080fd5b506102e0610775366004612b70565b611b01565b34801561078657600080fd5b506102e0610795366004612b0d565b611da1565b336107a3611514565b6001600160a01b0316146107df576107ba3361113c565b6107df5760405162461bcd60e51b81526004016107d69061308c565b60405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081526000906001600160a01b038516906370a0823190610827903090600401613039565b60206040518083038186803b15801561083f57600080fd5b505afa158015610853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190612fd5565b9050808211156108995760405162461bcd60e51b81526004016107d6906131c3565b6108ad6001600160a01b0385168484611f1b565b50505050565b336108bc611514565b6001600160a01b0316146108ef576108d33361113c565b6108ef5760405162461bcd60e51b81526004016107d69061308c565b606780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b33610932611514565b6001600160a01b031614610965576109493361113c565b6109655760405162461bcd60e51b81526004016107d69061308c565b600260005414156109bd576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000819055506000816001600160a01b0316612710346040516109e190613036565b600060405180830381858888f193505050503d8060008114610a1f576040519150601f19603f3d011682016040523d82523d6000602084013e610a24565b606091505b5050905080610a645760405134906001600160a01b038416907f2c7a964ca3de5ec1d42d9822f9bbd0eb142a59cc9f855e9d93813b773192c7a390600090a35b6066546040517f987fa2d50000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063987fa2d590610ab9908c908c908c908c908c908c908c9060040161343f565b600060405180830381600087803b158015610ad357600080fd5b505af1158015610ae7573d6000803e3d6000fd5b505060016000555050505050505050505050565b60696020908152600092835260408084209091529082529020546fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b33610b72611514565b6001600160a01b031614610ba557610b893361113c565b610ba55760405162461bcd60e51b81526004016107d69061308c565b60026000541415610bfd576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556066546040517f987fa2d50000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063987fa2d590610c57908a908a908a908a908a908a908a9060040161343f565b600060405180830381600087803b158015610c7157600080fd5b505af1158015610c85573d6000803e3d6000fd5b50506001600055505050505050505050565b6070546001600160a01b031681565b6071546001600160a01b031681565b33610cbe611514565b6001600160a01b031614610cf157610cd53361113c565b610cf15760405162461bcd60e51b81526004016107d69061308c565b604080516060810182526fffffffffffffffffffffffffffffffff858116825267ffffffffffffffff858116602080850191825286831685870190815261ffff8c8116600090815260698452888120918d16815292529086902094518554925191517fffffffffffffffffffffffffffffffff000000000000000000000000000000009093169416939093177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000938316939093029290921777ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000009290911691909102179055517fd053e021dda81c7c2794ff89e320caea5379962d49ed383a3bd0a54ffc4b932f90610e3190879087908790879087906134bc565b60405180910390a15050505050565b61271081565b606d602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b606e602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b610e96611f9b565b6001600160a01b0316610ea7611514565b6001600160a01b031614610f02576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0382166000908152606a602052604090819020805460ff1916831515179055517fb10786d0bfa68fb1aa29552d9203e5f545f7c073ff0784da1de1d800986f102390610f589084908490613066565b60405180910390a15050565b6066546000906001600160a01b03163314610f915760405162461bcd60e51b81526004016107d690613220565b612710841115610fb35760405162461bcd60e51b81526004016107d6906132eb565b6071546001600160a01b038681169116141561109e576000846102201480610fdc575084610140145b80610fe8575084610120145b80610ff357508460a0145b90508061109c57607060009054906101000a90046001600160a01b03166001600160a01b0316634b60b4256040518163ffffffff1660e01b815260040160206040518083038186803b15801561104857600080fd5b505afa15801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190612c94565b61109c5760405162461bcd60e51b81526004016107d690613257565b505b6110e18787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9f92505050565b90507fdf21c415b78ed2552cc9971249e32a053abce6087a0ae0fbf3f78db5174a3493816040516111129190613522565b60405180910390a19695505050505050565b606b5460ff1681565b6067546001600160a01b031681565b6001600160a01b0381166000908152606a602052604090205460ff165b919050565b606c547201000000000000000000000000000000000000900461ffff1681565b6066546001600160a01b031681565b611195611f9b565b6001600160a01b03166111a6611514565b6001600160a01b031614611201576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6034546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603480547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b3361126c611514565b6001600160a01b03161461129f576112833361113c565b61129f5760405162461bcd60e51b81526004016107d69061308c565b606b80546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b606b5461010090046001600160a01b031681565b6112fa612a3e565b606b546040517fda26663a00000000000000000000000000000000000000000000000000000000815260009161010090046001600160a01b03169063da26663a90611349908690600401613430565b60606040518083038186803b15801561136157600080fd5b505afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113999190612cb0565b6040805180820190915281516fffffffffffffffffffffffffffffffff16815260209182015167ffffffffffffffff16918101919091529392505050565b6113df611f9b565b6001600160a01b03166113f0611514565b6001600160a01b03161461144b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0382166000908152606f602052604090819020805460ff1916831515179055517fde6b048d6c4e63d85fde37ccbe03f4380c6d12cb2a1e9ce9268bbf47a1ef687890610f589084908490613066565b606c5474010000000000000000000000000000000000000000900461ffff1681565b606f6020526000908152604090205460ff1681565b6068602052600090815260409020546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b6034546001600160a01b031690565b606c54700100000000000000000000000000000000900461ffff1681565b606c546fffffffffffffffffffffffffffffffff1681565b33611562611514565b6001600160a01b031614611595576115793361113c565b6115955760405162461bcd60e51b81526004016107d69061308c565b505050565b6115a2611f9b565b6001600160a01b03166115b3611514565b6001600160a01b03161461160e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606b805460ff1916911515919091179055565b3361162a611514565b6001600160a01b0316141580156116515750336000908152606a602052604090205460ff16155b1561168557336000908152606f602052604090205460ff166116855760405162461bcd60e51b81526004016107d69061318c565b60005b81811015611595573683838381811061169d57fe5b90506040020190508060200160208101906116b89190612d23565b606d60006116c96020850185612d3f565b61ffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905550600101611688565b60006127108411156117495760405162461bcd60e51b81526004016107d6906130c3565b61178c8787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9f92505050565b979650505050505050565b336117a0611514565b6001600160a01b0316146117d3576117b73361113c565b6117d35760405162461bcd60e51b81526004016107d69061308c565b606c80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b3361181f611514565b6001600160a01b0316141580156118465750336000908152606a602052604090205460ff16155b1561187a57336000908152606f602052604090205460ff1661187a5760405162461bcd60e51b81526004016107d69061318c565b60005b81811015611595573683838381811061189257fe5b90506040020190508060200160208101906118ad9190612d23565b606e60006118be6020850185612d3f565b61ffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff929092169190911790555060010161187d565b60006119246122b5565b90506001600160a01b038116611963576001600160a01b037fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355611978565b336001600160a01b0382161461197857600080fd5b50607180546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560708054929093169116179055565b606a6020526000908152604090205460ff1681565b6119dc611f9b565b6001600160a01b03166119ed611514565b6001600160a01b031614611a48576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116611a8d5760405162461bcd60e51b81526004018080602001828103825260268152602001806135836026913960400191505060405180910390fd5b6034546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000611b0b6122b5565b90506001600160a01b038116611b4a576001600160a01b037fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355611b5f565b336001600160a01b03821614611b5f57600080fd5b600154610100900460ff1680611b785750611b786122da565b80611b86575060015460ff16155b611bc15760405162461bcd60e51b815260040180806020018281038252602e8152602001806135cf602e913960400191505060405180910390fd5b600154610100900460ff16158015611beb576001805460ff1961ff00199091166101001716811790555b611bf36122eb565b606680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038816179055611c31306001610e8e565b606c8054606b80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038a81169190910291909117909155612ee07fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670a400000000000000000000000000000000177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff1672a0000000000000000000000000000000000000177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167501f4000000000000000000000000000000000000000017909155607180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811687841617909155607080549091169185169190911790558015611d99576001805461ff00191690555b505050505050565b33611daa611514565b6001600160a01b031614611ddd57611dc13361113c565b611ddd5760405162461bcd60e51b81526004016107d69061308c565b6066546040517f69412bfa0000000000000000000000000000000000000000000000000000000081526000916001600160a01b0316906369412bfa90611e27903090600401613039565b60206040518083038186803b158015611e3f57600080fd5b505afa158015611e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e779190612fd5565b905080821115611e995760405162461bcd60e51b81526004016107d6906131c3565b6066546040517f07b18bde0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906307b18bde90611ee4908690869060040161304d565b600060405180830381600087803b158015611efe57600080fd5b505af1158015611f12573d6000803e3d6000fd5b50505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261159590849061239c565b3390565b606b5460009060ff1615611fc55760405162461bcd60e51b81526004016107d6906132b4565b815160221480611fd6575060428251115b611ff25760405162461bcd60e51b81526004016107d6906130f8565b60028201516022830151806120195760405162461bcd60e51b81526004016107d690613322565b8161ffff166001148061203057508161ffff166002145b61204c5760405162461bcd60e51b81526004016107d690613155565b61ffff88811660009081526069602090815260408083208b85168452909152812091841660021461209757606c54700100000000000000000000000000000000900461ffff166120bd565b606c546120bd90700100000000000000000000000000000000900461ffff16602061244d565b905060008961ffff166002146120fc57606c546120f790899074010000000000000000000000000000000000000000900461ffff1661244d565b612124565b606c546121249089907201000000000000000000000000000000000000900461ffff1661244d565b606b549091508b9060009081908190819061010090046001600160a01b03166388a4124c866121538a8a61244d565b8b5461217d90700100000000000000000000000000000000900467ffffffffffffffff168e61244d565b6040518463ffffffff1660e01b815260040161219b93929190613506565b60806040518083038186803b1580156121b357600080fd5b505afa1580156121c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121eb9190612fed565b935093509350935060008a61ffff166002141561223b575060428c015188546fffffffffffffffffffffffffffffffff1681111561223b5760405162461bcd60e51b81526004016107d690613359565b6000811561228957606c54612286906127109061227a906fffffffffffffffffffffffffffffffff908116906122809089811690849089908d166124b0565b90612509565b906124b0565b90505b61229e81612298898987612570565b9061244d565b9c5050505050505050505050505095945050505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006122e530612665565b15905090565b600154610100900460ff168061230457506123046122da565b80612312575060015460ff16155b61234d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806135cf602e913960400191505060405180910390fd5b600154610100900460ff16158015612377576001805460ff1961ff00199091166101001716811790555b61237f61266b565b61238761270a565b8015612399576001805461ff00191690555b50565b60006123f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661281a9092919063ffffffff16565b8051909150156115955780806020019051602081101561241057600080fd5b50516115955760405162461bcd60e51b815260040180806020018281038252602a81526020018061361e602a913960400191505060405180910390fd5b6000828201838110156124a7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826124bf575060006124aa565b828202828482816124cc57fe5b04146124a75760405162461bcd60e51b81526004018080602001828103825260218152602001806135fd6021913960400191505060405180910390fd5b600080821161255f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161256857fe5b049392505050565b61ffff83166000908152606d60205260408120546fffffffffffffffffffffffffffffffff16806125b25750606c546fffffffffffffffffffffffffffffffff165b60006125d661271061227a876fffffffffffffffffffffffffffffffff86166124b0565b90506fffffffffffffffffffffffffffffffff84166125f857915061265e9050565b61ffff86166000908152606e6020526040812054670de0b6b3a764000091906126469061263f906fffffffffffffffffffffffffffffffff808a169161227a9116866124b0565b889061244d565b90508281116126555782612657565b805b9450505050505b9392505050565b3b151590565b600154610100900460ff168061268457506126846122da565b80612692575060015460ff16155b6126cd5760405162461bcd60e51b815260040180806020018281038252602e8152602001806135cf602e913960400191505060405180910390fd5b600154610100900460ff16158015612387576001805460ff1961ff00199091166101001716811790558015612399576001805461ff001916905550565b600154610100900460ff168061272357506127236122da565b80612731575060015460ff16155b61276c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806135cf602e913960400191505060405180910390fd5b600154610100900460ff16158015612796576001805460ff1961ff00199091166101001716811790555b60006127a0611f9b565b603480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612399576001805461ff001916905550565b60606128298484600085612831565b949350505050565b6060824710156128725760405162461bcd60e51b81526004018080602001828103825260268152602001806135a96026913960400191505060405180910390fd5b61287b85612665565b6128cc576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b6020831061292857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016128eb565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461298a576040519150601f19603f3d011682016040523d82523d6000602084013e61298f565b606091505b509150915061178c828286606083156129a957508161265e565b8251156129b95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a035781810151838201526020016129eb565b50505050905090810190601f168015612a305780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b604080518082019091526000808252602082015290565b60008083601f840112612a66578182fd5b50813567ffffffffffffffff811115612a7d578182fd5b602083019150836020604083028501011115612a9857600080fd5b9250929050565b60008083601f840112612ab0578182fd5b50813567ffffffffffffffff811115612ac7578182fd5b602083019150836020828501011115612a9857600080fd5b803561ffff8116811461115957600080fd5b600060208284031215612b02578081fd5b81356124a78161352b565b60008060408385031215612b1f578081fd5b8235612b2a8161352b565b946020939093013593505050565b60008060408385031215612b4a578182fd5b8235612b558161352b565b91506020830135612b658161352b565b809150509250929050565b60008060008060808587031215612b85578182fd5b8435612b908161352b565b93506020850135612ba08161352b565b92506040850135612bb08161352b565b91506060850135612bc08161352b565b939692955090935050565b600080600060608486031215612bdf578283fd5b8335612bea8161352b565b92506020840135612bfa8161352b565b929592945050506040919091013590565b60008060408385031215612c1d578182fd5b8235612c288161352b565b91506020830135612b6581613540565b60008060208385031215612c4a578182fd5b823567ffffffffffffffff811115612c60578283fd5b612c6c85828601612a55565b90969095509350505050565b600060208284031215612c89578081fd5b81356124a781613540565b600060208284031215612ca5578081fd5b81516124a781613540565b600060608284031215612cc1578081fd5b6040516060810181811067ffffffffffffffff82111715612cde57fe5b6040528251612cec8161354e565b81526020830151612cfc8161356c565b6020820152604083015163ffffffff81168114612d17578283fd5b60408201529392505050565b600060208284031215612d34578081fd5b81356124a78161354e565b600060208284031215612d50578081fd5b61265e82612adf565b600080600080600080600060c0888a031215612d73578485fd5b612d7c88612adf565b96506020880135612d8c8161352b565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115612dbc578283fd5b612dc88a828b01612a9f565b989b979a50959850939692959293505050565b60008060008060008060008060e0898b031215612df6578182fd5b612dff89612adf565b97506020890135612e0f8161352b565b965060408901359550606089013594506080890135935060a089013567ffffffffffffffff811115612e3f578283fd5b612e4b8b828c01612a9f565b90945092505060c0890135612e5f8161352b565b809150509295985092959890939650565b600080600060608486031215612e84578081fd5b612e8d84612adf565b92506020840135612e9d8161354e565b91506040840135612ead8161354e565b809150509250925092565b60008060408385031215612eca578182fd5b612ed383612adf565b9150612ee160208401612adf565b90509250929050565b60008060008060008060a08789031215612f02578384fd5b612f0b87612adf565b9550612f1960208801612adf565b94506040870135612f298161352b565b935060608701359250608087013567ffffffffffffffff811115612f4b578283fd5b612f5789828a01612a9f565b979a9699509497509295939492505050565b600080600080600060a08688031215612f80578283fd5b612f8986612adf565b9450612f9760208701612adf565b93506040860135612fa78161354e565b92506060860135612fb78161356c565b91506080860135612fc78161356c565b809150509295509295909350565b600060208284031215612fe6578081fd5b5051919050565b60008060008060808587031215613002578182fd5b8451935060208501516130148161354e565b60408601519093506130258161354e565b6060860151909250612bc08161354e565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039290921682521515602082015260400190565b901515815260200190565b60208082526015908201527f52656c617965723a206e6f7420617070726f7665640000000000000000000000604082015260600190565b6020808252818101527f52656c617965723a205f7061796c6f616453697a6520746f6f6f6f6f20626967604082015260600190565b60208082526026908201527f52656c617965723a2077726f6e67205f61646170746572506172616d6574657260408201527f732073697a650000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601b908201527f52656c617965723a20756e737570706f72746564207478547970650000000000604082015260600190565b60208082526014908201527f52656c617965723a206e6f742075706461746572000000000000000000000000604082015260600190565b60208082526026908201527f52656c617965723a206e6f7420656e6f7567682066656520666f72207769746860408201527f64726177616c0000000000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f52656c617965723a20696e76616c696420756c6e000000000000000000000000604082015260600190565b60208082526029908201527f52656c617965723a20737461726761746520636f6d706f736572206973206e6f60408201527f742073656e64696e670000000000000000000000000000000000000000000000606082015260800190565b6020808252600d908201527f41646d696e3a2070617573656400000000000000000000000000000000000000604082015260600190565b6020808252601d908201527f52656c617965723a205f7061796c6f616453697a65203e203130303030000000604082015260600190565b60208082526014908201527f52656c617965723a2067617320746f6f206c6f77000000000000000000000000604082015260600190565b6020808252601f908201527f52656c617965723a206473744e6174697665416d7420746f6f206c6172676500604082015260600190565b81516fffffffffffffffffffffffffffffffff9081168252602092830151169181019190915260400190565b6fffffffffffffffffffffffffffffffff91909116815260200190565b6fffffffffffffffffffffffffffffffff92831681529116602082015260400190565b6fffffffffffffffffffffffffffffffff93909316835267ffffffffffffffff918216602084015216604082015260600190565b61ffff91909116815260200190565b600061ffff891682526001600160a01b038816602083015286604083015285606083015284608083015260c060a08301528260c0830152828460e084013781830160e090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019695505050505050565b61ffff95861681529390941660208401526fffffffffffffffffffffffffffffffff91909116604083015267ffffffffffffffff9081166060830152909116608082015260a00190565b61ffff9390931683526020830191909152604082015260600190565b90815260200190565b6001600160a01b038116811461239957600080fd5b801515811461239957600080fd5b6fffffffffffffffffffffffffffffffff8116811461239957600080fd5b67ffffffffffffffff8116811461239957600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122058179e51af4b28a7c1276a75908ddbc9dba53d5c6012ba50c9f85d2ee0f0ae5564736f6c63430007060033" + }, + { + "address": "0xca68a9acf7c6e364d23382bcb7ad06c5b29ddc44", + "nonce": 1002, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c80633849f410146100675780634c19eb68146100905780638da5cb5b146100c3578063d0ebdbe7146100d6578063d1ad17bf146100eb578063fc879190146100fe575b600080fd5b60045461007a906001600160a01b031681565b60405161008791906102c9565b60405180910390f35b6100b361009e3660046102dd565b60056020526000908152604090205460ff1681565b6040519015158152602001610087565b60025461007a906001600160a01b031681565b6100e96100e43660046102dd565b610111565b005b60035461007a906001600160a01b031681565b6100e961010c36600461030d565b61014a565b6002546001600160a01b0316331461012857600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600260005414156101a15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640160405180910390fd5b600260009081556004546040516001600160a01b03909116906101c3906102af565b6101cd91906102c9565b604051809103906000f0801580156101e9573d6000803e3d6000fd5b5060015460035460405163189cf22d60e21b815292935083926001600160a01b0380851693636273c8b493610229938993339381169216906004016103e5565b600060405180830381600087803b15801561024357600080fd5b505af1158015610257573d6000803e3d6000fd5b5050506001600160a01b038216600081815260056020526040808220805460ff19166001179055519192507f1449abf21e49fd025f33495e77f7b1461caefdd3d4bb646424a3f445c4576a5b91a25050600160005550565b6101198061055f83390190565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6000602082840312156102ef57600080fd5b81356001600160a01b038116811461030657600080fd5b9392505050565b60006020828403121561031f57600080fd5b81356001600160401b0381111561033557600080fd5b8201610160818503121561030657600080fd5b6000808335601e1984360301811261035f57600080fd5b83016020810192503590506001600160401b0381111561037e57600080fd5b80360383131561038d57600080fd5b9250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b803562ffffff811681146103d057600080fd5b919050565b803580151581146103d057600080fd5b6080815260006103f58687610348565b61016080608086015261040d6101e086018385610394565b925061041c60208a018a610348565b9250607f19808786030160a0880152610436858584610394565b945061044560408c018c610348565b94509150808786030160c088015261045e858584610394565b945061046d60608c018c610348565b94509150808786030160e088015250610487848483610394565b93505061049660808a016103bd565b91506101006104ab8187018462ffffff169052565b6104b760a08b016103d5565b92506101206104c98188018515159052565b6104d560c08c016103bd565b93506101406104ea8189018662ffffff169052565b60e08c0135848901526104fe838d016103d5565b8015156101808a01529450610514828d016103d5565b15156101a08901528b01356101c08801525092935061053b925050602084019050866102bc565b61054860408301856102bc565b61055560608301846102bc565b9594505050505056fe608060405234801561001057600080fd5b5060405161011938038061011983398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6087806100926000396000f3fe608060405236601d57600054601b906001600160a01b0316602d565b005b600054601b906001600160a01b03165b60405136600082376000803683855af43d806000843e818015604d578184f35b8184fdfea2646970667358221220600f90c0e59ddffb769074d4cc74283ea59df1a89099816dd6169b248142b48764736f6c63430008090033a264697066735822122048afd717900e93b31922a6c1952ebe6c0c810a6b33fe891f22eb755c290c7b6664736f6c63430008090033" + }, + { + "address": "0xb20116ee399f15647bb1eef9a74f6ef3b58bc951", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106104305760003560e01c80639358928b11610229578063c44618341161012e578063eab45d9c116100b6578063f2fde38b1161007a578063f2fde38b14610d90578063f5ecbdbc14610db0578063f7f4d9da14610dd0578063f80f5dd514610df0578063fc0c546a14610e1057600080fd5b8063eab45d9c14610cf6578063eaffd49a14610d16578063eb8d72b714610d36578063ecd8f21214610d56578063ed629c5c14610d7657600080fd5b8063d1deba1f116100fd578063d1deba1f14610c60578063d888296814610c73578063dd62ed3e14610ca1578063df2a5b3b14610cc1578063e6a20ae614610ce157600080fd5b8063c446183414610ada578063c6c3bbe614610bca578063c83330ce14610bea578063cbed8b9c14610c4057600080fd5b8063a6c3d165116101b1578063b7f8cf9b11610180578063b7f8cf9b14610b24578063b95aac7614610b44578063b9818be114610b64578063baf3292d14610b8a578063bb997bac14610baa57600080fd5b8063a6c3d16514610a9a578063a9059cbb14610aba578063abe685cd14610ada578063b353aaa714610af057600080fd5b80639dc29fac116101f85780639dc29fac146109ea5780639f38369a14610a0a578063a1285d1714610a2a578063a457c2d714610a5a578063a4c51df514610a7a57600080fd5b80639358928b1461094e578063950c8a741461096357806395d89b41146109835780639bdb98121461099857600080fd5b80633d8b38f61161033a5780635b8c41e6116102c257806378c8cda71161028657806378c8cda7146108a357806379c0ad4b146108c3578063857749b0146108e35780638cfd8f5c146108f85780638da5cb5b1461093057600080fd5b80635b8c41e6146107c957806366ad5c8a1461081857806370a0823114610838578063715018a61461086e5780637533d7881461088357600080fd5b8063455ba27d11610309578063455ba27d146107415780634b104eff146107545780634c42899a146107745780635a359dc5146107895780635b32a439146107a957600080fd5b80633d8b38f6146106bf5780633f1f4fa4146106df57806342d65a8d1461070c578063447705151461072c57600080fd5b806320c582be116103bd578063359959071161038c57806335995907146105fa578063363bf9641461061a578063365260b41461063a578063391feebb1461066f578063395093511461069f57600080fd5b806320c582be1461058557806323b872dd146105a55780632cdf0b95146105c5578063313ce567146105d857600080fd5b8063095ea7b311610404578063095ea7b3146104ce5780630b622ab2146104ee5780630df374831461052657806310ddb1371461054657806318160ddd1461056657600080fd5b80621d35671461043557806301ffc9a71461045757806306fdde031461048c57806307e0db17146104ae575b600080fd5b34801561044157600080fd5b506104556104503660046141b6565b610e23565b005b34801561046357600080fd5b50610477610472366004614249565b611054565b60405190151581526020015b60405180910390f35b34801561049857600080fd5b506104a161108b565b60405161048391906142c3565b3480156104ba57600080fd5b506104556104c93660046142d6565b61111d565b3480156104da57600080fd5b506104776104e9366004614306565b6111a6565b3480156104fa57600080fd5b5060115461050e906001600160a01b031681565b6040516001600160a01b039091168152602001610483565b34801561053257600080fd5b50610455610541366004614332565b6111be565b34801561055257600080fd5b506104556105613660046142d6565b6111dd565b34801561057257600080fd5b50600c545b604051908152602001610483565b34801561059157600080fd5b506104556105a036600461434e565b611235565b3480156105b157600080fd5b506104776105c036600461434e565b61124d565b6104556105d33660046143a7565b611271565b3480156105e457600080fd5b5060125b60405160ff9091168152602001610483565b34801561060657600080fd5b50610455610615366004614432565b611314565b34801561062657600080fd5b50610455610635366004614467565b61137f565b34801561064657600080fd5b5061065a6106553660046144b2565b611481565b60408051928352602083019190915201610483565b34801561067b57600080fd5b5061047761068a366004614517565b60136020526000908152604090205460ff1681565b3480156106ab57600080fd5b506104776106ba366004614306565b6114d6565b3480156106cb57600080fd5b506104776106da366004614534565b6114f8565b3480156106eb57600080fd5b506105776106fa3660046142d6565b60036020526000908152604090205481565b34801561071857600080fd5b50610455610727366004614534565b6115c4565b34801561073857600080fd5b50610577600081565b61045561074f366004614586565b61164a565b34801561076057600080fd5b5061045561076f366004614517565b61172b565b34801561078057600080fd5b506105e8600081565b34801561079557600080fd5b506104556107a43660046142d6565b6117e8565b3480156107b557600080fd5b5060125461050e906001600160a01b031681565b3480156107d557600080fd5b506105776107e43660046146af565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561082457600080fd5b506104556108333660046141b6565b61185a565b34801561084457600080fd5b50610577610853366004614517565b6001600160a01b03166000908152600a602052604090205490565b34801561087a57600080fd5b5061045561192e565b34801561088f57600080fd5b506104a161089e3660046142d6565b611942565b3480156108af57600080fd5b506104556108be366004614517565b6119dc565b3480156108cf57600080fd5b506104556108de36600461474f565b611a3b565b3480156108ef57600080fd5b506105e8600681565b34801561090457600080fd5b50610577610913366004614789565b600260209081526000928352604080842090915290825290205481565b34801561093c57600080fd5b506000546001600160a01b031661050e565b34801561095a57600080fd5b50610577611aee565b34801561096f57600080fd5b5060045461050e906001600160a01b031681565b34801561098f57600080fd5b506104a1611afe565b3480156109a457600080fd5b506104776109b33660046146af565b6007602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205460ff1681565b3480156109f657600080fd5b50610455610a05366004614306565b611b0d565b348015610a1657600080fd5b506104a1610a253660046142d6565b611b23565b348015610a3657600080fd5b50610477610a45366004614517565b600f6020526000908152604090205460ff1681565b348015610a6657600080fd5b50610477610a75366004614306565b611c39565b348015610a8657600080fd5b5061065a610a953660046147b3565b611cb4565b348015610aa657600080fd5b50610455610ab5366004614534565b611d43565b348015610ac657600080fd5b50610477610ad5366004614306565b611dbf565b348015610ae657600080fd5b5061057761271081565b348015610afc57600080fd5b5061050e7f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd781565b348015610b3057600080fd5b5060105461050e906001600160a01b031681565b348015610b5057600080fd5b50610455610b5f36600461486c565b611dcd565b348015610b7057600080fd5b5060095461050e906201000090046001600160a01b031681565b348015610b9657600080fd5b50610455610ba5366004614517565b611de2565b348015610bb657600080fd5b50610455610bc536600461434e565b611e38565b348015610bd657600080fd5b50610455610be536600461434e565b611e40565b348015610bf657600080fd5b50610c26610c053660046142d6565b60086020526000908152604090205461ffff81169062010000900460ff1682565b6040805161ffff9093168352901515602083015201610483565b348015610c4c57600080fd5b50610455610c5b366004614885565b611ec6565b610455610c6e3660046141b6565b611f50565b348015610c7f57600080fd5b50600954610c8e9061ffff1681565b60405161ffff9091168152602001610483565b348015610cad57600080fd5b50610577610cbc3660046148f3565b612166565b348015610ccd57600080fd5b50610455610cdc36600461492c565b612191565b348015610ced57600080fd5b506105e8600181565b348015610d0257600080fd5b50610455610d11366004614968565b612243565b348015610d2257600080fd5b50610455610d31366004614983565b61228c565b348015610d4257600080fd5b50610455610d51366004614534565b6123fc565b348015610d6257600080fd5b50610577610d71366004614332565b612456565b348015610d8257600080fd5b506006546104779060ff1681565b348015610d9c57600080fd5b50610455610dab366004614517565b6124e8565b348015610dbc57600080fd5b506104a1610dcb366004614a4b565b61255e565b348015610ddc57600080fd5b50610455610deb36600461486c565b61260f565b348015610dfc57600080fd5b50610455610e0b366004614517565b612621565b348015610e1c57600080fd5b503061050e565b337f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd76001600160a01b031614610ea05760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff861660009081526001602052604081208054610ebe90614a98565b80601f0160208091040260200160405190810160405280929190818152602001828054610eea90614a98565b8015610f375780601f10610f0c57610100808354040283529160200191610f37565b820191906000526020600020905b815481529060010190602001808311610f1a57829003601f168201915b50505050509050805186869050148015610f52575060008151115b8015610f7a575080516020820120604051610f709088908890614acc565b6040518091039020145b610fd55760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f6044820152651b9d1c9858dd60d21b6064820152608401610e97565b61104b8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061268492505050565b50505050505050565b60006001600160e01b03198216630d30953d60e31b148061108557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600d805461109a90614a98565b80601f01602080910402602001604051908101604052809291908181526020018280546110c690614a98565b80156111135780601f106110e857610100808354040283529160200191611113565b820191906000526020600020905b8154815290600101906020018083116110f657829003601f168201915b5050505050905090565b6111256126fd565b6040516307e0db1760e01b815261ffff821660048201527f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd76001600160a01b0316906307e0db17906024015b600060405180830381600087803b15801561118b57600080fd5b505af115801561119f573d6000803e3d6000fd5b5050505050565b6000336111b4818585612757565b5060019392505050565b6111c66126fd565b61ffff909116600090815260036020526040902055565b6111e56126fd565b6040516310ddb13760e01b815261ffff821660048201527f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd76001600160a01b0316906310ddb13790602401611171565b61123d61287b565b611248838383612910565b505050565b60003361125b858285612abd565b611266858585612910565b506001949350505050565b61127c868685612b31565b5092506112ea868686866112936020870187614517565b6112a36040880160208901614517565b6112b06040890189614adc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b7392505050565b92508183101561130c5760405162461bcd60e51b8152600401610e9790614b22565b505050505050565b61131c6126fd565b6001600160a01b0382166000818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527f5bbb1afddf32881824ddeb3fb7fe693cbb0aa35de2ef25c53ad5e8e8d44c2720910160405180910390a15050565b6113876126fd565b6001600160a01b0383163b6113ae5760405162461bcd60e51b8152600401610e9790614b6f565b6001600160a01b0382163b6113d55760405162461bcd60e51b8152600401610e9790614b6f565b6001600160a01b0381163b6113fc5760405162461bcd60e51b8152600401610e9790614b6f565b601080546001600160a01b038581166001600160a01b0319928316811790935560118054868316908416811790915560128054928616929093168217909255604080519384526020840192909252908201527fe11f9234c5a9af9538a590c5adf2369754a4198fdd39c264262bfce3c8d825d6906060015b60405180910390a1505050565b6000806114c78888888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612c9792505050565b91509150965096945050505050565b6000336111b48185856114e98383612166565b6114f39190614bbc565b612757565b61ffff83166000908152600160205260408120805482919061151990614a98565b80601f016020809104026020016040519081016040528092919081815260200182805461154590614a98565b80156115925780601f1061156757610100808354040283529160200191611592565b820191906000526020600020905b81548152906001019060200180831161157557829003601f168201915b5050505050905083836040516115a9929190614acc565b60405180910390208180519060200120149150509392505050565b6115cc6126fd565b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd716906342d65a8d9061161c90869086908690600401614bf8565b600060405180830381600087803b15801561163657600080fd5b505af115801561104b573d6000803e3d6000fd5b611655898988612b31565b50809650506116fe8989898988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92506116a79150506020890189614517565b6116b760408a0160208b01614517565b6116c460408b018b614adc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d4f92505050565b9550848610156117205760405162461bcd60e51b8152600401610e9790614b22565b505050505050505050565b6117336126fd565b6001600160a01b0381166117895760405162461bcd60e51b815260206004820152601a60248201527f4665653a206665654f776e65722063616e6e6f742062652030780000000000006044820152606401610e97565b6009805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040519081527f047912631afa564eebd3db2efe191a0dec62da1fede6bbbc1ffc89d87845b1b5906020015b60405180910390a150565b6117f06126fd565b6127108161ffff1611156118165760405162461bcd60e51b8152600401610e9790614c16565b6009805461ffff191661ffff83169081179091556040519081527fd26030ef4a8c225ee12b646eb4466acb41fb96b6cd4660b22d0ba0124e7bdc74906020016117dd565b3330146118b85760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b6064820152608401610e97565b61130c8686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250612e4b92505050565b6119366126fd565b6119406000612ed2565b565b6001602052600090815260409020805461195b90614a98565b80601f016020809104026020016040519081016040528092919081815260200182805461198790614a98565b80156119d45780601f106119a9576101008083540402835291602001916119d4565b820191906000526020600020905b8154815290600101906020018083116119b757829003601f168201915b505050505081565b6119e46126fd565b6001600160a01b0381166000818152601360209081526040808320805460ff191690558051938452908301919091527fb840a1dbd8b09a3dc45161bba92dfb9aba643c0e44c085a447f839d1d02cf13b91016117dd565b611a436126fd565b6127108161ffff161115611a695760405162461bcd60e51b8152600401610e9790614c16565b60408051808201825261ffff83811680835285151560208085018281528985166000818152600884528890209651875492511515620100000262ffffff1990931696169590951717909455845192835292820192909252918201527fdd9c9685af3e6dcb56d8f4b88d2595d4add6837a150034e7781c46b6dcf8aaab90606001611474565b6000611af9600c5490565b905090565b6060600e805461109a90614a98565b611b15612f22565b611b1f8282612fe8565b5050565b61ffff8116600090815260016020526040812080546060929190611b4690614a98565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7290614a98565b8015611bbf5780601f10611b9457610100808354040283529160200191611bbf565b820191906000526020600020905b815481529060010190602001808311611ba257829003601f168201915b505050505090508051600003611c175760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610e97565b611c32600060148351611c2a9190614c5b565b83919061311c565b9392505050565b60003381611c478286612166565b905083811015611ca75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e97565b6112668286868403612757565b600080611d318b8b8b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b81528e93508d9250908c908c908190840183828082843760009201919091525061322992505050565b91509150995099975050505050505050565b611d4b6126fd565b818130604051602001611d6093929190614c6e565b60408051601f1981840301815291815261ffff8516600090815260016020522090611d8b9082614cda565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce83838360405161147493929190614bf8565b6000336111b4818585612910565b611dd56132e4565b611ddf3382612fe8565b50565b611dea6126fd565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b906020016117dd565b61123d613355565b611e486133c2565b6001600160a01b0383166000908152600f602052604090205460ff1615611ebc5760405162461bcd60e51b815260206004820152602260248201527f4d696e7420697320626c6f636b6564206f6e207468697320636f6c6c61746572604482015261185b60f21b6064820152608401610e97565b6112488282613430565b611ece6126fd565b6040516332fb62e760e21b81526001600160a01b037f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7169063cbed8b9c90611f229088908890889088908890600401614d99565b600060405180830381600087803b158015611f3c57600080fd5b505af1158015611720573d6000803e3d6000fd5b61ffff86166000908152600560205260408082209051611f739088908890614acc565b90815260408051602092819003830190206001600160401b03871660009081529252902054905080611ff35760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b6064820152608401610e97565b808383604051612004929190614acc565b6040518091039020146120635760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b6064820152608401610e97565b61ffff871660009081526005602052604080822090516120869089908990614acc565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f8801829004820283018201905286825261211e918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250612e4b92505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051612155959493929190614dd2565b60405180910390a150505050505050565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b6121996126fd565b600081116121e15760405162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b6044820152606401610e97565b61ffff83811660008181526002602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001611474565b61224b6126fd565b6006805460ff19168215159081179091556040519081527f1584ad594a70cbe1e6515592e1272a987d922b097ead875069cebe8b40c004a4906020016117dd565b3330146122db5760405162461bcd60e51b815260206004820152601f60248201527f4f4654436f72653a2063616c6c6572206d757374206265204f4654436f7265006044820152606401610e97565b6122e63086866134f1565b9350846001600160a01b03168a61ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf8660405161232891815260200190565b60405180910390a36001600160a01b0385163b612380576040516001600160a01b03861681527f9aedf5fdba8716db3b6705ca00150643309995d4f818a249ed6dde6677e7792d9060200160405180910390a16123f0565b604051633fe79aed60e11b81526001600160a01b03861690637fcf35da9083906123bc908e908e908e908e908e908d908d908d90600401614e0d565b600060405180830381600088803b1580156123d657600080fd5b5087f11580156123ea573d6000803e3d6000fd5b50505050505b50505050505050505050565b6124046126fd565b61ffff83166000908152600160205260409020612422828483614e68565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab83838360405161147493929190614bf8565b61ffff828116600090815260086020908152604080832081518083019092525493841681526201000090930460ff16158015918401919091529091906124bb578051612710906124aa9061ffff1685614f27565b6124b49190614f54565b91506124e1565b60095461ffff16156124dc57600954612710906124aa9061ffff1685614f27565b600091505b5092915050565b6124f06126fd565b6001600160a01b0381166125555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e97565b611ddf81612ed2565b604051633d7b2f6f60e21b815261ffff808616600483015284166024820152306044820152606481018290526060907f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd76001600160a01b03169063f5ecbdbc90608401600060405180830381865afa1580156125de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126069190810190614f68565b95945050505050565b6126176132e4565b611ddf3382613430565b6126296126fd565b6001600160a01b038116600081815260136020908152604091829020805460ff191660019081179091558251938452908301527fb840a1dbd8b09a3dc45161bba92dfb9aba643c0e44c085a447f839d1d02cf13b91016117dd565b6000806126e75a60966366ad5c8a60e01b898989896040516024016126ac9493929190614fd5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091523092919061354c565b915091508161130c5761130c86868686856135d6565b6000546001600160a01b031633146119405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e97565b6001600160a01b0383166127b95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e97565b6001600160a01b03821661281a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e97565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6012546001600160a01b031633148061289e57506011546001600160a01b031633145b6119405760405162461bcd60e51b815260206004820152603c60248201527f44656274546f6b656e3a2043616c6c6572206973206e6569746865722056657360448201527f73656c4d616e61676572206e6f722053746162696c697479506f6f6c000000006064820152608401610e97565b6001600160a01b0383166129745760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e97565b6001600160a01b0382166129d65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e97565b6001600160a01b0383166000908152600a602052604090205481811015612a4e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e97565b6001600160a01b038085166000818152600a602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612aae9086815260200190565b60405180910390a35b50505050565b6000612ac98484612166565b90506000198114612ab75781811015612b245760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610e97565b612ab78484848403612757565b600080612b3e8484612456565b808403925090508015612b6b57600954612b699086906201000090046001600160a01b0316836134f1565b505b935093915050565b6000612b8187828481613673565b612b8a856136ed565b509050612b998888888461372d565b905060008111612be75760405162461bcd60e51b815260206004820152601960248201527813d19510dbdc994e88185b5bdd5b9d081d1bdbc81cdb585b1b603a1b6044820152606401610e97565b6000612c3287612bf68461375f565b6040805160006020820152602181019390935260c09190911b6001600160c01b0319166041830152805160298184030181526049909201905290565b9050612c428882878787346137e5565b86896001600160a01b03168961ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a85604051612c8391815260200190565b60405180910390a450979650505050505050565b6000806000612ca987612bf68861375f565b60405163040a7bb160e41b81529091506001600160a01b037f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd716906340a7bb1090612d00908b90309086908b908b90600401615013565b6040805180830381865afa158015612d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d409190615067565b92509250509550959350505050565b6000612d67896001846001600160401b038916613673565b612d70876136ed565b509050612d7f8a8a8a8461372d565b905060008111612dcd5760405162461bcd60e51b815260206004820152601960248201527813d19510dbdc994e88185b5bdd5b9d081d1bdbc81cdb585b1b603a1b6044820152606401610e97565b6000612de4338a612ddd8561375f565b8a8a61398a565b9050612df48a82878787346137e5565b888b6001600160a01b03168b61ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a85604051612e3591815260200190565b60405180910390a4509998505050505050505050565b6000612e5782826139cb565b905060ff8116612e7257612e6d85858585613a27565b61119f565b60001960ff821601612e8a57612e6d85858585613ab7565b60405162461bcd60e51b815260206004820152601c60248201527f4f4654436f72653a20756e6b6e6f776e207061636b65742074797065000000006044820152606401610e97565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6010546001600160a01b0316331480612f4557506012546001600160a01b031633145b80612f5a57506011546001600160a01b031633145b6119405760405162461bcd60e51b815260206004820152605360248201527f44656274546f6b656e3a2043616c6c6572206973206e65697468657220426f7260448201527f726f7765724f7065726174696f6e73206e6f722056657373656c4d616e6167656064820152721c881b9bdc8814dd18589a5b1a5d1e541bdbdb606a1b608482015260a401610e97565b6001600160a01b0382166130485760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610e97565b6001600160a01b0382166000908152600a6020526040902054818110156130bc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610e97565b6001600160a01b0383166000818152600a602090815260408083208686039055600c80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60608161312a81601f614bbc565b10156131695760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610e97565b6131738284614bbc565b845110156131b75760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610e97565b6060821580156131d65760405191506000825260208201604052613220565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561320f5780518352602092830192016131f7565b5050858452601f01601f1916604052505b50949350505050565b600080600061323c338a612ddd8b61375f565b60405163040a7bb160e41b81529091506001600160a01b037f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd716906340a7bb1090613293908d90309086908b908b90600401615013565b6040805180830381865afa1580156132af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d39190615067565b925092505097509795505050505050565b3360009081526013602052604090205460ff166119405760405162461bcd60e51b815260206004820152602960248201527f44656274546f6b656e3a2043616c6c6572206973206e6f7420612077686974656044820152686c697374656420534360b81b6064820152608401610e97565b6011546001600160a01b031633146119405760405162461bcd60e51b815260206004820152602a60248201527f44656274546f6b656e3a2043616c6c6572206973206e6f742074686520537461604482015269189a5b1a5d1e541bdbdb60b21b6064820152608401610e97565b6010546001600160a01b031633146119405760405162461bcd60e51b815260206004820152602b60248201527f44656274546f6b656e3a2043616c6c6572206973206e6f7420426f72726f776560448201526a724f7065726174696f6e7360a81b6064820152608401610e97565b6001600160a01b0382166134865760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610e97565b80600c60008282546134989190614bbc565b90915550506001600160a01b0382166000818152600a60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006134fc83613c3e565b33306001600160a01b038616148015906135285750806001600160a01b0316856001600160a01b031614155b1561353857613538858285612abd565b613543858585612910565b50909392505050565b6000606060008060008661ffff166001600160401b0381111561357157613571614642565b6040519080825280601f01601f19166020018201604052801561359b576020820181803683370190505b50905060008087516020890160008d8df191503d9250868311156135bd578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff16815260200190815260200160002085604051613607919061508b565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c9061366490879087908790879087906150a7565b60405180910390a15050505050565b60065460ff161561368f5761368a84848484613cee565b612ab7565b815115612ab75760405162461bcd60e51b815260206004820152602660248201527f4f4654436f72653a205f61646170746572506172616d73206d7573742062652060448201526532b6b83a3c9760d11b6064820152608401610e97565b60008061371a7f000000000000000000000000000000000000000000000000000000e8d4a51000846150f9565b90506137268184614c5b565b9150915091565b6000336001600160a01b038616811461374b5761374b868285612abd565b6137558684612fe8565b5090949350505050565b60008061378c7f000000000000000000000000000000000000000000000000000000e8d4a5100084614f54565b90506001600160401b038111156110855760405162461bcd60e51b815260206004820152601a60248201527f4f4654436f72653a20616d6f756e745344206f766572666c6f770000000000006044820152606401610e97565b61ffff86166000908152600160205260408120805461380390614a98565b80601f016020809104026020016040519081016040528092919081815260200182805461382f90614a98565b801561387c5780601f106138515761010080835404028352916020019161387c565b820191906000526020600020905b81548152906001019060200180831161385f57829003601f168201915b5050505050905080516000036138ed5760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b6064820152608401610e97565b6138f8878751613dcd565b60405162c5803160e81b81526001600160a01b037f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7169063c580310090849061394f908b9086908c908c908c908c9060040161510d565b6000604051808303818588803b15801561396857600080fd5b505af115801561397c573d6000803e3d6000fd5b505050505050505050505050565b6060600185856001600160a01b03891685876040516020016139b196959493929190615174565b604051602081830303815290604052905095945050505050565b60006139d8826001614bbc565b83511015613a1e5760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610e97565b50016001015190565b600080613a3383613e3e565b90925090506001600160a01b038216613a4c5761dead91505b6000613a5782613ec3565b9050613a64878483613ef8565b9050826001600160a01b03168761ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf83604051613aa691815260200190565b60405180910390a350505050505050565b6000806000806000613ac886613f0d565b945094509450945094506000600760008b61ffff1661ffff16815260200190815260200160002089604051613afd919061508b565b90815260408051602092819003830190206001600160401b038b166000908152928190529082205490925060ff1690613b3586613ec3565b905081613b6d57613b478c3083613ef8565b6001600160401b038b166000908152602085905260409020805460ff1916600117905590505b8b8b8b8b8b8b868b60008a613b8b578c6001600160401b0316613b8d565b5a5b9050600080613bbf5a609663eaffd49a60e01b8e8e8e8d8d8d8d8d6040516024016126ac9897969594939291906151d5565b915091508115613c18578751602089012060405161ffff8d16907fb8890edbfc1c74692f527444645f95489c3703cc2df42e4a366f5d06fa6cd88490613c0a908e908e908690615249565b60405180910390a250613c25565b613c258b8b8b8b856135d6565b5050505050505050505050505050505050505050505050565b6001600160a01b03811615801590613c5f57506001600160a01b0381163014155b611ddf5760405162461bcd60e51b815260206004820152605460248201527f44656274546f6b656e3a2043616e6e6f74207472616e7366657220746f6b656e60448201527f73206469726563746c7920746f2074686520746f6b656e20636f6e7472616374606482015273206f7220746865207a65726f206164647265737360601b608482015260a401610e97565b6000613cf983613fc4565b61ffff808716600090815260026020908152604080832093891683529290529081205491925090613d2b908490614bbc565b905060008111613d7d5760405162461bcd60e51b815260206004820152601a60248201527f4c7a4170703a206d696e4761734c696d6974206e6f74207365740000000000006044820152606401610e97565b8082101561130c5760405162461bcd60e51b815260206004820152601b60248201527f4c7a4170703a20676173206c696d697420697320746f6f206c6f7700000000006044820152606401610e97565b61ffff821660009081526003602052604081205490819003613dee57506127105b808211156112485760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610e97565b60008080613e4c84826139cb565b60ff16148015613e5d575082516029145b613ea45760405162461bcd60e51b815260206004820152601860248201527713d19510dbdc994e881a5b9d985b1a59081c185e5b1bd85960421b6044820152606401610e97565b613eaf83600d614020565b9150613ebc836021614085565b9050915091565b60006110857f000000000000000000000000000000000000000000000000000000e8d4a510006001600160401b038416614f27565b6000613f0383613c3e565b6124e18383613430565b600080806060816001613f2087836139cb565b60ff1614613f6b5760405162461bcd60e51b815260206004820152601860248201527713d19510dbdc994e881a5b9d985b1a59081c185e5b1bd85960421b6044820152606401610e97565b613f7686600d614020565b9350613f83866021614085565b9250613f908660296140e2565b9450613f9d866049614085565b9050613fb96051808851613fb19190614c5b565b88919061311c565b915091939590929450565b60006022825110156140185760405162461bcd60e51b815260206004820152601c60248201527f4c7a4170703a20696e76616c69642061646170746572506172616d73000000006044820152606401610e97565b506022015190565b600061402d826014614bbc565b835110156140755760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610e97565b500160200151600160601b900490565b6000614092826008614bbc565b835110156140d95760405162461bcd60e51b8152602060048201526014602482015273746f55696e7436345f6f75744f66426f756e647360601b6044820152606401610e97565b50016008015190565b60006140ef826020614bbc565b835110156141375760405162461bcd60e51b8152602060048201526015602482015274746f427974657333325f6f75744f66426f756e647360581b6044820152606401610e97565b50016020015190565b803561ffff8116811461415257600080fd5b919050565b60008083601f84011261416957600080fd5b5081356001600160401b0381111561418057600080fd5b60208301915083602082850101111561419857600080fd5b9250929050565b80356001600160401b038116811461415257600080fd5b600080600080600080608087890312156141cf57600080fd5b6141d887614140565b955060208701356001600160401b03808211156141f457600080fd5b6142008a838b01614157565b909750955085915061421460408a0161419f565b9450606089013591508082111561422a57600080fd5b5061423789828a01614157565b979a9699509497509295939492505050565b60006020828403121561425b57600080fd5b81356001600160e01b031981168114611c3257600080fd5b60005b8381101561428e578181015183820152602001614276565b50506000910152565b600081518084526142af816020860160208601614273565b601f01601f19169290920160200192915050565b602081526000611c326020830184614297565b6000602082840312156142e857600080fd5b611c3282614140565b6001600160a01b0381168114611ddf57600080fd5b6000806040838503121561431957600080fd5b8235614324816142f1565b946020939093013593505050565b6000806040838503121561434557600080fd5b61432483614140565b60008060006060848603121561436357600080fd5b833561436e816142f1565b9250602084013561437e816142f1565b929592945050506040919091013590565b6000606082840312156143a157600080fd5b50919050565b60008060008060008060c087890312156143c057600080fd5b86356143cb816142f1565b95506143d960208801614140565b945060408701359350606087013592506080870135915060a08701356001600160401b0381111561440957600080fd5b61441589828a0161438f565b9150509295509295509295565b8035801515811461415257600080fd5b6000806040838503121561444557600080fd5b8235614450816142f1565b915061445e60208401614422565b90509250929050565b60008060006060848603121561447c57600080fd5b8335614487816142f1565b92506020840135614497816142f1565b915060408401356144a7816142f1565b809150509250925092565b60008060008060008060a087890312156144cb57600080fd5b6144d487614140565b955060208701359450604087013593506144f060608801614422565b925060808701356001600160401b0381111561450b57600080fd5b61423789828a01614157565b60006020828403121561452957600080fd5b8135611c32816142f1565b60008060006040848603121561454957600080fd5b61455284614140565b925060208401356001600160401b0381111561456d57600080fd5b61457986828701614157565b9497909650939450505050565b60008060008060008060008060006101008a8c0312156145a557600080fd5b89356145b0816142f1565b98506145be60208b01614140565b975060408a0135965060608a0135955060808a0135945060a08a01356001600160401b03808211156145ef57600080fd5b6145fb8d838e01614157565b909650945084915061460f60c08d0161419f565b935060e08c013591508082111561462557600080fd5b506146328c828d0161438f565b9150509295985092959850929598565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561468057614680614642565b604052919050565b60006001600160401b038211156146a1576146a1614642565b50601f01601f191660200190565b6000806000606084860312156146c457600080fd5b6146cd84614140565b925060208401356001600160401b038111156146e857600080fd5b8401601f810186136146f957600080fd5b803561470c61470782614688565b614658565b81815287602083850101111561472157600080fd5b816020840160208301376000602083830101528094505050506147466040850161419f565b90509250925092565b60008060006060848603121561476457600080fd5b61476d84614140565b925061477b60208501614422565b915061474660408501614140565b6000806040838503121561479c57600080fd5b6147a583614140565b915061445e60208401614140565b600080600080600080600080600060e08a8c0312156147d157600080fd5b6147da8a614140565b985060208a0135975060408a0135965060608a01356001600160401b038082111561480457600080fd5b6148108d838e01614157565b909850965086915061482460808d0161419f565b955061483260a08d01614422565b945060c08c013591508082111561484857600080fd5b506148558c828d01614157565b915080935050809150509295985092959850929598565b60006020828403121561487e57600080fd5b5035919050565b60008060008060006080868803121561489d57600080fd5b6148a686614140565b94506148b460208701614140565b93506040860135925060608601356001600160401b038111156148d657600080fd5b6148e288828901614157565b969995985093965092949392505050565b6000806040838503121561490657600080fd5b8235614911816142f1565b91506020830135614921816142f1565b809150509250929050565b60008060006060848603121561494157600080fd5b61494a84614140565b925061495860208501614140565b9150604084013590509250925092565b60006020828403121561497a57600080fd5b611c3282614422565b6000806000806000806000806000806101008b8d0312156149a357600080fd5b6149ac8b614140565b995060208b01356001600160401b03808211156149c857600080fd5b6149d48e838f01614157565b909b5099508991506149e860408e0161419f565b985060608d0135975060808d01359150614a01826142f1565b90955060a08c0135945060c08c01359080821115614a1e57600080fd5b50614a2b8d828e01614157565b9150809450508092505060e08b013590509295989b9194979a5092959850565b60008060008060808587031215614a6157600080fd5b614a6a85614140565b9350614a7860208601614140565b92506040850135614a88816142f1565b9396929550929360600135925050565b600181811c90821680614aac57607f821691505b6020821081036143a157634e487b7160e01b600052602260045260246000fd5b8183823760009101908152919050565b6000808335601e19843603018112614af357600080fd5b8301803591506001600160401b03821115614b0d57600080fd5b60200191503681900382131561419857600080fd5b6020808252602d908201527f426173654f4654576974684665653a20616d6f756e74206973206c657373207460408201526c1a185b881b5a5b905b5bdd5b9d609a1b606082015260800190565b60208082526018908201527f496e76616c696420636f6e747261637420616464726573730000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561108557611085614ba6565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff84168152604060208201526000612606604083018486614bcf565b60208082526025908201527f4665653a20666565206270206d757374206265203c3d2042505f44454e4f4d496040820152642720aa27a960d91b606082015260800190565b8181038181111561108557611085614ba6565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b601f82111561124857600081815260208120601f850160051c81016020861015614cbb5750805b601f850160051c820191505b8181101561130c57828155600101614cc7565b81516001600160401b03811115614cf357614cf3614642565b614d0781614d018454614a98565b84614c94565b602080601f831160018114614d3c5760008415614d245750858301515b600019600386901b1c1916600185901b17855561130c565b600085815260208120601f198616915b82811015614d6b57888601518255948401946001909101908401614d4c565b5085821015614d895787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600061ffff808816835280871660208401525084604083015260806060830152614dc7608083018486614bcf565b979650505050505050565b61ffff86168152608060208201526000614df0608083018688614bcf565b6001600160401b0394909416604083015250606001529392505050565b61ffff8916815260c060208201526000614e2b60c08301898b614bcf565b6001600160401b038816604084015286606084015285608084015282810360a0840152614e59818587614bcf565b9b9a5050505050505050505050565b6001600160401b03831115614e7f57614e7f614642565b614e9383614e8d8354614a98565b83614c94565b6000601f841160018114614ec75760008515614eaf5750838201355b600019600387901b1c1916600186901b17835561119f565b600083815260209020601f19861690835b82811015614ef85786850135825560209485019460019092019101614ed8565b5086821015614f155760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b808202811582820484141761108557611085614ba6565b634e487b7160e01b600052601260045260246000fd5b600082614f6357614f63614f3e565b500490565b600060208284031215614f7a57600080fd5b81516001600160401b03811115614f9057600080fd5b8201601f81018413614fa157600080fd5b8051614faf61470782614688565b818152856020838501011115614fc457600080fd5b612606826020830160208601614273565b61ffff85168152608060208201526000614ff26080830186614297565b6001600160401b03851660408401528281036060840152614dc78185614297565b61ffff861681526001600160a01b038516602082015260a06040820181905260009061504190830186614297565b8415156060840152828103608084015261505b8185614297565b98975050505050505050565b6000806040838503121561507a57600080fd5b505080516020909101519092909150565b6000825161509d818460208701614273565b9190910192915050565b61ffff8616815260a0602082015260006150c460a0830187614297565b6001600160401b038616604084015282810360608401526150e58186614297565b9050828103608084015261505b8185614297565b60008261510857615108614f3e565b500690565b61ffff8716815260c06020820152600061512a60c0830188614297565b828103604084015261513c8188614297565b6001600160a01b0387811660608601528616608085015283810360a085015290506151678185614297565b9998505050505050505050565b60ff60f81b8760f81b16815285600182015260006001600160401b0360c01b808760c01b166021840152856029840152808560c01b1660498401525082516151c3816051850160208701614273565b91909101605101979650505050505050565b600061010061ffff8b1683528060208401526151f38184018b614297565b6001600160401b038a166040850152606084018990526001600160a01b038816608085015260a0840187905283810360c085015290506152338186614297565b9150508260e08301529998505050505050505050565b60608152600061525c6060830186614297565b6001600160401b03949094166020830152506040015291905056fea26469706673582212204304f6a25529ad81c466d7d843cc67377c2f7c8699e407e284e11c1f3489268d64736f6c63430008130033" + }, + { + "address": "0x57845f9fd86b3ea4d7556f2f7923803b5e3fa1d0", + "nonce": 21, + "balance": "0x0000000000000000000000000000000000000000000000000023b09f5bd662d8", + "code": "0x" + }, + { + "address": "0x917d3fec60442024908778535cc78efaa2b213e8", + "nonce": 16, + "balance": "0x0000000000000000000000000000000000000000000000000026b012d48bd015", + "code": "0x" + }, + { + "address": "0x87f21c771eac9c547eb22312997153d3a1fc40f6", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80637a2c7b8d116100c3578063a2a9539c1161007c578063a2a9539c146102c1578063a457c2d7146102d4578063a9059cbb146102e7578063d5391393146102f5578063d547741f1461031c578063dd62ed3e1461032f57600080fd5b80637a2c7b8d1461025d57806384b0196e1461027057806391d148541461028b57806395d89b411461029e5780639dc29fac146102a6578063a217fddf146102b957600080fd5b8063248a9ca311610115578063248a9ca3146101c75780632f2ff15d146101ea578063313ce567146101ff57806336568abe1461020e578063395093511461022157806370a082311461023457600080fd5b806301ffc9a71461015257806306fdde031461017a578063095ea7b31461018f57806318160ddd146101a257806323b872dd146101b4575b600080fd5b610165610160366004611625565b610342565b60405190151581526020015b60405180910390f35b610182610379565b604051610171919061169f565b61016561019d3660046116ce565b61040b565b6035545b604051908152602001610171565b6101656101c23660046116f8565b610423565b6101a66101d5366004611734565b600090815260cb602052604090206001015490565b6101fd6101f836600461174d565b610464565b005b60405160008152602001610171565b6101fd61021c36600461174d565b61048e565b61016561022f3660046116ce565b61050c565b6101a6610242366004611779565b6001600160a01b031660009081526033602052604090205490565b6101fd61026b366004611840565b61052e565b6102786106c8565b60405161017197969594939291906118a4565b61016561029936600461174d565b610766565b610182610791565b6101fd6102b43660046116ce565b6107a0565b6101a6600081565b6101fd6102cf36600461193a565b6107fa565b6101656102e23660046116ce565b610999565b6101656101c23660046116ce565b6101a67f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6101fd61032a36600461174d565b610a1f565b6101a661033d36600461199a565b610a44565b60006001600160e01b03198216637965db0b60e01b148061037357506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060368054610388906119c4565b80601f01602080910402602001604051908101604052809291908181526020018280546103b4906119c4565b80156104015780601f106103d657610100808354040283529160200191610401565b820191906000526020600020905b8154815290600101906020018083116103e457829003601f168201915b5050505050905090565b600033610419818585610a6f565b5060019392505050565b60405162461bcd60e51b815260206004820152600e60248201526d191bc81b9bdd081cdd5c1c1bdc9d60921b60448201526000906064015b60405180910390fd5b600082815260cb602052604090206001015461047f81610b93565b6104898383610ba0565b505050565b6001600160a01b03811633146104fe5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161045b565b6105088282610c26565b5050565b60003361041981858561051f8383610a44565b6105299190611a14565b610a6f565b600054610100900460ff161580801561054e5750600054600160ff909116105b806105685750303b158015610568575060005460ff166001145b6105cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161045b565b6000805460ff1916600117905580156105ee576000805461ff0019166101001790555b60fd80546001600160a01b031916331790557f9e9498779dbc68effc410b27e716762f6b0e76ba20c8d867d1647c6b727e872660fe55604080518082018252600481526314dbdd5b60e21b602080830191909152825180840190935260018352603160f81b9083015261066091610c8d565b61066a8383610cbe565b610672610cef565b61067d600033610d18565b8015610489576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a1505050565b6000606080600080600060606065546000801b1480156106e85750606654155b61072c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b604482015260640161045b565b610734610d22565b61073c610d31565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600091825260cb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060378054610388906119c4565b6107ab600033610766565b6107f05760405162461bcd60e51b8152602060048201526016602482015275646f206e6f7420686176652061646d696e20726f6c6560501b604482015260640161045b565b6105088282610d40565b60006108068383610e74565b90506108327f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682610766565b61086e5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b6321039b4b3b732b960991b604482015260640161045b565b604083013560ff60006108846020870187611779565b6001600160a01b03166001600160a01b0316815260200190815260200160002054106108f25760405162461bcd60e51b815260206004820152601c60248201527f596f752063616e206f6e6c79206d696e74206f6e636520612064617900000000604482015260640161045b565b604083013560ff60006109086020870187611779565b6001600160a01b03168152602080820192909252604001600020919091556109409061093690850185611779565b8460200135611050565b7f14be1c122ee505f1d86e447cb0ae7bf79456d3f660501d9d24f901e3bbc8e65c61096e6020850185611779565b604080516001600160a01b0390921682526020808701359083015280860135908201526060016106bb565b600033816109a78286610a44565b905083811015610a075760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161045b565b610a148286868403610a6f565b506001949350505050565b600082815260cb6020526040902060010154610a3a81610b93565b6104898383610c26565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6001600160a01b038316610ad15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161045b565b6001600160a01b038216610b325760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161045b565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610b9d8133611111565b50565b610baa8282610766565b61050857600082815260cb602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610be23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610c308282610766565b1561050857600082815260cb602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600054610100900460ff16610cb45760405162461bcd60e51b815260040161045b90611a27565b610508828261116a565b600054610100900460ff16610ce55760405162461bcd60e51b815260040161045b90611a27565b61050882826111b9565b600054610100900460ff16610d165760405162461bcd60e51b815260040161045b90611a27565b565b6105088282610ba0565b606060678054610388906119c4565b606060688054610388906119c4565b6001600160a01b038216610da05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161045b565b6001600160a01b03821660009081526033602052604090205481811015610e145760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161045b565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b604080518082018252600481526314dbdd5b60e21b6020918201528151808301835260018152603160f81b9082015281517fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6e818301527f48b50e50b9d62950957060dd037ffab31fee7d8f86e53bdc168fb3eaf4e4ff01818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808083018290528451808403909101815260a09092019093528051908201206000929183907f9e9498779dbc68effc410b27e716762f6b0e76ba20c8d867d1647c6b727e872690610f6a90880188611779565b604080516020818101949094526001600160a01b039092168282015291880135606082015290870135608082015260a00160405160208183030381529060405280519060200120905060008282604051602001610fde92919061190160f01b81526002810192909252602282015260420190565b60408051601f1981840301815282825280516020918201208784529083018690529082018490526060820181905291507fc339180a73da278b0f6329c7b7e8536c4d20e955eccf4a4b617845cf06c0b9059060800160405180910390a161104581876111f9565b979650505050505050565b6001600160a01b0382166110a65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161045b565b80603560008282546110b89190611a14565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b61111b8282610766565b610508576111288161121d565b61113383602061122f565b604051602001611144929190611a72565b60408051601f198184030181529082905262461bcd60e51b825261045b9160040161169f565b600054610100900460ff166111915760405162461bcd60e51b815260040161045b90611a27565b606761119d8382611b35565b5060686111aa8282611b35565b50506000606581905560665550565b600054610100900460ff166111e05760405162461bcd60e51b815260040161045b90611a27565b60366111ec8382611b35565b5060376104898282611b35565b600080600061120885856113d2565b9150915061121581611417565b509392505050565b60606103736001600160a01b03831660145b6060600061123e836002611bf5565b611249906002611a14565b67ffffffffffffffff81111561126157611261611794565b6040519080825280601f01601f19166020018201604052801561128b576020820181803683370190505b509050600360fc1b816000815181106112a6576112a6611c0c565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106112d5576112d5611c0c565b60200101906001600160f81b031916908160001a90535060006112f9846002611bf5565b611304906001611a14565b90505b600181111561137c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061133857611338611c0c565b1a60f81b82828151811061134e5761134e611c0c565b60200101906001600160f81b031916908160001a90535060049490941c9361137581611c22565b9050611307565b5083156113cb5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161045b565b9392505050565b60008082516041036114085760208301516040840151606085015160001a6113fc87828585611561565b94509450505050611410565b506000905060025b9250929050565b600081600481111561142b5761142b611c39565b036114335750565b600181600481111561144757611447611c39565b036114945760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161045b565b60028160048111156114a8576114a8611c39565b036114f55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161045b565b600381600481111561150957611509611c39565b03610b9d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161045b565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611598575060009050600361161c565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156115ec573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166116155760006001925092505061161c565b9150600090505b94509492505050565b60006020828403121561163757600080fd5b81356001600160e01b0319811681146113cb57600080fd5b60005b8381101561166a578181015183820152602001611652565b50506000910152565b6000815180845261168b81602086016020860161164f565b601f01601f19169290920160200192915050565b6020815260006113cb6020830184611673565b80356001600160a01b03811681146116c957600080fd5b919050565b600080604083850312156116e157600080fd5b6116ea836116b2565b946020939093013593505050565b60008060006060848603121561170d57600080fd5b611716846116b2565b9250611724602085016116b2565b9150604084013590509250925092565b60006020828403121561174657600080fd5b5035919050565b6000806040838503121561176057600080fd5b82359150611770602084016116b2565b90509250929050565b60006020828403121561178b57600080fd5b6113cb826116b2565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156117c5576117c5611794565b604051601f8501601f19908116603f011681019082821181831017156117ed576117ed611794565b8160405280935085815286868601111561180657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261183157600080fd5b6113cb838335602085016117aa565b6000806040838503121561185357600080fd5b823567ffffffffffffffff8082111561186b57600080fd5b61187786838701611820565b9350602085013591508082111561188d57600080fd5b5061189a85828601611820565b9150509250929050565b60ff60f81b881681526000602060e0818401526118c460e084018a611673565b83810360408501526118d6818a611673565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156119285783518352928401929184019160010161190c565b50909c9b505050505050505050505050565b600080828403608081121561194e57600080fd5b606081121561195c57600080fd5b50829150606083013567ffffffffffffffff81111561197a57600080fd5b8301601f8101851361198b57600080fd5b61189a858235602084016117aa565b600080604083850312156119ad57600080fd5b6119b6836116b2565b9150611770602084016116b2565b600181811c908216806119d857607f821691505b6020821081036119f857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610373576103736119fe565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611aaa81601785016020880161164f565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611adb81602884016020880161164f565b01602801949350505050565b601f82111561048957600081815260208120601f850160051c81016020861015611b0e5750805b601f850160051c820191505b81811015611b2d57828155600101611b1a565b505050505050565b815167ffffffffffffffff811115611b4f57611b4f611794565b611b6381611b5d84546119c4565b84611ae7565b602080601f831160018114611b985760008415611b805750858301515b600019600386901b1c1916600185901b178555611b2d565b600085815260208120601f198616915b82811015611bc757888601518255948401946001909101908401611ba8565b5085821015611be55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417610373576103736119fe565b634e487b7160e01b600052603260045260246000fd5b600081611c3157611c316119fe565b506000190190565b634e487b7160e01b600052602160045260246000fdfea26469706673582212206cddaf6ee4e1a1fc736ae2f6477b0a780b919a938b22502148608755ce10e39764736f6c63430008110033" + }, + { + "address": "0x36374fc7ef9205b8bb9520f715c9f339829308d2", + "nonce": 7, + "balance": "0x000000000000000000000000000000000000000000000000001464eda08617c8", + "code": "0x" + }, + { + "address": "0xaf8ae6955d07776ab690e565ba6fbc79b8de3a5d", + "nonce": 310294, + "balance": "0x0000000000000000000000000000000000000000000000002ff1f8a729b03ea6", + "code": "0x" + }, + { + "address": "0xbd707c3940f7ae368e0d8822ea7487029839d012", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000001a92383c78f7c8", + "code": "0x" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000103a2f5a84df1c734c", + "code": "0x6080604052600436106102e85760003560e01c80638285ef4011610190578063abdb5ea8116100dc578063dd62ed3e11610095578063ecdaff7e1161006f578063ecdaff7e14610818578063f2b9fdb81461082d578063f2f4eb2614610840578063f2fde38b14610855576102ef565b8063dd62ed3e146107b6578063de02d642146107d6578063e61604cf146107f6576102ef565b8063abdb5ea814610719578063b2a02ff11461072c578063bdb2321f1461074c578063c23379da1461076c578063d49187b31461078c578063d88c3f22146107a1576102ef565b806392fa4e8e11610149578063962941781161012357806396294178146106af5780639951c2cf146106cf578063a1088459146106e4578063a9059cbb146106f9576102ef565b806392fa4e8e1461065a578063935a8b841461067a57806395d89b411461069a576102ef565b80638285ef40146105c6578063830cbbbd146105db5780638399c0ba146105fb578063893d20e81461061b5780638b9db037146106305780638da5cb5b14610645576102ef565b80633ba0b9a91161024f57806359341a1a11610208578063715018a6116101e2578063715018a61461055c5780637f9028c8146105715780637ffc93b11461059157806380009630146105a6576102ef565b806359341a1a146105055780636f307dc31461052757806370a082311461053c576102ef565b80633ba0b9a91461047e5780634322b714146104935780634b8a3529146104a85780634c68df67146104c857806352e97efd146104dd57806359086a5e146104f2576102ef565b80631c446983116102a15780631c446983146103d257806323b872dd146103f257806326d5f64114610412578063313ce56714610427578063374c49b4146104495780633b1d21a214610469576102ef565b8063014a296f146102f457806306fdde031461032a578063095ea7b31461034c578063158ef93e146103795780631624f6c61461038e57806318160ddd146103b0576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004614127565b610875565b6040516103219190614ba2565b60405180910390f35b34801561033657600080fd5b5061033f6108c3565b6040516103219190614468565b34801561035857600080fd5b5061036c610367366004614227565b610951565b604051610321919061445d565b34801561038557600080fd5b5061036c6109bc565b34801561039a57600080fd5b506103ae6103a9366004614272565b6109ca565b005b3480156103bc57600080fd5b506103c5610a8c565b6040516103219190614bc3565b3480156103de57600080fd5b506103ae6103ed3660046142ec565b610a92565b3480156103fe57600080fd5b5061036c61040d3660046141e7565b610c6f565b34801561041e57600080fd5b506103ae610e60565b34801561043357600080fd5b5061043c611040565b6040516103219190614be2565b34801561045557600080fd5b506103c5610464366004614127565b611049565b34801561047557600080fd5b506103c56110ab565b34801561048a57600080fd5b506103c56110bb565b34801561049f57600080fd5b506103c561112b565b3480156104b457600080fd5b506103c56104c3366004614227565b611131565b3480156104d457600080fd5b506103c5611335565b3480156104e957600080fd5b506103c561133b565b6103c56105003660046141e7565b611341565b34801561051157600080fd5b5061051a6114e5565b6040516103219190614365565b34801561053357600080fd5b5061051a6114f4565b34801561054857600080fd5b506103c5610557366004614127565b611503565b34801561056857600080fd5b506103ae61151e565b34801561057d57600080fd5b506103ae61058c366004614127565b6115a7565b34801561059d57600080fd5b506103c5611780565b3480156105b257600080fd5b506103ae6105c1366004614127565b611786565b3480156105d257600080fd5b506103c5611836565b3480156105e757600080fd5b506103c56105f6366004614227565b61184f565b34801561060757600080fd5b506103c5610616366004614127565b6119e0565b34801561062757600080fd5b5061051a611b81565b34801561063c57600080fd5b506103c5611b8b565b34801561065157600080fd5b5061051a611ce7565b34801561066657600080fd5b50610314610675366004614127565b611cf6565b34801561068657600080fd5b506103c5610695366004614127565b611ed6565b3480156106a657600080fd5b5061033f611f0e565b3480156106bb57600080fd5b506103c56106ca366004614227565b611f69565b3480156106db57600080fd5b506103c56120f3565b3480156106f057600080fd5b5061051a6120f9565b34801561070557600080fd5b5061036c610714366004614227565b612108565b6103c5610727366004614227565b6122f8565b34801561073857600080fd5b506103ae6107473660046141e7565b6124ab565b34801561075857600080fd5b506103ae610767366004614127565b6126f2565b34801561077857600080fd5b506103ae610787366004614197565b6127a2565b34801561079857600080fd5b5061051a612a7d565b3480156107ad57600080fd5b506103c5612a8c565b3480156107c257600080fd5b506103c56107d136600461415f565b612aa8565b3480156107e257600080fd5b506103ae6107f1366004614127565b612ad3565b610809610804366004614197565b612b5a565b60405161032193929190614bcc565b34801561082457600080fd5b506103c5612f56565b6103c561083b366004614227565b6130b1565b34801561084c57600080fd5b5061051a613324565b34801561086157600080fd5b506103ae610870366004614127565b613333565b61087d613ff5565b610885613ff5565b6001600160a01b03831660009081526009602052604090205481526108a983611049565b60208201526108b66110bb565b604082015290505b919050565b600e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b505050505081565b3360008181526011602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109aa908690614bc3565b60405180910390a35060015b92915050565b601054610100900460ff1681565b6109d26133f3565b6001600160a01b03166109e3611ce7565b6001600160a01b031614610a125760405162461bcd60e51b8152600401610a09906148ac565b60405180910390fd5b601054610100900460ff1615610a3a5760405162461bcd60e51b8152600401610a099061477a565b610a426133f7565b8251610a5590600e906020860190614016565b508151610a6990600f906020850190614016565b506010805461ff001960ff90931660ff1990911617919091166101001790555050565b60065481565b600c5442118015610aad57506003546001600160a01b031615155b15610c03576003546000906001600160a01b03166315f24053610ace613409565b6008546007546040518463ffffffff1660e01b8152600401610af293929190614bcc565b60206040518083038186803b158015610b0a57600080fd5b505afa158015610b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b429190614304565b90506000610b65610b5e600c54426134a890919063ffffffff16565b83906134d0565b90506000610b90670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b9061350a565b600854909150610ba0908261353c565b600855600b54610bcc90610bc390670de0b6b3a764000090610b8a9085906134d0565b6007549061353c565b600755600d54610bf890610bef90670de0b6b3a764000090610b8a9086906134d0565b600d549061353c565b600d55505042600c55505b610c0b6133f3565b6001600160a01b0316610c1c611ce7565b6001600160a01b031614610c425760405162461bcd60e51b8152600401610a09906148ac565b670de0b6b3a7640000811115610c6a5760405162461bcd60e51b8152600401610a0990614afd565b600b55565b6000600c5442118015610c8c57506003546001600160a01b031615155b15610dc3576003546000906001600160a01b03166315f24053610cad613409565b6008546007546040518463ffffffff1660e01b8152600401610cd193929190614bcc565b60206040518083038186803b158015610ce957600080fd5b505afa158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d219190614304565b90506000610d3d610b5e600c54426134a890919063ffffffff16565b90506000610d62670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b600854909150610d72908261353c565b600855600b54610d9590610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d54610db890610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b60026001541415610de65760405162461bcd60e51b8152600401610a0990614b34565b60026001819055546040516368155ec160e01b81526001600160a01b03909116906368155ec190610e21903390889088908890600401614379565b600060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505060018080559695505050505050565b600c5442118015610e7b57506003546001600160a01b031615155b15610fb2576003546000906001600160a01b03166315f24053610e9c613409565b6008546007546040518463ffffffff1660e01b8152600401610ec093929190614bcc565b60206040518083038186803b158015610ed857600080fd5b505afa158015610eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f109190614304565b90506000610f2c610b5e600c54426134a890919063ffffffff16565b90506000610f51670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b600854909150610f61908261353c565b600855600b54610f8490610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d54610fa790610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6004546001600160a01b03163314610fdc5760405162461bcd60e51b8152600401610a09906147d6565b60026001541415610fff5760405162461bcd60e51b8152600401610a0990614b34565b600260015560075461100f6110ab565b1061103a576007548015611038576000600755600454611038906001600160a01b031682613561565b505b60018055565b60105460ff1681565b6000611053613ff5565b61105b61359b565b6001600160a01b0384166000908152600a60205260409020805491925090611088576000925050506108be565b6001810154604083015182546110a39291610b8a91906134d0565b949350505050565b60006110b5613409565b90505b90565b6000600654600014156110d75750670de0b6b3a76400006110b8565b6110df613ff5565b6110e761359b565b9050611125600654610b8a670de0b6b3a764000061111f85602001516111198760000151611113613409565b9061353c565b906134a8565b906134d0565b91505090565b600b5481565b6000600c544211801561114e57506003546001600160a01b031615155b15611285576003546000906001600160a01b03166315f2405361116f613409565b6008546007546040518463ffffffff1660e01b815260040161119393929190614bcc565b60206040518083038186803b1580156111ab57600080fd5b505afa1580156111bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e39190614304565b905060006111ff610b5e600c54426134a890919063ffffffff16565b90506000611224670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b600854909150611234908261353c565b600855600b5461125790610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d5461127a90610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6002546001600160a01b031633146112af5760405162461bcd60e51b8152600401610a0990614a49565b816112b86110ab565b10156112d65760405162461bcd60e51b8152600401610a09906148e1565b6112e28383600061370d565b6112ec8383613561565b7fe1979fe4c35e0cef342fef5668e2c8e7a7e9f5d5d1ca8fee0ac6c427fa4153af838361131886611049565b6040516113279392919061443c565b60405180910390a150919050565b60075481565b60085481565b6000600c544211801561135e57506003546001600160a01b031615155b15611495576003546000906001600160a01b03166315f2405361137f613409565b6008546007546040518463ffffffff1660e01b81526004016113a393929190614bcc565b60206040518083038186803b1580156113bb57600080fd5b505afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f39190614304565b9050600061140f610b5e600c54426134a890919063ffffffff16565b90506000611434670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b600854909150611444908261353c565b600855600b5461146790610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d5461148a90610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6002546001600160a01b031633146114bf5760405162461bcd60e51b8152600401610a0990614a49565b6005546110a390859085906001600160a01b0316156114de57846114e0565b345b6137b5565b6004546001600160a01b031681565b6005546001600160a01b031681565b6001600160a01b031660009081526009602052604090205490565b6115266133f3565b6001600160a01b0316611537611ce7565b6001600160a01b03161461155d5760405162461bcd60e51b8152600401610a09906148ac565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600c54421180156115c257506003546001600160a01b031615155b156116f9576003546000906001600160a01b03166315f240536115e3613409565b6008546007546040518463ffffffff1660e01b815260040161160793929190614bcc565b60206040518083038186803b15801561161f57600080fd5b505afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116579190614304565b90506000611673610b5e600c54426134a890919063ffffffff16565b90506000611698670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b6008549091506116a8908261353c565b600855600b546116cb90610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d546116ee90610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6117016133f3565b6001600160a01b0316611712611ce7565b6001600160a01b0316146117385760405162461bcd60e51b8152600401610a09906148ac565b6001600160a01b03811661175e5760405162461bcd60e51b8152600401610a0990614991565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600c5481565b61178e6133f3565b6001600160a01b031661179f611ce7565b6001600160a01b0316146117c55760405162461bcd60e51b8152600401610a09906148ac565b6001600160a01b0381166117eb5760405162461bcd60e51b8152600401610a099061454f565b6002546001600160a01b0316156118145760405162461bcd60e51b8152600401610a09906145bd565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000611840613ff5565b61184861359b565b5191505090565b6000600c544211801561186c57506003546001600160a01b031615155b156119a3576003546000906001600160a01b03166315f2405361188d613409565b6008546007546040518463ffffffff1660e01b81526004016118b193929190614bcc565b60206040518083038186803b1580156118c957600080fd5b505afa1580156118dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119019190614304565b9050600061191d610b5e600c54426134a890919063ffffffff16565b90506000611942670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b600854909150611952908261353c565b600855600b5461197590610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d5461199890610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6002546001600160a01b031633146119cd5760405162461bcd60e51b8152600401610a0990614a49565b6119d983836000613875565b9392505050565b6000600c54421180156119fd57506003546001600160a01b031615155b15611b34576003546000906001600160a01b03166315f24053611a1e613409565b6008546007546040518463ffffffff1660e01b8152600401611a4293929190614bcc565b60206040518083038186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a929190614304565b90506000611aae610b5e600c54426134a890919063ffffffff16565b90506000611ad3670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b600854909150611ae3908261353c565b600855600b54611b0690610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d54611b2990610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6001600160a01b0382166000908152600a60205260409020600181015415611b7a576001810154600d548254611b6f9291610b8a91906134d0565b8155600d5460018201555b5492915050565b60006110b5611ce7565b6000600c5442118015611ba857506003546001600160a01b031615155b15611cdf576003546000906001600160a01b03166315f24053611bc9613409565b6008546007546040518463ffffffff1660e01b8152600401611bed93929190614bcc565b60206040518083038186803b158015611c0557600080fd5b505afa158015611c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3d9190614304565b90506000611c59610b5e600c54426134a890919063ffffffff16565b90506000611c7e670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b600854909150611c8e908261353c565b600855600b54611cb190610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d54611cd490610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6110b56110bb565b6000546001600160a01b031690565b611cfe613ff5565b600c5442118015611d1957506003546001600160a01b031615155b15611e50576003546000906001600160a01b03166315f24053611d3a613409565b6008546007546040518463ffffffff1660e01b8152600401611d5e93929190614bcc565b60206040518083038186803b158015611d7657600080fd5b505afa158015611d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dae9190614304565b90506000611dca610b5e600c54426134a890919063ffffffff16565b90506000611def670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b600854909150611dff908261353c565b600855600b54611e2290610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d54611e4590610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b611e58613ff5565b6001600160a01b0383166000908152600a60205260409020600181015415611e9e576001810154600d548254611e939291610b8a91906134d0565b8155600d5460018201555b6001600160a01b0384166000908152600960209081526040909120548352815490830152611eca6110bb565b60408301525092915050565b60006109b6670de0b6b3a7640000610b8a611eef6110bb565b6001600160a01b038616600090815260096020526040902054906134d0565b600f805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109495780601f1061091e57610100808354040283529160200191610949565b6000600c5442118015611f8657506003546001600160a01b031615155b156120bd576003546000906001600160a01b03166315f24053611fa7613409565b6008546007546040518463ffffffff1660e01b8152600401611fcb93929190614bcc565b60206040518083038186803b158015611fe357600080fd5b505afa158015611ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201b9190614304565b90506000612037610b5e600c54426134a890919063ffffffff16565b9050600061205c670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b60085490915061206c908261353c565b600855600b5461208f90610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d546120b290610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6002546001600160a01b031633146120e75760405162461bcd60e51b8152600401610a0990614a49565b6119d983600084613875565b600d5481565b6003546001600160a01b031681565b6000600c544211801561212557506003546001600160a01b031615155b1561225c576003546000906001600160a01b03166315f24053612146613409565b6008546007546040518463ffffffff1660e01b815260040161216a93929190614bcc565b60206040518083038186803b15801561218257600080fd5b505afa158015612196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ba9190614304565b905060006121d6610b5e600c54426134a890919063ffffffff16565b905060006121fb670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b60085490915061220b908261353c565b600855600b5461222e90610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d5461225190610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6002600154141561227f5760405162461bcd60e51b8152600401610a0990614b34565b60026001819055546040516368155ec160e01b81526001600160a01b03909116906368155ec1906122ba903390819088908890600401614379565b600060405180830381600087803b1580156122d457600080fd5b505af11580156122e8573d6000803e3d6000fd5b5050600180805595945050505050565b6000600c544211801561231557506003546001600160a01b031615155b1561244c576003546000906001600160a01b03166315f24053612336613409565b6008546007546040518463ffffffff1660e01b815260040161235a93929190614bcc565b60206040518083038186803b15801561237257600080fd5b505afa158015612386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123aa9190614304565b905060006123c6610b5e600c54426134a890919063ffffffff16565b905060006123eb670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b6008549091506123fb908261353c565b600855600b5461241e90610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d5461244190610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6002546001600160a01b031633146124765760405162461bcd60e51b8152600401610a0990614a49565b60001982141561248c5761248983611049565b91505b6005546119d990849081906001600160a01b0316156114de57846114e0565b600c54421180156124c657506003546001600160a01b031615155b156125fd576003546000906001600160a01b03166315f240536124e7613409565b6008546007546040518463ffffffff1660e01b815260040161250b93929190614bcc565b60206040518083038186803b15801561252357600080fd5b505afa158015612537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255b9190614304565b90506000612577610b5e600c54426134a890919063ffffffff16565b9050600061259c670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b6008549091506125ac908261353c565b600855600b546125cf90610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d546125f290610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6002546001600160a01b031633146126275760405162461bcd60e51b8152600401610a0990614a49565b6002600154141561264a5760405162461bcd60e51b8152600401610a0990614b34565b60026001556001600160a01b03821660009081526009602052604090205461267290826134a8565b6001600160a01b0380841660009081526009602052604080822093909355908516815220546126a1908261353c565b6001600160a01b038085166000818152600960205260409081902093909355915190841690600080516020614c62833981519152906126e1908590614bc3565b60405180910390a350506001805550565b6126fa6133f3565b6001600160a01b031661270b611ce7565b6001600160a01b0316146127315760405162461bcd60e51b8152600401610a09906148ac565b6001600160a01b0381166127575760405162461bcd60e51b8152600401610a0990614692565b6005546001600160a01b0316156127805760405162461bcd60e51b8152600401610a099061470c565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146127cc5760405162461bcd60e51b8152600401610a0990614a49565b816001600160a01b0316836001600160a01b0316141580156128f05750600260009054906101000a90046001600160a01b03166001600160a01b0316633a5381b56040518163ffffffff1660e01b815260040160206040518083038186803b15801561283757600080fd5b505afa15801561284b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286f9190614143565b6001600160a01b031663eabe7d913085846040518463ffffffff1660e01b815260040161289e939291906143a3565b602060405180830381600087803b1580156128b857600080fd5b505af11580156128cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f09190614252565b61290c5760405162461bcd60e51b8152600401610a09906145f4565b806129295760405162461bcd60e51b8152600401610a0990614522565b6000836001600160a01b0316856001600160a01b03161461296f576001600160a01b03808516600090815260116020908152604080832093891683529290522054612973565b6000195b9050600061299c83604051806060016040528060298152602001614c3960299139849190613b41565b6001600160a01b0386166000908152600960205260409020549091506129c290846134a8565b6001600160a01b0380871660009081526009602052604080822093909355908616815220546129f1908461353c565b6001600160a01b0385166000908152600960205260409020556000198214612a3c576001600160a01b038086166000908152601160209081526040808320938a168352929052208190555b836001600160a01b0316856001600160a01b0316600080516020614c6283398151915285604051612a6d9190614bc3565b60405180910390a3505050505050565b6003546001600160a01b031690565b6000612a96613ff5565b612a9e61359b565b6040015191505090565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b612adb6133f3565b6001600160a01b0316612aec611ce7565b6001600160a01b031614612b125760405162461bcd60e51b8152600401610a09906148ac565b6001600160a01b038116612b385760405162461bcd60e51b8152600401610a09906149d4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000600c5442118015612b7a57506003546001600160a01b031615155b15612cb1576003546000906001600160a01b03166315f24053612b9b613409565b6008546007546040518463ffffffff1660e01b8152600401612bbf93929190614bcc565b60206040518083038186803b158015612bd757600080fd5b505afa158015612beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0f9190614304565b90506000612c2b610b5e600c54426134a890919063ffffffff16565b90506000612c50670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b600854909150612c60908261353c565b600855600b54612c8390610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d54612ca690610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6002546001600160a01b03163314612cdb5760405162461bcd60e51b8152600401610a0990614a49565b856001600160a01b0316856001600160a01b03161415612d0d5760405162461bcd60e51b8152600401610a099061449b565b6005546001600160a01b031615612d245783612d26565b345b9350612d338686866137b5565b9350600084118015612d46575060001984105b612d625760405162461bcd60e51b8152600401610a0990614b6b565b600260009054906101000a90046001600160a01b03166001600160a01b0316633a5381b56040518163ffffffff1660e01b815260040160206040518083038186803b158015612db057600080fd5b505afa158015612dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de89190614143565b6001600160a01b0316631ed4a1743089876040518463ffffffff1660e01b8152600401612e17939291906143a3565b606060405180830381600087803b158015612e3157600080fd5b505af1158015612e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e69919061431c565b6040516370a0823160e01b8152929550909350915083906001600160a01b038916906370a0823190612e9f908990600401614365565b60206040518083038186803b158015612eb757600080fd5b505afa158015612ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eef9190614304565b1015612f0d5760405162461bcd60e51b8152600401610a099061484e565b7f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb528686868a87604051612f449594939291906143c7565b60405180910390a19450945094915050565b6000600c5442118015612f7357506003546001600160a01b031615155b156130aa576003546000906001600160a01b03166315f24053612f94613409565b6008546007546040518463ffffffff1660e01b8152600401612fb893929190614bcc565b60206040518083038186803b158015612fd057600080fd5b505afa158015612fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130089190614304565b90506000613024610b5e600c54426134a890919063ffffffff16565b90506000613049670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b600854909150613059908261353c565b600855600b5461307c90610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d5461309f90610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b5060085490565b6000600c54421180156130ce57506003546001600160a01b031615155b15613205576003546000906001600160a01b03166315f240536130ef613409565b6008546007546040518463ffffffff1660e01b815260040161311393929190614bcc565b60206040518083038186803b15801561312b57600080fd5b505afa15801561313f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131639190614304565b9050600061317f610b5e600c54426134a890919063ffffffff16565b905060006131a4670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b6008549091506131b4908261353c565b600855600b546131d790610bc390670de0b6b3a764000090610b8a9085906134d0565b600755600d546131fa90610bef90670de0b6b3a764000090610b8a9086906134d0565b600d55505042600c55505b6002546001600160a01b0316331461322f5760405162461bcd60e51b8152600401610a0990614a49565b60006132396110bb565b6005549091506001600160a01b0316156132535782613255565b345b92506132618484613b6d565b9250600061327b82610b8a86670de0b6b3a76400006134d0565b90506000811161329d5760405162461bcd60e51b8152600401610a099061495a565b6132a985826000613cf9565b7f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688585826040516132da929190614423565b60405180910390a1846001600160a01b031660006001600160a01b0316600080516020614c62833981519152836040516133149190614bc3565b60405180910390a3949350505050565b6002546001600160a01b031681565b61333b6133f3565b6001600160a01b031661334c611ce7565b6001600160a01b0316146133725760405162461bcd60e51b8152600401610a09906148ac565b6001600160a01b0381166133985760405162461bcd60e51b8152600401610a09906144dc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b42600c55670de0b6b3a7640000600d55565b6005546000906001600160a01b0316156134a2576005546040516370a0823160e01b81526001600160a01b03909116906370a082319061344d903090600401614365565b60206040518083038186803b15801561346557600080fd5b505afa158015613479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061349d9190614304565b6110b5565b6110b547345b6000828211156134ca5760405162461bcd60e51b8152600401610a099061465b565b50900390565b6000826134df575060006109b6565b828202828482816134ec57fe5b04146119d95760405162461bcd60e51b8152600401610a099061480d565b600080821161352b5760405162461bcd60e51b8152600401610a09906146d5565b81838161353457fe5b049392505050565b6000828201838110156119d95760405162461bcd60e51b8152600401610a0990614586565b6005546001600160a01b03166135805761357b8282613d6e565b613597565b600554613597906001600160a01b03168383613e00565b5050565b6135a3613ff5565b6135ab613ff5565b60085481526007546020820152600d546040820152600c54421180156135d357506000600854115b156110b5576003546000906001600160a01b03166315f240536135f4613409565b6008546007546040518463ffffffff1660e01b815260040161361893929190614bcc565b60206040518083038186803b15801561363057600080fd5b505afa158015613644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136689190614304565b90506000613684610b5e600c54426134a890919063ffffffff16565b905060006136a9670de0b6b3a7640000610b8a846008546134d090919063ffffffff16565b6008549091506136b9908261353c565b8452600b546136db90610bc390670de0b6b3a764000090610b8a9085906134d0565b6020850152600d5461370090610bef90670de0b6b3a764000090610b8a9086906134d0565b6040850152505050905090565b6001600160a01b0383166000908152600a60205260409020600181015461373757600d5460018201555b61376082611119856111138560010154610b8a600d5488600001546134d090919063ffffffff16565b8155600d54600182015560085461377d908390611119908661353c565b60085580546103e811613791578054613794565b60005b81556008546103e8116137a9576008546137ac565b60005b60085550505050565b6000806137c184611049565b905060006137cf8285613eee565b90506137db8682613b6d565b90506137e98560008361370d565b6005546001600160a01b0316613827576000818511613809576000613813565b61381385836134a8565b90508015613825576138258782613561565b505b7fa9a154237a69922f8860321d1fec1624a5dbe8a8af89a3dd3d7a759f6c8080d886868361385489611049565b60405161386494939291906143fa565b60405180910390a195945050505050565b6000821580613882575081155b61389e5760405162461bcd60e51b8152600401610a0990614aab565b8260065410156138c05760405162461bcd60e51b8152600401610a0990614743565b816138c96110ab565b1015806138d4575081155b6138f05760405162461bcd60e51b8152600401610a0990614923565b61390e670de0b6b3a7640000610b8a6139076110bb565b86906134d0565b6139166110ab565b101580613921575082155b61393d5760405162461bcd60e51b8152600401610a0990614923565b6000808411613968576139636139516110bb565b610b8a85670de0b6b3a76400006134d0565b61396a565b835b9050600080851161397b5783613999565b613999670de0b6b3a7640000610b8a6139926110bb565b88906134d0565b9050600260009054906101000a90046001600160a01b03166001600160a01b0316633a5381b56040518163ffffffff1660e01b815260040160206040518083038186803b1580156139e957600080fd5b505afa1580156139fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a219190614143565b6001600160a01b031663eabe7d913088856040518463ffffffff1660e01b8152600401613a50939291906143a3565b602060405180830381600087803b158015613a6a57600080fd5b505af1158015613a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa29190614252565b613abe5760405162461bcd60e51b8152600401610a09906147a7565b613aca86600084613cf9565b613ad48682613561565b60006001600160a01b0316866001600160a01b0316600080516020614c6283398151915284604051613b069190614bc3565b60405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a9298682846040516138649392919061443c565b60008184841115613b655760405162461bcd60e51b8152600401610a099190614468565b505050900390565b6005546000906001600160a01b0316613bb15781341015613ba05760405162461bcd60e51b8152600401610a099061462b565b613baa3483613eee565b90506109b6565b6005546040516370a0823160e01b81526000916001600160a01b0316906370a0823190613be2903090600401614365565b60206040518083038186803b158015613bfa57600080fd5b505afa158015613c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c329190614304565b600554909150613c4d906001600160a01b0316853086613f04565b6005546040516370a0823160e01b81526000916001600160a01b0316906370a0823190613c7e903090600401614365565b60206040518083038186803b158015613c9657600080fd5b505afa158015613caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cce9190614304565b905083613cdb82846134a8565b1115613ce657600080fd5b613cf081836134a8565b925050506109b6565b6001600160a01b038316600090815260096020526040902054613d22908290611119908561353c565b6001600160a01b038416600090815260096020526040902055600654613d4e908290611119908561353c565b60068190556103e811613d6357600654613d66565b60005b600655505050565b604080516000808252602082019092526001600160a01b038416908390604051613d989190614349565b60006040518083038185875af1925050503d8060008114613dd5576040519150601f19603f3d011682016040523d82523d6000602084013e613dda565b606091505b5050905080613dfb5760405162461bcd60e51b8152600401610a0990614a1f565b505050565b60006060846001600160a01b031663a9059cbb8585604051602401613e26929190614423565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613e5f9190614349565b6000604051808303816000865af19150503d8060008114613e9c576040519150601f19603f3d011682016040523d82523d6000602084013e613ea1565b606091505b5091509150818015613ecb575080511580613ecb575080806020019051810190613ecb9190614252565b613ee75760405162461bcd60e51b8152600401610a0990614885565b5050505050565b6000818310613efd57816119d9565b5090919050565b60006060856001600160a01b03166323b872dd868686604051602401613f2c939291906143a3565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613f659190614349565b6000604051808303816000865af19150503d8060008114613fa2576040519150601f19603f3d011682016040523d82523d6000602084013e613fa7565b606091505b5091509150818015613fd1575080511580613fd1575080806020019051810190613fd19190614252565b613fed5760405162461bcd60e51b8152600401610a0990614a80565b505050505050565b60405180606001604052806000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061405757805160ff1916838001178555614084565b82800160010185558215614084579182015b82811115614084578251825591602001919060010190614069565b50614090929150614094565b5090565b5b808211156140905760008155600101614095565b600082601f8301126140b9578081fd5b813567ffffffffffffffff808211156140d0578283fd5b604051601f8301601f1916810160200182811182821017156140f0578485fd5b60405282815292508284830160200186101561410b57600080fd5b8260208601602083013760006020848301015250505092915050565b600060208284031215614138578081fd5b81356119d981614c20565b600060208284031215614154578081fd5b81516119d981614c20565b60008060408385031215614171578081fd5b823561417c81614c20565b9150602083013561418c81614c20565b809150509250929050565b600080600080608085870312156141ac578182fd5b84356141b781614c20565b935060208501356141c781614c20565b925060408501356141d781614c20565b9396929550929360600135925050565b6000806000606084860312156141fb578283fd5b833561420681614c20565b9250602084013561421681614c20565b929592945050506040919091013590565b60008060408385031215614239578182fd5b823561424481614c20565b946020939093013593505050565b600060208284031215614263578081fd5b815180151581146119d9578182fd5b600080600060608486031215614286578283fd5b833567ffffffffffffffff8082111561429d578485fd5b6142a9878388016140a9565b945060208601359150808211156142be578384fd5b506142cb868287016140a9565b925050604084013560ff811681146142e1578182fd5b809150509250925092565b6000602082840312156142fd578081fd5b5035919050565b600060208284031215614315578081fd5b5051919050565b600080600060608486031215614330578283fd5b8351925060208401519150604084015190509250925092565b6000825161435b818460208701614bf0565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039586168152938516602085015260408401929092529092166060820152608081019190915260a00190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b901515815260200190565b6000602082528251806020840152614487816040850160208701614bf0565b601f01601f19169190910160400192915050565b60208082526021908201527f4c546f6b656e3a2063616e6e6f74206c697175696461746520796f757273656c6040820152603360f91b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526013908201527213151bdad95b8e881e995c9bc8185b5bdd5b9d606a1b604082015260600190565b6020808252601d908201527f474d61726b65743a20696e76616c696420636f72652061646472657373000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526019908201527f474d61726b65743a20636f726520616c72656164792073657400000000000000604082015260600190565b60208082526017908201527f4c546f6b656e3a2063616e6e6f74207472616e73666572000000000000000000604082015260600190565b602080825260169082015275098a8ded6cadc7440ecc2d8eaca40dad2e6dac2e8c6d60531b604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b60208082526023908201527f474d61726b65743a20696e76616c696420756e6465726c79696e67206164647260408201526265737360e81b606082015260800190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b6020808252601f908201527f474d61726b65743a2073657420756e6465726c79696e6720616c726561647900604082015260600190565b6020808252601f908201527f4c546f6b656e3a206e6f7420656e6f75676820746f74616c20737570706c7900604082015260600190565b602080825260139082015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604082015260600190565b6020808252601590820152744c546f6b656e3a2063616e6e6f742072656465656d60581b604082015260600190565b6020808252601e908201527f47546f6b656e3a206f6e6c79205265626174654469737472696275746f720000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601d908201527f4c546f6b656e3a20746f6f206d756368207365697a6520616d6f756e74000000604082015260600190565b6020808252600d908201526c10b9b0b332aa3930b739b332b960991b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4c546f6b656e3a20626f72726f7720616d6f756e7420657863656564732063616040820152610e6d60f31b606082015260800190565b6020808252601d908201527f4c546f6b656e3a206e6f7420656e6f75676820756e6465726c79696e67000000604082015260600190565b60208082526017908201527f4c546f6b656e3a20696e76616c69642067416d6f756e74000000000000000000604082015260600190565b60208082526023908201527f474d61726b65743a20696e76616c69642072617465206d6f64656c206164647260408201526265737360e81b606082015260800190565b6020808252602b908201527f474d61726b65743a20696e76616c69642072656261746520646973747269627560408201526a746f72206164647265737360a81b606082015260800190565b60208082526010908201526f042e6c2cccaa8e4c2dce6cccae48aa8960831b604082015260600190565b6020808252601a908201527f47546f6b656e3a206f6e6c7920436f726520436f6e7472616374000000000000604082015260600190565b60208082526011908201527021736166655472616e7366657246726f6d60781b604082015260600190565b60208082526032908201527f4c546f6b656e3a206f6e65206f662067416d6f756e74496e206f722075416d6f604082015271756e74496e206d757374206265207a65726f60701b606082015260800190565b6020808252601f908201527f474d61726b65743a20696e76616c6964207265736572766520666163746f7200604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601c908201527f4c546f6b656e3a20696e76616c696420726570617920616d6f756e7400000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b90815260200190565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b60005b83811015614c0b578181015183820152602001614bf3565b83811115614c1a576000848401525b50505050565b6001600160a01b0381168114614c3557600080fd5b5056fe4c546f6b656e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b9533ae8ddf3214370c6c33cf4a3b9c55b5ac65cc7a96fd93fe88da8e454105464736f6c634300060c0033" + }, + { + "address": "0xd21639362ddb572b3fd067da0d460e78252408ef", + "nonce": 32, + "balance": "0x000000000000000000000000000000000000000000000000007aa273263d51fd", + "code": "0x" + }, + { + "address": "0x67ff38bec32613b9b7b282c26214920d8a00c3ab", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60a0604052600436101561001257600080fd5b6000803560e01c8062d20aaa1461218c5780630298e2731461217257806312d85942146121465780631459457a14611fb257806316f0115b14611f895780631848effa14611f605780631ec2bd7b14611f435780632971f66014611e475780632a267a7c14611e1c5780632cbc82bf14611df25780633659cfe614611b0c57806344c5999e14611ae3578063489dba52146116835780634f1ef28614611312578063514ea4bf14611299578063523ed4511461126f57806352d1902d146111ab578063655f881714611189578063812e4bfd1461115f578063894feb9d14610fe85780638c1b753a1461020f57806393a7588014610fc9578063b2a4b8cc14610b36578063bba295a114610b0d578063bc95baad14610ad6578063c0a361d014610481578063c0d78655146102f3578063c415b95c146102ca578063c8d0805214610239578063d5b395a91461020f578063e054d7f2146101e5578063e4548738146101b25763f887ea401461018757600080fd5b346101af57806003193601126101af576070546040516001600160a01b039091168152602090f35b80fd5b50346101af5760603660031901126101af5760206101dd6101d1612204565b6044359060043561497f565b604051908152f35b50346101af5760203660031901126101af5760406020916004358152606883522054604051908152f35b50346101af5760203660031901126101af5760406020916004358152606a83522054604051908152f35b50346101af5760203660031901126101af5761026d60406102c69261025c61517f565b5060043581526066602052206128e5565b6040519182918291909160c08060e083019460018060a01b03815116845260208101516020850152604081015115156040850152606081015160608501526080810151608085015260a081015160a08501520151910152565b0390f35b50346101af57806003193601126101af57606e546040516001600160a01b039091168152602090f35b50346101af5760208060031936011261047d5761030e6121c1565b60655460405162435da560e01b815291926001600160a01b0392909182908290600490829087165afa90811561043b57839183918791610446575b50602460405180948193637be53ca160e01b8352336004840152165afa90811561043b578591610402575b50156103ce5791817f612e824501291f520b5ec7914fa88640aef519e3cef9bedcb88d8ece379acb7d93606093607054931691826001600160601b0360a01b8516176070556040519333855216908301526040820152a180f35b6064906040519062461bcd60e51b82526004820152600d60248201526c37b7363ca837b7b620b236b4b760991b6044820152fd5b90508181813d8311610434575b6104198183612301565b810103126104305761042a906125d2565b38610374565b8480fd5b503d61040f565b6040513d87823e3d90fd5b92505081813d8311610476575b61045d8183612301565b81010312610430578161047084926125be565b38610349565b503d610453565b5080fd5b50346101af576101c03660031901126101af5761049c6121a6565b6104a46121d7565b6104ac61221a565b916104b636612323565b906104bf6121ed565b916101a43515156101a43503610ad25760655460405163c4aa304160e01b81526001600160a01b0390911690602081600481855afa908115610ac7578891610a89575b506001600160a01b031633148015610a04575b61051f91506125df565b61052c85600435846157f4565b80875260666020526040872080549192916001600160a01b0316156109da57600381019161058e835497600484019788549361056d6101843560043561425c565b610184359261014435918d61012435928c6084359160243591600435612aa3565b97919890996004358c52606960205260408c205495600686019687556105b760843585546126ff565b8455606d54604051632f7ce47360e21b815260048035908201528e9161016090829060249082906001600160a01b03165afa9182156109ce579161099d575b5061060a61018435846084356004356135d6565b8d61062e61062761018435608435856106228d6128e5565b615542565b9d8e612943565b81811261088b5761064b91506106458454916154ce565b906126ce565b82555b61065d60c43588600435614046565b84541580610881575b610704575b5060609c50916101a09795939160056000805160206158828339815191529a9896945493549501549554966040519860018060a01b03168952602089015260043560408901526024358e8901521515608088015260a087015260c08601526101843560e086015261010085015261012084015261014083015261016082015284610180820152a160405192835260208301526040820152f35b6101a435156107cb578d60018060a01b03606c541691604060018060a01b039101511691835490803b156107c75760405163148abebb60e21b81526001600160a01b0394909416600485015260248401919091528290604490829084905af180156107ba576107a2575b50916101a09795939160056000805160206158828339815191529a98969460609f5b8155929496989a50509193959761066b565b6107ac8e91612283565b6107b6573861076e565b8c80fd5b8e604051903d90823e3d90fd5b8280fd5b5060018060a01b03606d54168d60018060a01b03606f54169160018060a01b0389541690845491813b1561087d57604051634f7a10db60e11b815260048035908201526001600160a01b0395861660248201529416604485015260648401919091528290608490829084905af180156107ba57610869575b50916101a09795939160056000805160206158828339815191529a98969460609f610790565b6108738e91612283565b6107b65738610843565b8380fd5b5081541515610666565b8354610896826154ce565b116108b8576108b191506108ab8454916154ce565b906126ff565b825561064e565b86548061095757506108cc6108d4916154ce565b8454906126ff565b606c5460408401516001600160a01b0390811693929116803b156107c75760405163f27ac4d960e01b81526001600160a01b0394909416600485015260248401919091528290604490829084905af1801561094a57610937575b508d825561064e565b610943909e919e612283565b9c3861092e565b8f604051903d90823e3d90fd5b9061096b9250610966906154ce565b6127e5565b600288015460ff161561098e57610987600589019182546126ce565b905561064e565b610987600589019182546126ff565b6109c191506101603d610160116109c7575b6109b98183612301565b81019061261a565b386105f6565b503d6109af565b604051903d90823e3d90fd5b60405162461bcd60e51b8152602060048201526002602482015261021360f41b6044820152606490fd5b5060206004916040519283809263477a86ef60e01b82525afa8015610a7e578790610a3f575b61051f91506001600160a01b03163314610515565b506020813d602011610a76575b81610a5960209383612301565b81010312610a7257610a6d61051f916125be565b610a2a565b8680fd5b3d9150610a4c565b6040513d89823e3d90fd5b90506020813d602011610abf575b81610aa460209383612301565b81010312610abb57610ab5906125be565b38610502565b8780fd5b3d9150610a97565b6040513d8a823e3d90fd5b8580fd5b50346101af5761026d60406102c692610b00610af136612229565b91610afa61517f565b506157f4565b81526066602052206128e5565b50346101af57806003193601126101af57606f546040516001600160a01b039091168152602090f35b50346101af5760803660031901126101af57610b50612204565b60443515156044350361047d57610b7260018060a01b0360705416331461295f565b610b81604435600435836157f4565b80835260666020526040832091600483015415610f8e57606d54604051632f7ce47360e21b81526004803590820152610160926001600160a01b0390921691908381602481865afa938415610a7e578794610f6f575b5050606554604051632630c12f60e01b815290602090829060049082906001600160a01b03165afa908115610a7e578791610f35575b50602084810151604051634bb3415360e01b81526001600160a01b0391821660048201529283916024918391165afa908115610a7e578791610f03575b50610c558186614f80565b610ecb576040516330a66e1560e01b8152600480359082015261010081602481875afa918215610ac7578592610cbd928a91610e9a575b50610c96896128e5565b906080602082015191015191610cb160443560043589614b08565b93606435998a926155f0565b5050868413610d42575b867fd96cd62fe772eae2e66a1482cbd5058820e670cb26d2312b309591b23e36e2c960c08789886003820192610d0284549284600435614046565b60018060a01b038354169360ff60026001860154950154169054936040519586526020860152151560408501526060840152608083015260a0820152a180f35b60409081015190516323b872dd60e01b602082019081526001600160a01b03938416602483015260448201949094526064808201869052815293949360a0810193919092169167ffffffffffffffff841181851017610e8657878493928192610def96604052610db1866122ad565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460c0820152519082855af1610de96124ba565b916124ea565b8051908115918215610e64575b505015610e0c5790388080610cc7565b60405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608490fd5b8192509060209181010312610430576020610e7f91016125d2565b3880610dfc565b634e487b7160e01b88526041600452602488fd5b610ebe91506101003d61010011610ec4575b610eb68183612301565b810190612998565b38610c8c565b503d610eac565b60405162461bcd60e51b815260206004820152601060248201526f3732b2b2103634b8bab4b230ba34b7b760811b6044820152606490fd5b90506020813d602011610f2d575b81610f1e60209383612301565b81010312610a72575138610c4a565b3d9150610f11565b90506020813d602011610f67575b81610f5060209383612301565b81010312610a7257610f61906125be565b38610c0d565b3d9150610f43565b610f86929450803d106109c7576109b98183612301565b913880610bd7565b60405162461bcd60e51b8152602060048201526013602482015272706f736974696f6e206e6f742065786973747360681b6044820152606490fd5b50346101af5760203660031901126101af5760206101dd600435615124565b50346101af5760208060031936011261047d576070546001600160a01b03919060043590611019908416331461295f565b82606d54166040518091632f7ce47360e21b82528360048301528160246101609485935afa918215611137578692611142575b5050600483856065541660405192838092632630c12f60e01b82525afa908115611137578492869188936110f7575b50830151604051634bb3415360e01b8152911660048201529485916024918391165afa9182156110ec5784926110ba575b506110b7925061425c565b80f35b90915082813d83116110e5575b6110d18183612301565b810103126107c7576110b7915190386110ac565b503d6110c7565b6040513d86823e3d90fd5b93849193508092503d8311611130575b6111118183612301565b81010312610ad2576024858561112781956125be565b9391925061107b565b503d611107565b6040513d88823e3d90fd5b6111589250803d106109c7576109b98183612301565b388061104c565b50346101af5760203660031901126101af5760406020916004358152606b83522054604051908152f35b50346101af5760403660031901126101af5760206101dd602435600435614784565b50346101af57806003193601126101af577f00000000000000000000000067ff38bec32613b9b7b282c26214920d8a00c3ab6001600160a01b031630036112045760206040516000805160206158628339815191528152f35b60405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608490fd5b50346101af5760203660031901126101af5760406020916004358152606983522054604051908152f35b50346101af5760203660031901126101af57604060e091600435815260666020522060018060a01b038154169060018101549060ff600282015416600382015460048301549160066005850154940154946040519687526020870152151560408601526060850152608084015260a083015260c0820152f35b5060403660031901126101af576113276121c1565b90602491823567ffffffffffffffff81116107c757366023820112156107c7578060040135906113568261234c565b6113636040519182612301565b8281526020928382019236888383010111610a7257818792898793018637830101526001600160a01b037f00000000000000000000000067ff38bec32613b9b7b282c26214920d8a00c3ab8116906113bd30831415612368565b6113da6000805160206158628339815191529282845416146123c9565b6004858260655416604051928380926334cc866d60e21b82525afa908115610ac757908291899161164b575b50163303611611577f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156114485750505050506110b791925061242a565b859394969516906040516352d1902d60e01b81528781600481865afa8791816115e2575b506114cc5760405162461bcd60e51b815260048101899052602e818b01527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b97919293949695970361158d57509085916114e68461242a565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2805115801590611585575b611522575b505050505080f35b61157a9482917f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60405196611556886122e5565b60278852870152660819985a5b195960ca1b60408701525190845af4610de96124ba565b50388080838161151a565b506001611515565b8460296084926040519262461bcd60e51b845260048401528201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152fd5b9091508881813d831161160a575b6115fa8183612301565b81010312610abb5751903861146c565b503d6115f0565b60405162461bcd60e51b8152600481018690526013818a015272556e617574686f72697a65642061636365737360681b6044820152606490fd5b809250878092503d831161167c575b6116648183612301565b81010312610abb5761167682916125be565b38611406565b503d61165a565b50346101af576101a03660031901126101af5761169e6121a6565b6116a66121d7565b6116ae61221a565b916116b836612323565b906116c16121ed565b9060018060a01b036065541660405163c4aa304160e01b8152602081600481855afa908115610ac7578891611aa9575b506001600160a01b031633148015611a33575b61170e91506125df565b606d54604051632f7ce47360e21b815260048035908201529061016090829060249082906001600160a01b03165afa908115610a7e578791611a12575b5060400151606f546001600160a01b039182169116036119e357604095600080516020615882833981519152936101a09361178988600435866157f4565b91828452606660205261180b8a8520916003830154938b60048501549b6117b56101843560843561272c565b8d1561199f575b8d80151580611996575b61195e575b50506117dc6101843560043561425c565b6117eb60c43587600435614046565b6101843593610144359261012435928c6084359160243591600435612aa3565b909a9099918681126118e657611829906106456003860154916154ce565b60038401555b600435865260696020528b862054936006840194855561185560843560048601546126ce565b600485015561186d6101843583608435600435612d27565b600384015491600560048601549501549554968e519960018060a01b03168a5260208a01526004358e8a015260243560608a01521515608089015260a088015260c08701526101843560e0870152610100860152610120850152610140840152610160830152610180820152a182519182526020820152f35b60038401546118f4826154ce565b116119155761190b906108ab6003860154916154ce565b600384015561182f565b61192161192c916154ce565b6004850154906127e5565b600284015460ff161561194f57611948600585019182546126ce565b905561182f565b611948600585019182546126ff565b61198d9061198761197d60058b019461197886548561272c565b6126ce565b91608435906126ce565b906127e5565b9055388d6117cb565b508115156117c6565b600435600188015586546001600160a01b038c166001600160a01b031990911617875560028701805460ff191660ff851515161790556101843560058801556117bc565b60405162461bcd60e51b815260206004820152600760248201526621706c6564676560c81b6044820152606490fd5b611a2d91506101603d610160116109c7576109b98183612301565b3861174b565b5060206004916040519283809263477a86ef60e01b82525afa8015610a7e578790611a6e575b61170e91506001600160a01b03163314611704565b506020813d602011611aa1575b81611a8860209383612301565b81010312610a7257611a9c61170e916125be565b611a59565b3d9150611a7b565b90506020813d602011611adb575b81611ac460209383612301565b81010312610abb57611ad5906125be565b386116f1565b3d9150611ab7565b50346101af57806003193601126101af57606c546040516001600160a01b039091168152602090f35b50346101af5760208060031936011261047d57611b276121c1565b6001600160a01b037f00000000000000000000000067ff38bec32613b9b7b282c26214920d8a00c3ab8116611b5e30821415612368565b611b7b6000805160206158628339815191529183835416146123c9565b6004848360655416604051928380926334cc866d60e21b82525afa80156111375783918791611dba575b50163303611d7f57604051908482019282841067ffffffffffffffff851117611d6b578360405286835260ff7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435416600014611c0957505050506110b7915061242a565b84939416906040516352d1902d60e01b81528681600481865afa889181611d38575b50611c8c5760405162461bcd60e51b815260048101889052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b95949503611ce157908591611ca08461242a565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2805115801590611cda5761152257505050505080f35b5081611515565b60405162461bcd60e51b815260048101859052602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b9091508781813d8311611d64575b611d508183612301565b81010312611d6057519038611c2b565b8880fd5b503d611d46565b634e487b7160e01b87526041600452602487fd5b60405162461bcd60e51b8152600481018590526013602482015272556e617574686f72697a65642061636365737360681b6044820152606490fd5b809250868092503d8311611deb575b611dd38183612301565b81010312610ad257611de583916125be565b38611ba5565b503d611dc9565b50346101af5760203660031901126101af5760406020916004358152606783522054604051908152f35b50346101af576040611e39611e303661225c565b92919091614c39565b825191151582526020820152f35b50346101af5760208060031936011261047d57600435808352606b82526040832054600460018060a01b039284846065541660405193848092631074f21360e21b82525afa9081156111375785928792611f09575b50602490604051958693849263c147e88f60e01b84526004840152165afa9182156110ec578492611ed3575b50906101dd916126ce565b9091508281813d8311611f02575b611eeb8183612301565b8101031261087d576101dd92935051908392611ec8565b503d611ee1565b8381949293503d8311611f3c575b611f218183612301565b81010312610ad2576024611f3586936125be565b9190611e9c565b503d611f17565b50346101af5760206101dd611f573661225c565b92919091614a91565b50346101af57806003193601126101af576065546040516001600160a01b039091168152602090f35b50346101af57806003193601126101af57606d546040516001600160a01b039091168152602090f35b50346101af5760a03660031901126101af576004356001600160a01b03818116918290036107c7576024359181831680930361087d57611ff06121a6565b9260643590838216809203610ad25760843593808516809503610a725786549560ff8760081c161596878098612139575b8015612122575b156120c65760ff1981166001178955876120b5575b506001600160601b0360a01b948560655416176065551683606f541617606f5582606d541617606d5581606e541617606e55606c541617606c5561207e5780f35b61ff001981541681557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a180f35b61ffff19166101011788553861203d565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156120285750600160ff821614612028565b50600160ff821610612021565b50346101af5760403660031901126101af576020612168602435600435614f80565b6040519015158152f35b50346101af5760206101dd61218636612229565b916157f4565b50346101af5760206101dd6121a036612229565b91614b08565b604435906001600160a01b03821682036121bc57565b600080fd5b600435906001600160a01b03821682036121bc57565b606435906001600160a01b03821682036121bc57565b61016435906001600160a01b03821682036121bc57565b602435906001600160a01b03821682036121bc57565b60a4359081151582036121bc57565b60609060031901126121bc576004356001600160a01b03811681036121bc57906024359060443580151581036121bc5790565b60809060031901126121bc576004359060243580151581036121bc57906044359060643590565b67ffffffffffffffff811161229757604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761229757604052565b60e0810190811067ffffffffffffffff82111761229757604052565b6060810190811067ffffffffffffffff82111761229757604052565b90601f8019910116810190811067ffffffffffffffff82111761229757604052565b60409060e31901126121bc576040519061233c826122ad565b60e4358252610104356020830152565b67ffffffffffffffff811161229757601f01601f191660200190565b1561236f57565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608490fd5b156123d057565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608490fd5b803b1561245f5760008051602061586283398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b3d156124e5573d906124cb8261234c565b916124d96040519384612301565b82523d6000602084013e565b606090565b9192901561254c57508151156124fe575090565b3b156125075790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b82519091501561255f5750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b8285106125a5575050604492506000838284010152601f80199101168101030190fd5b8481018201518686016044015293810193859350612582565b51906001600160a01b03821682036121bc57565b519081151582036121bc57565b156125e657565b60405162461bcd60e51b815260206004820152600c60248201526b37b7363ca2bc32b1baba37b960a11b6044820152606490fd5b809161016092839103126121bc5760405191820182811067ffffffffffffffff8211176122975760405280518252612654602082016125be565b6020830152612665604082016125be565b6040830152612676606082016125be565b6060830152612687608082016125d2565b608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080820151908301526101208082015190830152610140809101519082015290565b919082018092116126db57565b634e487b7160e01b600052601160045260246000fd5b60120390601282116126db57565b919082039182116126db57565b8115612716570490565b634e487b7160e01b600052601260045260246000fd5b90600019818309818302918280831092039180830392146127d05768327cb2734119d3b7a9601e1b9082821115612793577f7d33c22789773a07feda8b6f0930e26fa397c439f1d5cf4b2eb27d7306d2dc99940990828211900360e21b9103601e1c170290565b60405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606490fd5b505068327cb2734119d3b7a9601e1b91500490565b9068327cb2734119d3b7a9601e1b9060001982840992828102928380861095039480860395146128695784831115612793578291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b505090612876925061270c565b90565b90600019818309818302918280831092039180830392146128d8576305f5e1009082821115612793577facbe0e98f503f8881186e60dbb7f727bf36b7213ee9f5a78c767074b22e90e21940990828211900360f81b910360081c170290565b50506305f5e10091500490565b906040516128f2816122c9565b82546001600160a01b0316815260018301546020820152600283015460ff16151560408201526003830154606082015260048301546080820152600583015460a082015260069092015460c0830152565b919091600083820193841291129080158216911516176126db57565b1561296657565b60405162461bcd60e51b815260206004820152600a60248201526937b7363ca937baba32b960b11b6044820152606490fd5b809161010092839103126121bc576040519182019082821067ffffffffffffffff8311176122975760e091604052805183526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c0840152015160e082015290565b818103929160001380158285131691841216176126db57565b8051825260018060a01b03806020830151166020840152806040830151166040840152606082015116606083015260808101511515608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015190830152610120808201519083015261014080910151910152565b9a9790959899969492919660018060a01b03606d5416906101608d602460405180958193632f7ce47360e21b835260048301525afa958615612c77578d92600097612c8a575b5091612afb612b03928795948961522f565b95869161411e565b8196919c876000039c8d60008a12600080831282169213901516176126db57606e546001600160a01b03169215612c835760200151935b6040516325cdb61d60e01b8152998a958695612b5a906004880190612a29565b6001600160a01b038d811661016488018190529e81166101848801526101a487018b90526101c487018c90526101e4870191909152610204860191909152610224850191909152166102448301525a92600061026492604095f1958615612c77578b906000968798612c35575b50612c007f0630e77e4b3ad6c747edcb003e15f67d0e78d43dae35efe5e2c2f6beb3010fbf9997959361010099979593612c0793614b08565b809b612943565b9b60405196875260208701526040860152606085015260808401528660a084015260c083015260e0820152a1565b96915096506040863d604011612c6f575b81612c5360409383612301565b810103126101af57508451602090950151958b90612c00612bc7565b3d9150612c46565b6040513d6000823e3d90fd5b5193612b3a565b869493919750612b0392612cb1612afb926101603d610160116109c7576109b98183612301565b98929495509250612ae9565b908160a09103126121bc576040519060a082019082821067ffffffffffffffff83111761229757608091604052805183526020810151602084015260408101516040840152606081015160608401520151608082015290565b600160ff1b81146126db5760000390565b929190600060805280156135d057612d3e84615124565b91156135ae5783608051526067602052604060805120612d5f8282546126ce565b90555b612d6b84615124565b92612d76818361272c565b6080519091818086131561359c57506001955b828082131561358a57506001965b60038110159384613121576001821492839283613580575b8315613560575b606d54604051632500ed8d60e21b8152600481018e905295906001600160a01b031660a087602481845afa988915612f5d578e976080519a613530575b5060405197632f7ce47360e21b89526004890152610160978881602481865afa988915612f5d5760805199613511575b5050612f705782156133e357501561313857505050600014612fb2575050606d546001600160a01b0316803b15612f6a576040519062a0151560e21b825287600483015284602483015260805160448301528160648160805180945af18015612f5d57612f9d575b5091612ea6611987926119786080612eac979601518661272c565b926126ce565b606d546001600160a01b0316803b15612f6a5760405191630e13da9f60e11b835284600484015260248301528160448160805180945af18015612f5d57612f88575b505b6003811015612f705715612f02575b50565b606d546001600160a01b0316803b15612f6a5760405191630e13da9f60e11b8352600483015260805160248301528160448160805180945af18015612f5d57612f485750565b612f5190612283565b6080518015612eff5780fd5b6040513d608051823e3d90fd5b60805180fd5b634e487b7160e01b6080515260216004526024608051fd5b612f9190612283565b6080518015612eee5780fd5b612fa690612283565b6080518015612e8b5780fd5b9250939290506080519283600387101561312157506002861461310f5750915b606d546001600160a01b0316803b15612f6a5760405190637c7c829d60e01b825287600483015284602483015260805160448301528160648160805180945af18015612f5d576130fa575b5080613035575b50906130309291613e41565b612ef0565b606d546001600160a01b03169061304e9085908461522f565b90803b15612f6a576040519162a0151560e21b8352876004840152608051602484015260448301528160648160805180945af18015612f5d576130e5575b50606d546001600160a01b0316803b15612f6a5760405190630e13da9f60e11b82528660048301528460248301528160448160805180945af18015612f5d5715613024576130d990612283565b60805180156130245780fd5b6130ee90612283565b608051801561308c5780fd5b61310390612283565b608051801561301d5780fd5b61311c91935080936126ff565b612fd2565b634e487b7160e01b90526021600452608051602490fd5b93949391929091600214613155575b505050505050505050612ef0565b1561325a5750505082613167916151b7565b606d546001600160a01b0316803b15612f6a576040519162a0151560e21b8352886004840152608051602484015260448301528160648160805180945af18015612f5d57613245575b50916119786131d861198793611978879660806131cf6131de9a612d16565b9101519061272c565b93612d16565b606d546001600160a01b0316803b15612f6a5760405191630e13da9f60e11b835284600484015260248301528160448160805180945af18015612f5d57613230575b505b388080808080808080613147565b61323990612283565b60805180156132205780fd5b61324e90612283565b60805180156131b05780fd5b92945092949095608051938313156000146133c65750935b606d546080516001600160a01b0390911692126133b15760600151905b803b15612f6a5760405191637c7c829d60e01b8352886004840152608051602484015260448301528160648160805180945af18015612f5d5761339c575b50806132e5575b50906132e09291613de5565b613222565b606d546001600160a01b0316803b15612f6a576040519162a0151560e21b8352876004840152602483015260805160448301528160648160805180945af18015612f5d57613387575b50606d546001600160a01b0316803b15612f6a5760405190630e13da9f60e11b82528660048301528460248301528160448160805180945af18015612f5d57156132d45761337b90612283565b60805180156132d45780fd5b61339090612283565b608051801561332e5780fd5b6133a590612283565b60805180156132cd5780fd5b60806133c0910151858561522f565b9061328f565b6133dd919593506133d690612d16565b80956126ff565b91613272565b999a50505092945092975050136000146134b3575050606d546001600160a01b03169050803b15612f6a576040519162a0151560e21b8352846004840152602483015260805160448301528160648160805180945af18015612f5d5761349e575b505b606d546001600160a01b031690813b15612f6a5760405192630e13da9f60e11b8452600484015260248301528160448160805180945af18015612f5d5761348a5750565b61349390612283565b608051806101af5750565b6134a790612283565b60805180156134445780fd5b6134be9293506151b7565b90803b15612f6a576040519162a0151560e21b8352846004840152608051602484015260448301528160648160805180945af18015612f5d57613502575b50613446565b61350b90612283565b386134fc565b613528929950803d106109c7576109b98183612301565b963880612e23565b613552919a5060a03d8111613559575b61354a8183612301565b810190612cbd565b9838612df3565b503d613540565b608051965092506002831480613577575b92612db6565b50888112613571565b8982139350612daf565b9683821215612d975760029750612d97565b9586861215612d895760029650612d89565b836080515260686020526040608051206135c98282546126ce565b9055612d62565b50505050565b92909182156135d0576135e884615124565b9015613dc55783600052606760205260406000206136078482546126ff565b90555b61361384615124565b9261361e838261272c565b90600080841315613db357506001945b600080821395908615613da157506001965b600381101596876137f6576001821493849283613d97575b8315613d78575b606d54604051632500ed8d60e21b8152600481018e905296906001600160a01b031660a088602481845afa9b8c15612c77578e9860009d613d58575b5060405198632f7ce47360e21b8a5260048a0152610160988981602481865afa998a15612c775760009a613d39575b50506137f6578215613c245750156139a15750505060001461382a575050606d546001600160a01b031693843b156121bc576000809560646040518098819362a0151560e21b83528c60048401528760248401528160448401525af1928315612c77576119786080612ea69361374c986119879761381b575b5001518661272c565b606d546001600160a01b031690813b156121bc57600091604483926040519485938492630e13da9f60e11b845289600485015260248401525af18015612c775761380c575b505b60038110156137f657156137a45750565b606d546001600160a01b031690813b156121bc57600091604483926040519485938492630e13da9f60e11b845260048401528160248401525af18015612c77576137eb5750565b6137f490612283565b565b634e487b7160e01b600052602160045260246000fd5b61381590612283565b38613791565b61382490612283565b38613743565b939250935060009182600387101561398d57506002861461397b5750905b606d546001600160a01b0316803b156121bc5760008091606460405180948193637c7c829d60e01b83528c60048401528860248401528160448401525af18015612c775761396c575b50806138a7575b506138a292613e41565b613793565b606d546001600160a01b0316906138c09084908661522f565b813b156121bc5760009160648392604051948593849262a0151560e21b84528c600485015282602485015260448401525af18015612c775761395d575b50606d546001600160a01b031692833b156121bc5760008094604460405180978193630e13da9f60e11b83528b60048401528860248401525af1938415612c77576138a29461394e575b5092613898565b61395790612283565b38613947565b61396690612283565b386138fd565b61397590612283565b38613891565b61398891925080926126ff565b613848565b634e487b7160e01b81526021600452602490fd5b969896919290916002146139be575b505050505050505050613793565b15613aae57505050846139d0916151b7565b606d546001600160a01b03169290833b156121bc5760009360648592604051968793849262a0151560e21b84528d600485015282602485015260448401525af1928315612c7757613a3b95611978611978936131d89361198797613a9f575b5060806131cf89612d16565b606d546001600160a01b031690813b156121bc57600091604483926040519485938492630e13da9f60e11b845289600485015260248401525af18015612c7757613a90575b505b3880808080808080806139b0565b613a9990612283565b38613a80565b613aa890612283565b38613a2f565b929650909460009391613c075750925b606d546001600160a01b031691600013613bf357606001515b813b156121bc57600091606483926040519485938492637c7c829d60e01b84528d600485015282602485015260448401525af18015612c7757613be4575b5080613b2b575b50613b2692613de5565b613a82565b606d546001600160a01b031690813b156121bc5760009160648392604051948593849262a0151560e21b84528c600485015260248401528160448401525af18015612c7757613bd5575b50606d546001600160a01b031692833b156121bc5760008094604460405180978193630e13da9f60e11b83528b60048401528860248401525af1938415612c7757613b2694613bc6575b5092613b1c565b613bcf90612283565b38613bbf565b613bde90612283565b38613b75565b613bed90612283565b38613b15565b6080613c02910151848761522f565b613ad7565b613c1e91949350613c1790612d16565b80946126ff565b91613abe565b99505050509293965050969550600014613cdc575050606d546001600160a01b0316919050813b156121bc5760009160648392604051948593849262a0151560e21b845288600485015260248401528160448401525af18015612c7757613ccd575b505b606d546001600160a01b031691823b156121bc576044600092836040519586948593630e13da9f60e11b8552600485015260248401525af18015612c77576137eb5750565b613cd690612283565b38613c86565b613ce79293506151b7565b813b156121bc5760009160648392604051948593849262a0151560e21b845288600485015282602485015260448401525af18015612c7757613d2a575b50613c88565b613d3390612283565b38613d24565b613d50929a50803d106109c7576109b98183612301565b9738806136ca565b613d71919d5060a03d81116135595761354a8183612301565b9b3861369b565b6000995092506002831480613d8e575b9261365f565b50878112613d88565b8882139350613658565b96878312156136405760029750613640565b948584121561362e576002955061362e565b8360005260686020526040600020613dde8482546126ff565b905561360a565b91613df1918351613e4d565b90613e0960018060a01b03606d5416928251926151b7565b823b156121bc576044600092836040519586948593633a336ee160e01b8552600485015260248401525af18015612c77576137eb5750565b91613df1918351613ee3565b606d54604051632500ed8d60e21b8152600481019290925260a090829060249082906001600160a01b03165afa8015612c7757608091600091613ec5575b5001805180841115613ead575061287692613ea79151906126ff565b9061272c565b613ec092915061287693613ea7916126ff565b612d16565b613edd915060a03d81116135595761354a8183612301565b38613e8b565b606d54604051632500ed8d60e21b8152600481019290925260a090829060249082906001600160a01b03165afa8015612c7757608091600091613f4f575b5001805180841015613f3c575061287692613ea791516126ff565b613ec0929150613ea790612876946126ff565b613f67915060a03d81116135595761354a8183612301565b38613f21565b9060a0600180821b03606d541692602460405180958193632500ed8d60e21b835260048301525afa908115612c7757608092600092613fe2575b5015613fc85701805180841115613ead575061287692613ea79151906126ff565b01805180841015613f3c575061287692613ea791516126ff565b613ffb91925060a03d81116135595761354a8183612301565b9038613fa7565b1561400957565b60405162461bcd60e51b81526020600482015260156024820152740c6ded8d8c2e8cae4c2d840dcdee840cadcdeeaced605b1b6044820152606490fd5b9291801561411857600090818112156140fd576003830161407f815461407661406e856154ce565b821015614002565b6108ab846154ce565b905560018060a01b0361409f81606d54169180606f5416955416926154ce565b93813b1561087d57604051634f7a10db60e11b815260048101979097526001600160a01b03908116602488015291909116604486015260648501929092529192919081908390608490829084905af19081156109ce57506137eb5750565b9293505060036141149101916106458354916154ce565b9055565b50509050565b90929160018060a01b03606e54169160246040809481519283809263548072f160e11b82528660048301525afa938415614201576000946141b3575b5050614167600091615124565b1261418f57831561418457602061418092015190612879565b9190565b614180915190612879565b83156141a5576141a0915190612879565b911590565b60206141a092015190612879565b9091938183813d83116141fa575b6141cb8183612301565b810103126101af575060009160206141679251916141e8836122ad565b8051835201516020820152939161415a565b503d6141c1565b513d6000823e3d90fd5b818102929181159184041417156126db57565b818102929160008212600160ff1b8214166126db5781840514901517156126db57565b811561271657600160ff1b81146000198314166126db570590565b60655460408051631074f21360e21b81529293602093926000906001600160a01b0390600490879087908390829086165afa95861561477a578396614743575b5081878651809863c147e88f60e01b82528b85830152816024968792165afa96871561473957849761470a575b50888452606b885285842054156146ea57866142e887862054426126ff565b106146df576143416142fa868b614784565b978a865260698a526143278887205468327cb2734119d3b7a9601e1b6143208a8d61421e565b0590612943565b8b875260698b528887205561433c814261270c565b61420b565b898552606b895286852055606a8852868685205580606d541690865191632500ed8d60e21b83528a8484015260a0838681845afa9283156146d55786936146b5575b508a865260678a528786205460688b5288872054101561450a5750898552606789526143ba8786205460688b5288872054906126ff565b90856143d96305f5e1006143ce858d61421e565b0593610966856154ce565b928181131561447f5750509060806143f792606d54169301516126ce565b813b15610430578492838b936044938a519788968795630e13da9f60e11b87528601528401525af1801561447557614461575b50916000805160206158a283398151915295939181608096945b868152606b865220549382519586528501528301526060820152a1565b61446b8291612283565b6101af573861442a565b84513d84823e3d90fd5b126144a7575b5050505050916000805160206158a28339815191529593918160809694614444565b9060806144ba92606d54169301516126ff565b813b15610430578492838b936044938a519788968795630e13da9f60e11b87528601528401525af18015614475576144f6575b80808080614485565b6145008291612283565b6101af57386144ed565b60678a528786205460688b5288872054809110614545575b505050505050916000805160206158a28339815191529593918160809694614444565b90866145826305f5e1006145778d8f61457298978f606761456a9352872054906126ff565b978891612d16565b61421e565b0594610966866154ce565b9381811315614610575050509060806145a192606d54169301516126ff565b813b15610430578492838b936044938a519788968795630e13da9f60e11b87528601528401525af18015614475576145fc575b50916000805160206158a283398151915295939181608096945b929496829496983880614522565b6146068291612283565b6101af57386145d4565b90919492501261463d575b5050505050916000805160206158a283398151915295939181608096946145ee565b90608061464b9201516126ce565b813b15610430578492838b936044938a519788968795630e13da9f60e11b87528601528401525af18015614475579380926000805160206158a283398151915298969492608098966146a6575b83959799829597995061461b565b6146af90612283565b38614698565b6146ce91935060a03d81116135595761354a8183612301565b9138614383565b88513d88823e3d90fd5b505050505050505050565b50505092606b929491508061433c614702924261270c565b948352522055565b9096508781813d8311614732575b6147228183612301565b8101031261087d575195386142c9565b503d614718565b86513d86823e3d90fd5b9095508681813d8311614773575b61475b8183612301565b810103126107c75761476c906125be565b943861429c565b503d614751565b85513d85823e3d90fd5b606d5460408051632500ed8d60e21b8152600481018490529394939290916001600160a01b03919082169060a085602481855afa94851561493b57600095614946575b508351918291632f7ce47360e21b835260048301528160246101609485935afa91821561493b5760009261491e575b50508160655416918351968793631074f21360e21b855284600460209687935afa9081156149135784959697986000926148cd575b5091614853939161022493608089519a8b97889663e5537b0f60e01b88526004880190612a29565b8051610164870152888101516101848701528a8101516101a487015260608101516101c487015201516101e4850152610204840152165afa91821561420157506000916148a1575b50905090565b82813d83116148c6575b6148b58183612301565b810103126101af575051803861489b565b503d6148ab565b919092939482813d831161490c575b6148e68183612301565b810103126101af575092614853926102249261490287966125be565b929450909261482b565b503d6148dc565b85513d6000823e3d90fd5b6149349250803d106109c7576109b98183612301565b38806147f6565b84513d6000823e3d90fd5b61495f91955060a03d81116135595761354a8183612301565b93386147c7565b908160209103126121bc575160ff811681036121bc5790565b606f546001600160a01b039392841692919084168303614a88576149a281615124565b9160009280614a6a575b505083606d541693604051948592632f7ce47360e21b845260048401528260246101609788935afa948515612c77576004956020938492600092614a4d575b5050015116926040519485809263313ce56760e01b82525afa918215612c775761287693600093614a1d575b50615473565b614a3f91935060203d8111614a46575b614a378183612301565b810190614966565b9138614a17565b503d614a2d565b614a639250803d106109c7576109b98183612301565b38806149eb565b614a809293614a78826154ce565b911284613f6d565b9038806149ac565b50505050600090565b606d54604051632f7ce47360e21b81526004810183905294919361016092918390879060249082906001600160a01b03165afa8015612c7757614ae796614ae194600092614aeb575b505061522f565b9161411e565b5090565b614b019250803d106109c7576109b98183612301565b3880614ada565b8282614b1792959493956157f4565b9260009384526066602052614b2e604085206128e5565b9160018060a01b03606d5416916040518093632f7ce47360e21b82528260048301528160246101609687935afa938415610a7e5791614bd29493918893612876989995614c0a575b505091614bcb916305f5e1009382526069602052614b9d604083205460c089015190612a10565b918180614c00575b8215614be5575b505015614bd857614bc56080600019975b0151916154ce565b9061420b565b04906151b7565b9061421e565b614bc56080600197614bbd565b15915081614bf6575b503880614bac565b9050811238614bee565b8184139250614ba5565b6305f5e10094929550614bcb939181614c2e92903d106109c7576109b98183612301565b949193819350614b76565b9091939293600092600092839660018060a01b03606d54166040805193632500ed8d60e21b855280600486015260a085602481865afa948515614f76578895614f56575b5081518093632f7ce47360e21b82528260048301528160246101609687935afa938415614f4c578994614f27575b5050614cb690615124565b94858115614f1457614cd190614ccb896154e2565b90612a10565b905b15888712614e7b5715614e0f5784516020860151808210614e0757614cf7916126ff565b8711801590614dff575b614df157871215614d5e5750505090614d1a9151612a10565b915b821315614d5457614d2c826154ce565b8111614d39575b50509190565b909350614d4c91506108ab6001946154ce565b913880614d33565b9350505060019190565b92614d73614dad9260809495830151906153b7565b90614d8f68327cb2734119d3b7a9601e1b94859201518761421e565b059480881315614deb575086945b80881215614dcb57508690612943565b818102918183051490151715614dd757614dd19291614dcb91614241565b90612943565b91614d1c565b634e487b7160e01b85526011600452602485fd5b94614d9d565b505050505050509250508190565b508015614d01565b505087614cf7565b83614e2b614e2584880151606089015190612a10565b856153b7565b89811215614e6557614e4082610966836154ce565b8811614e4f575050875b614cf7565b614e4a91610966614e5f926154ce565b876126ff565b614e4a91610966614e75926154ce565b876126ce565b15614edc57614e908551602087015190612a10565b88811315614eae57614e4a90610645614ea889612d16565b916154ce565b614eb787612d16565b614ec0826154ce565b11614ed557614e4a906108ab614ea889612d16565b5087614cf7565b614ef7614ef183870151606088015190612a10565b846153b7565b8489821215614f0857505087614cf7565b610966614e4a926154ce565b614f2190614dcb896154e2565b90614cd3565b614cb69294509081614f4492903d106109c7576109b98183612301565b929038614cab565b83513d8b823e3d90fd5b614f6f91955060a03d81116135595761354a8183612301565b9338614c7d565b82513d8a823e3d90fd5b600090815260666020526040614f978183206128e5565b9260018060a01b039283606d5416936020860193845194815195632f7ce47360e21b875260048701526101609586816024818b5afa9687156150fb578597615105575b5050805182519788916330a66e1560e01b835260048301528160246101009a8b935afa9788156150fb579089929186996150c8575b505061506a8261506561505a89948b8961504b615038608061506f9b019e8f948551908a615542565b9884518c89019485511515905191614a91565b95511691519051151591614b08565b9360608d0151612943565b612a10565b612943565b9283136150825750505050505050600190565b6150b46150c39660a06150ab6150bd976305f5e1009b838860208d0151169251910151916152b9565b9101519061420b565b94015116615427565b9061270c565b101590565b879299509261506561505a6150f061506a948761506f98903d10610ec457610eb68183612301565b9b945050509261500f565b83513d87823e3d90fd5b61511c929750803d106109c7576109b98183612301565b943880614fda565b60008181526067602052604081205460686020526040822054809111600014615167575061287691815260676020526040808220549160686020522054906126ff565b61287692506040613ec09260676020522054906126ff565b6040519061518c826122c9565b8160c06000918281528260208201528260408201528260608201528260808201528260a08201520152565b811561522857604081810151905163313ce56760e01b815292906001600160a01b03906020908590600490829085165afa928315612c775761287694600094615206575b506020015116615473565b602091945061522190823d8111614a4657614a378183612301565b93906151fb565b5050600090565b91909182156152a357604081810151905163313ce56760e01b815293906001600160a01b03906020908690600490829085165afa928315612c775761287695600094615281575b50602001511661533e565b602091945061529c90823d8111614a4657614a378183612301565b9390615276565b505050600090565b604d81116126db57600a0a90565b909182156152a35760405163313ce56760e01b815291602090839060049082906001600160a01b03165afa8015612c775768327cb2734119d3b7a9601e1b93614bd261531760ff6145729461531c97600091615320575b50166126f1565b6152ab565b0590565b615338915060203d8111614a4657614a378183612301565b38615310565b928115614a885760405163313ce56760e01b815293602090859060049082906001600160a01b03165afa908115612c775761457261531c946153ac61531760ff6153a5615317826153b29968327cb2734119d3b7a9601e1b9d6000916153205750166126f1565b93166126f1565b9461421e565b614241565b81156152285760208181015160405163313ce56760e01b815293916001600160a01b03918590600490829085165afa928315612c775761287694600094615404575b506040015116615473565b60409194506154209060203d8111614a4657614a378183612301565b93906153f9565b9080156152285760405163313ce56760e01b815291602090839060049082906001600160a01b03165afa918215612c775761531760ff61287694614bd2936000916153205750166126f1565b81156152a35760405163313ce56760e01b815290602090829060049082906001600160a01b03165afa928315612c77576154c861531760ff6153a561531782612876996153b2986000916153205750166126f1565b9261421e565b600081126154d95790565b61287690612d16565b6001600160ff1b0381116154f35790565b60405162461bcd60e51b815260206004820152602160248201527f56616c756520746f6f206c6172676520746f2066697420696e20696e743235366044820152601760f91b6064820152608490fd5b91909160a0810190815180861480156155e8575b80156155e0575b6155d55760408692015115156000146155a85750508051841115615590576128769361558a9151906126ff565b9161522f565b90612876936155a161558a92612d16565b92516126ff565b11156155bc576128769361558a91516126ff565b90612876936155cd61558a92612d16565b9251906126ff565b505050505050600090565b50831561555d565b508015615556565b9695929496939190936000938487129182156157de57608081019081519a8b116157a25784818961562b615633966060614dcb960151612943565b945191615542565b9580615791575b5061564784871215614002565b615659575b50505050612876906154ce565b60018060a01b0393604093858583015116855196879363313ce56760e01b9283865285600460209b8c935afa94851561578757908992918596615766575b508201511691600488518094819382525afa91821561575b576156ee6156e761531760ff6156e061531782610966998f996156f89d9c9a61433c9a9261573e575b5050166126f1565b95166126f1565b928c61420b565b9561433c8a6154ce565b1061570457808061564c565b60649250519062461bcd60e51b82526004820152601460248201527365786365656473206d6178206c6576657261676560601b6044820152fd5b6157549250803d10614a4657614a378183612301565b8f806156d8565b8651903d90823e3d90fd5b8391965061578090823d8411614a4657614a378183612301565b9590615697565b88513d86823e3d90fd5b61579b9196612943565b943861563a565b60405162461bcd60e51b815260206004820152601460248201527332bc31b2b2b2399036b0bc103837b9b4ba34b7b760611b6044820152606490fd5b9850505050505050506060608083015192015190565b909168010000000000000000831015615836576000901561582e575060ff60015b169160201b906001600160601b03199060601b16171790565b60ff90615815565b60405162461bcd60e51b81526020600482015260036024820152621c1d1b60ea1b6044820152606490fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcefaf8e5c8a1e0fc7765de2181763981e54c901cc58100bad6623d33fd062bd441ae8683eab23ec8d2d3eb297043db25c91e5ede56c4b8afb584ceef8a57d5d20a264697066735822122010a245d70b25365b3d0235473f137c73e0526e8dacb360af501d9bb9ef90497464736f6c63430008130033" + }, + { + "address": "0x8b414b5430f3485b15f252d5bdfd27a7b19b264e", + "nonce": 70, + "balance": "0x000000000000000000000000000000000000000000000000003cbdc53356648b", + "code": "0x" + }, + { + "address": "0x4af15ec2a0bd43db75dd04e62faa3b8ef36b00d5", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033" + }, + { + "address": "0xe4756068c0ab70bc3c3a3b0c81be07a18bb9a502", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806387f993db1161006657806387f993db146101595780638da5cb5b146101895780639e69bee9146101a7578063a866283a146101c3578063f2fde38b146101df5761009e565b806301ffc9a7146100a357806303e25c49146100d3578063378144b0146101035780635d2b6a4e1461011f578063715018a61461014f575b600080fd5b6100bd60048036038101906100b89190610c72565b6101fb565b6040516100ca9190610cba565b60405180910390f35b6100ed60048036038101906100e89190610d0b565b6102cd565b6040516100fa9190610d51565b60405180910390f35b61011d60048036038101906101189190611036565b6102e5565b005b610139600480360381019061013491906110d5565b610511565b6040516101469190610d51565b60405180910390f35b610157610529565b005b610173600480360381019061016e9190611102565b61053d565b604051610180919061115a565b60405180910390f35b610191610588565b60405161019e9190611184565b60405180910390f35b6101c160048036038101906101bc919061132a565b6105b1565b005b6101dd60048036038101906101d89190611465565b610664565b005b6101f960048036038101906101f491906110d5565b610743565b005b60007f367e8d17000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806102c657507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60016020528060005260406000206000915090505481565b60006102f08561053d565b9050600061030f85610301846107c6565b6107fc90919063ffffffff16565b90506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036103975781816040517f5c57c91e00000000000000000000000000000000000000000000000000000000815260040161038e9291906114dd565b60405180910390fd5b6000600160008860000151815260200190815260200160002054036103f75785600001516040517f3c5185f60000000000000000000000000000000000000000000000000000000081526004016103ee919061115a565b60405180910390fd5b60006064600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160008a6000015181526020019081526020016000205461045d9190611535565b61046791906115a6565b9050808410156105085783600160008960000151815260200190815260200160002054600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040517fa20d37990000000000000000000000000000000000000000000000000000000081526004016104ff939291906115d7565b60405180910390fd5b50505050505050565b60026020528060005260406000206000915090505481565b610531610823565b61053b60006108a1565b565b6000808260000151836020015184604001518560600151604051602001610567949392919061169c565b60405160208183030381529060405280519060200120905080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6105b9610823565b80518251146105f4576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561065f57818181518110610613576106126116ef565b5b602002602001015160016000858481518110610632576106316116ef565b5b602002602001015181526020019081526020016000208190555080806106579061171e565b9150506105f7565b505050565b61066c610823565b80518251146106a7576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561073e578181815181106106c6576106c56116ef565b5b6020026020010151600260008584815181106106e5576106e46116ef565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806107369061171e565b9150506106aa565b505050565b61074b610823565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b1906117e9565b60405180910390fd5b6107c3816108a1565b50565b60007f19457468657265756d205369676e6564204d6573736167653a0a33320000000060005281601c52603c6000209050919050565b600080600061080b8585610965565b91509150610818816109b6565b819250505092915050565b61082b610b1c565b73ffffffffffffffffffffffffffffffffffffffff16610849610588565b73ffffffffffffffffffffffffffffffffffffffff161461089f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089690611855565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060418351036109a65760008060006020860151925060408601519150606086015160001a905061099a87828585610b24565b945094505050506109af565b60006002915091505b9250929050565b600060048111156109ca576109c9611875565b5b8160048111156109dd576109dc611875565b5b0315610b1957600160048111156109f7576109f6611875565b5b816004811115610a0a57610a09611875565b5b03610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a41906118f0565b60405180910390fd5b60026004811115610a5e57610a5d611875565b5b816004811115610a7157610a70611875565b5b03610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa89061195c565b60405180910390fd5b60036004811115610ac557610ac4611875565b5b816004811115610ad857610ad7611875565b5b03610b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0f906119ee565b60405180910390fd5b5b50565b600033905090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610b5f576000600391509150610bfd565b600060018787878760405160008152602001604052604051610b849493929190611a2a565b6020604051602081039080840390855afa158015610ba6573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bf457600060019250925050610bfd565b80600092509250505b94509492505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610c4f81610c1a565b8114610c5a57600080fd5b50565b600081359050610c6c81610c46565b92915050565b600060208284031215610c8857610c87610c10565b5b6000610c9684828501610c5d565b91505092915050565b60008115159050919050565b610cb481610c9f565b82525050565b6000602082019050610ccf6000830184610cab565b92915050565b6000819050919050565b610ce881610cd5565b8114610cf357600080fd5b50565b600081359050610d0581610cdf565b92915050565b600060208284031215610d2157610d20610c10565b5b6000610d2f84828501610cf6565b91505092915050565b6000819050919050565b610d4b81610d38565b82525050565b6000602082019050610d666000830184610d42565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610dba82610d71565b810181811067ffffffffffffffff82111715610dd957610dd8610d82565b5b80604052505050565b6000610dec610c06565b9050610df88282610db1565b919050565b600080fd5b600067ffffffffffffffff82169050919050565b610e1f81610e02565b8114610e2a57600080fd5b50565b600081359050610e3c81610e16565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff821115610e6757610e66610d82565b5b610e7082610d71565b9050602081019050919050565b82818337600083830152505050565b6000610e9f610e9a84610e4c565b610de2565b905082815260208101848484011115610ebb57610eba610e47565b5b610ec6848285610e7d565b509392505050565b600082601f830112610ee357610ee2610e42565b5b8135610ef3848260208601610e8c565b91505092915050565b600060808284031215610f1257610f11610d6c565b5b610f1c6080610de2565b90506000610f2c84828501610cf6565b6000830152506020610f4084828501610e2d565b602083015250604082013567ffffffffffffffff811115610f6457610f63610dfd565b5b610f7084828501610ece565b604083015250606082013567ffffffffffffffff811115610f9457610f93610dfd565b5b610fa084828501610ece565b60608301525092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610fd782610fac565b9050919050565b610fe781610fcc565b8114610ff257600080fd5b50565b60008135905061100481610fde565b92915050565b61101381610d38565b811461101e57600080fd5b50565b6000813590506110308161100a565b92915050565b600080600080608085870312156110505761104f610c10565b5b600085013567ffffffffffffffff81111561106e5761106d610c15565b5b61107a87828801610efc565b945050602085013567ffffffffffffffff81111561109b5761109a610c15565b5b6110a787828801610ece565b93505060406110b887828801610ff5565b92505060606110c987828801611021565b91505092959194509250565b6000602082840312156110eb576110ea610c10565b5b60006110f984828501610ff5565b91505092915050565b60006020828403121561111857611117610c10565b5b600082013567ffffffffffffffff81111561113657611135610c15565b5b61114284828501610efc565b91505092915050565b61115481610cd5565b82525050565b600060208201905061116f600083018461114b565b92915050565b61117e81610fcc565b82525050565b60006020820190506111996000830184611175565b92915050565b600067ffffffffffffffff8211156111ba576111b9610d82565b5b602082029050602081019050919050565b600080fd5b60006111e36111de8461119f565b610de2565b90508083825260208201905060208402830185811115611206576112056111cb565b5b835b8181101561122f578061121b8882610cf6565b845260208401935050602081019050611208565b5050509392505050565b600082601f83011261124e5761124d610e42565b5b813561125e8482602086016111d0565b91505092915050565b600067ffffffffffffffff82111561128257611281610d82565b5b602082029050602081019050919050565b60006112a66112a184611267565b610de2565b905080838252602082019050602084028301858111156112c9576112c86111cb565b5b835b818110156112f257806112de8882611021565b8452602084019350506020810190506112cb565b5050509392505050565b600082601f83011261131157611310610e42565b5b8135611321848260208601611293565b91505092915050565b6000806040838503121561134157611340610c10565b5b600083013567ffffffffffffffff81111561135f5761135e610c15565b5b61136b85828601611239565b925050602083013567ffffffffffffffff81111561138c5761138b610c15565b5b611398858286016112fc565b9150509250929050565b600067ffffffffffffffff8211156113bd576113bc610d82565b5b602082029050602081019050919050565b60006113e16113dc846113a2565b610de2565b90508083825260208201905060208402830185811115611404576114036111cb565b5b835b8181101561142d57806114198882610ff5565b845260208401935050602081019050611406565b5050509392505050565b600082601f83011261144c5761144b610e42565b5b813561145c8482602086016113ce565b91505092915050565b6000806040838503121561147c5761147b610c10565b5b600083013567ffffffffffffffff81111561149a57611499610c15565b5b6114a685828601611437565b925050602083013567ffffffffffffffff8111156114c7576114c6610c15565b5b6114d3858286016112fc565b9150509250929050565b60006040820190506114f2600083018561114b565b6114ff6020830184611175565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061154082610d38565b915061154b83610d38565b925082820261155981610d38565b915082820484148315176115705761156f611506565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006115b182610d38565b91506115bc83610d38565b9250826115cc576115cb611577565b5b828204905092915050565b60006060820190506115ec6000830186610d42565b6115f96020830185610d42565b6116066040830184610d42565b949350505050565b61161781610e02565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561165757808201518184015260208101905061163c565b60008484015250505050565b600061166e8261161d565b6116788185611628565b9350611688818560208601611639565b61169181610d71565b840191505092915050565b60006080820190506116b1600083018761114b565b6116be602083018661160e565b81810360408301526116d08185611663565b905081810360608301526116e48184611663565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061172982610d38565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361175b5761175a611506565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006117d3602683611766565b91506117de82611777565b604082019050919050565b60006020820190508181036000830152611802816117c6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061183f602083611766565b915061184a82611809565b602082019050919050565b6000602082019050818103600083015261186e81611832565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006118da601883611766565b91506118e5826118a4565b602082019050919050565b60006020820190508181036000830152611909816118cd565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611946601f83611766565b915061195182611910565b602082019050919050565b6000602082019050818103600083015261197581611939565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006119d8602283611766565b91506119e38261197c565b604082019050919050565b60006020820190508181036000830152611a07816119cb565b9050919050565b600060ff82169050919050565b611a2481611a0e565b82525050565b6000608082019050611a3f600083018761114b565b611a4c6020830186611a1b565b611a59604083018561114b565b611a66606083018461114b565b9594505050505056fea2646970667358221220f84b6d578aa315c28bc2ed1e62f7b51dcf205b522f5991ff752655dbcaff011f64736f6c63430008150033" + }, + { + "address": "0x43d68e14638ca40a193453229c87e37f84257763", + "nonce": 69, + "balance": "0x00000000000000000000000000000000000000000000000000023b192ccd6f8d", + "code": "0x" + }, + { + "address": "0xf669c3c03d9fdf4339e19214a749e52616300e89", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033" + }, + { + "address": "0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061021a5760003560e01c806387b21efc11610123578063c45a0155116100ab578063cefbdde21161006f578063cefbdde2146105dd578063da133a06146105fd578063e78cea921461062a578063f2fde38b1461063f578063fba6e2801461065f5761021a565b8063c45a01551461053b578063c4de93a514610550578063c6a276241461057d578063c7d968e31461059d578063c8adf12d146105bd5761021a565b80639ba3aa74116100f25780639ba3aa74146104cb5780639fbf10fc146104de578063a18fa804146104f1578063a96fbed414610511578063af640d82146105265761021a565b806387b21efc146104635780638da5cb5b146104835780638f2e1d181461049857806398e391a1146104ab5761021a565b806343a30630116101a6578063715018a611610175578063715018a6146103ce5780637af935a1146103e35780637b84d287146104105780637f7212981461043057806384d0dba3146104505761021a565b806343a30630146103685780635500585c1461038857806360a3b95c146103a85780636a7982da146103bb5761021a565b806323fd4647116101ed57806323fd4647146102b85780632f925555146102e857806334aba41014610308578063403a9f7a14610328578063424c9119146103485761021a565b80630403bce51461021f5780630a512369146102415780630b78f9c01461027857806316fb60f514610298575b600080fd5b34801561022b57600080fd5b5061023f61023a366004613b12565b61067f565b005b34801561024d57600080fd5b5061026161025c366004613ed5565b6108eb565b60405161026f929190614f2c565b60405180910390f35b34801561028457600080fd5b5061023f610293366004614193565b61098b565b3480156102a457600080fd5b5061023f6102b3366004614159565b610a5e565b3480156102c457600080fd5b506102d86102d336600461390f565b610b2c565b60405161026f94939291906144e3565b3480156102f457600080fd5b5061023f6103033660046139f1565b610c0b565b34801561031457600080fd5b5061023f610323366004613737565b610c46565b34801561033457600080fd5b5061023f610343366004613825565b610cf0565b34801561035457600080fd5b5061023f61036336600461378b565b610f23565b34801561037457600080fd5b5061023f61038336600461407a565b61103d565b34801561039457600080fd5b5061023f6103a3366004613f9f565b61111c565b61023f6103b6366004613825565b611180565b61023f6103c936600461387c565b6113fd565b3480156103da57600080fd5b5061023f6116ae565b3480156103ef57600080fd5b506104036103fe366004613fc3565b61175a565b60405161026f919061442b565b34801561041c57600080fd5b5061023f61042b366004614114565b61187d565b34801561043c57600080fd5b5061023f61044b366004613963565b61191d565b61023f61045e366004613cda565b611961565b34801561046f57600080fd5b5061023f61047e3660046141d7565b611c96565b34801561048f57600080fd5b50610403611e81565b61023f6104a6366004613c35565b611e90565b3480156104b757600080fd5b5061023f6104c6366004614056565b6120b1565b61023f6104d9366004613bee565b61214d565b61023f6104ec366004613d79565b6122c5565b3480156104fd57600080fd5b5061023f61050c366004613e59565b61261a565b34801561051d57600080fd5b50610403612682565b34801561053257600080fd5b50610403612691565b34801561054757600080fd5b506104036126a0565b34801561055c57600080fd5b5061057061056b366004613baf565b6126af565b60405161026f9190614ed6565b34801561058957600080fd5b5061023f610598366004613f9f565b6127ba565b3480156105a957600080fd5b5061023f6105b83660046140e0565b612856565b3480156105c957600080fd5b5061023f6105d8366004613f9f565b612922565b3480156105e957600080fd5b5061023f6105f8366004613737565b612986565b34801561060957600080fd5b5061061d61061836600461390f565b612a30565b60405161026f919061454a565b34801561063657600080fd5b50610403612aed565b34801561064b57600080fd5b5061023f61065a366004613737565b612afc565b34801561066b57600080fd5b5061023f61067a366004614056565b612bfe565b6005546001600160a01b031633146106b25760405162461bcd60e51b81526004016106a99061462b565b60405180910390fd5b60006106bd85612c38565b604051637544f15560e11b81529091506001600160a01b0382169063ea89e2aa906106f0908c908a908990600401614c2c565b6040805180830381600087803b15801561070957600080fd5b505af1925050508015610739575060408051601f3d908101601f19168201909252610736918101906141b4565b60015b6108025760018686600087878760405160200161075c9796959493929190614fa7565b60408051601f1981840301815282825261ffff8c166000908152600660205291909120909161078c908b9061440f565b9081526020016040518091039020600089815260200190815260200160002090805190602001906107be9291906134af565b507fa5d2ba6de30cc2f2e91c5a29ba66b148c27826954217e2f67cb8983541da21cf60018a8a8a6040516107f59493929190614f3a565b60405180910390a16108e0565b6001888884848989604051602001610820979695949392919061502e565b60408051601f1981840301815282825261ffff8e1660009081526006602052919091209091610850908d9061440f565b908152602001604051809103902060008b815260200190815260200160002090805190602001906108829291906134af565b5089604051610891919061440f565b6040518091039020897f6ace246fa15cf1d5decabf654b1e8581a4422e0fcf4c1ed4bf83f41687caec198d8b8b8a8a89896040516108d59796959493929190614e48565b60405180910390a350505b505050505050505050565b600554604051630a51236960e01b815260009182916001600160a01b0390911690630a5123699061092c908c908c908c908c908c908c908c90600401614e88565b604080518083038186803b15801561094357600080fd5b505afa158015610957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097b91906141b4565b9150915097509795505050505050565b610993612ce6565b6001600160a01b03166109a4611e81565b6001600160a01b0316146109ed576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b60006109f883612c38565b6040516369fe0e2d60e01b81529091506001600160a01b038216906369fe0e2d90610a27908590600401614ed6565b600060405180830381600087803b158015610a4157600080fd5b505af1158015610a55573d6000803e3d6000fd5b50505050505050565b610a66612ce6565b6001600160a01b0316610a77611e81565b6001600160a01b031614610ac0576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6000610acb85612c38565b6040516320d6bc7560e01b81529091506001600160a01b038216906320d6bc7590610afe90879087908790600401614c2c565b600060405180830381600087803b158015610b1857600080fd5b505af11580156108e0573d6000803e3d6000fd5b600760209081526000938452604080852084518086018401805192815290840195840195909520945292815290835291819020805460018083015460028085015460038601805488516101009682161596909602600019011692909204601f81018990048902850189019097528684526001600160a01b03948516979296941694939091830182828015610c015780601f10610bd657610100808354040283529160200191610c01565b820191906000526020600020905b815481529060010190602001808311610be457829003601f168201915b5050505050905084565b6005546001600160a01b03163314610c355760405162461bcd60e51b81526004016106a99061462b565b6108e0898989898989898989612cea565b610c4e612ce6565b6001600160a01b0316610c5f611e81565b6001600160a01b031614610ca8576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6001600160a01b038116610cce5760405162461bcd60e51b81526004016106a99061483c565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61ffff84166000908152600760205260408082209051610d1390869086906143ff565b9081526040805160209281900383018120600086815290845282902060808201835280546001600160a01b039081168352600180830154868501526002808401549092168486015260038301805486516101009382161593909302600019011692909204601f810187900487028201870190955284815292949193606086019392830182828015610de55780601f10610dba57610100808354040283529160200191610de5565b820191906000526020600020905b815481529060010190602001808311610dc857829003601f168201915b5050509190925250505060408101519091506001600160a01b0316610e1c5760405162461bcd60e51b81526004016106a990614873565b604080516080810182526000808252602080830182905282840182905283518082018552828152606084015261ffff89168252600790528290209151909190610e6890879087906143ff565b90815260408051602092819003830190206000868152908352819020835181546001600160a01b03199081166001600160a01b0392831617835585850151600184015592850151600283018054909416911617909155606083015180519192610ed9926003850192909101906134af565b505050604080820151825160208401516060850151935163ab8236f360e01b81526001600160a01b039093169363ab8236f393610afe938b938b938b938b939291906004016149e0565b610f2b612ce6565b6001600160a01b0316610f3c611e81565b6001600160a01b031614610f85576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6005546001600160a01b0316158015610fa757506002546001600160a01b0316155b610fc35760405162461bcd60e51b81526004016106a99061455d565b6001600160a01b038216610fe95760405162461bcd60e51b81526004016106a990614775565b6001600160a01b03811661100f5760405162461bcd60e51b81526004016106a990614707565b600580546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b611045612ce6565b6001600160a01b0316611056611e81565b6001600160a01b03161461109f576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b60006110aa87612c38565b60405163e065608b60e01b81529091506001600160a01b0382169063e065608b906110e19089908990899089908990600401614521565b600060405180830381600087803b1580156110fb57600080fd5b505af115801561110f573d6000803e3d6000fd5b5050505050505050505050565b6004546001600160a01b031633146111465760405162461bcd60e51b81526004016106a990614662565b600061115183612c38565b60405163011dbbf960e61b81529091506001600160a01b0382169063476efe4090610a2790859060040161442b565b61ffff841660009081526006602052604080822090516111a390869086906143ff565b90815260408051602092819003830181206000868152908452829020805460026001821615610100026000190190911604601f8101859004850283018501909352828252909290919083018282801561123d5780601f106112125761010080835404028352916020019161123d565b820191906000526020600020905b81548152906001019060200180831161122057829003601f168201915b5050505050905060008151116112655760405162461bcd60e51b81526004016106a990614699565b6040805160208082018352600080835261ffff891681526006909152829020915190919061129690879087906143ff565b9081526020016040518091039020600084815260200190815260200160002090805190602001906112c89291906134af565b50602081015160ff811660021415611353576000806000806000868060200190518101906112f69190614204565b95509550955095509550506113498b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508a9150899050888888613166565b50505050506113f5565b60ff8116600314156113dd576000806000806000808780602001905181019061137c9190614263565b965096509650965096509650506113d28c8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e92508b91508a905089898989612cea565b5050505050506113f5565b60405162461bcd60e51b81526004016106a9906148e1565b505050505050565b6001600160a01b0382166114235760405162461bcd60e51b81526004016106a99061494f565b61ffff8616600090815260066020526040808220905161144690889088906143ff565b90815260408051602092819003830181206000888152908452829020805460026001821615610100026000190190911604601f810185900485028301850190935282825290929091908301828280156114e05780601f106114b5576101008083540402835291602001916114e0565b820191906000526020600020905b8154815290600101906020018083116114c357829003601f168201915b5050505050905060008151116115085760405162461bcd60e51b81526004016106a990614699565b602081015160ff81166001146115305760405162461bcd60e51b81526004016106a9906148e1565b506040805160208082018352600080835261ffff8b1681526006909152829020915190919061156290899089906143ff565b9081526020016040518091039020600086815260200190815260200160002090805190602001906115949291906134af565b50604081015160608201516115a761353b565b60006115b283612c38565b604051630474ec6160e11b81529091506001600160a01b038216906308e9d8c2906115e3908e908890600401614b0e565b6040805180830381600087803b1580156115fc57600080fd5b505af1158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906137c3565b6005546040516396aae4af60e01b81529193506001600160a01b031691506396aae4af903490611670908e908b9087908c908c90600401614995565b6000604051808303818588803b15801561168957600080fd5b505af115801561169d573d6000803e3d6000fd5b505050505050505050505050505050565b6116b6612ce6565b6001600160a01b03166116c7611e81565b6001600160a01b031614611710576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000611764612ce6565b6001600160a01b0316611775611e81565b6001600160a01b0316146117be576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6001600160a01b0386166117e45760405162461bcd60e51b81526004016106a9906145ad565b600254604051637af935a160e01b81526001600160a01b0390911690637af935a19061181e908a908a908a908a908a908a90600401614edf565b602060405180830381600087803b15801561183857600080fd5b505af115801561184c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118709190613753565b90505b9695505050505050565b611885612ce6565b6001600160a01b0316611896611e81565b6001600160a01b0316146118df576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b60006118ea85612c38565b60405163a985565f60e01b81529091506001600160a01b0382169063a985565f90610afe90879087908790600401614c0e565b6005546001600160a01b031633146119475760405162461bcd60e51b81526004016106a99061462b565b6119578888888888888888613166565b5050505050505050565b600260015414156119a7576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b60026001556001600160a01b0386166119d25760405162461bcd60e51b81526004016106a99061494f565b600085116119f25760405162461bcd60e51b81526004016106a9906145e4565b6119fa613555565b611a0261353b565b6000611a0d8b612c38565b90506000816001600160a01b031663f6cd35ee8a6040518263ffffffff1660e01b8152600401611a3d9190614ed6565b60206040518083038186803b158015611a5557600080fd5b505afa158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8d9190613f87565b9050816001600160a01b0316631b7319b68e8d33858d60006040518763ffffffff1660e01b8152600401611ac696959493929190614b4c565b60c060405180830381600087803b158015611ae057600080fd5b505af1158015611af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b18919061380a565b9350816001600160a01b0316637298a5dc8e8d338d6040518563ffffffff1660e01b8152600401611b4c9493929190614b22565b600060405180830381600087803b158015611b6657600080fd5b505af1158015611b7a573d6000803e3d6000fd5b50505050816001600160a01b03166308e9d8c28e8d6040518363ffffffff1660e01b8152600401611bac929190614b0e565b6040805180830381600087803b158015611bc557600080fd5b505af1158015611bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfd91906137c3565b92505050600560009054906101000a90046001600160a01b03166001600160a01b03166351156e73348d8d8d8d87898b8e8e6040518b63ffffffff1660e01b8152600401611c5399989796959493929190614d11565b6000604051808303818588803b158015611c6c57600080fd5b505af1158015611c80573d6000803e3d6000fd5b5050600180555050505050505050505050505050565b60026001541415611cdc576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b60026001556000611cec84612c38565b90506000816001600160a01b031663feb56b156040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2957600080fd5b505afa158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d619190613f87565b9050611d7781611d7186826132f8565b90613361565b9350611df5826001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015611db557600080fd5b505afa158015611dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ded9190613753565b3384876133c1565b6040516340c10f1960e01b81526001600160a01b038316906340c10f1990611e2390869088906004016144ca565b602060405180830381600087803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e759190613f87565b50506001805550505050565b6000546001600160a01b031690565b60026001541415611ed6576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b60026001556001600160a01b038516611f015760405162461bcd60e51b81526004016106a99061494f565b6000611f0c88612c38565b905060008511611f2e5760405162461bcd60e51b81526004016106a9906147ac565b604051632c3eac2f60e21b81526000906001600160a01b0383169063b0fab0bc90611f679033908a908f908e908c908c90600401614462565b602060405180830381600087803b158015611f8157600080fd5b505af1158015611f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb99190613f87565b905060008111611fdb5760405162461bcd60e51b81526004016106a9906147ed565b604051630474ec6160e11b81526000906001600160a01b038416906308e9d8c29061200c908e908d90600401614b0e565b6040805180830381600087803b15801561202557600080fd5b505af1158015612039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205d91906137c3565b9050600560009054906101000a90046001600160a01b03166001600160a01b0316633cef94b9348d8d8d8d87898e8e8e6040518b63ffffffff1660e01b8152600401611c5399989796959493929190614d9d565b6120b9612ce6565b6001600160a01b03166120ca611e81565b6001600160a01b031614612113576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b600061211e83612c38565b60405163ac2cc36b60e01b81529091506001600160a01b0382169063ac2cc36b90610a27908590600401614516565b60026001541415612193576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b60026001556001600160a01b0381166121be5760405162461bcd60e51b81526004016106a99061494f565b60006121c984612c38565b90506000816001600160a01b03166308e9d8c287866040518363ffffffff1660e01b81526004016121fb929190614b0e565b6040805180830381600087803b15801561221457600080fd5b505af1158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c91906137c3565b600554604051632fa7502b60e21b81529192506001600160a01b03169063be9d40ac903490612287908a908a908a908a908990600401614c48565b6000604051808303818588803b1580156122a057600080fd5b505af11580156122b4573d6000803e3d6000fd5b505060018055505050505050505050565b6002600154141561230b576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b60026001558661232d5760405162461bcd60e51b81526004016106a9906148aa565b6001600160a01b0388166123535760405162461bcd60e51b81526004016106a99061494f565b61235b613555565b61236361353b565b600061236e8d612c38565b90506000816001600160a01b031663feb56b156040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ab57600080fd5b505afa1580156123bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e39190613f87565b90506123f381611d718d826132f8565b9a5050806001600160a01b0316631b7319b68f8e338e8e60016040518763ffffffff1660e01b815260040161242d96959493929190614b4c565b60c060405180830381600087803b15801561244757600080fd5b505af115801561245b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247f919061380a565b92506124fd816001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124bd57600080fd5b505afa1580156124d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f59190613753565b33838d6133c1565b806001600160a01b03166308e9d8c28f8e6040518363ffffffff1660e01b815260040161252b929190614b0e565b6040805180830381600087803b15801561254457600080fd5b505af1158015612558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257c91906137c3565b915050600560009054906101000a90046001600160a01b03166001600160a01b03166351156e73348f8f8f8f87898f8f8f8f8f6040518d63ffffffff1660e01b81526004016125d59b9a99989796959493929190614c7d565b6000604051808303818588803b1580156125ee57600080fd5b505af1158015612602573d6000803e3d6000fd5b50506001805550505050505050505050505050505050565b6005546001600160a01b031633146126445760405162461bcd60e51b81526004016106a99061462b565b600061264f83612c38565b60405163b6addec760e01b81529091506001600160a01b0382169063b6addec790610afe90889088908790600401614bef565b6003546001600160a01b031681565b6004546001600160a01b031681565b6002546001600160a01b031681565b6000600260015414156126f7576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b6002600155826127195760405162461bcd60e51b81526004016106a9906147ac565b60006127288561ffff16612c38565b6040516304c35b0d60e11b81529091506001600160a01b03821690630986b61a9061275b9033908890889060040161443f565b602060405180830381600087803b15801561277557600080fd5b505af1158015612789573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ad9190613f87565b6001805595945050505050565b6127c2612ce6565b6001600160a01b03166127d3611e81565b6001600160a01b03161461281c576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b600061282783612c38565b6040516312d72b2f60e21b81529091506001600160a01b03821690634b5cacbc90610a2790859060040161442b565b61285e612ce6565b6001600160a01b031661286f611e81565b6001600160a01b0316146128b8576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b60006128c384612c38565b6040516345ec368560e11b81529091506001600160a01b03821690638bd86d0a906128f49086908690600401614b0e565b600060405180830381600087803b15801561290e57600080fd5b505af1158015611957573d6000803e3d6000fd5b6003546001600160a01b0316331461294c5760405162461bcd60e51b81526004016106a99061473e565b600061295783612c38565b604051632f8c40a560e21b81529091506001600160a01b0382169063be31029490610a2790859060040161442b565b61298e612ce6565b6001600160a01b031661299f611e81565b6001600160a01b0316146129e8576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6001600160a01b038116612a0e5760405162461bcd60e51b81526004016106a99061483c565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6006602090815260009384526040808520845180860184018051928152908401958401959095209452928152908352918190208054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015612ae55780601f10612aba57610100808354040283529160200191612ae5565b820191906000526020600020905b815481529060010190602001808311612ac857829003601f168201915b505050505081565b6005546001600160a01b031681565b612b04612ce6565b6001600160a01b0316612b15611e81565b6001600160a01b031614612b5e576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6001600160a01b038116612ba35760405162461bcd60e51b815260040180806020018281038252602681526020018061512d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000612c0983612c38565b604051637fb6526560e01b81529091506001600160a01b03821690637fb6526590610a27908590600401614516565b60025460405163068bcd8d60e01b81526000916001600160a01b03169063068bcd8d90612c69908590600401614ed6565b60206040518083038186803b158015612c8157600080fd5b505afa158015612c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb99190613753565b90506001600160a01b038116612ce15760405162461bcd60e51b81526004016106a990614918565b919050565b3390565b6000612cf586612c38565b60405163902b8ab760e01b81529091506001600160a01b0382169063902b8ab790612d2a908d908b9089908990600401614b85565b602060405180830381600087803b158015612d4457600080fd5b505af1925050508015612d74575060408051601f3d908101601f19168201909252612d7191810190613f87565b60015b612e3c576003878787878787604051602001612d969796959493929190614fdf565b60408051601f1981840301815282825261ffff8d1660009081526006602052919091209091612dc6908c9061440f565b908152602001604051809103902060008a81526020019081526020016000209080519060200190612df89291906134af565b507fa5d2ba6de30cc2f2e91c5a29ba66b148c27826954217e2f67cb8983541da21cf60038b8b8b604051612e2f9493929190614f3a565b60405180910390a161315a565b612e45856134a9565b8015612e52575060008351115b1561110f57846001600160a01b031663ab8236f3878d8d8d876001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ea357600080fd5b505afa158015612eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edb9190613753565b878a6040518863ffffffff1660e01b8152600401612efe96959493929190614ab5565b600060405180830381600088803b158015612f1857600080fd5b5087f193505050508015612f2a575060015b61110f573d808015612f58576040519150601f19603f3d011682016040523d82523d6000602084013e612f5d565b606091505b506040518060800160405280846001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015612fa257600080fd5b505afa158015612fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fda9190613753565b6001600160a01b03168152602001838152602001876001600160a01b0316815260200185815250600760008e61ffff1661ffff1681526020019081526020016000208c60405161302a919061440f565b908152604080516020928190038301902060008e8152908352819020835181546001600160a01b03199081166001600160a01b039283161783558585015160018401559285015160028301805490941691161790915560608301518051919261309b926003850192909101906134af565b509050507f8186389e97ff190cd5e17304ed8188a4a98a6c8add46e6df94462ac7f7e8dd348c8c8c866001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156130fc57600080fd5b505afa158015613110573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131349190613753565b868b8a8860405161314c989796959493929190614a3b565b60405180910390a15061110f565b50505050505050505050565b600061317185612c38565b604051632cc36bab60e21b81529091506001600160a01b0382169063b30daeac906131a8908c908a90899089908990600401614bbd565b600060405180830381600087803b1580156131c257600080fd5b505af19250505080156131d3575060015b61329557600286868686866040516020016131f396959493929190614f71565b60408051601f1981840301815282825261ffff8c1660009081526006602052919091209091613223908b9061440f565b9081526020016040518091039020600089815260200190815260200160002090805190602001906132559291906134af565b507fa5d2ba6de30cc2f2e91c5a29ba66b148c27826954217e2f67cb8983541da21cf60028a8a8a60405161328c9493929190614f3a565b60405180910390a15b86886040516132a4919061440f565b60405180910390207fc7379a02e530fbd0a46ea1ce6fd91987e96535798231a796bdc0e1a688a508738b89898989896040516132e596959493929190614e11565b60405180910390a3505050505050505050565b600080821161334e576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161335757fe5b0490505b92915050565b6000826133705750600061335b565b8282028284828161337d57fe5b04146133ba5760405162461bcd60e51b81526004018080602001828103825260218152602001806151536021913960400191505060405180910390fd5b9392505050565b600080856001600160a01b03166323b872dd8686866040516024016133e8939291906144a6565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613421919061440f565b6000604051808303816000865af19150503d806000811461345e576040519150601f19603f3d011682016040523d82523d6000602084013e613463565b606091505b509150915081801561348d57508051158061348d57508080602001905181019061348d919061376f565b6113f55760405162461bcd60e51b81526004016106a9906146d0565b3b151590565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826134e5576000855561352b565b82601f106134fe57805160ff191683800117855561352b565b8280016001018555821561352b579182015b8281111561352b578251825591602001919060010190613510565b5061353792915061358b565b5090565b604051806040016040528060008152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b5b80821115613537576000815560010161358c565b8035612ce1816150d7565b60008083601f8401126135bc578182fd5b5081356001600160401b038111156135d2578182fd5b6020830191508360208285010111156135ea57600080fd5b9250929050565b600082601f830112613601578081fd5b813561361461360f82615086565b615063565b818152846020838601011115613628578283fd5b816020850160208301379081016020019190915292915050565b600060c08284031215613653578081fd5b60405160c081018181106001600160401b038211171561366f57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201525092915050565b6000606082840312156136c5578081fd5b604051606081016001600160401b0382821081831117156136e257fe5b816040528293508435835260208501356020840152604085013591508082111561370b57600080fd5b50613718858286016135f1565b6040830152505092915050565b803561ffff81168114612ce157600080fd5b600060208284031215613748578081fd5b81356133ba816150d7565b600060208284031215613764578081fd5b81516133ba816150d7565b600060208284031215613780578081fd5b81516133ba816150ef565b6000806040838503121561379d578081fd5b82356137a8816150d7565b915060208301356137b8816150d7565b809150509250929050565b6000604082840312156137d4578081fd5b604051604081018181106001600160401b03821117156137f057fe5b604052825181526020928301519281019290925250919050565b600060c0828403121561381b578081fd5b6133ba8383613642565b6000806000806060858703121561383a578182fd5b61384385613725565b935060208501356001600160401b0381111561385d578283fd5b613869878288016135ab565b9598909750949560400135949350505050565b60008060008060008060a08789031215613894578384fd5b61389d87613725565b955060208701356001600160401b03808211156138b8578586fd5b6138c48a838b016135ab565b909750955060408901359450606089013591506138e0826150d7565b909250608088013590808211156138f5578283fd5b5061390289828a016136b4565b9150509295509295509295565b600080600060608486031215613923578081fd5b61392c84613725565b925060208401356001600160401b03811115613946578182fd5b613952868287016135f1565b925050604084013590509250925092565b600080600080600080600080610100898b03121561397f578586fd5b61398889613725565b975060208901356001600160401b038111156139a2578687fd5b6139ae8b828c016135f1565b97505060408901359550606089013594506080890135935060a08901356139d4816150d7565b979a969950949793969295929450505060c08201359160e0013590565b6000806000806000806000806000898b036101c0811215613a10578384fd5b613a198b613725565b995060208b01356001600160401b0380821115613a34578586fd5b613a408e838f016135f1565b9a5060408d0135995060608d0135985060808d0135975060a08d0135965060c08d01359150613a6e826150d7565b81955060c060df1984011215613a82578384fd5b604051925060c0830191508282108183111715613a9b57fe5b8160405260e08d013583526101008d013560208401526101208d013560408401526101408d013560608401526101608d013560808401526101808d013560a08401528294506101a08d0135925080831115613af4578384fd5b5050613b028c828d016135f1565b9150509295985092959850929598565b60008060008060008060008060e0898b031215613b2d578182fd5b613b3689613725565b975060208901356001600160401b0380821115613b51578384fd5b613b5d8c838d016135f1565b985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135915080821115613b8e578384fd5b50613b9b8b828c016135ab565b999c989b5096995094979396929594505050565b600080600060608486031215613bc3578081fd5b613bcc84613725565b9250602084013591506040840135613be3816150d7565b809150509250925092565b60008060008060808587031215613c03578182fd5b613c0c85613725565b935060208501359250604085013591506060850135613c2a816150d7565b939692955090935050565b60008060008060008060008060e0898b031215613c50578182fd5b613c5989613725565b975060208901359650604089013595506060890135613c77816150d7565b94506080890135935060a08901356001600160401b0380821115613c99578384fd5b613ca58c838d016135ab565b909550935060c08b0135915080821115613cbd578283fd5b50613cca8b828c016136b4565b9150509295985092959890939650565b60008060008060008060008060006101008a8c031215613cf8578283fd5b613d018a613725565b985060208a0135975060408a0135965060608a0135613d1f816150d7565b955060808a0135945060a08a0135935060c08a01356001600160401b0380821115613d48578485fd5b613d548d838e016135ab565b909550935060e08c0135915080821115613d6c578283fd5b50613b028c828d016136b4565b60008060008060008060008060008060006101208c8e031215613d9a578485fd5b613da38c613725565b9a5060208c0135995060408c01359850613dbf60608d016135a0565b975060808c0135965060a08c013595506001600160401b038060c08e01351115613de7578586fd5b613df78e60c08f01358f016136b4565b95508060e08e01351115613e09578283fd5b613e198e60e08f01358f016135ab565b90955093506101008d0135811015613e2f578283fd5b50613e418d6101008e01358e016135ab565b81935080925050509295989b509295989b9093969950565b60008060008084860360a0811215613e6f578283fd5b613e7886613725565b9450602086013593506040808701359350605f1982011215613e98578182fd5b50604051604081018181106001600160401b0382111715613eb557fe5b604052606086013581526080909501356020860152509194909350909190565b600080600080600080600060a0888a031215613eef578081fd5b613ef888613725565b96506020880135613f08816150fd565b955060408801356001600160401b0380821115613f23578283fd5b613f2f8b838c016135ab565b909750955060608a0135915080821115613f47578283fd5b613f538b838c016135ab565b909550935060808a0135915080821115613f6b578283fd5b50613f788a828b016136b4565b91505092959891949750929550565b600060208284031215613f98578081fd5b5051919050565b60008060408385031215613fb1578182fd5b8235915060208301356137b8816150d7565b60008060008060008060c08789031215613fdb578384fd5b863595506020870135613fed816150d7565b94506040870135613ffd816150fd565b9350606087013561400d816150fd565b925060808701356001600160401b0380821115614028578384fd5b6140348a838b016135f1565b935060a0890135915080821115614049578283fd5b5061390289828a016135f1565b60008060408385031215614068578182fd5b8235915060208301356137b8816150ef565b60008060008060008060c08789031215614092578384fd5b8635955060208701356140a4816150ef565b9450604087013593506060870135925060808701356140c2816150ef565b915060a08701356140d2816150ef565b809150509295509295509295565b6000806000606084860312156140f4578081fd5b8335925061410460208501613725565b9150604084013590509250925092565b60008060008060808587031215614129578182fd5b8435935061413960208601613725565b92506040850135915061414e60608601613725565b905092959194509250565b6000806000806080858703121561416e578182fd5b8435935061417e60208601613725565b93969395505050506040820135916060013590565b600080604083850312156141a5578182fd5b50508035926020909101359150565b600080604083850312156141c6578182fd5b505080516020909101519092909150565b6000806000606084860312156141eb578081fd5b83359250602084013591506040840135613be3816150d7565b60008060008060008060c0878903121561421c578384fd5b8651614227816150fd565b8096505060208701519450604087015193506060870151614247816150d7565b809350506080870151915060a087015190509295509295509295565b6000806000806000806000610180888a03121561427e578081fd5b8751614289816150fd565b8097505060208801519550604088015194506060880151935060808801516142b0816150d7565b92506142bf8960a08a01613642565b91506101608801516001600160401b038111156142da578182fd5b8801601f81018a136142ea578182fd5b80516142f861360f82615086565b8181528b602083850101111561430c578384fd5b61431d8260208301602086016150a7565b80935050505092959891949750929550565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526143718160208601602086016150a7565b601f01601f19169290920160200192915050565b80518252602090810151910152565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b600081518352602082015160208401526040820151606060408501526143f76060850182614359565b949350505050565b6000828483379101908152919050565b600082516144218184602087016150a7565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b600060018060a01b038816825286602083015261ffff8616604083015284606083015260a0608083015261449a60a08301848661432f565b98975050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b038581168252602082018590528316604082015260806060820181905260009061187390830184614359565b901515815260200190565b941515855260208501939093526040840191909152151560608301521515608082015260a00190565b6000602082526133ba6020830184614359565b60208082526030908201527f53746172676174653a2062726964676520616e6420666163746f727920616c7260408201526f1958591e481a5b9a5d1a585b1a5e995960821b606082015260800190565b6020808252601e908201527f53746172676174653a205f746f6b656e2063616e6e6f74206265203078300000604082015260600190565b60208082526027908201527f53746172676174653a206e6f7420656e6f756768206c7020746f2072656465656040820152666d52656d6f746560c81b606082015260800190565b6020808252601e908201527f4272696467653a2063616c6c6572206d757374206265204272696467652e0000604082015260600190565b6020808252601b908201527f53746172676174653a206f6e6c79206d696e744665654f776e65720000000000604082015260600190565b60208082526019908201527f53746172676174653a206e6f2072657472792072657665727400000000000000604082015260600190565b6020808252601e908201527f53746172676174653a205452414e534645525f46524f4d5f4641494c45440000604082015260600190565b6020808252601d908201527f53746172676174653a20666163746f72792063616e7420626520307830000000604082015260600190565b6020808252601f908201527f53746172676174653a206f6e6c792070726f746f636f6c4665654f776e657200604082015260600190565b6020808252601c908201527f53746172676174653a206272696467652063616e742062652030783000000000604082015260600190565b60208082526021908201527f53746172676174653a206e6f7420656e6f756768206c7020746f2072656465656040820152606d60f81b606082015260800190565b6020808252602f908201527f53746172676174653a206e6f7420656e6f756768206c7020746f20726564656560408201526e1b481dda5d1a08185b5bdd5b9d14d1608a1b606082015260800190565b6020808252601e908201527f53746172676174653a205f6f776e65722063616e6e6f74206265203078300000604082015260600190565b6020808252601f908201527f53746172676174653a20636163686520616c726561647920636c656172656400604082015260600190565b60208082526017908201527f53746172676174653a2063616e6e6f7420737761702030000000000000000000604082015260600190565b6020808252601f908201527f53746172676174653a20696e76616c69642066756e6374696f6e207479706500604082015260600190565b6020808252601d908201527f53746172676174653a20506f6f6c20646f6573206e6f74206578697374000000604082015260600190565b60208082526026908201527f53746172676174653a205f726566756e64416464726573732063616e6e6f742060408201526506265203078360d41b606082015260800190565b61ffff861681526001600160a01b038516602082015260006149ba6040830186614385565b60c060808301526149ce60c08301856143ce565b82810360a084015261449a8185614359565b600061ffff8916825260c060208301526149fe60c08301888a61432f565b604083018790526001600160a01b03861660608401526080830185905282810360a0840152614a2d8185614359565b9a9950505050505050505050565b600061010061ffff8b168352806020840152614a598184018b614359565b604084018a90526001600160a01b03898116606086015260808501899052871660a085015283810360c08501529050614a928186614359565b905082810360e0840152614aa68185614359565b9b9a5050505050505050505050565b600061ffff8816825260c06020830152614ad260c0830188614359565b604083018790526001600160a01b03861660608401526080830185905282810360a0840152614b018185614359565b9998505050505050505050565b61ffff929092168252602082015260400190565b61ffff94909416845260208401929092526001600160a01b03166040830152606082015260800190565b61ffff96909616865260208601949094526001600160a01b0392909216604085015260608401526080830152151560a082015260c00190565b61ffff85168152602081018490526001600160a01b03831660408201526101208101614bb46060830184614394565b95945050505050565b61ffff95909516855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b61ffff8416815260208101839052608081016143f76040830184614385565b61ffff93841681526020810192909252909116604082015260600190565b61ffff9390931683526020830191909152604082015260600190565b61ffff8616815260208101859052604081018490526001600160a01b038316606082015260c081016118736080830184614385565b61ffff8c168152602081018b9052604081018a90526001600160a01b038916606082015260006101e0614cb3608084018b614385565b614cc060c084018a614394565b80610180840152614cd3818401896143ce565b90508281036101a0840152614ce981878961432f565b90508281036101c0840152614cff81858761432f565b9e9d5050505050505050505050505050565b61ffff8a16815260208101899052604081018890526001600160a01b038716606082015260006101e0614d476080840189614385565b614d5460c0840188614394565b80610180840152614d67818401876143ce565b90508281036101a0840152614d7d81858761432f565b8381036101c0909401939093525081526020019998505050505050505050565b61ffff8a16815260208101899052604081018890526001600160a01b03871660608201526000610120614dd36080840189614385565b8660c08401528060e0840152614dec818401868861432f565b9050828103610100840152614e0181856143ce565b9c9b505050505050505050505050565b61ffff969096168652602086019490945260408501929092526001600160a01b03166060840152608083015260a082015260c00190565b600061ffff8916825287602083015286604083015260c06060830152614e7260c08301868861432f565b60808301949094525060a0015295945050505050565b600061ffff8916825260ff8816602083015260a06040830152614eaf60a08301878961432f565b8281036060840152614ec281868861432f565b90508281036080840152614a2d81856143ce565b90815260200190565b8681526001600160a01b038616602082015260ff85811660408301528416606082015260c060808201819052600090614f1a90830185614359565b82810360a0840152614b018185614359565b918252602082015260400190565b600060ff8616825261ffff8516602083015260806040830152614f606080830185614359565b905082606083015295945050505050565b60ff969096168652602086019490945260408501929092526001600160a01b03166060840152608083015260a082015260c00190565b600060ff8916825287602083015286604083015260ff8616606083015284608083015260c060a0830152614b0160c08301848661432f565b60ff881681526020810187905260408101869052606081018590526001600160a01b0384166080820152600061018061501b60a0840186614394565b80610160840152614a2d81840185614359565b600060ff8916825287602083015286604083015285606083015284608083015260c060a0830152614b0160c08301848661432f565b6040518181016001600160401b038111828210171561507e57fe5b604052919050565b60006001600160401b0382111561509957fe5b50601f01601f191660200190565b60005b838110156150c25781810151838201526020016150aa565b838111156150d1576000848401525b50505050565b6001600160a01b03811681146150ec57600080fd5b50565b80151581146150ec57600080fd5b60ff811681146150ec57600080fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220d86582ffb411c85869be51806318cb203c2835996c58fcb8521dd7b53c5baece64736f6c63430007060033" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033" + }, + { + "address": "0x76c3efaf7d41cd733f8a4d832a3dfdbf12d99af7", + "nonce": 25, + "balance": "0x0000000000000000000000000000000000000000000000000020cbfaae2c7ab4", + "code": "0x" + }, + { + "address": "0x058d2e0a3306a7dd764b4caeb1989f3e04246a6f", + "nonce": 58, + "balance": "0x000000000000000000000000000000000000000000000000001002100fb5cd58", + "code": "0x" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "nonce": 1, + "balance": "0x00000000000000000000000000000000000000000000000002c68af0bb140000", + "code": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033" + }, + { + "address": "0x35929e90ff36ee8b9e19ec84a4d13da5f236a978", + "nonce": 19, + "balance": "0x0000000000000000000000000000000000000000000000000025f067a3bf0ede", + "code": "0x" + }, + { + "address": "0x0f7b8403bab32b5a6476cab039e123a59701f508", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106101635760003560e01c80637a78b9c7116100c0578063bc4b336511610074578063db6b524611610059578063db6b5246146103b8578063f2fde38b146103c0578063f80dec97146103e057600080fd5b8063bc4b336514610378578063d6c9b6a51461039857600080fd5b80638da5cb5b116100a55780638da5cb5b146102f35780639c66c25d14610328578063b91816111461034857600080fd5b80637a78b9c7146102be5780638129fc1c146102de57600080fd5b80634f06563211610117578063535b355c116100fc578063535b355c14610239578063715018a6146102595780637729d6441461026e57600080fd5b80634f065632146101f95780634fb2e45d1461021957600080fd5b80632d1fb389116101485780632d1fb389146101b1578063447e346f146101d157806347e7ef24146101d957600080fd5b80630100670b1461016f578063143531c01461019157600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061018f61018a366004611942565b6103fa565b005b34801561019d57600080fd5b5061018f6101ac3660046117c2565b610414565b3480156101bd57600080fd5b5061018f6101cc3660046118f8565b61052a565b61018f61056a565b3480156101e557600080fd5b5061018f6101f4366004611930565b6105cb565b34801561020557600080fd5b5061018f610214366004611887565b6106f4565b34801561022557600080fd5b5061018f6102343660046117a6565b6108db565b34801561024557600080fd5b5061018f6102543660046117c2565b610976565b34801561026557600080fd5b5061018f610ae6565b34801561027a57600080fd5b506102a961028936600461197a565b805160208183018101805160668252928201919093012091525460ff1681565b60405190151581526020015b60405180910390f35b3480156102ca57600080fd5b5061018f6102d93660046117ed565b610b36565b3480156102ea57600080fd5b5061018f610d06565b3480156102ff57600080fd5b5060335460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b5565b34801561033457600080fd5b5061018f610343366004611847565b610e79565b34801561035457600080fd5b506102a96103633660046117a6565b60656020526000908152604090205460ff1681565b34801561038457600080fd5b5061018f610393366004611930565b610f67565b3480156103a457600080fd5b5061018f6103b3366004611847565b610fec565b61018f611071565b3480156103cc57600080fd5b5061018f6103db3660046117a6565b6110fe565b3480156103ec57600080fd5b506067546102a99060ff1681565b610402611198565b6067805460ff19169115919091179055565b3360009081526065602052604090205460ff166104785760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b804710156104c85760405162461bcd60e51b815260206004820152601460248201527f494e53554646494349454e545f42414c414e4345000000000000000000000000604482015260640161046f565b60405173ffffffffffffffffffffffffffffffffffffffff8316908290600081818185875af1925050503d806000811461051e576040519150601f19603f3d011682016040523d82523d6000602084013e610523565b606091505b5050505050565b610532611198565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152606560205260409020805460ff1916911515919091179055565b3360009081526065602052604090205460ff166105c95760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161046f565b565b60675460ff161561061e5760405162461bcd60e51b815260206004820152601460248201527f4445504f534954535f4e4f545f414c4c4f574544000000000000000000000000604482015260640161046f565b61064073ffffffffffffffffffffffffffffffffffffffff83163330846111ff565b73ffffffffffffffffffffffffffffffffffffffff82166106a35760405162461bcd60e51b815260206004820152601560248201527f424c41434b484f4c455f4e4f545f414c4c4f5745440000000000000000000000604482015260640161046f565b60405181815273ffffffffffffffffffffffffffffffffffffffff83169033907f573284f4c36da6a8d8d84cd06662235f8a770cc98e8c80e304b8f382fdc3dca29060200160405180910390a35050565b3360009081526065602052604090205460ff166107535760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161046f565b8181806107a25760405162461bcd60e51b815260206004820152601960248201527f5769746864726177616c20494420697320726571756972656400000000000000604482015260640161046f565b606682826040516107b4929190611a5e565b9081526040519081900360200190205460ff16156108145760405162461bcd60e51b815260206004820152601f60248201527f5769746864726177616c20494420416c72656164792070726f63657373656400604482015260640161046f565b61083573ffffffffffffffffffffffffffffffffffffffff881687876112e1565b8673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fe4f4f1fb3534fe80225d336f6e5a73007dc992e5f6740152bf13ed2a08f3851a87878760405161089693929190611abf565b60405180910390a36001606683836040516108b2929190611a5e565b908152604051908190036020019020805491151560ff1990921691909117905550505050505050565b6108e3611198565b73ffffffffffffffffffffffffffffffffffffffff811660009081526065602081905260408220805460ff191660011790558161093560335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020805460ff1916911515919091179055610973816110fe565b50565b3360009081526065602052604090205460ff166109d55760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161046f565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610a2f576040519150601f19603f3d011682016040523d82523d6000602084013e610a34565b606091505b5050905080610a855760405162461bcd60e51b815260206004820152601260248201527f4641494c45445f544f5f53454e445f4554480000000000000000000000000000604482015260640161046f565b6040805183815260208101829052600091810182905273ffffffffffffffffffffffffffffffffffffffff8516907fe4f4f1fb3534fe80225d336f6e5a73007dc992e5f6740152bf13ed2a08f3851a906060015b60405180910390a3505050565b610aee611198565b60405162461bcd60e51b815260206004820152601c60248201527f556e61626c6520746f2072656e6f756e6365206f776e65727368697000000000604482015260640161046f565b3360009081526065602052604090205460ff16610b955760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161046f565b818180610be45760405162461bcd60e51b815260206004820152601960248201527f5769746864726177616c20494420697320726571756972656400000000000000604482015260640161046f565b60668282604051610bf6929190611a5e565b9081526040519081900360200190205460ff1615610c565760405162461bcd60e51b815260206004820152601f60248201527f5769746864726177616c20494420416c72656164792070726f63657373656400604482015260640161046f565b610c608686610414565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fe4f4f1fb3534fe80225d336f6e5a73007dc992e5f6740152bf13ed2a08f3851a878787604051610cc293929190611abf565b60405180910390a3600160668383604051610cde929190611a5e565b908152604051908190036020019020805491151560ff19909216919091179055505050505050565b600054610100900460ff1615808015610d265750600054600160ff909116105b80610d405750303b158015610d40575060005460ff166001145b610db25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161046f565b6000805460ff191660011790558015610df257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610dfa611337565b336000908152606560205260409020805460ff19166001179055801561097357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b3360009081526065602052604090205460ff16610ed85760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161046f565b610ef973ffffffffffffffffffffffffffffffffffffffff841683836112e1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fe4f4f1fb3534fe80225d336f6e5a73007dc992e5f6740152bf13ed2a08f3851a83604051610ad991815260406020820181905260009082015260600190565b3360009081526065602052604090205460ff16610fc65760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161046f565b610fe873ffffffffffffffffffffffffffffffffffffffff83163330846111ff565b5050565b3360009081526065602052604090205460ff1661104b5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161046f565b61106c73ffffffffffffffffffffffffffffffffffffffff841683836112e1565b505050565b60675460ff16156110c45760405162461bcd60e51b815260206004820152601460248201527f4445504f534954535f4e4f545f414c4c4f574544000000000000000000000000604482015260640161046f565b60405134815260009033907f573284f4c36da6a8d8d84cd06662235f8a770cc98e8c80e304b8f382fdc3dca29060200160405180910390a3565b611106611198565b73ffffffffffffffffffffffffffffffffffffffff811661118f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161046f565b610973816113bc565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105c95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161046f565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526112db9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611433565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261106c9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611259565b600054610100900460ff166113b45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161046f565b6105c9611525565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611495826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166115ab9092919063ffffffff16565b80519091501561106c57808060200190518101906114b3919061195e565b61106c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161046f565b600054610100900460ff166115a25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161046f565b6105c9336113bc565b60606115ba84846000856115c4565b90505b9392505050565b60608247101561163c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161046f565b73ffffffffffffffffffffffffffffffffffffffff85163b6116a05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161046f565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516116c99190611a42565b60006040518083038185875af1925050503d8060008114611706576040519150601f19603f3d011682016040523d82523d6000602084013e61170b565b606091505b509150915061171b828286611726565b979650505050505050565b606083156117355750816115bd565b8251156117455782518084602001fd5b8160405162461bcd60e51b815260040161046f9190611a6e565b60008083601f840112611770578182fd5b50813567ffffffffffffffff811115611787578182fd5b60208301915083602082850101111561179f57600080fd5b9250929050565b6000602082840312156117b7578081fd5b81356115bd81611b6e565b600080604083850312156117d4578081fd5b82356117df81611b6e565b946020939093013593505050565b60008060008060608587031215611802578182fd5b843561180d81611b6e565b935060208501359250604085013567ffffffffffffffff81111561182f578283fd5b61183b8782880161175f565b95989497509550505050565b60008060006060848603121561185b578283fd5b833561186681611b6e565b9250602084013561187681611b6e565b929592945050506040919091013590565b60008060008060006080868803121561189e578081fd5b85356118a981611b6e565b945060208601356118b981611b6e565b935060408601359250606086013567ffffffffffffffff8111156118db578182fd5b6118e78882890161175f565b969995985093965092949392505050565b6000806040838503121561190a578182fd5b823561191581611b6e565b9150602083013561192581611b90565b809150509250929050565b600080604083850312156117d4578182fd5b600060208284031215611953578081fd5b81356115bd81611b90565b60006020828403121561196f578081fd5b81516115bd81611b90565b60006020828403121561198b578081fd5b813567ffffffffffffffff808211156119a2578283fd5b818401915084601f8301126119b5578283fd5b8135818111156119c7576119c7611b3f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611a0d57611a0d611b3f565b81604052828152876020848701011115611a25578586fd5b826020860160208301379182016020019490945295945050505050565b60008251611a54818460208701611b13565b9190910192915050565b8183823760009101908152919050565b6020815260008251806020840152611a8d816040850160208701611b13565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b60005b83811015611b2e578181015183820152602001611b16565b838111156112db5750506000910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461097357600080fd5b801515811461097357600080fdfea264697066735822122046907d1f71935a2e480a5d6beff954df75393754ea81d6ddaf4f1a911d45daeb64736f6c63430008040033" + }, + { + "address": "0x2836ffc6950644a8a49e6318f4937a015f25f6e0", + "nonce": 26, + "balance": "0x0000000000000000000000000000000000000000000000000029bad9177fce01", + "code": "0x" + }, + { + "address": "0x14e20a4e88e71b9f2479c918f35c7307524d60a1", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106103bb5760003560e01c80634c9c3f85116101f257806391d148541161010d578063d708af52116100a0578063e20e1fee1161006f578063e20e1fee14610ce7578063fc0c546a14610cfe578063fe56f5a014610d1e578063fe60d12c14610d3e57600080fd5b8063d708af5214610c21578063db6f9deb14610c41578063df6ffa8714610c7a578063e0726a0d14610caf57600080fd5b8063a217fddf116100dc578063a217fddf14610bb7578063c7c79d1614610bcc578063cab230d214610be1578063d547741f14610c0157600080fd5b806391d1485414610b4d57806398969e8214610b6d57806398f4148d14610b8d5780639f48ed5c14610ba257600080fd5b8063649677e1116101855780637239f089116101545780637239f08914610ac05780637706c4ba14610ae057806380ffa19a14610b0d57806384276d8114610b2d57600080fd5b8063649677e114610a3d5780636570450614610a5357806370318d1e14610a8057806371c5b51f14610aa057600080fd5b80635437988d116101c15780635437988d1461099f57806354fd4d50146109bf57806358366502146109d657806360285c7314610a0457600080fd5b80634c9c3f85146109425780634f1ef28614610957578063513cce8c1461096a57806352d1902d1461098a57600080fd5b8063248a9ca3116102e257806336568abe11610275578063379607f511610244578063379607f5146108c157806347b8c367146108e157806348f7928d146108f457806349defac31461090a57600080fd5b806336568abe1461084e5780633659cfe61461086e57806336ab86c41461088e578063371fd8e6146108a157600080fd5b806329f8b3f7116102b157806329f8b3f7146107ce5780632b7ac3f3146107ee5780632e1a7d4d1461080e5780632f2ff15d1461082e57600080fd5b8063248a9ca31461073a578063250bb5711461076a57806326232a2e1461078a578063282f88f5146107a157600080fd5b80630dca59c11161035a578063144fa6d711610329578063144fa6d7146106855780631459457a146106a55780631c6f0538146106c55780631dfe6f131461071a57600080fd5b80630dca59c11461052b5780631066e52214610541578063117a5b901461056357806311ddde171461065757600080fd5b806302cb655e1161039657806302cb655e146104835780630514b375146104b157806307bd0265146104d15780630aec90b2146104f357600080fd5b80620a9a21146103c757806301ffc9a71461042f5780630215e3f41461045f57600080fd5b366103c257005b600080fd5b3480156103d357600080fd5b5061040a6103e2366004613c22565b6101526020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080015b60405180910390f35b34801561043b57600080fd5b5061044f61044a366004613c3b565b610d55565b6040519015158152602001610426565b34801561046b57600080fd5b50610475604e5481565b604051908152602001610426565b34801561048f57600080fd5b5061047561049e366004613c22565b61014d6020526000908152604090205481565b3480156104bd57600080fd5b506104756104cc366004613c22565b610d8c565b3480156104dd57600080fd5b5061047560008051602061440383398151915281565b3480156104ff57600080fd5b50603454610513906001600160a01b031681565b6040516001600160a01b039091168152602001610426565b34801561053757600080fd5b5061047560385481565b34801561054d57600080fd5b5061056161055c366004613c22565b610da3565b005b34801561056f57600080fd5b506105f161057e366004613c22565b603c6020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b038416946001600160401b03600160a01b90950485169484811694600160401b8104821694600160801b909104909116926001600160801b039091169189565b60408051998a526001600160a01b0390981660208a01526001600160401b0396871697890197909752938516606088015291841660808701529290921660a08501526001600160801b0390911660c084015260e083015261010082015261012001610426565b34801561066357600080fd5b50610475610672366004613c22565b61014f6020526000908152604090205481565b34801561069157600080fd5b506105616106a0366004613c7a565b610e16565b3480156106b157600080fd5b506105616106c0366004613c97565b610e44565b3480156106d157600080fd5b506107056106e0366004613d08565b6101536020908152600092835260408084209091529082529020805460019091015482565b60408051928352602083019190915201610426565b34801561072657600080fd5b50610561610735366004613c22565b610fbb565b34801561074657600080fd5b50610475610755366004613c22565b600090815260b3602052604090206001015490565b34801561077657600080fd5b50610475610785366004613d38565b61100b565b34801561079657600080fd5b5061047561014b5481565b3480156107ad57600080fd5b506104756107bc366004613c7a565b603f6020526000908152604090205481565b3480156107da57600080fd5b50603754610513906001600160a01b031681565b3480156107fa57600080fd5b50603654610513906001600160a01b031681565b34801561081a57600080fd5b50610561610829366004613c22565b611030565b34801561083a57600080fd5b50610561610849366004613d08565b6110d6565b34801561085a57600080fd5b50610561610869366004613d08565b6110fb565b34801561087a57600080fd5b50610561610889366004613c7a565b611179565b61056161089c366004613d68565b611258565b3480156108ad57600080fd5b506105616108bc366004613c22565b611731565b3480156108cd57600080fd5b506105616108dc366004613c22565b611845565b6105616108ef366004613d38565b611a67565b34801561090057600080fd5b5061014c54610475565b34801561091657600080fd5b50610475610925366004613d08565b603d60209081526000928352604080842090915290825290205481565b34801561094e57600080fd5b50604d54610475565b610561610965366004613da3565b611afd565b34801561097657600080fd5b50610561610985366004613c7a565b611bc9565b34801561099657600080fd5b50610475611bf7565b3480156109ab57600080fd5b506105616109ba366004613c7a565b611caa565b3480156109cb57600080fd5b506104756101495481565b3480156109e257600080fd5b506104756109f1366004613c22565b61014e6020526000908152604090205481565b348015610a1057600080fd5b50610475610a1f366004613d08565b61015060209081526000928352604080842090915290825290205481565b348015610a4957600080fd5b50610475604c5481565b348015610a5f57600080fd5b50610475610a6e366004613c7a565b603b6020526000908152604090205481565b348015610a8c57600080fd5b50610561610a9b366004613c22565b611cd8565b348015610aac57600080fd5b50610561610abb366004613c7a565b611d29565b348015610acc57600080fd5b50610561610adb366004613c22565b611d57565b348015610aec57600080fd5b50610475610afb366004613c22565b604b6020526000908152604090205481565b348015610b1957600080fd5b50610561610b28366004613e66565b611d68565b348015610b3957600080fd5b50610561610b48366004613c22565b6124aa565b348015610b5957600080fd5b5061044f610b68366004613d08565b61251e565b348015610b7957600080fd5b50610475610b88366004613d08565b612549565b348015610b9957600080fd5b5061056161276d565b348015610bae57600080fd5b50603954610475565b348015610bc357600080fd5b50610475600081565b348015610bd857600080fd5b50610561612bee565b348015610bed57600080fd5b50610561610bfc366004613c22565b612cb7565b348015610c0d57600080fd5b50610561610c1c366004613d08565b612d29565b348015610c2d57600080fd5b50603554610513906001600160a01b031681565b348015610c4d57600080fd5b50610475610c5c366004613d08565b61015460209081526000928352604080842090915290825290205481565b348015610c8657600080fd5b50610705610c95366004613c7a565b610151602052600090815260409020805460019091015482565b348015610cbb57600080fd5b5061044f610cca366004613d08565b604060208181526000938452818420905290825290205460ff1681565b348015610cf357600080fd5b5061047561014a5481565b348015610d0a57600080fd5b50603354610513906001600160a01b031681565b348015610d2a57600080fd5b50610561610d39366004613c22565b612d4e565b348015610d4a57600080fd5b5061047561014c5481565b60006001600160e01b03198216637965db0b60e01b1480610d8657506301ffc9a760e01b6001600160e01b03198316145b92915050565b604181600a8110610d9c57600080fd5b0154905081565b610dae60003361251e565b158015610dd05750610dce6000805160206144038339815191523361251e565b155b15610dee57604051636caa20b560e11b815260040160405180910390fd5b6127108110610e1057604051631b2f151360e11b815260040160405180910390fd5b61014c55565b6000610e2181612d9e565b50603380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1615808015610e645750600054600160ff909116105b80610e7e5750303b158015610e7e575060005460ff166001145b610ea35760405162461bcd60e51b8152600401610e9a90613eec565b60405180910390fd5b6000805460ff191660011790558015610ec6576000805461ff0019166101001790555b610ece612da8565b610ed6612da8565b610ede612bee565b603380546001600160a01b03199081166001600160a01b038981169190911790925560348054821688841617905560368054821685841617905560358054821687841617905560378054909116918516919091179055610f3f600033612dcf565b610f5760008051602061440383398151915233612dcf565b6002604e556006603955600161014955600061014a558015610fb3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b610fc660003361251e565b158015610fe85750610fe66000805160206144038339815191523361251e565b155b1561100657604051636caa20b560e11b815260040160405180910390fd5b603955565b603e60205281600052604060002081600a811061102757600080fd5b01549150829050565b600061103b81612d9e565b60335460405163a9059cbb60e01b8152336004820152602481018490526000916001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561108d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b19190613f3a565b9050806110d15760405163108b4f1b60e01b815260040160405180910390fd5b505050565b600082815260b360205260409020600101546110f181612d9e565b6110d18383612dcf565b6001600160a01b038116331461116b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610e9a565b6111758282612e55565b5050565b6001600160a01b037f00000000000000000000000014e20a4e88e71b9f2479c918f35c7307524d60a11630036111c15760405162461bcd60e51b8152600401610e9a90613f57565b7f00000000000000000000000014e20a4e88e71b9f2479c918f35c7307524d60a16001600160a01b031661120a6000805160206143bc833981519152546001600160a01b031690565b6001600160a01b0316146112305760405162461bcd60e51b8152600401610e9a90613fa3565b61123981612ebc565b6040805160008082526020820190925261125591839190612ee1565b50565b61126061304c565b600061126a6130a5565b905061127581613117565b336000908152603b602052604090205415801590611291575081155b156112af57604051633497d0d160e21b815260040160405180910390fd5b3332146112cf5760405163d26e878f60e01b815260040160405180910390fd5b6112d76132f9565b604c541561145b576000612710604d54604c546112f49190614005565b6112fe9190614032565b9050600061271061130f61014c5490565b604c5461131c9190614005565b6113269190614032565b90506113318261335f565b6033546001600160a01b0316156113e457603354604c546040516323b872dd60e01b815233600482015230602482015260448101919091526000916001600160a01b0316906323b872dd906064016020604051808303816000875af115801561139e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c29190613f3a565b9050806113e25760405163108b4f1b60e01b815260040160405180910390fd5b505b8215611458576113f48183614046565b604c546114019190614059565b6000848152604b60205260408120805490919061141f908490614046565b90915550819050604b6000611435866001614046565b815260200190815260200160002060008282546114529190614046565b90915550505b50505b6000604051806101200160405280603a600081546114789061406c565b91829055508152336020820181905260006040830181905260608301819052426001600160401b038116608085015260a0840182905260c084019190915260e08301889052610100909201917f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001916114f1600143614059565b406040516020016115279392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6040516020818303038152906040528051906020012060001c61154a9190614085565b905290508280156115695750336000908152603b602052604090205415155b156115b157336000908152603b60209081526040808320548352603c9091529020600201805467ffffffffffffffff60801b1916600160801b426001600160401b0316021790555b80516000908152603c60209081526040808320845180825583860151600183018054858901516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b0393841602179055606087015160028401805460808a015160a08b01519385166001600160801b031992831617600160401b918616919091021767ffffffffffffffff60801b1916600160801b93909416929092029290921790915560c08701516003840180549092166001600160801b0390911617905560e0860151600483015561010086015160059092019190915533808552603b845282852091909155603f83528184209390935583518151938452918301919091527f0988a2b4a2d4dab5e137b0af44eed4118da87a6117a6753902e827e5291c3b92910160405180910390a180516101008201516040805133815260208101939093528201527fbba4da418095c3d5765f5f5ed38420089a123c3a2a44c71e2ae09bf6a33910509060600160405180910390a1505061117560018055565b61173c60003361251e565b15801561175e575061175c6000805160206144038339815191523361251e565b155b1561177c57604051636caa20b560e11b815260040160405180910390fd5b61014b548111156117a057604051636990f5e560e11b815260040160405180910390fd5b60335460405163339bd98f60e11b8152600481018390526001600160a01b0390911690636737b31e90602401600060405180830381600087803b1580156117e657600080fd5b505af11580156117fa573d6000803e3d6000fd5b505050508061014b60008282546118119190614059565b909155505060385481101561183d5780603860008282546118329190614059565b909155506112559050565b600060385550565b61184d61304c565b80156118595780611861565b6118616130a5565b905061186c81613117565b600081815261015260209081526040808320610153835281842033855290925282206001810154600383015482549394929364e8d4a51000916118ae91614005565b6118b89190614032565b6118c29190614059565b905064e8d4a51000836003015483600001546118de9190614005565b6118e89190614032565b6001830155600081900361190f5760405163374c934360e11b815260040160405180910390fd5b6033546001600160a01b0316156119bc5760335460405163a9059cbb60e01b8152336004820152602481018390526000916001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119969190613f3a565b9050806119b65760405163108b4f1b60e01b815260040160405180910390fd5b506119eb565b604051339082156108fc029083906000818181858888f193505050501580156119e9573d6000803e3d6000fd5b505b60008481526101546020908152604080832033845290915281208054839290611a15908490614046565b909155505060408051338152602081018690529081018290527ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e27317439060600160405180910390a150505061125560018055565b611a7260003361251e565b158015611a945750611a926000805160206144038339815191523361251e565b155b15611ab257604051636caa20b560e11b815260040160405180910390fd5b6000828152604b602052604081208054839290611ad0908490614046565b9091555050600082815261014d602052604081208054839290611af4908490614046565b90915550505050565b6001600160a01b037f00000000000000000000000014e20a4e88e71b9f2479c918f35c7307524d60a1163003611b455760405162461bcd60e51b8152600401610e9a90613f57565b7f00000000000000000000000014e20a4e88e71b9f2479c918f35c7307524d60a16001600160a01b0316611b8e6000805160206143bc833981519152546001600160a01b031690565b6001600160a01b031614611bb45760405162461bcd60e51b8152600401610e9a90613fa3565b611bbd82612ebc565b61117582826001612ee1565b6000611bd481612d9e565b50603580546001600160a01b0319166001600160a01b0392909216919091179055565b6000306001600160a01b037f00000000000000000000000014e20a4e88e71b9f2479c918f35c7307524d60a11614611c975760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610e9a565b506000805160206143bc83398151915290565b6000611cb581612d9e565b50603680546001600160a01b0319166001600160a01b0392909216919091179055565b611ce360003361251e565b158015611d055750611d036000805160206144038339815191523361251e565b155b15611d2357604051636caa20b560e11b815260040160405180910390fd5b61014a55565b6000611d3481612d9e565b50603480546001600160a01b0319166001600160a01b0392909216919091179055565b6000611d6281612d9e565b50604e55565b336000908152603b60205260408120549003611d97576040516399e563a160e01b815260040160405180910390fd5b336000908152603b60209081526040808320548352603c82528083208151610120810183528154815260018201546001600160a01b038116948201949094526001600160401b03600160a01b90940484169281019290925260028101548084166060840152600160401b810484166080840152600160801b900490921660a082015260038201546001600160801b031660c08201819052600483015460e0830152600590920154610100820152919081805b8681101561209657878782818110611e6357611e63614099565b90506101e0020161010001600360078110611e8057611e80614099565b6020020135336001600160a01b031614611ead57604051636edaef2f60e11b815260040160405180910390fd5b603c888883818110611ec157611ec1614099565b90506101e0020161010001600560078110611ede57611ede614099565b6020020135603b611eef9190614046565b611ef99190614032565b611f0490603c614005565b9150604e54603c611f159190614005565b611f1f9083614085565b600003611f2b57600193505b878782818110611f3d57611f3d614099565b90506101e0020161010001600160078110611f5a57611f5a614099565b602002013592507f46a2589b4766dd8e12463b797a264961bb50151f5279a4be7b60b64ceb1668b18560000151898984818110611f9957611f99614099565b90506101e0020161010001600260078110611fb657611fb6614099565b60200201358a8a85818110611fcd57611fcd614099565b90506101e0020161010001600460078110611fea57611fea614099565b60200201358b8b8681811061200157612001614099565b90506101e002016101000160056007811061201e5761201e614099565b60200201358c8c8781811061203557612035614099565b90506101e002016101000160066007811061205257612052614099565b60408051968752602087810196909652860193909352606085019190915291020135608082015260a00160405180910390a18061208e8161406c565b915050611e49565b50600042603954836120a89190614005565b86608001516001600160401b03166120c09190614046565b6120cc90610708614046565b10905086156121a8573688886120e3600182614059565b8181106120f2576120f2614099565b6001600160801b03871660c08a018190526001600160401b036101a06101e09390930294909401918201359390931660608a0152603554604051630de5dc4760e11b815260048101949094529093506001600160a01b031691631bcbb88e91506024016020604051808303816000875af1158015612174573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219891906140af565b6001600160401b03166040870152505b85806121b15750805b806121ba575086155b1561233957336000908152603b602090815260408083208390558751603f8352818420556001600160401b0342811660a08a0190815289518552603c84528285208a518155938a0151600185018054948c01518416600160a01b026001600160e01b03199095166001600160a01b03929092169190911793909317909255606089015160028401805460808c015194518416600160801b0267ffffffffffffffff60801b19958516600160401b026001600160801b0319928316949095169390931793909317939093161790915560c08801516003830180546001600160801b039092169190921617905560e087015160048201556101008701516005909101556122c36130a5565b90506122cd61276d565b85516040808801516060808a01518351948552602085018690526001600160401b03928316858501529190911690830152517f2138eea544e46359acf616a3cea69daedd6984f74feb71820c6c28e5cd25434c9181900360800190a16123338682613380565b506124a0565b83156123c25761010085015160e0860152612375888861235a600182614059565b81811061236957612369614099565b90506101e00201613525565b610100860181905285516040805133815260208101929092528101919091527fbba4da418095c3d5765f5f5ed38420089a123c3a2a44c71e2ae09bf6a33910509060600160405180910390a15b84516000908152603c60209081526040918290208751815590870151600182018054938901516001600160a01b039092166001600160e01b031990941693909317600160a01b6001600160401b039283160217909255606087015160028201805460808a015160a08b01519386166001600160801b031992831617600160401b918716919091021767ffffffffffffffff60801b1916600160801b93909516929092029390931790925560c08701516003820180549093166001600160801b039091161790915560e086015160048201556101008601516005909101555b5050505050505050565b60006124b581612d9e565b604051600090339084908381818185875af1925050503d80600081146124f7576040519150601f19603f3d011682016040523d82523d6000602084013e6124fc565b606091505b50509050806110d1576040516312171d8360e31b815260040160405180910390fd5b600091825260b3602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008083156125585783612560565b6125606130a5565b60008181526101526020908152604080832061015383528184206001600160a01b038916855290925290912080549293509091158061259e57508154155b156125af5760009350505050610d86565b603754604051631d83614f60e31b81526004810185905260009182916001600160a01b039091169063ec1b0a78906024016040805180830381865afa1580156125fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262091906140d8565b909250905060006126318284614046565b421161263d5742612647565b6126478284614046565b60018601546000888152604b6020526040812054929350916126699190614059565b90506000866002015460001461268d5760028701546126889084614059565b612697565b6126978584614059565b9050600087600201546000146126c55760028801546126b68688614046565b6126c09190614059565b6126c7565b845b9050806000036126e35760009950505050505050505050610d86565b6000816126f08486614005565b6126fa9190614032565b89549091506000906127118364e8d4a51000614005565b61271b9190614032565b8a6003015461272a9190614046565b9050886001015464e8d4a51000828b600001546127479190614005565b6127519190614032565b61275b9190614059565b9e9d5050505050505050505050505050565b61277561304c565b336000908152603f602052604081205490036127a45760405163374c934360e11b815260040160405180910390fd5b336000908152603f60209081526040808320548352603c82528083208151610120810183528154815260018201546001600160a01b0380821695830195909552600160a01b90046001600160401b039081168285015260028301548082166060840152600160401b810482166080840152600160801b90041660a082015260038201546001600160801b031660c0820181905260048084015460e0840152600590930154610100830152603554935163133696d560e11b8152928301529392919091169063266d2daa906024016020604051808303816000875af1158015612890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b491906140af565b905060006128c3826002614219565b336000908152603f602052604080822082905560345490516379d7c93960e11b81526001600160401b038416600482015292935090916001600160a01b039091169063f3af927290602401602060405180830381865afa15801561292b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294f9190614231565b6033549091506001600160a01b031615612aba5760345460405163043bb9cd60e21b8152600481018390526000916001600160a01b0316906310eee73490602401602060405180830381865afa1580156129ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d19190614231565b90508015612ab85760335460345460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303816000875af1158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a529190613f3a565b50603454604051634729074760e11b8152600481018490523360248201526001600160a01b0390911690638e520e8e90604401600060405180830381600087803b158015612a9f57600080fd5b505af1158015612ab3573d6000803e3d6000fd5b505050505b505b60006040518060c00160405280866060015161ffff16815260200186608001518760a00151612ae9919061424a565b62ffffff908116825260808881015164ffffffffff90811660208086019190915260c08b01516001600160801b039081166040808801919091523360608089018290528e5198870198909852603454825163370fd8b560e01b8152600481018d90526024810192909252895161ffff1660448301529389015190961660648701528701519092166084850152938501511660a48301528301516001600160a01b0390811660c483015260a084015160e483015292935091169063370fd8b59061010401600060405180830381600087803b158015612bc657600080fd5b505af1158015612bda573d6000803e3d6000fd5b505050505050505050612bec60018055565b565b600054610100900460ff1615808015612c0e5750600054600160ff909116105b80612c285750303b158015612c28575060005460ff166001145b612c445760405162461bcd60e51b8152600401610e9a90613eec565b6000805460ff191660011790558015612c67576000805461ff0019166101001790555b612c6f6135b0565b8015611255576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b612cc260003361251e565b158015612ce45750612ce26000805160206144038339815191523361251e565b155b15612d0257604051636caa20b560e11b815260040160405180910390fd5b6127108110612d2457604051631b2f151360e11b815260040160405180910390fd5b604d55565b600082815260b36020526040902060010154612d4481612d9e565b6110d18383612e55565b612d5960003361251e565b158015612d7b5750612d796000805160206144038339815191523361251e565b155b15612d9957604051636caa20b560e11b815260040160405180910390fd5b604c55565b61125581336135df565b600054610100900460ff16612bec5760405162461bcd60e51b8152600401610e9a90614271565b612dd9828261251e565b61117557600082815260b3602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612e113390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612e5f828261251e565b1561117557600082815260b3602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000612ec781612d9e565b6101498054906000612ed88361406c565b91905055505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612f14576110d183613638565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612f6e575060408051601f3d908101601f19168201909252612f6b91810190614231565b60015b612fd15760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610e9a565b6000805160206143bc83398151915281146130405760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610e9a565b506110d18383836136d4565b60026001540361309e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610e9a565b6002600155565b603754604051638371b1c560e01b81524260048201526000916001600160a01b031690638371b1c590602401602060405180830381865afa1580156130ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131129190614231565b905090565b60008181526101526020526040902060028101544211613135575050565b603754604051631d83614f60e31b81526004810184905260009182916001600160a01b039091169063ec1b0a78906024016040805180830381865afa158015613182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a691906140d8565b909250905060006131b78284614046565b42116131c357426131cd565b6131cd8284614046565b84549091506000036131e757600290930192909255505050565b60018401546000868152604b6020526040812054909161320691614059565b90506000856002015460001461322a5760028601546132259084614059565b613234565b6132348584614059565b9050600086600201546000146132625760028701546132538688614046565b61325d9190614059565b613264565b845b905080600003613278575050505050505050565b6000816132858486614005565b61328f9190614032565b9050848860020181905550808860010160008282546132ae9190614046565b90915550508754156132ee5787546132cb8264e8d4a51000614005565b6132d59190614032565b8860030160008282546132e89190614046565b90915550505b505050505050505050565b6033546001600160a01b03161561332e5761014a54341015612bec57604051636990f5e560e11b815260040160405180910390fd5b604c5461014a5461333f9190614046565b341015612bec57604051636990f5e560e11b815260040160405180910390fd5b8061014b60008282546133729190614046565b909155505050565b60018055565b61338981613117565b6000818152603d602090815260408083203384528252808320548352603c8252918290208251610120810184528154815260018201546001600160a01b038116938201939093526001600160401b03600160a01b90930483169381019390935260028101548083166060850152600160401b810483166080850152600160801b900490911660a083015260038101546001600160801b031660c0830152600481015460e08301526005015461010082015261344481846136ff565b1561344e57505050565b600082815261015260209081526040808320610153835281842033855290925280832084820151918701519293909290916134889161424a565b86516000878152603d6020908152604080832033845290915281209190915583546001600160401b0392909216925082918491906134c7908490614046565b9091555050600383015464e8d4a51000906134e29083614005565b6134ec9190614032565b8260010160008282546134ff9190614046565b9091555050825481908490600090613518908490614046565b9091555050505050505050565b6000807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000133613555600143614059565b60405160609290921b6bffffffffffffffffffffffff191660208301524060348201526101a085013560548201526074016040516020818303038152906040528051906020012060001c6135a99190614085565b9392505050565b600054610100900460ff166135d75760405162461bcd60e51b8152600401610e9a90614271565b612bec6138cb565b6135e9828261251e565b611175576135f6816138f2565b613601836020613904565b6040516020016136129291906142e0565b60408051601f198184030181529082905262461bcd60e51b8252610e9a91600401614355565b6001600160a01b0381163b6136a55760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610e9a565b6000805160206143bc83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6136dd83613a9f565b6000825111806136ea5750805b156110d1576136f98383613adf565b50505050565b60008083608001516001600160401b03168460a001516001600160401b03161161372a57600061373e565b83608001518460a0015161373e919061424a565b6001600160401b03169050600083608001516001600160401b03168460a001516001600160401b031611613773576000613787565b83608001518460a00151613787919061424a565b6001600160401b0316905083604001516001600160401b031685604001516001600160401b031611806137f7575083604001516001600160401b031685604001516001600160401b03161480156137f7575083606001516001600160401b031685606001516001600160401b0316105b8061384a575083604001516001600160401b031685604001516001600160401b031614801561383f575083606001516001600160401b031685606001516001600160401b0316145b801561384a57508082105b806138c2575083604001516001600160401b031685604001516001600160401b0316148015613892575083606001516001600160401b031685606001516001600160401b0316145b801561389d57508082145b80156138c257508360a001516001600160401b03168560a001516001600160401b0316105b95945050505050565b600054610100900460ff1661337a5760405162461bcd60e51b8152600401610e9a90614271565b6060610d866001600160a01b03831660145b60606000613913836002614005565b61391e906002614046565b6001600160401b0381111561393557613935613d8d565b6040519080825280601f01601f19166020018201604052801561395f576020820181803683370190505b509050600360fc1b8160008151811061397a5761397a614099565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106139a9576139a9614099565b60200101906001600160f81b031916908160001a90535060006139cd846002614005565b6139d8906001614046565b90505b6001811115613a50576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613a0c57613a0c614099565b1a60f81b828281518110613a2257613a22614099565b60200101906001600160f81b031916908160001a90535060049490941c93613a4981614388565b90506139db565b5083156135a95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e9a565b613aa881613638565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606135a983836040518060600160405280602781526020016143dc602791396060600080856001600160a01b031685604051613b1c919061439f565b600060405180830381855af49150503d8060008114613b57576040519150601f19603f3d011682016040523d82523d6000602084013e613b5c565b606091505b5091509150613b6d86838387613b77565b9695505050505050565b60608315613be6578251600003613bdf576001600160a01b0385163b613bdf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e9a565b5081613bf0565b613bf08383613bf8565b949350505050565b815115613c085781518083602001fd5b8060405162461bcd60e51b8152600401610e9a9190614355565b600060208284031215613c3457600080fd5b5035919050565b600060208284031215613c4d57600080fd5b81356001600160e01b0319811681146135a957600080fd5b6001600160a01b038116811461125557600080fd5b600060208284031215613c8c57600080fd5b81356135a981613c65565b600080600080600060a08688031215613caf57600080fd5b8535613cba81613c65565b94506020860135613cca81613c65565b93506040860135613cda81613c65565b92506060860135613cea81613c65565b91506080860135613cfa81613c65565b809150509295509295909350565b60008060408385031215613d1b57600080fd5b823591506020830135613d2d81613c65565b809150509250929050565b60008060408385031215613d4b57600080fd5b50508035926020909101359150565b801515811461125557600080fd5b60008060408385031215613d7b57600080fd5b823591506020830135613d2d81613d5a565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215613db657600080fd5b8235613dc181613c65565b915060208301356001600160401b0380821115613ddd57600080fd5b818501915085601f830112613df157600080fd5b813581811115613e0357613e03613d8d565b604051601f8201601f19908116603f01168101908382118183101715613e2b57613e2b613d8d565b81604052828152886020848701011115613e4457600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600060408486031215613e7b57600080fd5b83356001600160401b0380821115613e9257600080fd5b818601915086601f830112613ea657600080fd5b813581811115613eb557600080fd5b8760206101e083028501011115613ecb57600080fd5b60209283019550935050840135613ee181613d5a565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600060208284031215613f4c57600080fd5b81516135a981613d5a565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d8657610d86613fef565b634e487b7160e01b600052601260045260246000fd5b6000826140415761404161401c565b500490565b80820180821115610d8657610d86613fef565b81810381811115610d8657610d86613fef565b60006001820161407e5761407e613fef565b5060010190565b6000826140945761409461401c565b500690565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156140c157600080fd5b81516001600160401b03811681146135a957600080fd5b600080604083850312156140eb57600080fd5b505080516020909101519092909150565b600181815b8085111561413c57816001600160401b030482111561412257614122613fef565b8085161561412f57918102915b93841c9390800290614101565b509250929050565b60008261415357506001610d86565b8161416057506000610d86565b81600181146141765760028114614180576141b4565b6001915050610d86565b60ff84111561419157614191613fef565b6001841b91506001600160401b038211156141ae576141ae613fef565b50610d86565b5060208310610133831016604e8410600b84101617156141ee575081810a6001600160401b038111156141e9576141e9613fef565b610d86565b6141f883836140fc565b806001600160401b030482111561421157614211613fef565b029392505050565b60006001600160401b03613bf0818516828516614144565b60006020828403121561424357600080fd5b5051919050565b6001600160401b0382811682821603908082111561426a5761426a613fef565b5092915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b838110156142d75781810151838201526020016142bf565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516143188160178501602088016142bc565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516143498160288401602088016142bc565b01602801949350505050565b60208152600082518060208401526143748160408501602087016142bc565b601f01601f19169190910160400192915050565b60008161439757614397613fef565b506000190190565b600082516143b18184602087016142bc565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564d8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63a26469706673582212205ac72f057450badd396e53be5a2dcf257a583ae7852b0c7fc3d6b7f9125e70ce64736f6c63430008140033" + }, + { + "address": "0xe93685f3bba03016f02bd1828badd6195988d950", + "nonce": 1423783, + "balance": "0x000000000000000000000000000000000000000000000001a687d3f6c7967323", + "code": "0x" + }, + { + "address": "0x704c442bfef3b6b31559085fc67083ca64e30b5c", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061015f5760003560e01c80630dfe168114610164578063128acb081461018857806317e25b3c146102355780631a68650214610256578063289fe9b01461027a57806329047dfa1461029f578063490e6cbc146102a75780634f1eb3d814610331578063514ea4bf146103b15780636378ae441461041657806370cf754a14610430578063713346941461043857806374eceae6146104d55780637c1fe0c814610551578063920c34e5146105775780639d3a5241146105d2578063a34123a714610763578063aafe29c01461079d578063c45a01551461086f578063c677e3e014610877578063d0c93a7c14610897578063d21220a7146108b6578063e76c01e4146108be578063ecdecf4214610916578063f085a6101461091e578063f0b9cf591461093e578063f30dba9314610967578063f637731d146109e9578063facb0eb114610a0f575b600080fd5b61016c610a17565b604080516001600160a01b039092168252519081900360200190f35b61021c600480360360a081101561019e57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a081016080820135600160201b8111156101de57600080fd5b8201836020820111156101f057600080fd5b803590602001918460018302840111600160201b8311171561021157600080fd5b509092509050610a3b565b6040805192835260208301919091528051918290030190f35b61023d610c79565b6040805163ffffffff9092168252519081900360200190f35b61025e610c85565b604080516001600160801b039092168252519081900360200190f35b61029d6004803603602081101561029057600080fd5b503563ffffffff16610c94565b005b61016c610da8565b61029d600480360360808110156102bd57600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156102f357600080fd5b82018360208201111561030557600080fd5b803590602001918460018302840111600160201b8311171561032657600080fd5b509092509050610dcc565b610382600480360360a081101561034757600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611254565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6103ce600480360360208110156103c757600080fd5b5035611452565b604080516001600160801b03978816815263ffffffff90961660208701528581019490945260608501929092528416608084015290921660a082015290519081900360c00190f35b61041e61149b565b60408051918252519081900360200190f35b61025e6114a1565b61021c600480360360c081101561044e57600080fd5b6001600160a01b0382358116926020810135821692604082013515159260608301359260808101359091169181019060c0810160a0820135600160201b81111561049757600080fd5b8201836020820111156104a957600080fd5b803590602001918460018302840111600160201b831117156104ca57600080fd5b5090925090506114b3565b6104f2600480360360208110156104eb57600080fd5b50356117b5565b60408051971515885263ffffffff909616602088015260069490940b868601526001600160a01b0390921660608601526001600160581b0316608085015260020b60a08401526001600160901b031660c0830152519081900360e00190f35b61029d6004803603602081101561056757600080fd5b50356001600160a01b0316611886565b6105a16004803603604081101561058d57600080fd5b508035600290810b9160200135900b611975565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b610640600480360360208110156105e857600080fd5b810190602081018135600160201b81111561060257600080fd5b82018360208201111561061457600080fd5b803590602001918460208302840111600160201b8311171561063557600080fd5b509092509050611c2c565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b8381101561068c578181015183820152602001610674565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156106cb5781810151838201526020016106b3565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561070a5781810151838201526020016106f2565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015610749578181015183820152602001610731565b505050509050019850505050505050505060405180910390f35b61021c6004803603606081101561077957600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316611f91565b610848600480360360c08110156107b357600080fd5b6001600160a01b0382358116926020810135909116916040820135600290810b92606081013590910b916001600160801b03608083013516919081019060c0810160a0820135600160201b81111561080a57600080fd5b82018360208201111561081c57600080fd5b803590602001918460018302840111600160201b8311171561083d57600080fd5b5090925090506121d1565b6040805193845260208401929092526001600160801b031682820152519081900360600190f35b61016c6127a7565b61041e6004803603602081101561088d57600080fd5b503560010b6127cb565b61089f6127dd565b6040805160029290920b8252519081900360200190f35b61016c6127ed565b6108c6612811565b604080516001600160a01b03909816885260029690960b602088015261ffff948516878701529284166060870152908316608086015290911660a0840152151560c0830152519081900360e00190f35b61041e612864565b61029d6004803603602081101561093457600080fd5b503560020b61286a565b61029d6004803603604081101561095457600080fd5b5061ffff81358116916020013516612a4f565b6109876004803603602081101561097d57600080fd5b503560020b612bf1565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b61029d600480360360208110156109ff57600080fd5b50356001600160a01b0316612c5b565b61016c612ecd565b7f0000000000000000000000007d43aabc515c356145049227cee54b608342c0ad81565b600080600080600080610a4f8b8b8b612ee3565b949a509298509096509450925090508a15610b04576000851215610a9b57610a9b7f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b938d876000036137c5565b6000610aa5613913565b9050610ab387878b8b6139b3565b610abb613913565b610ac58289613a53565b1115610afe576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50610ba0565b6000861215610b3b57610b3b7f0000000000000000000000007d43aabc515c356145049227cee54b608342c0ad8d886000036137c5565b6000610b45613a69565b9050610b5387878b8b6139b3565b610b5b613a69565b610b658288613a53565b1115610b9e576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b8015610bfc57610bfc8b610bd4577f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93610bf6565b7f0000000000000000000000007d43aabc515c356145049227cee54b608342c0ad5b82613ad8565b60408051878152602081018790526001600160a01b03868116828401526001600160801b0385166060830152600286900b60808301529151918e16913391600080516020615824833981519152919081900360a00190a35050600280546001600160f81b0316600160f81b17905550919890975095505050505050565b60045463ffffffff1681565b6003546001600160801b031681565b7f000000000000000000000000622b2c98123d303ae067db4925cd6282b3a08d0f6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ced57600080fd5b505afa158015610d01573d6000803e3d6000fd5b505050506040513d6020811015610d1757600080fd5b50516001600160a01b03163314610d2d57600080fd5b6201518063ffffffff821611801590610d51575060045463ffffffff828116911614155b610d5a57600080fd5b6004805463ffffffff831663ffffffff19909116811790915560408051918252517fb5e51602371b0e74f991b6e965cd7d32b4b14c7e6ede6d1298037650a0e1405f9181900360200190a150565b7f0000000000000000000000009d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec81565b600254600160f81b900460ff16610e10576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b600280546001600160f81b031690556003546001600160801b031680610e61576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b600254600160b81b900461ffff16600080610e7a613913565b90508715610ec157610e94888461ffff16620f4240613b71565b9150610ec17f0000000000000000000000007d43aabc515c356145049227cee54b608342c0ad8a8a6137c5565b600080610ecc613a69565b90508815610f1357610ee6898661ffff16620f4240613b71565b9150610f137f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b938c8b6137c5565b336001600160a01b031663a60b0d3c85848b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015610f9557600080fd5b505af1158015610fa9573d6000803e3d6000fd5b5050505060007f000000000000000000000000622b2c98123d303ae067db4925cd6282b3a08d0f6001600160a01b031663430bf08a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561100857600080fd5b505afa15801561101c573d6000803e3d6000fd5b505050506040513d602081101561103257600080fd5b505190506000611040613913565b90508061104d8688613a53565b1115611085576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b849003801561110157600254600160d81b900461ffff16600081156110db57506103e861ffff82168302046110db7f0000000000000000000000007d43aabc515c356145049227cee54b608342c0ad85836137c5565b6110f5818403600160801b8c6001600160801b0316613be6565b60008054909101905550505b600061110b613a69565b9050806111188587613a53565b1115611150576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b83900380156111cc57600254600160e81b900461ffff16600081156111a657506103e861ffff82168302046111a67f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b9386836137c5565b6111c0818403600160801b8d6001600160801b0316613be6565b60018054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050600280546001600160f81b0316600160f81b179055505050505050505050505050565b6002546000908190600160f81b900460ff1661129d576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b600280546001600160f81b0316905560006112b9338888613c7c565b60038101549091506001600160801b0380821691600160801b9004811690871682106112e557866112e7565b815b9450806001600160801b0316866001600160801b031611611308578561130a565b805b93506001600160801b0385851716156113ce576003830180546001600160801b0319168684036001600160801b03908116919091178116600160801b8785038316021790915585161561138b5761138b7f0000000000000000000000007d43aabc515c356145049227cee54b608342c0ad8b876001600160801b03166137c5565b6001600160801b038416156113ce576113ce7f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b938b866001600160801b03166137c5565b604080516001600160a01b038c1681526001600160801b038088166020830152861681830152905160028a810b92908c900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a45050600280546001600160f81b0316600160f81b1790555090969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b038084169463ffffffff600160801b9586900416949092808316929190041686565b60005481565b6d09745258e83de0d0f4e400fce79990565b6002546000908190600160f81b900460ff166114fc576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b600280546001600160f81b03169055861561157f57600061151b613913565b905061152a87600087876139b3565b600061153e82611538613913565b90613ca0565b97508713611579576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b506115e3565b6000611589613a69565b905061159860008887876139b3565b60006115a682611538613a69565b975087136115e1576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b600280546001600160f81b0316600160f81b17905560008080806116088b8b8b612ee3565b949a509298509096509450925090508a15611695576000851215611654576116547f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b938d876000036137c5565b89861215611690576116907f0000000000000000000000007d43aabc515c356145049227cee54b608342c0ad8e61168b8d8a613cb0565b6137c5565b611703565b60008612156116cc576116cc7f0000000000000000000000007d43aabc515c356145049227cee54b608342c0ad8d886000036137c5565b89851215611703576117037f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b938e61168b8d89613cb0565b8015611737576117378b610bd4577f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93610bf6565b60408051878152602081018790526001600160a01b03868116828401526001600160801b0385166060830152600286900b60808301529151918e16913391600080516020615824833981519152919081900360a00190a35050600280546001600160f81b0316600160f81b1790555091999098509650505050505050565b60008060008060008060007f0000000000000000000000009d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec6001600160a01b03166374eceae6896040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b15801561182457600080fd5b505afa158015611838573d6000803e3d6000fd5b505050506040513d60e081101561184e57600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949e939d50919b50995097509195509350915050565b7f000000000000000000000000622b2c98123d303ae067db4925cd6282b3a08d0f6001600160a01b0316638a2ade586040518163ffffffff1660e01b815260040160206040518083038186803b1580156118df57600080fd5b505afa1580156118f3573d6000803e3d6000fd5b505050506040513d602081101561190957600080fd5b50516001600160a01b0316331461191f57600080fd5b60048054600160201b600160c01b031916600160201b6001600160a01b038416908102919091179091556040517f915c5369e6580733735d1c2e30ca20dcaa395697a041033c9f35f80f53525e8490600090a250565b600080808484620d89e9600282900b126119bc576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b8160020b8160020b136119fc576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e819600283900b13611a3e576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b611a46615754565b600288810b900b6000908152600560209081526040918290206003810154600160d81b810463ffffffff1693850193909352600160381b83046001600160a01b031691840191909152600682810b810b900b835290600160f81b900460ff16611aae57600080fd5b50611ab7615754565b600288810b900b6000908152600560209081526040918290206003810154600160d81b810463ffffffff1693850193909352600160381b83046001600160a01b031691840191909152600682810b810b900b835290600160f81b900460ff16611b1f57600080fd5b5060028054600160a01b8104820b91600160c81b90910461ffff16908b810b9083900b1215611b785782600001518460000151038360200151856020015103846040015186604001510398509850985050505050611c23565b8960020b8260020b1215611bf7576000611b90613cc6565b9050600080611bb88360008787600360009054906101000a90046001600160801b0316613cca565b5050915091508560000151876000015183030386602001518860200151830303876040015189604001518603039b509b509b5050505050505050611c23565b836000015183600001510384602001518460200151038560400151856040015103985098509850505050505b50509250925092565b6060806060807f0000000000000000000000009d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec6001600160a01b031663fd31e988611c69613cc6565b6002805460035460405160e086901b6001600160e01b031916815263ffffffff851660048201908152600160a01b8404850b9485900b6044830152600160c81b90930461ffff16606482018190526001600160801b039092166084820181905260a06024830190815260a483018e90528e958e9590949390919060c401876020880280828437600081840152601f19601f82011690508083019250505097505050505050505060006040518083038186803b158015611d2757600080fd5b505afa158015611d3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526080811015611d6457600080fd5b8101908080516040519392919084600160201b821115611d8357600080fd5b908301906020820185811115611d9857600080fd5b82518660208202830111600160201b82111715611db457600080fd5b82525081516020918201928201910280838360005b83811015611de1578181015183820152602001611dc9565b5050505090500160405260200180516040519392919084600160201b821115611e0957600080fd5b908301906020820185811115611e1e57600080fd5b82518660208202830111600160201b82111715611e3a57600080fd5b82525081516020918201928201910280838360005b83811015611e67578181015183820152602001611e4f565b5050505090500160405260200180516040519392919084600160201b821115611e8f57600080fd5b908301906020820185811115611ea457600080fd5b82518660208202830111600160201b82111715611ec057600080fd5b82525081516020918201928201910280838360005b83811015611eed578181015183820152602001611ed5565b5050505090500160405260200180516040519392919084600160201b821115611f1557600080fd5b908301906020820185811115611f2a57600080fd5b82518660208202830111600160201b82111715611f4657600080fd5b82525081516020918201928201910280838360005b83811015611f73578181015183820152602001611f5b565b50505050905001604052505050935093509350935092959194509250565b6002546000908190600160f81b900460ff16611fda576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b600280546001600160f81b0316815585908590620d89e99082900b1261202d576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b8160020b8160020b1361206d576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e819600283900b136120af576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b60008060006120d4338b8b6120cc8c6001600160801b0316613dba565b600003613dd0565b925092509250816000039650806000039550858717600014612155576003830154612108906001600160801b0316886140a6565b600384015461212790600160801b90046001600160801b0316886140a6565b6003850180546001600160801b03938416928416600160801b029316929092176001600160801b0319161790555b604080516001600160801b038a16815260208101899052808201889052905160028b810b92908d900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a45050600280546001600160f81b0316600160f81b179055509296919550909350505050565b60025460009081908190600160f81b900460ff1661221c576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b600280546001600160f81b0316815588908890620d89e99082900b1261226f576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b8160020b8160020b136122af576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e819600283900b136122f1576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b6000886001600160801b031611612334576040805162461bcd60e51b8152602060048201526002602482015261125360f21b604482015290519081900360640190fd5b600454600160c01b9004600290810b9081810b908b900b8161235257fe5b078160020b8c60020b8161236257fe5b071760020b156123ae576040805162461bcd60e51b81526020600482015260126024820152711d1a58dac81a5cc81b9bdd081cdc1858d95960721b604482015290519081900360640190fd5b506000806123e68c8c6123c98d6001600160801b0316613dba565b60028054600160a01b810490910b906001600160a01b03166140c2565b50909750955060009150819050861561240457612401613913565b91505b851561241557612412613a69565b90505b336001600160a01b0316633dd657c588888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561249757600080fd5b505af11580156124ab573d6000803e3d6000fd5b505050506000871115612502576000826124c3613913565b0392508211612502576040805162461bcd60e51b815260206004808301919091526024820152634949414d60e01b604482015290519081900360640190fd5b851561255257600081612513613a69565b0391508111612552576040805162461bcd60e51b815260206004808301919091526024820152634949414d60e01b604482015290519081900360640190fd5b89945086821015612574576125718a6001600160801b03168389613be6565b94505b858110156125b45760006125928b6001600160801b03168389613be6565b9050856001600160801b0316816001600160801b031610156125b2578095505b505b6000856001600160801b0316116125fb576040805162461bcd60e51b8152602060048083019190915260248201526324a4a61960e11b604482015290519081900360640190fd5b60008061261b8f8f8f6126168b6001600160801b0316613dba565b613dd0565b925092505083829950891115612660576040805162461bcd60e51b815260206004820152600560248201526424a4a0a69960d91b604482015290519081900360640190fd5b828198508811156126a0576040805162461bcd60e51b815260206004820152600560248201526424a4a0a69960d91b604482015290519081900360640190fd5b5050868211156126d7576126d77f0000000000000000000000007d43aabc515c356145049227cee54b608342c0ad8f8985036137c5565b8581111561270c5761270c7f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b938f8884036137c5565b8a60020b8c60020b8e6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde33898c8c60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a45050600280546001600160f81b0316600160f81b17905550929a919950975095505050505050565b7f000000000000000000000000622b2c98123d303ae067db4925cd6282b3a08d0f81565b60066020526000908152604090205481565b600454600160c01b900460020b81565b7f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b9381565b600280546001600160a01b03811691600160a01b8204900b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204811691600160e81b81049091169060ff600160f81b9091041687565b60015481565b600254600160f81b900460ff166128ae576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b600280546001600160f81b0316905560408051638da5cb5b60e01b815290516001600160a01b037f000000000000000000000000622b2c98123d303ae067db4925cd6282b3a08d0f1691638da5cb5b916004808301926020929190829003018186803b15801561291d57600080fd5b505afa158015612931573d6000803e3d6000fd5b505050506040513d602081101561294757600080fd5b50516001600160a01b0316331461295d57600080fd5b60008160020b13801561297657506101f4600282900b13155b80156129945750600454600282810b600160c01b909204810b900b14155b6129de576040805162461bcd60e51b8152602060048201526016602482015275496e76616c6964206e65775469636b53706163696e6760501b604482015290519081900360640190fd5b60048054600283900b62ffffff8116600160c01b0262ffffff60c01b199092169190911790915560408051918252517f01413b1d5d4c359e9a0daa7909ecda165f6e8c51fe2ff529d74b22a5a7c026459181900360200190a150600280546001600160f81b0316600160f81b179055565b600254600160f81b900460ff16612a93576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b600280546001600160f81b0316905560408051638da5cb5b60e01b815290516001600160a01b037f000000000000000000000000622b2c98123d303ae067db4925cd6282b3a08d0f1691638da5cb5b916004808301926020929190829003018186803b158015612b0257600080fd5b505afa158015612b16573d6000803e3d6000fd5b505050506040513d6020811015612b2c57600080fd5b50516001600160a01b03163314612b4257600080fd5b6103e861ffff831611801590612b5e57506103e861ffff821611155b612b6757600080fd5b6002805461ffff60e81b1916600160e81b61ffff8481169182029290921761ffff60d81b1916600160d81b9286169283021790925560408051918252602082019290925281517f370966829959865419a97fc8708e1d348a92142c2cfec7299e264677970174bc929181900390910190a15050600280546001600160f81b0316600160f81b179055565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b90600160381b81046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6002546001600160a01b031615612c9e576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612ca98261415a565b905060007f000000000000000000000000622b2c98123d303ae067db4925cd6282b3a08d0f6001600160a01b0316632f8a39dd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d0657600080fd5b505afa158015612d1a573d6000803e3d6000fd5b505050506040513d6020811015612d3057600080fd5b505190506000612d3e613cc6565b90507f0000000000000000000000009d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec6001600160a01b031663475fb80c82856040518363ffffffff1660e01b8152600401808363ffffffff1681526020018260020b815260200192505050600060405180830381600087803b158015612db757600080fd5b505af1158015612dcb573d6000803e3d6000fd5b5050505083600260000160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816002600001601b6101000a81548161ffff021916908361ffff160217905550816002600001601d6101000a81548161ffff021916908361ffff16021790555060016002600001601f6101000a81548160ff02191690831515021790555082600260000160146101000a81548162ffffff021916908360020b62ffffff1602179055507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95848460405180836001600160a01b031681526020018260020b81526020019250505060405180910390a150505050565b600454600160201b90046001600160a01b031681565b6000806000806000806000612ef6615774565b6002805461ffff600160b81b82048116610160850152600160c81b820481166101a08501526001600160f81b03821683556001600160a01b0382169850600160a01b820490920b9650600160d81b8104821691600160e81b8204169060ff600160f81b9091041680612f95576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b8c612fcc576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b60008d1361014085015260a084018d90526003546001600160801b03600160801b8204811660208701521696508d1561307457886001600160a01b03168c6001600160a01b031610801561302d57506401000276a36001600160a01b038d16115b613064576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b60005460e08501528284526130f4565b886001600160a01b03168c6001600160a01b03161180156130b1575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038d16105b6130e8576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b60015460e08501528184525b600288810b900b610180850152613109613cc6565b600454909550600160201b90046001600160a01b03161561321f57600060048054906101000a90046001600160a01b03166001600160a01b0316637f376059876040518263ffffffff1660e01b8152600401808263ffffffff168152602001915050602060405180830381600087803b15801561318557600080fd5b505af1158015613199573d6000803e3d6000fd5b505050506040513d60208110156131af57600080fd5b5051905060008160028111156131c157fe5b14156131df5760048054600160201b600160c01b031916905561321d565b60018160028111156131ed57fe5b141561320057600161012086015261321d565b600281600281111561320e57fe5b141561321d5760026101208601525b505b600061323c856101a00151878761018001518b8960200151614445565b9050846101a0015161ffff168161ffff161461327b5761ffff81166101a086015260006020860152613270868a838b614519565b61ffff166101608601525b505050506132876157e5565b6001600160a01b038716815261329f6006878e61461b565b15156040830152600290810b900b602082018190526132bd90614704565b6001600160a01b03908116606083018190526132fb918e918a918e1611821515146132ec5783606001516132ee565b8c5b888f876101600151614a1e565b60c085015260a08401526080830152610140830151909750156133545761332b8160c00151826080015101614be2565b8b039a5061334a61333f8260a00151614be2565b60c084015190613cb0565b60c083015261338c565b6133618160a00151614be2565b8b019a5061338661337b8260c00151836080015101614be2565b60c084015190614bf8565b60c08301525b8151156133c857815160c08201516000916103e8916133aa91614c0e565b816133b157fe5b60c084018051929091049182900390529490940193505b6001600160801b038516156133ff576133f38160c00151600160801b876001600160801b0316613be6565b60e08301805190910190525b80606001516001600160a01b0316876001600160a01b031614156135c6578060400151156135a757816080015161348357613448836000846101800151856101a0015189613cca565b50506001600160a01b03166060840152600690810b900b6040830152600160808301528b6134785760005461347c565b6001545b6101008301525b6000826101200151600281111561349657fe5b1461351e5760048054906101000a90046001600160a01b03166001600160a01b03166301342b1982602001518e6040518363ffffffff1660e01b8152600401808360020b8152602001821515815260200192505050600060405180830381600087803b15801561350557600080fd5b505af1158015613519573d6000803e3d6000fd5b505050505b60008c156135635761355982602001518460e0015185610100015186606001518760400151896005614c32909695949392919063ffffffff16565b6000039050613599565b61359682602001518461010001518560e0015186606001518760400151896005614c32909695949392919063ffffffff16565b90505b6135a38682614ce6565b9550505b8b6135b65780602001516135bf565b60018160200151035b95506135ea565b80516001600160a01b038881169116146135ea576135e38761415a565b9550613617565b8a15806136085750896001600160a01b0316876001600160a01b0316145b1561361257613617565b613287565b81610140015115158c151514613638578160c001518b8360a0015103613645565b8a8260a00151038260c001515b6101608401516101a08501516002805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b92909316919091029190911762ffffff60a01b1916600160a01b62ffffff8b840b1602176001600160a01b0319166001600160a01b038b81169190911790915560408051631b7297f760e11b81526001600160801b038a16600482015260248101859052604481018490529051939c50919a5087927f0000000000000000000000009d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec909116916336e52fee916064808301926020929190829003018186803b15801561373657600080fd5b505afa15801561374a573d6000803e3d6000fd5b505050506040513d602081101561376057600080fd5b50516020840151600380546001600160801b03948516929093018416600160801b0293909216929092176001600160801b0319169190911790558b156137ad5760e08201516000556137b6565b60e08201516001555b50505093975093979195509350565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b602083106138415780518252601f199092019160209182019101613822565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146138a3576040519150601f19603f3d011682016040523d82523d6000602084013e6138a8565b606091505b50915091508180156138d65750805115806138d657508080602001905160208110156138d357600080fd5b50515b61390c576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b60007f0000000000000000000000007d43aabc515c356145049227cee54b608342c0ad6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561398257600080fd5b505afa158015613996573d6000803e3d6000fd5b505050506040513d60208110156139ac57600080fd5b5051905090565b336001600160a01b0316632c8958f6858585856040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015613a3557600080fd5b505af1158015613a49573d6000803e3d6000fd5b5050505050505050565b80820182811015613a6357600080fd5b92915050565b60007f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b936001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561398257600080fd5b60007f000000000000000000000000622b2c98123d303ae067db4925cd6282b3a08d0f6001600160a01b031663430bf08a6040518163ffffffff1660e01b815260040160206040518083038186803b158015613b3357600080fd5b505afa158015613b47573d6000803e3d6000fd5b505050506040513d6020811015613b5d57600080fd5b50519050613b6c8382846137c5565b505050565b6000831580613b8c57505082820282848281613b8957fe5b04145b15613bad5760008211613b9e57600080fd5b81810490829006151501613bdf565b613bb8848484613be6565b905060008280613bc457fe5b8486091115613bdf576000198110613bdb57600080fd5b6001015b9392505050565b60008383028160001985870982811083820303915050808411613c0857600080fd5b80613c1857508290049050613bdf565b8385870960008581038616958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030291819003819004600101858411909403939093029190930391909104170290509392505050565b62ffffff9081169116601892831b1790911b17600090815260076020526040902090565b80820382811115613a6357600080fd5b80820382811315600083121514613a6357600080fd5b4290565b604080516314c5407960e01b815263ffffffff808816600483015286166024820152600285900b604482015261ffff841660648201526001600160801b038316608482015290516000918291829182916001600160a01b037f0000000000000000000000009d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec16916314c540799160a4808301926080929190829003018186803b158015613d6a57600080fd5b505afa158015613d7e573d6000803e3d6000fd5b505050506040513d6080811015613d9457600080fd5b50805160208201516040830151606090930151919c909b50919950975095505050505050565b80600f81900b8114613dcb57600080fd5b919050565b60408051606081018252600280546001600160a01b0381168352600160a01b8104820b90910b6020830152600160c81b900461ffff169181019190915260009081908190613e1f888888613c7c565b60008054600154929650919080600f89900b15613ee6576000613e40613cc6565b9050600080613e708360008a602001518b60400151600360009054906101000a90046001600160801b0316613cca565b505091509150613e9f8e89602001518e8a8a86888a60006005614d9c909998979695949392919063ffffffff16565b15613eb35760019450613eb360068f614f36565b6020880151613ece906005908f908f8b8b87898b6001614d9c565b15613ee25760019350613ee260068e614f36565b5050505b60208501516000908190613f02906005908f908f908a8a614f62565b91509150613f128a8c8484615004565b8a600f0b6000146140955760008b600f0b1215613f8d578315613f5b5760028d810b810b6000908152600560205260408120818155600181018290559182018190556003909101555b8215613f8d5760028c810b810b6000908152600560205260408120818155600181018290559182018190556003909101555b6000613fa48e8e8e8b602001518c600001516140c2565b919b5099509050600f81900b156140935760035460408901516001600160801b0390911690600090613ff790613fd8613cc6565b60208d01516003548690600160801b90046001600160801b0316614445565b90508061ffff168a6040015161ffff161461406657614023614017613cc6565b8b602001518385614519565b6002805461ffff60b81b1916600160b81b61ffff938416021761ffff60c81b1916600160c81b92841692909202919091179055600380546001600160801b031690555b614070828f614ce6565b600380546001600160801b0319166001600160801b039290921691909117905550505b505b505050505050509450945094915050565b8082016001600160801b038084169082161015613a6357600080fd5b60008060008760020b8560020b12156140f7576140f06140e189614704565b6140ea89614704565b886151e2565b925061414f565b8660020b8560020b121561413157614112846140ea89614704565b925061412761412089614704565b8588615227565b915085905061414f565b61414c61413d89614704565b61414689614704565b88615227565b91505b955095509592505050565b60006401000276a36001600160a01b03831610801590614196575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6141cb576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b600160201b600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061425d57607f810383901c9150614267565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c6001603f1b161760c19b909b1c6001603e1b169a909a1760c29990991c6001603d1b169890981760c39790971c6001603c1b169690961760c49590951c6001603b1b169490941760c59390931c6001603a1b169290921760c69190911c600160391b161760c79190911c600160381b161760c89190911c600160371b161760c99190911c600160361b161760ca9190911c600160351b161760cb9190911c600160341b161760cc9190911c600160331b161760cd9190911c600160321b1617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461443657886001600160a01b031661441a82614704565b6001600160a01b0316111561442f5781614431565b805b614438565b815b9998505050505050505050565b60408051630eea437960e11b815261ffff8716600482015263ffffffff86166024820152600285900b60448201526001600160801b0380851660648301528316608482015290516000916001600160a01b037f0000000000000000000000009d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec1691631dd486f29160a48082019260209290919082900301818787803b1580156144e157600080fd5b505af11580156144f5573d6000803e3d6000fd5b505050506040513d602081101561450b57600080fd5b505190505b95945050505050565b6040805163c53a182f60e01b815263ffffffff86166004820152600285900b602482015261ffff841660448201526001600160801b038316606482015290516000916001600160a01b037f0000000000000000000000009d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec169163c53a182f91608480820192602092909190829003018186803b1580156145ac57600080fd5b505afa1580156145c0573d6000803e3d6000fd5b505050506040513d60208110156145d657600080fd5b50516040805161ffff8316815290519192507f598b9f043c813aa6be3426ca60d1c65d17256312890be5118dab55b0775ebe2a919081900360200190a1949350505050565b600080821561469b57600884901c600181810b900b60009081526020879052604090205460ff868116918282039091161b801561467c5761465b81615257565b60ff0360ff168703965061466e8761529a565b6001945094505050506146fc565b8160ff168703965061468d8761529a565b6000945094505050506146fc565b6001938401600881901c80860b90950b60009081526020879052604090205490949060ff861690811c80156146e8576146d88182600003166152cf565b60ff168701965061466e8761529a565b8160ff0360ff168701965061468d8761529a565b935093915050565b6000600282810b60171d90818418829003900b620d89e8811115614753576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661476757600160801b614779565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b0316905060028216156147a3576ffff97272373d413259a46990580e213a0260801c5b60048216156147c2576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156147e1576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615614800576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561481f576fff973b41fa98c081472e6896dfb254c00260801c5b604082161561483e576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561485d576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561487d576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561489d576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156148bd576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156148dd576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156148fd576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561491d576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561493d576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561495d576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561497e576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561499e576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156149bd576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156149da576b048a170391f7dc42444e8fa20260801c5b60008560020b13156149f55780600019816149f157fe5b0490505b600160201b810615614a08576001614a0b565b60005b60ff16602082901c019350505050919050565b6000806000806158218a614a34576153e3614a38565b6153f25b905060008712614b24576000614a60888861ffff16620f42400362ffffff16620f4240613be6565b9050614a718a8c8b8563ffffffff16565b9450848110614a9e57899550614a978561ffff891662ffffff620f424082900316613b71565b9250614afd565b614aaa8b8a838f615401565b9550856001600160a01b03168a6001600160a01b031614614ae057614ad4868c8b8563ffffffff16565b94508488039250614afd565b614afa8561ffff891662ffffff620f424082900316613b71565b92505b614b1c868c8b8f614b1057615411614b14565b6154205b63ffffffff16565b935050614bd4565b6158218b614b3457615411614b38565b6154205b9050614b498a8c8b8463ffffffff16565b9350876000039750838810614b6057899550614ba5565b614b6c8b8a8a8f61542f565b9550856001600160a01b03168a6001600160a01b031614614b9957614b96868c8b8463ffffffff16565b93505b87841115614ba5578793505b614bb4868c8b8563ffffffff16565b9450614bd08561ffff891662ffffff620f424082900316613b71565b9250505b509650965096509692505050565b6000600160ff1b8210614bf457600080fd5b5090565b81810182811215600083121514613a6357600080fd5b6000821580614c2957505081810281838281614c2657fe5b04145b613a6357600080fd5b600286810b810b60009081526020899052604090206003810180546001600160a01b03600160381b63ffffffff600160d81b808504821689039091160263ffffffff60d81b199093169290921782810482168903909116909102600160381b600160d81b031990911617600681810b8703900b66ffffffffffffff1666ffffffffffffff199091161790559081018054860390556001810180548703905554600160801b9004600f0b979650505050505050565b60008082600f0b1215614d4b57826001600160801b03168260000384039150816001600160801b031610614d46576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b613a63565b826001600160801b03168284019150816001600160801b03161015613a63576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b600289810b900b600090815260208b9052604081208054600160801b8104600f0b906001600160801b031683614dd2828d614ce6565b90506d09745258e83de0d0f4e400fce79a6001600160801b03821610614e24576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b85614e4757614e42614e3d600f85810b908f900b614bf8565b613dba565b614e5b565b614e5b614e3d600f85810b908f900b613cb0565b84546001600160801b03838116600f9390930b8116600160801b02918116919091176001600160801b03191682178655901595508216614f2457841594508c60020b8e60020b13614f0c57600184018b9055600284018a9055600384018054600160381b600160d81b031916600160381b6001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003840180546001600160f81b0316600160f81b1790555b505050509a9950505050505050505050565b600881901c600190810b810b60009081526020939093526040909220805460ff9092169290921b189055565b600285810b810b60009081526020889052604080822087840b80850b84529183209293849391929088900b1215614fdc578860020b8760020b12614fb757816001015486039350816002015485039250614fc6565b81600101549350816002015492505b6001810154600282015494039390920391614ff7565b81600101548160010154039350816002015481600201540392505b5050965096945050505050565b83546001600160801b03811690600160801b900463ffffffff16600f85900b61506f576000826001600160801b03161161506a576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b615128565b600085600f0b12156150ae5760045463ffffffff1680156150ac578063ffffffff168261509a613cc6565b0363ffffffff1610156150ac57600080fd5b505b60006150ba8387614ce6565b9050806000826001600160801b0316116150d55760006150ee565b600087600f0b136150e657826150ee565b6150ee613cc6565b88546001600160801b039092166001600160801b031963ffffffff909216600160801b0263ffffffff60801b199093169290921716178755505b60018601546002870154600086831461515f576001890187905561515c8388036001600160801b038716600160801b613be6565b90505b600082871461518c5760028a018790556151898388036001600160801b038816600160801b613be6565b90505b6001600160801b0382821716156151d65760038a0180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b50505050505050505050565b60008082600f0b121561520f57615207615202858585600003600061543f565b614be2565b60000361521f565b61521f615202858585600161543f565b949350505050565b60008082600f0b12156152475761520761520285858560000360006154ce565b61521f61520285858560016154ce565b600181811c909117600281901c17600481901c17600881901c17601081901c17602081901c17604081901c17608081901c179081901c90036000613a63826152cf565b80620d89e719600282900b12156152b65750620d89e719613dcb565b620d89e8600282900b1315613dcb5750620d89e8919050565b7f55555555555555555555555555555555555555555555555555555555555555558116156001600160801b0382161560071b176001600160401b03600160801b03600160c01b0382161560061b177bffffffff00000000ffffffff00000000ffffffff00000000ffffffff82161560051b177dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff82161560041b177eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff82161560031b177f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f82161560021b177f3333333333333333333333333333333333333333333333333333333333333333919091161560011b1790565b600061521f83858460016154ce565b600061521f848484600161543f565b600061451085858585600161553f565b600061521f838584600061543f565b600061521f84848460006154ce565b600061451085858585600061553f565b60006001600160a01b038585038116908516811061545c57600080fd5b600160601b600160e01b03606085901b168361549d57866001600160a01b03166154908383896001600160a01b0316613be6565b8161549757fe5b046154c3565b6154c36154b48383896001600160a01b0316613b71565b886001600160a01b0316615733565b979650505050505050565b6000846001600160a01b0316846001600160a01b031610156154ef57600080fd5b6001600160a01b03858503168261551d5761551881856001600160801b0316600160601b613be6565b615535565b61553581856001600160801b0316600160601b613b71565b9695505050505050565b600080866001600160a01b03161161555657600080fd5b6000856001600160801b03161161556c57600080fd5b811515831515141561565e5783615584575084614510565b600160601b600160e01b03606086901b168215615612576001600160a01b038716858102908682816155b257fe5b0414156155e3578181018281106155e1576155d7838a6001600160a01b031683613b71565b9350505050614510565b505b61560982615604888b6001600160a01b031686816155fd57fe5b0490613a53565b615733565b92505050614510565b6001600160a01b0387168581029086828161562957fe5b041461563457600080fd5b80821161564057600080fd5b615609615659838a6001600160a01b0316848603613b71565b61573e565b81156156c5576156be6156596001600160a01b038611156156965761569186600160601b896001600160801b0316613be6565b6156ae565b6001600160801b038716606087901b816156ac57fe5b045b6001600160a01b03891690613a53565b9050614510565b60006001600160a01b038511156156f3576156ee85600160601b886001600160801b0316613b71565b61570a565b61570a606086901b6001600160801b038816615733565b905080876001600160a01b03161161572157600080fd5b6001600160a01b038716039050614510565b808204910615150190565b806001600160a01b0381168114613dcb57600080fd5b604080516060810182526000808252602082018190529181019190915290565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906101208201908152600060208201819052604082018190526060820181905260809091015290565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565bfefec42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67a164736f6c6343000706000a" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b146101315780638f2839701461016f578063f851a440146101af5761005a565b80633659cfe6146100645780634f1ef286146100a4575b6100626101c4565b005b34801561007057600080fd5b506100626004803603602081101561008757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101de565b610062600480360360408110156100ba57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82351691908101906040810160208201356401000000008111156100f257600080fd5b82018360208201111561010457600080fd5b8035906020019184600183028401116401000000008311171561012657600080fd5b509092509050610232565b34801561013d57600080fd5b50610146610309565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561017b57600080fd5b506100626004803603602081101561019257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610318565b3480156101bb57600080fd5b50610146610420565b6101cc610466565b6101dc6101d76104fa565b61051f565b565b6101e6610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102275761022281610568565b61022f565b61022f6101c4565b50565b61023a610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102fc5761027683610568565b60003073ffffffffffffffffffffffffffffffffffffffff16348484604051808383808284376040519201945060009350909150508083038185875af1925050503d80600081146102e3576040519150601f19603f3d011682016040523d82523d6000602084013e6102e8565b606091505b50509050806102f657600080fd5b50610304565b6103046101c4565b505050565b60006103136104fa565b905090565b610320610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102275773ffffffffffffffffffffffffffffffffffffffff81166103bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806106966036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e8610543565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301528051918290030190a1610222816105bd565b6000610313610543565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061045e57508115155b949350505050565b61046e610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806106646032913960400191505060405180910390fd5b6101dc6101dc565b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c35490565b3660008037600080366000845af43d6000803e80801561053e573d6000f35b3d6000fd5b7f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b5490565b610571816105e1565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9181900360200190a150565b7f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b55565b6105ea8161042a565b61063f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806106cc603b913960400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c35556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a2646970667358221220b00b4ad11e3db111c0927942841c179e4827897c65a9ab7e63f9b4885fb77c2b64736f6c634300060c0033" + }, + { + "address": "0xde1e598b81620773454588b85d6b5d4eec32573e", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000001", + "code": "0x60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100ae576040517fa9ad62f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660008037600080366000845af43d6000803e8080156100cd573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156103225760008482815181106101ac576101ac611129565b6020026020010151602001519050600060028111156101cd576101cd611158565b8160028111156101df576101df611158565b0361022d576102288583815181106101f9576101f9611129565b60200260200101516000015186848151811061021757610217611129565b602002602001015160400151610387565b610319565b600181600281111561024157610241611158565b0361028a5761022885838151811061025b5761025b611129565b60200260200101516000015186848151811061027957610279611129565b602002602001015160400151610627565b600281600281111561029e5761029e611158565b036102e7576102288583815181106102b8576102b8611129565b6020026020010151600001518684815181106102d6576102d6611129565b6020026020010151604001516108d0565b6040517fe548e6b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060010161018f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051610356939291906111f5565b60405180910390a16103688282610a0c565b505050565b73ffffffffffffffffffffffffffffffffffffffff161590565b80516000036103c2576040517f7bc5595000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610430576040517fc68ec83a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff82169003610478576104788285610bad565b60005b835181101561062057600084828151811061049857610498611129565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff168015610527576040517fa023275d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905550506001918201910161047b565b5050505050565b8051600003610662576040517f7bc5595000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166106d0576040517fc68ec83a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff82169003610718576107188285610bad565b60005b835181101561062057600084828151811061073857610738611129565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff90811690871681036107cc576040517fa023275d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107d7858284610c23565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905550506001918201910161071b565b805160000361090b576040517f7bc5595000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83161561097a576040517f79c9df2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610a0657600083828151811061099a5761099a611129565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff166109fc848284610c23565b505060010161097d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610a6457805115610a60576040517f9811686000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b8051600003610a9f576040517f4220056600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163014610ac557610ac5826110ec565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610aed919061135d565b600060405180830381855af49150503d8060008114610b28576040519150601f19603f3d011682016040523d82523d6000602084013e610b2d565b606091505b509150915081610a0657805115610b7b57806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b729190611379565b60405180910390fd5b6040517fc53ebed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb6816110ec565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff8216610c70576040517fa9ad62f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff831603610cbf576040517fc3c5ec3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff169291610d4991611393565b9050808214610e905773ffffffffffffffffffffffffffffffffffffffff841660009081526001860160205260408120805483908110610d8b57610d8b611129565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610de957610de9611129565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff841660009081526001860160205260409020805480610ec657610ec66113d3565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff000000000000000000000000000000000000000000000000000000008516825286905260408120819055819003610620576002850154600090610f5f90600190611393565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260018089016020526040909120015490915080821461104d576000876002018381548110610fab57610fab611129565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff9092169250829184908110610fe957610fe9611129565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b86600201805480611060576110606113d3565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b803b6000819003610a60576040517fe350060000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60005b838110156111a257818101518382015260200161118a565b50506000910152565b600081518084526111c3816020860160208601611187565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611320577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff825116865284820151600381106112a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b8083101561130b5783517fffffffff000000000000000000000000000000000000000000000000000000001682529286019260019290920191908601906112c9565b5097850197955050509082019060010161121e565b505073ffffffffffffffffffffffffffffffffffffffff8a1690880152868103604088015261134f81896111ab565b9a9950505050505050505050565b6000825161136f818460208701611187565b9190910192915050565b60208152600061138c60208301846111ab565b9392505050565b818103818111156113cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220244eacf3b1cbd2dda7fc6859be7c4e38c31b932a358fa5436a5aec68728b07b064736f6c63430008110033" + }, + { + "address": "0x94b562a327e997c4106d7ae3f3d28e16470799a2", + "nonce": 31, + "balance": "0x000000000000000000000000000000000000000000000000000e3b127f63ff97", + "code": "0x" + }, + { + "address": "0x14c5a2b562754ed412708a103fb9cb65b1b16494", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106102535760003560e01c806370a0823111610146578063ad7a672f116100c3578063c683630d11610087578063c683630d1461048e578063d2d0b828146104a1578063d546da90146104b4578063e2bbb158146104c7578063f24aeac8146104da578063f2fde38b146104ed57610253565b8063ad7a672f14610442578063b18686281461044a578063b51b1d2914610452578063c006719f14610465578063c4d66de81461047b57610253565b80638456cb591161010a5780638456cb59146103f75780638497fab9146103ff5780638da5cb5b146104125780639f2b03b61461041a578063a006dfe11461042257610253565b806370a08231146103ae578063715018a6146103c1578063756a9795146103c957806377bafa8e146103dc57806381c3a96a146103e457610253565b806343423205116101d4578063571abe3011610198578063571abe301461036357806359341a1a146103785780635c815230146103805780635c975abb1461039357806366ae02091461039b57610253565b8063434232051461030457806344ee3a1c1461031757806349ba1b491461032a57806352275f3e1461033d57806353d6fd591461035057610253565b806331cd49b41161021b57806331cd49b4146102c457806332ad5e01146102d75780633ccfd60b146102ec5780633d2bbc0c146102f45780633f4ba83a146102fc57610253565b806310d4742b14610258578063133af45614610276578063158ef93e1461028957806327e235e31461029e578063306ef008146102b1575b600080fd5b610260610500565b60405161026d9190612c43565b60405180910390f35b6102606102843660046123ec565b610507565b61029161058b565b60405161026d919061265b565b6102606102ac3660046123ec565b610594565b6102606102bf36600461251e565b6105a6565b6102606102d23660046123ec565b61060e565b6102ea6102e53660046123ec565b610629565b005b6102ea6107d9565b610260610919565b6102ea610921565b61026061031236600461243e565b610993565b6102ea61032536600461251e565b610ab4565b6102ea6103383660046124e6565b610d0e565b61026061034b36600461251e565b610dbf565b6102ea61035e366004612407565b610dca565b61036b610e69565b60405161026d9190612590565b61036b610e78565b6102ea61038e36600461251e565b610e87565b610291611061565b6102ea6103a93660046123ec565b61106a565b6102606103bc3660046123ec565b611125565b6102ea611140565b6102606103d736600461249b565b6111c9565b6102606112dd565b6102ea6103f236600461243e565b6112e5565b6102ea61151e565b61026061040d3660046123ec565b611590565b61036b6115ab565b61036b6115ba565b6104356104303660046123ec565b6115ce565b60405161026d9190612602565b610260611661565b610260611667565b6102ea610460366004612468565b61166e565b61046d611973565b60405161026d929190612c4c565b6102ea6104893660046123ec565b611a44565b61029161049c3660046123ec565b611b01565b6102606104af3660046123ec565b611b1f565b6102606104c23660046123ec565b611b31565b6102ea6104d5366004612536565b611b73565b6102606104e83660046123ec565b611de9565b6102ea6104fb3660046123ec565b611e34565b6224ea0081565b6001600160a01b03811660009081526039602052604081205442111561052f57506000610586565b6001600160a01b0382166000908152603860205260409020546105839061055a906301e13380611ef4565b6001600160a01b03841660009081526039602052604090205461057d9042611f26565b90611f4e565b90505b919050565b60415460ff1681565b60386020526000908152604090205481565b60004282116105b757506000610586565b6105c082611f8f565b915042821180156105df57506105db6301e133804201611f8f565b8211155b6106045760405162461bcd60e51b81526004016105fb90612acc565b60405180910390fd5b6105838242611f26565b6001600160a01b031660009081526040602081905290205490565b60025460ff168061064957503360009081526001602052604090205460ff165b6106655760405162461bcd60e51b81526004016105fb9061292d565b600260345414156106885760405162461bcd60e51b81526004016105fb90612bc7565b6002603455610695611061565b156106b25760405162461bcd60e51b81526004016105fb906128a8565b6001600160a01b038116600090815260386020526040902054158015906106f157506001600160a01b0381166000908152603960205260409020544210155b61070d5760405162461bcd60e51b81526004016105fb90612a66565b610718600080611fcc565b6001600160a01b038116600090815260386020526040902054603a5461073e9082611f26565b603a556001600160a01b038083166000908152603860209081526040808320839055603982528083208390559081905281205560355461078691610100909104168383612032565b61078f82612120565b816001600160a01b03167fcaf23e5319bb7fbe554d7d307eca89e79e117663a9bebae9cd062601eda0e91c336040516107c89190612590565b60405180910390a250506001603455565b600260345414156107fc5760405162461bcd60e51b81526004016105fb90612bc7565b6002603455610809611061565b156108265760405162461bcd60e51b81526004016105fb906128a8565b33600090815260386020526040902054158015906108535750336000908152603960205260409020544210155b61086f5760405162461bcd60e51b81526004016105fb90612a66565b61087a600080611fcc565b33600090815260386020526040902054603a546108979082611f26565b603a5533600081815260386020908152604080832083905560398252808320839055908190528120556035546108dd916101009091046001600160a01b03169083612032565b6108e633612120565b60405133907ff67611512e0a2d90c96fd3f08dca4971bc45fba9dc679eabe839a32abbe58a8e90600090a2506001603455565b6301e1338090565b61092961217e565b6001600160a01b031661093a6115ab565b6001600160a01b0316146109605760405162461bcd60e51b81526004016105fb906129de565b610968612182565b6040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6001600160a01b0382166000908152603f60205260408120548015806109f457506001600160a01b0384166000908152603f60205260409020805484919060001984019081106109df57fe5b90600052602060002090600302016002015411155b15610a03576000915050610aae565b60001981015b600019811015610aa7576001600160a01b0385166000908152603f60205260408120805483908110610a3757fe5b9060005260206000209060030201905084816000015411610a9d578481600201541115610a9057610a8b6301e13380610a85836001015461057d898660020154611f2690919063ffffffff16565b90611ef4565b610a93565b60005b9350505050610aae565b5060001901610a09565b5060009150505b92915050565b60026034541415610ad75760405162461bcd60e51b81526004016105fb90612bc7565b6002603455610ae4611061565b15610b015760405162461bcd60e51b81526004016105fb906128a8565b3360009081526038602052604090205480610b2e5760405162461bcd60e51b81526004016105fb90612666565b33600090815260396020526040902054610b4783611f8f565b9250804210610b685760405162461bcd60e51b81526004016105fb906128d2565b82610b7382426121f0565b108015610b8e5750610b8a6301e133804201611f8f565b8311155b610baa5760405162461bcd60e51b81526004016105fb90612a95565b6000610bba836301e13380611ef4565b6000838152603e602052604090205410610be157610bdc836301e13380611ef4565b610bf1565b6000828152603e60205260409020545b6000838152603e6020526040902054909150610c0d9082611f26565b6000838152603e6020526040808220929092558581522054610c2f9082612207565b6000858152603e6020526040902055610c4983838661222c565b336000818152603960205260409020859055610c6490612120565b336000818152603f60209081526040808320815160608101835242815285855260388452828520548185019081528686526039855283862054828501908152835460018181018655948852959096209151600390950290910193845551908301559151600290910155517f1f3c43131750788827ee11a40ed23418a0168521f8933599e91767c8e0102c5090610cfb908790612c43565b60405180910390a2505060016034555050565b610d1661217e565b6001600160a01b0316610d276115ab565b6001600160a01b031614610d4d5760405162461bcd60e51b81526004016105fb906129de565b6002805460ff19168215801591909117909155610d92576040517f508560e15717a4e9058b9a19d806cb679004a1bd953376f71fda71c141e5dc5390600090a1610dbc565b6040517fa2927d972f7cfc5ff8b7ad79f9adf0bdb885d0e569f40d0037df2e1299616ae090600090a15b50565b600061058382611f8f565b610dd261217e565b6001600160a01b0316610de36115ab565b6001600160a01b031614610e095760405162461bcd60e51b81526004016105fb906129de565b6001600160a01b03821660008181526001602052604090819020805460ff1916841515179055517fa54714518c5d275fdcd3d2a461e4858e4e8cb04fb93cd0bca9d6d34115f2644090610e5d90849061265b565b60405180910390a25050565b6036546001600160a01b031681565b6037546001600160a01b031681565b60026034541415610eaa5760405162461bcd60e51b81526004016105fb90612bc7565b6002603455610eb7611061565b15610ed45760405162461bcd60e51b81526004016105fb906128a8565b336000908152603860205260409020548015801590610f025750336000908152603960205260409020544210155b610f1e5760405162461bcd60e51b81526004016105fb90612a66565b610f2782611f8f565b91508142108015610f465750610f426301e133804201611f8f565b8211155b610f625760405162461bcd60e51b81526004016105fb906127fa565b610f88610f73826301e13380611ef4565b6000848152603e602052604090205490612207565b6000838152603e6020526040902055610fa18183611fcc565b336000818152603960205260409020839055610fbc90612120565b336000818152604060208181528183204290819055603f825282842083516060810185529182528585526038835283852054828401908152868652603984528486205483860190815282546001818101855593885294909620925160039094029092019283559051908201559151600290920191909155517fbbd7a36064dc40349f523f7a00bab681739ae27ffd7d2e9f41637123ac757cde906107c8908590612c43565b60355460ff1690565b61107261217e565b6001600160a01b03166110836115ab565b6001600160a01b0316146110a95760405162461bcd60e51b81526004016105fb906129de565b6001600160a01b0381166110cf5760405162461bcd60e51b81526004016105fb90612b81565b603680546001600160a01b0319166001600160a01b0383161790556040517f2351f252c60252e548e93df4d785886faa1d88410325b8bce69d624a25583ae79061111a908390612590565b60405180910390a150565b6001600160a01b031660009081526038602052604090205490565b61114861217e565b6001600160a01b03166111596115ab565b6001600160a01b03161461117f5760405162461bcd60e51b81526004016105fb906129de565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600060028260038111156111d957fe5b1480156111fd57506001600160a01b03851660009081526039602052604090205442115b1561120a575060006112d5565b6001600160a01b0385166000908152603860209081526040808320546039909252822054909184600381111561123c57fe5b141561125e5761124c8287612207565b915061125785611f8f565b90506112a3565b600384600381111561126c57fe5b14156112835761127c8287612207565b91506112a3565b600284600381111561129157fe5b14156112a3576112a085611f8f565b90505b4281116112b5576000925050506112d5565b6112d06112c6836301e13380611ef4565b61057d8342611f26565b925050505b949350505050565b6301e1338081565b60025460ff168061130557503360009081526001602052604090205460ff165b6113215760405162461bcd60e51b81526004016105fb9061292d565b600260345414156113445760405162461bcd60e51b81526004016105fb90612bc7565b6002603455611351611061565b1561136e5760405162461bcd60e51b81526004016105fb906128a8565b6001600160a01b03821660009081526038602052604090205480158015906113ae57506001600160a01b0383166000908152603960205260409020544210155b6113ca5760405162461bcd60e51b81526004016105fb90612a66565b6113d382611f8f565b915081421080156113f257506113ee6301e133804201611f8f565b8211155b61140e5760405162461bcd60e51b81526004016105fb90612776565b61141f610f73826301e13380611ef4565b6000838152603e60205260409020556114388183611fcc565b6001600160a01b038316600090815260396020526040902082905561145c83612120565b6001600160a01b0383166000818152604060208181528183204290819055603f825282842083516060810185529182528585526038835283852054828401908152868652603984528486205483860190815282546001818101855593885294909620925160039094029092019283559051908201559151600290920191909155517f310f550ac1342a0689445aab3ed6533de837ee92be5fc503cf4ad276f2fb80399061150c90339086906125a4565b60405180910390a25050600160345550565b61152661217e565b6001600160a01b03166115376115ab565b6001600160a01b03161461155d5760405162461bcd60e51b81526004016105fb906129de565b611565612276565b6040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6001600160a01b031660009081526039602052604090205490565b6000546001600160a01b031690565b60355461010090046001600160a01b031681565b6001600160a01b0381166000908152603f60209081526040808320805482518185028101850190935280835260609492939192909184015b828210156116565783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190611606565b505050509050919050565b603a5481565b62093a8081565b60025460ff168061168e57503360009081526001602052604090205460ff165b6116aa5760405162461bcd60e51b81526004016105fb9061292d565b600260345414156116cd5760405162461bcd60e51b81526004016105fb90612bc7565b60026034556116da611061565b156116f75760405162461bcd60e51b81526004016105fb906128a8565b600082116117175760405162461bcd60e51b81526004016105fb90612841565b6001600160a01b03831660009081526038602052604090205415611753576001600160a01b03831660009081526039602052604090205461175c565b61175c81611f8f565b9050804210801561177b57506117776301e133804201611f8f565b8111155b6117975760405162461bcd60e51b81526004016105fb90612bfe565b6001600160a01b0383166000908152603860205260409020546118105760004282116117c45760006117ce565b6117ce8242611f26565b90506224ea008110156117f35760405162461bcd60e51b81526004016105fb90612a13565b506001600160a01b03831660009081526040602081905290204290555b611836611821836301e13380611ef4565b6000838152603e602052604090205490612207565b6000828152603e602052604090205561184f8282611fcc565b60355461186c9061010090046001600160a01b03163330856122d1565b603a546118799083612207565b603a556001600160a01b03831660009081526038602052604090205461189f9083612207565b6001600160a01b03841660009081526038602090815260408083209390935560399052208190556118cf83612120565b6001600160a01b0383166000818152603f60209081526040808320815160608101835242815285855260388452828520548185019081528686526039855283862054828501908152835460018181018655948852959096209151600390950290910193845551908301559151600290910155517f8e757ff00e39ce0a351a852dcf57c5dd1734513ce1d6687e3156f8d2c4082d219061150c903390869086906125bd565b603b54603c54603d54600061199462093a8061198e846123c2565b90612207565b90505b42811015611a035760006119af8461057d8486611f26565b90508085106119c7576119c28582611f26565b6119ca565b60005b6000838152603e60205260409020549095506119e7908590611f26565b935090915081906119fb8262093a80612207565b915050611997565b6000824211611a13576000611a21565b611a218461057d4286611f26565b9050808511611a31576000611a3b565b611a3b8582611f26565b94505050509091565b611a4c61217e565b6001600160a01b0316611a5d6115ab565b6001600160a01b031614611a835760405162461bcd60e51b81526004016105fb906129de565b60415460ff1615611aa65760405162461bcd60e51b81526004016105fb90612900565b6001600160a01b038116611acc5760405162461bcd60e51b81526004016105fb90612b15565b603580546001600160a01b0390921661010002610100600160a81b03199092169190911790556041805460ff19166001179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60396020526000908152604090205481565b6001600160a01b0381166000908152603960205260408120544211611b57576000610583565b506001600160a01b031660009081526038602052604090205490565b60026034541415611b965760405162461bcd60e51b81526004016105fb90612bc7565b6002603455611ba3611061565b15611bc05760405162461bcd60e51b81526004016105fb906128a8565b60008211611be05760405162461bcd60e51b81526004016105fb90612841565b3360009081526038602052604090205415611c0a5733600090815260396020526040902054611c13565b611c1381611f8f565b90508042108015611c325750611c2e6301e133804201611f8f565b8111155b611c4e5760405162461bcd60e51b81526004016105fb906126c2565b33600090815260386020526040902054611cb5576000428211611c72576000611c7c565b611c7c8242611f26565b90506224ea00811015611ca15760405162461bcd60e51b81526004016105fb90612a13565b503360009081526040602081905290204290555b611cc6611821836301e13380611ef4565b6000828152603e6020526040902055611cdf8282611fcc565b603554611cfc9061010090046001600160a01b03163330856122d1565b603a54611d099083612207565b603a5533600090815260386020526040902054611d269083612207565b336000818152603860209081526040808320949094556039905291909120829055611d5090612120565b336000818152603f60209081526040808320815160608101835242815285855260388452828520548185019081528686526039855283862054828501908152835460018181018655948852959096209151600390950290910193845551908301559151600290910155517f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15906107c89085908590612c4c565b6001600160a01b038116600090815260396020526040812054421115611e1157506000610586565b6001600160a01b0382166000908152603960205260409020546105839042611f26565b611e3c61217e565b6001600160a01b0316611e4d6115ab565b6001600160a01b031614611e735760405162461bcd60e51b81526004016105fb906129de565b6001600160a01b038116611e995760405162461bcd60e51b81526004016105fb906126f9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000808211611f155760405162461bcd60e51b81526004016105fb90612871565b818381611f1e57fe5b049392505050565b600082821115611f485760405162461bcd60e51b81526004016105fb906127c3565b50900390565b600082611f5d57506000610aae565b82820282848281611f6a57fe5b0414611f885760405162461bcd60e51b81526004016105fb90612976565b9392505050565b6000611f9f426301e13380612207565b821115611fb757611fb4426301e13380612207565b91505b61058362093a8061198e8161057d8682611ef4565b600080611fd7611973565b90925090508315612021576000611ff2856301e13380611ef4565b905060006120048261057d8742611f26565b90506120108383612207565b925061201c8482612207565b935050505b603b91909155603c55505042603d55565b60006060846001600160a01b031663a9059cbb85856040516024016120589291906125a4565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516120919190612557565b6000604051808303816000865af19150503d80600081146120ce576040519150601f19603f3d011682016040523d82523d6000602084013e6120d3565b606091505b50915091508180156120fd5750805115806120fd5750808060200190518101906120fd9190612502565b6121195760405162461bcd60e51b81526004016105fb906129b7565b5050505050565b6036546040516308de4ce760e41b81526001600160a01b0390911690638de4ce7090612150908490600401612590565b600060405180830381600087803b15801561216a57600080fd5b505af1158015612119573d6000803e3d6000fd5b3390565b61218a611061565b6121a65760405162461bcd60e51b81526004016105fb90612694565b6035805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6121d961217e565b6040516121e69190612590565b60405180910390a1565b6000818310156122005781611f88565b5090919050565b600082820183811015611f885760405162461bcd60e51b81526004016105fb9061273f565b600080612237611973565b9092509050600061225961224f876301e13380611ef4565b61057d8688611f26565b90506122658382612207565b603b5550603c55505042603d555050565b61227e611061565b1561229b5760405162461bcd60e51b81526004016105fb906128a8565b6035805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121d961217e565b60006060856001600160a01b03166323b872dd8686866040516024016122f9939291906125de565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516123329190612557565b6000604051808303816000865af19150503d806000811461236f576040519150601f19603f3d011682016040523d82523d6000602084013e612374565b606091505b509150915081801561239e57508051158061239e57508080602001905181019061239e9190612502565b6123ba5760405162461bcd60e51b81526004016105fb90612b56565b505050505050565b600061058362093a8061057d8482611ef4565b80356001600160a01b0381168114610aae57600080fd5b6000602082840312156123fd578081fd5b611f8883836123d5565b60008060408385031215612419578081fd5b61242384846123d5565b9150602083013561243381612c5a565b809150509250929050565b60008060408385031215612450578182fd5b61245a84846123d5565b946020939093013593505050565b60008060006060848603121561247c578081fd5b61248685856123d5565b95602085013595506040909401359392505050565b600080600080608085870312156124b0578081fd5b6124ba86866123d5565b935060208501359250604085013591506060850135600481106124db578182fd5b939692955090935050565b6000602082840312156124f7578081fd5b8135611f8881612c5a565b600060208284031215612513578081fd5b8151611f8881612c5a565b60006020828403121561252f578081fd5b5035919050565b60008060408385031215612548578182fd5b50508035926020909101359150565b60008251815b81811015612577576020818601810151858301520161255d565b818111156125855782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b602080825282518282018190526000919060409081850190868401855b8281101561264e578151805185528681015187860152850151858501526060909301929085019060010161261f565b5091979650505050505050565b901515815260200190565b6020808252601490820152734c6f636b65723a207a65726f2062616c616e636560601b604082015260600190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252601f908201527f4c6f636b65723a206465706f7369743a20696e76616c69642065787069727900604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602d908201527f4c6f636b65723a207769746864726177416e644c6f636b426568616c663a206960408201526c6e76616c69642065787069727960981b606082015260800190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b60208082526027908201527f4c6f636b65723a207769746864726177416e644c6f636b3a20696e76616c69646040820152662065787069727960c81b606082015260800190565b602080825260169082015275131bd8dad95c8e881a5b9d985b1a5908185b5bdd5b9d60521b604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601490820152734c6f636b65723a2065787069726564206c6f636b60601b604082015260600190565b602080825260139082015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604082015260600190565b60208082526029908201527f57686974656c6973743a2063616c6c6572206973206e6f74206f6e20746865206040820152681dda1a5d195b1a5cdd60ba1b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252600d908201526c10b9b0b332aa3930b739b332b960991b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f4c6f636b65723a205468652065787069727920646f6573206e6f74206d656574604082015272081d1a19481b5a5b9a5b5d5b481c195c9a5bd9606a1b606082015260800190565b6020808252601590820152744c6f636b65723a20696e76616c696420737461746560581b604082015260600190565b6020808252601b908201527f4c6f636b65723a20696e76616c6964206578706972792074696d650000000000604082015260600190565b60208082526029908201527f4c6f636b65723a2070726552656d61696e4578706972794f663a20696e76616c60408201526869642065787069727960b81b606082015260800190565b60208082526021908201527f4c6f636b65723a204c414220616464726573732063616e2774206265207a65726040820152606f60f81b606082015260800190565b60208082526011908201527021736166655472616e7366657246726f6d60781b604082015260600190565b60208082526026908201527f4c6f636b65723a20696e76616c6964206c61624469737472696275746f72206160408201526564647265737360d01b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526025908201527f4c6f636b65723a206465706f736974426568616c663a20696e76616c69642065604082015264787069727960d81b606082015260800190565b90815260200190565b918252602082015260400190565b8015158114610dbc57600080fdfea264697066735822122022e4196e96169921d4af6b4fb9e4a2f0f3cead9dcb4dca2280e3a335e68bdde664736f6c634300060c0033" + }, + { + "address": "0x13f4ea83d0bd40e75c8222255bc855a974568dd4", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x7313f4ea83d0bd40e75c8222255bc855a974568dd430146080604052600436106100b95760003560e01c8063054d50d4146100be578063192128b2146100e75780632b6d5d8f1461010757806332749461146101275780634e6c8ed814610148578063544caa56146101685780635923cab3146101895780636d91c0e21461019c57806370c3718e146101af57806385f8c259146101c25780638bdb1925146101d5578063a497919d146101e8578063b735aecd146101fb575b600080fd5b6100d16100cc36600461113f565b61021d565b6040516100de91906113a9565b60405180910390f35b6100fa6100f5366004610f81565b6102ad565b6040516100de9190611243565b61011a610115366004610eab565b6103b1565b6040516100de9190611375565b61013a610135366004610cd6565b610407565b6040516100de9291906113b2565b61015b610156366004610d20565b6104e0565b6040516100de91906111bf565b61017b610176366004610c9e565b6104fa565b6040516100de9291906111d3565b6100fa610197366004610dc9565b61055e565b61015b6101aa366004610cd6565b610712565b61015b6101bd366004610ef1565b6107a3565b6100d16101d036600461113f565b610854565b61015b6101e3366004610d20565b6108db565b61015b6101f6366004610ef1565b6108ec565b61020e610209366004610d79565b610915565b6040516100de939291906113c0565b60008084116102475760405162461bcd60e51b815260040161023e9061130e565b60405180910390fd5b6000831180156102575750600082115b61026057600080fd5b600061026e856126f7610b96565b9050600061027c8285610b96565b905060006102968361029088612710610b96565b90610bba565b90508082816102a157fe5b04979650505050505050565b60606002825110156102be57600080fd5b81516001600160401b03811180156102d557600080fd5b506040519080825280602002602001820160405280156102ff578160200160208202803683370190505b509050828160018351038151811061031357fe5b60209081029190910101528151600019015b80156103a9576000806103628786600186038151811061034157fe5b602002602001015187868151811061035557fe5b6020026020010151610407565b9150915061038484848151811061037557fe5b60200260200101518383610854565b84600185038151811061039357fe5b6020908102919091010152505060001901610325565b509392505050565b6103b9610bda565b826001600160a01b0316846001600160a01b031611156103d7579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600080600061041685856104fa565b509050600080610427888888610712565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561045f57600080fd5b505afa158015610473573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049791906110e4565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146104ce5780826104d1565b81815b90999098509650505050505050565b60006104f1856101bd8686866103b1565b95945050505050565b600080826001600160a01b0316846001600160a01b0316141561051c57600080fd5b826001600160a01b0316846001600160a01b03161061053c57828461053f565b83835b90925090506001600160a01b03821661055757600080fd5b9250929050565b825160609060028110156105845760405162461bcd60e51b815260040161023e90611287565b806001600160401b038111801561059a57600080fd5b506040519080825280602002602001820160405280156105c4578160200160208202803683370190505b509150828260018303815181106105d757fe5b602090810291909101015260001981015b801561070757600060018203905060008060006106408c8b868151811061060b57fe5b60200260200101518c888151811061061f57fe5b60200260200101518c888151811061063357fe5b6020026020010151610915565b9250925092508a6001600160a01b031663ca4bc7148285858b8a8151811061066457fe5b60200260200101516000196040518663ffffffff1660e01b815260040161068f959493929190611215565b60206040518083038186803b1580156106a757600080fd5b505afa1580156106bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106df9190611127565b8785815181106106eb57fe5b6020908102919091010152505060001990920191506105e89050565b505095945050505050565b600080600061072185856104fa565b9150915085828260405160200161073992919061116a565b60408051601f19818403018152908290528051602091820120610781939290917f57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d910161118c565b60408051601f1981840301815291905280516020909101209695505050505050565b600081602001516001600160a01b031682600001516001600160a01b0316106107cb57600080fd5b828260000151836020015184604001516040516020016107ed939291906111ed565b60408051601f19818403018152908290528051602091820120610835939290917f6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2910161118c565b60408051601f1981840301815291905280516020909101209392505050565b60008084116108755760405162461bcd60e51b815260040161023e90611341565b6000831180156108855750600082115b61088e57600080fd5b60006108a66127106108a08688610b96565b90610b96565b905060006108ba6126f76108a08689610bca565b90506108d160018284816108ca57fe5b0490610bba565b9695505050505050565b60006104f1856101f68686866103b1565b60006108f883836107a3565b9050336001600160a01b0382161461090f57600080fd5b92915050565b600080600083600214156109f457604051632007bd0f60e11b81526000906001600160a01b0389169063400f7a1e90610954908a908a906004016111d3565b60806040518083038186803b15801561096c57600080fd5b505afa158015610980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a49190610fd7565b905080602001516001600160a01b0316876001600160a01b0316146109ca5760016109cd565b60005b60ff16935083156109df5760006109e2565b60015b60ff1692508060000151915050610b66565b8360031415610b665760405163923093cb60e01b81526000906001600160a01b0389169063923093cb90610a2e908a908a906004016111d3565b60a06040518083038186803b158015610a4657600080fd5b505afa158015610a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7e9190611054565b905080602001516001600160a01b0316876001600160a01b03161415610aa75760009350610af1565b80604001516001600160a01b0316876001600160a01b03161415610ace5760019350610af1565b80606001516001600160a01b0316876001600160a01b03161415610af157600293505b80602001516001600160a01b0316866001600160a01b03161415610b185760009250610b62565b80604001516001600160a01b0316866001600160a01b03161415610b3f5760019250610b62565b80606001516001600160a01b0316866001600160a01b03161415610b6257600292505b5190505b6001600160a01b038116610b8c5760405162461bcd60e51b815260040161023e906112cb565b9450945094915050565b6000821580610bb157505081810281838281610bae57fe5b04145b61090f57600080fd5b8082018281101561090f57600080fd5b8082038281111561090f57600080fd5b604080516060810182526000808252602082018190529181019190915290565b600082601f830112610c0a578081fd5b81356020610c1f610c1a83611402565b6113df565b8281528181019085830183850287018401881015610c3b578586fd5b855b85811015610c62578135610c508161141f565b84529284019290840190600101610c3d565b5090979650505050505050565b80516001600160701b0381168114610c8657600080fd5b919050565b803562ffffff81168114610c8657600080fd5b60008060408385031215610cb0578182fd5b8235610cbb8161141f565b91506020830135610ccb8161141f565b809150509250929050565b600080600060608486031215610cea578081fd5b8335610cf58161141f565b92506020840135610d058161141f565b91506040840135610d158161141f565b809150509250925092565b60008060008060808587031215610d35578081fd5b8435610d408161141f565b93506020850135610d508161141f565b92506040850135610d608161141f565b9150610d6e60608601610c8b565b905092959194509250565b60008060008060808587031215610d8e578384fd5b8435610d998161141f565b93506020850135610da98161141f565b92506040850135610db98161141f565b9396929550929360600135925050565b600080600080600060a08688031215610de0578081fd5b8535610deb8161141f565b9450602086810135610dfc8161141f565b945060408701356001600160401b0380821115610e17578384fd5b610e238a838b01610bfa565b95506060890135915080821115610e38578384fd5b508701601f81018913610e49578283fd5b8035610e57610c1a82611402565b81815283810190838501858402850186018d1015610e73578687fd5b8694505b83851015610e95578035835260019490940193918501918501610e77565b50989b979a509598608001359695505050505050565b600080600060608486031215610ebf578081fd5b8335610eca8161141f565b92506020840135610eda8161141f565b9150610ee860408501610c8b565b90509250925092565b6000808284036080811215610f04578283fd5b8335610f0f8161141f565b92506060601f1982011215610f22578182fd5b50604051606081016001600160401b0381118282101715610f3f57fe5b6040526020840135610f508161141f565b81526040840135610f608161141f565b6020820152610f7160608501610c8b565b6040820152809150509250929050565b600080600060608486031215610f95578081fd5b8335610fa08161141f565b92506020840135915060408401356001600160401b03811115610fc1578182fd5b610fcd86828701610bfa565b9150509250925092565b600060808284031215610fe8578081fd5b604051608081016001600160401b038111828210171561100457fe5b60405282516110128161141f565b815260208301516110228161141f565b602082015260408301516110358161141f565b604082015260608301516110488161141f565b60608201529392505050565b600060a08284031215611065578081fd5b60405160a081016001600160401b038111828210171561108157fe5b604052825161108f8161141f565b8152602083015161109f8161141f565b602082015260408301516110b28161141f565b604082015260608301516110c58161141f565b606082015260808301516110d88161141f565b60808201529392505050565b6000806000606084860312156110f8578081fd5b61110184610c6f565b925061110f60208501610c6f565b9150604084015163ffffffff81168114610d15578182fd5b600060208284031215611138578081fd5b5051919050565b600080600060608486031215611153578081fd5b505081359360208301359350604090920135919050565b6001600160601b0319606093841b811682529190921b16601482015260280190565b6001600160f81b0319815260609390931b6001600160601b03191660018401526015830191909152603582015260550190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b6020808252825182820181905260009190848201906040850190845b8181101561127b5783518352928401929184019160010161125f565b50909695505050505050565b60208082526024908201527f676574537461626c65416d6f756e7473496e3a20696e636f7272656374206c656040820152630dccee8d60e31b606082015260800190565b60208082526023908201527f676574537461626c65496e666f3a20696e76616c696420706f6f6c206164647260408201526265737360e81b606082015260800190565b602080825260199082015278125394d551919250d251539517d25394155517d05353d55395603a1b604082015260600190565b6020808252601a9082015279125394d551919250d251539517d3d55514155517d05353d5539560321b604082015260600190565b81516001600160a01b0390811682526020808401519091169082015260409182015162ffffff169181019190915260600190565b90815260200190565b918252602082015260400190565b92835260208301919091526001600160a01b0316604082015260600190565b6040518181016001600160401b03811182821017156113fa57fe5b604052919050565b60006001600160401b0382111561141557fe5b5060209081020190565b6001600160a01b038116811461143457600080fd5b5056fea26469706673582212204a91a75d321f3f19bb6cd9b849a57eaed2e399e811aef4c74d0be530e56e92be64736f6c63430007060033" + }, + { + "address": "0xd98ab490d53286d5a8322a3c85326893abfcf6b7", + "nonce": 11, + "balance": "0x0000000000000000000000000000000000000000000000000019bafd71636f60", + "code": "0x" + }, + { + "address": "0x61104fbe07ecc735d8d84422c7f045f8d29dbf15", + "nonce": 14, + "balance": "0x0000000000000000000000000000000000000000000000014740d190efc6a1e7", + "code": "0x" + }, + { + "address": "0x3d775406a990b5d4020cec5cef92c4784c7073c1", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a578063b1dd61b6116100ad578063dd62ed3e1161007c578063dd62ed3e146104cb578063ee97f7f3146104f6578063f66eab5b1461051d578063fbfa77cf1461053d578063ff9c8ac61461056457600080fd5b8063b1dd61b614610455578063baa8c7cb1461046a578063d21220a714610491578063d505accf146104b857600080fd5b806395d89b41116100e957806395d89b411461041b578063a287c79514610423578063a5a410311461043a578063a9059cbb1461044257600080fd5b806370a08231146103a85780637132bb7f146103c85780637ecebe00146103db5780638b4c5470146103fb57600080fd5b806323b872dd1161019d5780633644e5151161016c5780633644e51514610352578063443cb4bc1461035a5780634e25dc47146103635780635a76f25e1461038a57806367e4ac2c1461039357600080fd5b806323b872dd146102d657806327b0bcea146102e95780632c0198cc14610309578063313ce5671461031e57600080fd5b80630902f1ac116101d95780630902f1ac14610272578063095ea7b3146102865780630dfe16811461029957806318160ddd146102cd57600080fd5b806301ffc9a71461020b57806303e7286a1461023457806306fdde031461025457806307f293f714610269575b600080fd5b61021e610219366004613141565b610577565b60405161022b919061316c565b60405180910390f35b6102476102423660046131f1565b6105c9565b60405161022b9190613298565b61025c610a82565b60405161022b9190613304565b610247600b5481565b600954600a5460405161022b929190613315565b61021e610294366004613341565b610b10565b6102c07f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d581565b60405161022b9190613387565b61024760005481565b61021e6102e4366004613395565b610b26565b6102fc6102f73660046131f1565b610c06565b60405161022b9190613409565b61031c610317366004613417565b61123d565b005b6103457f000000000000000000000000000000000000000000000000000000000000001281565b60405161022b919061349b565b6102476112e2565b61024760095481565b6102477f000000000000000000000000000000000000000000000000000000e8d4a5100081565b610247600a5481565b61039b611301565b60405161022b9190613506565b6102476103b6366004613517565b60016020526000908152604090205481565b6102fc6103d63660046131f1565b6113cc565b6102476103e9366004613517565b60036020526000908152604090205481565b61040e610409366004613633565b6119b5565b60405161022b91906136bd565b61025c611a56565b6102476104313660046136cb565b60009392505050565b61040e611a63565b61021e610450366004613341565b611af3565b61045d600281565b60405161022b919061371b565b6102477f000000000000000000000000000000000000000000000000000000000000000181565b6102c07f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b9381565b61031c6104c636600461373d565b611b68565b6102476104d93660046137dc565b600260209081526000928352604080842090915290825290205481565b6102c07f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a381565b61053061052b3660046131f1565b611c5d565b60405161022b9190613861565b6102c07f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b81565b6102476105723660046136cb565b61206b565b60006001600160e01b031982166301ffc9a760e01b14806105a857506001600160e01b0319821663d505accf60e01b145b806105c357506001600160e01b03198216630b00663360e21b145b92915050565b60006105d36121ef565b61066a60405180610200016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001606081525090565b61067687890189613517565b6001600160a01b03166020820152600954600a546060830152604082015261069c612221565b60a08301819052608083018290526106b4919061238b565b610140820152604081015160808201516106ce9190613888565b60c0820152606081015160a08201516106e79190613888565b60e08201526106f58661243f565b95506000816040015160001461072b5761072682606001518360c0015161071c919061389f565b8360400151900490565b61072e565b60005b60e08301519091508111801561079957610789887f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d57f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b936124fd565b62ffffff166101c08401526107f0565b6107e4887f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b937f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d56124fd565b62ffffff166101c08401525b610818836101c0015162ffffff168460c001518560e001518587604001518860600151612522565b61012085015261010084018190526040840180516108379083906138be565b9052506101208301516060840180516108519083906138be565b90525060408301516060840151610868919061238b565b610160840181905260009061088090829081906125af565b61018086018190529091506000036108bd576103e88461014001516108a59190613888565b6101a08501526108b860006103e8612788565b6108f5565b6101608401516101808501516101408601516108da908390613888565b6108e4919061389f565b6108ee91906138ec565b6101a08501525b836101a0015160000361091b57604051633489be7560e21b815260040160405180910390fd5b61092e8460200151856101a00151612788565b6001600160a01b038816156109e2576001600160a01b0389168452604080516020601f89018190048102820181019092528781529088908890819084018382808284376000920191909152505050506101e0850152604051630204997360e41b81526001600160a01b038916906320499730906109af908790600401613a47565b600060405180830381600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b505050505b6109f484608001518560a001516127e5565b8015610a0457610140840151600b555b83602001516001600160a01b0316336001600160a01b03167fa8137fff86647d8a402117b9c5dbda627f721d3773338fb9678c83e54ed390808660c001518760e00151886101a00151604051610a5c93929190613a58565b60405180910390a35050506101a001519050610a786001600855565b9695505050505050565b60048054610a8f90613a96565b80601f0160208091040260200160405190810160405280929190818152602001828054610abb90613a96565b8015610b085780601f10610add57610100808354040283529160200191610b08565b820191906000526020600020905b815481529060010190602001808311610aeb57829003601f168201915b505050505081565b6000610b1d33848461282d565b50600192915050565b6001600160a01b03831660009081526002602090815260408083203384529091528120546000198114610b8257610b5d8382613888565b6001600160a01b03861660009081526002602090815260408083203384529091529020555b6001600160a01b03851660009081526001602052604081208054859290610baa908490613888565b90915550506001600160a01b038085166000818152600160205260409081902080548701905551909187169060008051602061438c83398151915290610bf1908790613298565b60405180910390a360019150505b9392505050565b6040805180820190915260008082526020820152610c226121ef565b610cce60405180610200016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600060ff168152602001606081525090565b610cda87890189613ac2565b60ff166101c08401526001600160a01b039081166020840152166060820152610d01612221565b60a08301908152608083019182523060009081526001602052604081205460c085015291519051610d339190836125af565b60e08401819052909150600003610d4957600080fd5b610d6a82608001518360c00151610d60919061389f565b8360e00151900490565b61010083015260a082015160c0830151610d8791610d609161389f565b61012083015260c0820151610d9d903090612895565b610da68761243f565b96507f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b936001600160a01b031682606001516001600160a01b031603610f3457610e30877f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d57f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b936124fd565b62ffffff166101a083018190526001600160a01b037f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d51660408401526101008301516080840151610ea4929190610e88908290613888565b8561012001518660a00151610e9d9190613888565b60016128f4565b610180840152610160830181905261012083018051610ec49083906138be565b91508181525050610f057f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b938360200151846101200151856101c00151612acb565b6101208201516101408301819052600061010084015260a083018051610f2c908390613888565b9052506110c5565b7f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d56001600160a01b031682606001516001600160a01b031614610f7657600080fd5b610fc1877f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b937f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d56124fd565b62ffffff166101a083018190526001600160a01b037f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93166040840152610120830151610100840151608085015161103993929161101d91613888565b8561012001518660a001516110329190613888565b60006128f4565b6101808401526101608301819052610100830180516110599083906138be565b9150818152505061109a7f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d58360200151846101000151856101c00151612acb565b610100820151610140830181905260006101208401526080830180516110c1908390613888565b9052505b6001600160a01b03861615611179576001600160a01b0387168252604080516020601f87018190048102820181019092528581529086908690819084018382808284376000920191909152505050506101e0830152604051630eace54160e11b81526001600160a01b03871690631d59ca8290611146908590600401613c35565b600060405180830381600087803b15801561116057600080fd5b505af1158015611174573d6000803e3d6000fd5b505050505b61118b82608001518360a001516127e5565b80156111a7576111a382608001518360a0015161238b565b600b555b604051806040016040528083606001516001600160a01b03168152602001836101400151815250925081602001516001600160a01b0316336001600160a01b03167fd175a80c109434bb89948928ab2475a6647c94244cb70002197896423c8833638461010001518561012001518660c0015160405161122993929190613a58565b60405180910390a35050610a786001600855565b828042111561125f57604051630407b05b60e31b815260040160405180910390fd5b600061126d88888888612be3565b90506112b0888286868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612c9c92505050565b6112cd57604051638baa579f60e01b815260040160405180910390fd5b6112d888888861282d565b5050505050505050565b600060065446146112fa576112f5612dc8565b905090565b5060075490565b60408051600280825260608083018452926020830190803683370190505090507f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d58160008151811061135557611355613c46565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93816001815181106113a9576113a9613c46565b60200260200101906001600160a01b031690816001600160a01b03168152505090565b60408051808201909152600080825260208201526113e86121ef565b611486604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600060ff168152602001606081525090565b61149287890189613ac2565b60ff166101808401526001600160a01b039081166020840152166040820152600954600a5460a083015260808201526114c9612221565b60e083015260c08201526114dc8661243f565b95507f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d56001600160a01b031681604001516001600160a01b03160361166457611566867f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d57f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b936124fd565b62ffffff166101608201526001600160a01b037f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93166060820152608081015160c08201516115b49190613888565b816101000181815250506115e381610160015162ffffff1682610100015183608001518460a0015160016128f4565b610140830152610120820181905260e082018051611602908390613888565b90525060208101516101008201516101208301516040516001600160a01b039093169233927fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82292611657926000918291613c74565b60405180910390a36117ed565b7f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b936001600160a01b031681604001516001600160a01b0316146116a657600080fd5b6116f1867f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b937f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d56124fd565b62ffffff166101608201526001600160a01b037f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d516606082015260a081015160e082015161173f9190613888565b8161010001818152505061176e81610160015162ffffff1682610100015183608001518460a0015160006128f4565b610140830152610120820181905260c08201805161178d908390613888565b90525060208101516101008201516101208301516040516001600160a01b039093169233927fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822926117e49260009291908390613ca9565b60405180910390a35b6f02dc594291f166eb96db5587d1ceb4227f00000000000000000000000000000000000000000000000000000000000000018260c0015161182e919061389f565b111561184d57604051631a93c68960e11b815260040160405180910390fd5b6f02dc594291f166eb96db5587d1ceb4227f000000000000000000000000000000000000000000000000000000e8d4a510008260e0015161188e919061389f565b11156118ad57604051631a93c68960e11b815260040160405180910390fd5b6118cb81606001518260200151836101200151846101800151612acb565b6001600160a01b0385161561197f576001600160a01b0386168152604080516020601f86018190048102820181019092528481529085908590819084018382808284376000920191909152505050506101a082015260405163608dbcbb60e01b81526001600160a01b0386169063608dbcbb9061194c908490600401613dfb565b600060405180830381600087803b15801561196657600080fd5b505af115801561197a573d6000803e3d6000fd5b505050505b6119918160c001518260e001516127e5565b60608101516001600160a01b0316825261012001516020820152610a786001600855565b604051634625a94d60e01b81526000906001600160a01b037f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a31690634625a94d90611a0c9030908990899089908990600401613e0c565b602060405180830381865afa158015611a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4d9190613e69565b95945050505050565b60058054610a8f90613a96565b6040516302a64b8360e21b81526000906001600160a01b037f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a31690630a992e0c90611ab2903090600401613387565b602060405180830381865afa158015611acf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f59190613e69565b33600090815260016020526040812080548391908390611b14908490613888565b90915550506001600160a01b0383166000818152600160205260409081902080548501905551339060008051602061438c83398151915290611b57908690613298565b60405180910390a350600192915050565b8380421115611b8a57604051630407b05b60e31b815260040160405180910390fd5b6000611b9889898989612be3565b9050600060018287878760405160008152602001604052604051611bbf9493929190613e8a565b6020604051602081039080840390855afa158015611be1573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b031614611c1f57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b038116611c4657604051638baa579f60e01b815260040160405180910390fd5b611c518a8a8a61282d565b50505050505050505050565b6060611c676121ef565b611cd260405180610140016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001606081525090565b611cde87890189613eb2565b60ff166101008301526001600160a01b03166020820152611cfd612221565b606083019081526040808401928352306000908152600160205290812054608085015291519051611d2f9190836125af565b60a08401819052909150600003611d4557600080fd5b611d6682604001518360800151611d5c919061389f565b8360a00151900490565b60c083015260608201516080830151611d8291611d5c9161389f565b60e08301526080820151611d97903090612895565b611dd07f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d583602001518460c00151856101000151612acb565b611e097f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b9383602001518460e00151856101000151612acb565b60c082015160408301805191909103905260e08201516060830180519190910390526001600160a01b03861615611ee757611e438761243f565b6001600160a01b03168252604080516020601f870181900481028201810190925285815290869086908190840183828082843760009201919091525050505061012083015260405163109ea27d60e31b81526001600160a01b038716906384f513e890611eb4908590600401613fae565b600060405180830381600087803b158015611ece57600080fd5b505af1158015611ee2573d6000803e3d6000fd5b505050505b611ef9826040015183606001516127e5565b8015611f1557611f118260400151836060015161238b565b600b555b6040805160028082526060820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081611f2b57905050925060405180604001604052807f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d56001600160a01b031681526020018360c0015181525083600081518110611fa957611fa9613c46565b602002602001018190525060405180604001604052807f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b936001600160a01b031681526020018360e001518152508360018151811061200957612009613c46565b602002602001018190525081602001516001600160a01b0316336001600160a01b03167fd175a80c109434bb89948928ab2475a6647c94244cb70002197896423c8833638460c001518560e00151866080015160405161122993929190613a58565b600954600a54600091907f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d56001600160a01b039081169087161483816120d1577f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d56120f3565b7f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b935b9050612111612103878a846124fd565b62ffffff16888686866128f4565b5098975050505050505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b1790529051600091606091839182916001600160a01b0387169161216691613fe1565b600060405180830381855afa9150503d80600081146121a1576040519150601f19603f3d011682016040523d82523d6000602084013e6121a6565b606091505b509150915081156121d2576001818060200190518101906121c79190614045565b935093505050915091565b600060405180602001604052806000815250935093505050915091565b60026008540361221a5760405162461bcd60e51b815260040161221190614080565b60405180910390fd5b6002600855565b6000807f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b6001600160a01b031663f7888aec7f0000000000000000000000004af15ec2a0bd43db75dd04e62faa3b8ef36b00d5306040518363ffffffff1660e01b81526004016122929291906140bb565b602060405180830381865afa1580156122af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d391906140e1565b604051633de222bb60e21b81529092506001600160a01b037f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b169063f7888aec90612344907f000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b939030906004016140bb565b602060405180830381865afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238591906140e1565b90509091565b60007f000000000000000000000000000000000000000000000000000000000000000183027f000000000000000000000000000000000000000000000000000000e8d4a5100083026f02dc594291f166eb96db5587d1ceb42282111561240457604051631a93c68960e11b815260040160405180910390fd5b6f02dc594291f166eb96db5587d1ceb42281111561243557604051631a93c68960e11b815260040160405180910390fd5b611a4d8282612e51565b60006001600160a01b038216156124f9576001600160a01b03821633146124f957604051632af3bd5560e21b81526001600160a01b037f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a3169063abcef554906124ac903390600401613387565b602060405180830381865afa1580156124c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ed9190614115565b6124f957506000919050565b5090565b600061251a848484604051806020016040528060008152506119b5565b949350505050565b60008083600003612538575060009050806125a4565b8486106125705761256961254c8688613888565b612556908a61389f565b612564620186a0600261389f565b900490565b90506125a4565b60008361257d868961389f565b61258791906138ec565b90506125a0612596828a613888565b612556908b61389f565b9250505b965096945050505050565b600080600054905060007f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a36001600160a01b0316634ccb20c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263b9190614141565b600b546001600160a01b03821615159450909150801561277e57831561277857846000036126705761266d878761238b565b94505b80851115612773576000612682611a63565b62ffffff1690506000816126968489613888565b6126a0908761389f565b6126aa919061389f565b905060006126b8848461389f565b886126c685620186a0613888565b6126d0919061389f565b6126da91906138be565b905060006126e882846138ec565b9050801561276e576126fa8682612788565b604051631087d04360e31b81526001600160a01b0387169063843e82189061272d90600290309086908a90600401614177565b600060405180830381600087803b15801561274757600080fd5b505af115801561275b573d6000803e3d6000fd5b50505050808761276b91906138be565b96505b505050505b61277e565b6000600b555b5050935093915050565b8060008082825461279991906138be565b90915550506001600160a01b0382166000818152600160205260408082208054850190555160008051602061438c833981519152906127d9908590613298565b60405180910390a35050565b600a81905560098290556040517fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a906128219084908490613315565b60405180910390a15050565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612888908590613298565b60405180910390a3505050565b6001600160a01b038216600090815260016020526040812080548392906128bd908490613888565b90915550506000805482900381556040516001600160a01b0384169060008051602061438c833981519152906127d9908590613298565b600080856000036129085760009150612ac1565b60006129347f00000000000000000000000000000000000000000000000000000000000000018761389f565b905060006129627f000000000000000000000000000000000000000000000000000000e8d4a510008761389f565b905061297a6129718a8a61389f565b620186a0900490565b92506000612988848a613888565b905060006129968484612e51565b90508615612a2f5760006129ca7f00000000000000000000000000000000000000000000000000000000000000018461389f565b6129d490866138be565b905060006129e28284612f1d565b905060016129f08287613888565b6129fa9190613888565b9750612a267f000000000000000000000000000000000000000000000000000000e8d4a51000896138ec565b97505050612abc565b6000612a5b7f000000000000000000000000000000000000000000000000000000e8d4a510008461389f565b612a6590856138be565b90506000612a738284612f1d565b90506001612a818288613888565b612a8b9190613888565b9750612ab77f0000000000000000000000000000000000000000000000000000000000000001896138ec565b975050505b505050505b9550959350505050565b8060ff16600003612b5d576040516317d5759960e31b81526001600160a01b037f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b169063beabacc890612b26908790879087906004016141c1565b600060405180830381600087803b158015612b4057600080fd5b505af1158015612b54573d6000803e3d6000fd5b50505050612bdd565b604051636cb568c160e01b81526001600160a01b037f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b1690636cb568c190612baf9087908790879087906004016141dc565b600060405180830381600087803b158015612bc957600080fd5b505af11580156112d8573d6000803e3d6000fd5b50505050565b6000612bed6112e2565b6001600160a01b038616600090815260036020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c992899289928992909190612c3b83614211565b9190505587604051602001612c559695949392919061422b565b60405160208183030381529060405280519060200120604051602001612c7c92919061427a565b604051602081830303815290604052805190602001209050949350505050565b600080612ca98484612fcd565b9050846001600160a01b0316816001600160a01b031603612cdd576001600160a01b03811615612cdd576001915050610bff565b600080866001600160a01b0316631626ba7e60e01b8787604051602401612d059291906142ab565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612d439190613fe1565b600060405180830381855afa9150503d8060008114612d7e576040519150601f19603f3d011682016040523d82523d6000602084013e612d83565b606091505b5091509150818015612d96575080516020145b8015612dbd57508051630b135d3f60e11b90612dbb90830160209081019084016140e1565b145b979650505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6004604051612dfa919061433d565b604051908190038120612e3692917fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc69046903090602001614349565b60405160208183030381529060405280519060200120905090565b600080612e5e83856138be565b905080600003612e715760009150612f16565b600081815b610100811015612f11576000612ea1612e9a612e9385868c613080565b858a613080565b6004900490565b9050829350612ef1612eb460028361309f565b612ec06107d08861309f565b612eca91906138be565b84612ed660038561309f565b612ee26107cf8861309f565b612eec91906138be565b6130b0565b9250612efd83856130c5565b15612f085750612f11565b50600101612e76565b509250505b5092915050565b600080612f358384612f3060028861309f565b613080565b9050612f448184610fa06130e7565b90506000612f566107d08504866138be565b9050600084935060005b610100811015612fc357849150612fab84612f7b87886130fb565b612f8591906138be565b8785612f9260028a61309f565b612f9c91906138be565b612fa69190613888565b61310f565b9450612fb785836130c5565b612fc357600101612f60565b5050505092915050565b60008151604114612fe0575060006105c3565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561302657600093505050506105c3565b600186828585604051600081526020016040526040516130499493929190613e8a565b6020604051602081039080840390855afa15801561306b573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b82820281151584158583048514171661309857600080fd5b0492915050565b81810282810482146105c357600080fd5b82820281151584820484141661309857600080fd5b6000818311156130dc5750600181830311156105c3565b506001919003111590565b828202831584820484141761309857600080fd5b81810282158382048314176105c357600080fd5b808204816105c357600080fd5b6001600160e01b031981165b811461313357600080fd5b50565b80356105c38161311c565b60006020828403121561315657613156600080fd5b600061251a8484613136565b8015155b82525050565b602081016105c38284613162565b60008083601f84011261318f5761318f600080fd5b50813567ffffffffffffffff8111156131aa576131aa600080fd5b6020830191508360018202830111156131c5576131c5600080fd5b9250929050565b60006001600160a01b0382166105c3565b613128816131cc565b80356105c3816131dd565b6000806000806000806080878903121561320d5761320d600080fd5b863567ffffffffffffffff81111561322757613227600080fd5b61323389828a0161317a565b9650965050602061324689828a016131e6565b945050604061325789828a016131e6565b935050606087013567ffffffffffffffff81111561327757613277600080fd5b61328389828a0161317a565b92509250509295509295509295565b80613166565b602081016105c38284613292565b60005b838110156132c15781810151838201526020016132a9565b83811115612bdd5750506000910152565b60006132dc825190565b8084526020840193506132f38185602086016132a6565b601f01601f19169290920192915050565b60208082528101610bff81846132d2565b604081016133238285613292565b610bff6020830184613292565b80613128565b80356105c381613330565b6000806040838503121561335757613357600080fd5b600061336385856131e6565b925050602061337485828601613336565b9150509250929050565b613166816131cc565b602081016105c3828461337e565b6000806000606084860312156133ad576133ad600080fd5b60006133b986866131e6565b93505060206133ca868287016131e6565b92505060406133db86828701613336565b9150509250925092565b805160408301906133f6848261337e565b506020820151612bdd6020850182613292565b604081016105c382846133e5565b60008060008060008060a0878903121561343357613433600080fd5b600061343f89896131e6565b965050602061345089828a016131e6565b955050604061346189828a01613336565b945050606061347289828a01613336565b935050608087013567ffffffffffffffff81111561327757613277600080fd5b60ff8116613166565b602081016105c38284613492565b60006134b5838361337e565b505060200190565b60006134c7825190565b80845260209384019383018060005b838110156134fb5781516134ea88826134a9565b9750602083019250506001016134d6565b509495945050505050565b60208082528101610bff81846134bd565b60006020828403121561352c5761352c600080fd5b600061251a84846131e6565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561357457613574613538565b6040525050565b600061358660405190565b9050613592828261354e565b919050565b600067ffffffffffffffff8211156135b1576135b1613538565b601f19601f83011660200192915050565b82818337506000910152565b60006135e16135dc84613597565b61357b565b9050828152602081018484840111156135fc576135fc600080fd5b6136078482856135c2565b509392505050565b600082601f83011261362357613623600080fd5b813561251a8482602086016135ce565b6000806000806080858703121561364c5761364c600080fd5b600061365887876131e6565b9450506020613669878288016131e6565b935050604061367a878288016131e6565b925050606085013567ffffffffffffffff81111561369a5761369a600080fd5b6136a68782880161360f565b91505092959194509250565b62ffffff8116613166565b602081016105c382846136b2565b6000806000606084860312156136e3576136e3600080fd5b60006136ef86866131e6565b935050602061370086828701613336565b92505060406133db868287016131e6565b61ffff8116613166565b602081016105c38284613711565b60ff8116613128565b80356105c381613729565b600080600080600080600060e0888a03121561375b5761375b600080fd5b60006137678a8a6131e6565b97505060206137788a828b016131e6565b96505060406137898a828b01613336565b955050606061379a8a828b01613336565b94505060806137ab8a828b01613732565b93505060a06137bc8a828b01613336565b92505060c06137cd8a828b01613336565b91505092959891949750929550565b600080604083850312156137f2576137f2600080fd5b60006137fe85856131e6565b9250506020613374858286016131e6565b600061381b83836133e5565b505060400190565b600061382d825190565b80845260209384019383018060005b838110156134fb578151613850888261380f565b97506020830192505060010161383c565b60208082528101610bff8184613823565b634e487b7160e01b600052601160045260246000fd5b60008282101561389a5761389a613872565b500390565b60008160001904831182151516156138b9576138b9613872565b500290565b600082198211156138d1576138d1613872565b500190565b634e487b7160e01b600052601260045260246000fd5b6000826138fb576138fb6138d6565b500490565b8051600090610200840190613915858261337e565b506020830151613928602086018261337e565b50604083015161393b6040860182613292565b50606083015161394e6060860182613292565b5060808301516139616080860182613292565b5060a083015161397460a0860182613292565b5060c083015161398760c0860182613292565b5060e083015161399a60e0860182613292565b506101008301516139af610100860182613292565b506101208301516139c4610120860182613292565b506101408301516139d9610140860182613292565b506101608301516139ee610160860182613292565b50610180830151613a03610180860182613292565b506101a0830151613a186101a0860182613292565b506101c0830151613a2d6101c08601826136b2565b506101e08301518482036101e0860152611a4d82826132d2565b60208082528101610bff8184613900565b60608101613a668286613292565b613a736020830185613292565b61251a6040830184613292565b634e487b7160e01b600052602260045260246000fd5b600281046001821680613aaa57607f821691505b602082108103613abc57613abc613a80565b50919050565b600080600060608486031215613ada57613ada600080fd5b6000613ae686866131e6565b9350506020613af7868287016131e6565b92505060406133db86828701613732565b8051600090610200840190613b1d858261337e565b506020830151613b30602086018261337e565b506040830151613b43604086018261337e565b506060830151613b56606086018261337e565b506080830151613b696080860182613292565b5060a0830151613b7c60a0860182613292565b5060c0830151613b8f60c0860182613292565b5060e0830151613ba260e0860182613292565b50610100830151613bb7610100860182613292565b50610120830151613bcc610120860182613292565b50610140830151613be1610140860182613292565b50610160830151613bf6610160860182613292565b50610180830151613c0b610180860182613292565b506101a0830151613c206101a08601826136b2565b506101c0830151613a2d6101c0860182613492565b60208082528101610bff8184613b08565b634e487b7160e01b600052603260045260246000fd5b60006105c3613c688381565b90565b61316681613c5c565b60808101613c828287613292565b613c8f6020830186613c6b565b613c9c6040830185613c6b565b611a4d6060830184613292565b60808101613cb78287613c6b565b613cc46020830186613292565b613cd16040830185613292565b611a4d6060830184613c6b565b80516000906101c0840190613cf3858261337e565b506020830151613d06602086018261337e565b506040830151613d19604086018261337e565b506060830151613d2c606086018261337e565b506080830151613d3f6080860182613292565b5060a0830151613d5260a0860182613292565b5060c0830151613d6560c0860182613292565b5060e0830151613d7860e0860182613292565b50610100830151613d8d610100860182613292565b50610120830151613da2610120860182613292565b50610140830151613db7610140860182613292565b50610160830151613dcc6101608601826136b2565b50610180830151613de1610180860182613492565b506101a08301518482036101a0860152611a4d82826132d2565b60208082528101610bff8184613cde565b60a08101613e1a828861337e565b613e27602083018761337e565b613e34604083018661337e565b613e41606083018561337e565b8181036080830152612dbd81846132d2565b62ffffff8116613128565b80516105c381613e53565b600060208284031215613e7e57613e7e600080fd5b600061251a8484613e5e565b60808101613e988287613292565b613ea56020830186613492565b613c9c6040830185613292565b60008060408385031215613ec857613ec8600080fd5b6000613ed485856131e6565b925050602061337485828601613732565b8051600090610140840190613efa858261337e565b506020830151613f0d602086018261337e565b506040830151613f206040860182613292565b506060830151613f336060860182613292565b506080830151613f466080860182613292565b5060a0830151613f5960a0860182613292565b5060c0830151613f6c60c0860182613292565b5060e0830151613f7f60e0860182613292565b50610100830151613f94610100860182613492565b50610120830151848203610120860152611a4d82826132d2565b60208082528101610bff8184613ee5565b6000613fc9825190565b613fd78185602086016132a6565b9290920192915050565b6000610bff8284613fbf565b6000613ffb6135dc84613597565b90508281526020810184848401111561401657614016600080fd5b6136078482856132a6565b600082601f83011261403557614035600080fd5b815161251a848260208601613fed565b60006020828403121561405a5761405a600080fd5b815167ffffffffffffffff81111561407457614074600080fd5b61251a84828501614021565b602080825281016105c381601f81527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00602082015260400190565b604081016140c9828561337e565b610bff602083018461337e565b80516105c381613330565b6000602082840312156140f6576140f6600080fd5b600061251a84846140d6565b801515613128565b80516105c381614102565b60006020828403121561412a5761412a600080fd5b600061251a848461410a565b80516105c3816131dd565b60006020828403121561415657614156600080fd5b600061251a8484614136565b600061ffff82166105c3565b61316681614162565b60a08101614185828761416e565b614192602083018661337e565b61419f6040830185613292565b6141ac6060830184613292565b81810360808301526000815260208101610a78565b606081016141cf828661337e565b613a73602083018561337e565b608081016141ea828761337e565b6141f7602083018661337e565b6142046040830185613292565b611a4d6060830184613492565b6000600019820361422457614224613872565b5060010190565b60c081016142398289613292565b614246602083018861337e565b614253604083018761337e565b6142606060830186613292565b61426d6080830185613292565b612dbd60a0830184613292565b61190160f01b815260020160006142918285613292565b6020820191506142a18284613292565b5060200192915050565b604081016142b98285613292565b818103602083015261251a81846132d2565b600081546142d881613a96565b6001821680156142ef576001811461430457614334565b60ff1983168652811515820286019350614334565b60008581526020902060005b8381101561432c57815488820152600190910190602001614310565b838801955050505b50505092915050565b6000610bff82846142cb565b60a081016143578288613c6b565b6143646020830187613292565b6143716040830186613c6b565b61437e6060830185613292565b610a78608083018461337e56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207109ea094f67aefa7fab2e355bbd917e56bb2dd13ac7eeb048e7a62a1e0a50f564736f6c634300080f0033" + }, + { + "address": "0x0bc94aa6486d126b0d0594b11f34e17a3718919f", + "nonce": 16, + "balance": "0x000000000000000000000000000000000000000000000000005a89a156b76a7e", + "code": "0x" + }, + { + "address": "0x8aa5a31df8a9994bbca5f358d80f5e3ef8f4d43d", + "nonce": 0, + "balance": "0x00000000000000000000000000000000000000000000000000225815d50b3000", + "code": "0x" + }, + { + "address": "0xe31d80d4136706022fccef1e40d07f289a68c29e", + "nonce": 11, + "balance": "0x000000000000000000000000000000000000000000000000002b986c572ab09b", + "code": "0x" + }, + { + "address": "0x5f035f5f3bd2abdb8ef9fddbd251ece2ef24f2b4", + "nonce": 3, + "balance": "0x000000000000000000000000000000000000000000000000001701cfa9626100", + "code": "0x" + }, + { + "address": "0x50bd7c177e51ac52a11775b029627ac1c9ed0953", + "nonce": 2, + "balance": "0x000000000000000000000000000000000000000000000000064d4a5fa195fd98", + "code": "0x" + }, + { + "address": "0x2e98ef87f7f0d31987a0d94051b8bc5d001152e8", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436101561001257600080fd5b6000803560e01c908163669a9d9d1461006a575080637a97f8cf14610065578063d3115a8a14610060578063ea8f29c81461005b5763fe8886651461005657600080fd5b610646565b610597565b6104eb565b610460565b60c03660031901126100e9576024356001600160401b038082116100ec57366023830112156100ec578160040135928184116100e9573660248560051b850101116100e9576044359182116100e957506100c890369060040161019c565b6100d0610215565b906100d9610224565b9360246084359401600435611ecb565b80fd5b8280fd5b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b0382111761012157604052565b6100f0565b6001600160401b03811161012157604052565b604081019081106001600160401b0382111761012157604052565b90601f801991011681019081106001600160401b0382111761012157604052565b6001600160401b0381116101215760051b60200190565b80600f0b0361019757565b600080fd5b81601f82011215610197578035916101b383610175565b926101c16040519485610154565b808452602092838086019260051b820101928311610197578301905b8282106101eb575050505090565b83809183356101f98161018c565b8152019101906101dd565b6001600160a01b0381160361019757565b6064359061022282610204565b565b60a4359061022282610204565b81601f820112156101975780359161024883610175565b926102566040519485610154565b808452602092838086019260051b820101928311610197578301905b828210610280575050505090565b81358152908301908301610272565b6001600160401b03811161012157601f01601f191660200190565b81601f82011215610197578035906102c18261028f565b926102cf6040519485610154565b8284526020838301011161019757816000926020809301838601378301015290565b81601f820112156101975780359061030882610175565b92604061031781519586610154565b8385526020938486019185600592831b8601019484861161019757868101935b86851061034957505050505050505090565b6001600160401b03853581811161019757830191606080601f19858b0301126101975785519061037882610106565b8b8501358252868501358481116101975785018a603f8201121561019757808d80920135896103a682610175565b936103b382519586610154565b8285528401918c1b830101918d8311610197578f908b01915b8383106104045750915050830152840135928311610197576103f5898c809695819601016102aa565b86820152815201940193610337565b819083358152019101908f906103cc565b90815180825260208080930193019160005b828110610435575050505090565b8351600f0b85529381019392810192600101610427565b90602061045d928181520190610415565b90565b346101975760803660031901126101975760043561047d81610204565b6001600160401b036024358181116101975761049d903690600401610231565b91604435828111610197576104b690369060040161019c565b606435928311610197576104e7936104d56104db9436906004016102f1565b92610ba3565b6040519182918261044c565b0390f35b6060366003190112610197576001600160401b0360043581811161019757610517903690600401610231565b6024358281116101975761052f90369060040161019c565b604435928311610197576105896001916105506104e79536906004016102f1565b907f079bb613b46d8aca7a0fbe9d391ceb5913593f8825aa19f06db6024aa331ac7594610580600287541061080a565b60028655610905565b91556040519182918261044c565b34610197576040366003190112610197576001600160401b03600435818111610197576105c8903690600401610231565b60243591821161019757366023830112156101975781600401356105eb81610175565b926105f96040519485610154565b81845260209160248386019160051b8301019136831161019757602401905b82821061062c576104e76104db8787611cbf565b81358152908301908301610618565b600091031261019757565b34610197576000806003193601126100e9576107627f0000000000000000000000002e98ef87f7f0d31987a0d94051b8bc5d001152e86106846133f3565b5061068d612b43565b906106ab8361069b846108df565b516001600160a01b039091169052565b8460206106b7846108df565b5101526106c2612b98565b60406106cd846108df565b5101526106f56106e960406106e1856108df565b5101516108df565b636988ad4560e11b9052565b6001600160a01b038181161515906000805160206141eb833981519152908590836107b8575b811615948561079d575b61073460405192839283612bb2565b0390a18363d3115a8a1955610785575b501561076557610752612fb2565b505b61075d81613447565b613563565b80f35b61076d612cc1565b5061077f61077a82610d21565b612d47565b50610754565b61079161079691610d21565b6130c1565b5038610744565b6107b360206107ab836108df565b510160029052565b610725565b6107ce60206107c6886108df565b510160019052565b61071b565b634e487b7160e01b600052601160045260246000fd5b6000198101919082116107f857565b6107d3565b919082039182116107f857565b1561081157565b60405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b6044820152606490fd5b1561084a57565b60405162461bcd60e51b815260206004820152600f60248201526e6d616c666f726d656420617272617960881b6044820152606490fd5b1561019757565b9061089282610175565b61089f6040519182610154565b82815280926108b0601f1991610175565b0190602036910137565b60001981146107f85760010190565b634e487b7160e01b600052603260045260246000fd5b8051156108ec5760200190565b6108c9565b80518210156108ec5760209160051b010190565b8051928251841480610ac5575b61091b90610843565b61092681848461230f565b959192905060005b828110610a4e57506109489034610a1f575b8585336110d9565b60005b8181106109bd575050156109b7576109639051610888565b9160005b83518110156109b157806109a761099561098e6109876109ac95876108f1565b51876108f1565b51600f0b90565b61099f83886108f1565b90600f0b9052565b6108ba565b610967565b50505090565b50905090565b80600180920160051b80870151600f9080820b9182156000146109e557505050505b0161094b565b6000831315610a05575050610a009187015133903090613d4f565b6109df565b909150610a009288015191600003900b9030903390614177565b610a49610a2b866137cb565b610a3c610a3734610b3c565b610b2c565b90889060010160051b0152565b610940565b80600180920160051b80880151600f0b90610a6c6000831215610881565b60008213610a7d575b50500161092e565b610aa3610a97610abe93610ab2938b01513090339061414a565b6001600160801b031690565b6001600160801b0316600f0b90565b6001830160051b890152565b3880610a75565b506101008410610912565b15610ad757565b60405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608490fd5b9061022282600f0b928314610ad0565b6001600160ff1b038111610b4d5790565b60405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608490fd5b9392600192610be4927f079bb613b46d8aca7a0fbe9d391ceb5913593f8825aa19f06db6024aa331ac7596610bdb600289541061080a565b60028855610be8565b9255565b9290928351835181149081610c88575b5015610c5157610c198284610c0f8795828761230f565b98919590506110d9565b156109b757610c289051610888565b9160005b83518110156109b157806109a761099561098e610987610c4c95876108f1565b610c2c565b60405162461bcd60e51b815260206004820152600f60248201526e1b585b199bdc9b5959081a5b9c1d5d608a1b6044820152606490fd5b61010091501038610bf8565b15610c9b57565b60405162461bcd60e51b81526020600482015260076024820152667369707061676560c81b6044820152606490fd5b15610cd157565b60405162461bcd60e51b815260206004820152602260248201527f796f752063616e2774207769746864726177206f7468657227732062616c616e604482015261636560f01b6064820152608490fd5b6001600160a01b031660009081527f643b8a6b3ed8752748bc6461fd4a02b0c30db5660ff05b0028ccebefb6b5f2636020526040902090565b6001600160a01b031660009081527f7d9b04b9e52f7a4e4f7cdff570205d7c27d6f7283dab59d340ff6676d10571b66020526040902090565b6001600160a01b031660009081527fe35cc21d37873d362c6d20195c3a1c72fa511d9573329821aa68d4bc28c9e7b86020526040902090565b6001600160a01b031660009081526000805160206141ab8339815191526020526040902090565b9060018060a01b0316600052602052604060002090565b919091600083820193841291129080158216911516176107f857565b600f91820b910b039060016001607f1b0319821260016001607f1b038313176107f857565b90815180825260208080930193019160005b828110610e6b575050505090565b835185529381019392810192600101610e5d565b9091610e9661045d93604084526040840190610e4b565b916020818403910152610415565b9496959192610ec760a09594610ed593885260c0602089015260c0880190610e4b565b908682036040880152610415565b95600180851b038093166060860152608085015216910152565b919082519283825260005b848110610f1b575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610efa565b92610f5761045d9593610f659360018060a01b03168652608060208701526080860190610e4b565b908482036040860152610415565b916060818403910152610eef565b6040513d6000823e3d90fd5b81601f8201121561019757805191610f9683610175565b92610fa46040519485610154565b808452602092838086019260051b820101928311610197578301905b828210610fce575050505090565b8380918351610fdc8161018c565b815201910190610fc0565b906020828203126101975781516001600160401b0381116101975761045d9201610f7f565b9061101f90604083526040830190610e4b565b81810360209283015282518082529082019282019160005b828110611045575050505090565b835185529381019392810192600101611037565b600f0b60016001607f1b031981146107f85760000390565b600f91820b910b019060016001607f1b0319821260016001607f1b038313176107f857565b919091604081840312610197578051926001600160401b039384811161019757816110c2918401610f7f565b9360208301519081116101975761045d9201610f7f565b91939290600091825b8151811015611bcc576110f581836108f1565b5160208101519081519061110882610888565b92839161111484610888565b9160005b858110611adc57508a8251938460001a801560001461125f57506040938401518451631d86f10160e31b815296879361115693919060048601610f2f565b6001600160a01b0394851696916000918791900381838a5af191821561125a57878f88906000988996611228575b5092859289926111a695878551148061121e575b6111a190610881565b612a70565b60005b8181106111fa57505050917fbaec78ca3218aba6fc32d82b79acdd1a47663d7b8da46e0c00947206d08f2071916111ed6111f597969594519283928d169683610e7f565b0390a36108ba565b6110e2565b80611218610ab2600180940160051b80870151908a015101600f0b90565b016111a9565b5085518814611198565b6111a69492965061124c9193993d8091833e6112448183610154565b810190611096565b909890959193909290611184565b610f73565b90955090506001810361138e5750891561137c575b6001600160a01b0392831694611289866128ed565b6000878d6112b06040809701518751998a948594631072ff1f60e11b865260048601610f2f565b0381838a5af191821561125a57878f88906000988996611352575b5092859289926112e795878551148061121e576111a190610881565b60005b81811061132e57505050917fded5415ee05ea676deae44e3fdba7daa1ec0c86fed40cc0d0fa9908a98baa168916111ed6111f597969594519283928d169683610e7f565b8061134c610ab2600180940160051b80870151908a015101600f0b90565b016112ea565b6112e79492965061136e9193993d8091833e6112448183610154565b9098909591939092906112cb565b98506113866127cf565b600198611274565b939490936002908082036115b25750506113a781610888565b6001600160a01b039384169590949060005b838110611537575060408094015190873b156101975760008e918a6113f3885195869384936313c679ff60e01b8552600497888601610f2f565b0381838c5af190811561125a576000928a9261151e575b5061142686519889938493631d51e53960e31b8552840161100c565b038183305af194851561125a576000956114fb575b5060008e5b8382106114855750505050917f613a0b8d7d8bf2705187bfe8332a743e6bbffa1e4f8bafec7b6f0ed8fca59201916111ed6111f597969594519283928d169683610e7f565b906109a7610ab26114f5936114ef6001850160051b9161099f838d01936114cd6114af8651611059565b918b0151916001600160801b038316600f90810b91900b1315610881565b6114e985519160f81c916114e461098e84876108f1565b611071565b926108f1565b51611059565b8e611440565b61151791953d8091833e61150f8183610154565b810190610fe7565b933861143b565b8061152b61153192610126565b8061063b565b3861140a565b806001611594920160051b808b019061156061155430845161392a565b6001850160051b8c0152565b8401518a81600f0b60008113908115916115a1575b506115995791516109a7926001600160801b0390921691903090613d4f565b6113b9565b5050506108ba565b60016001607f1b0314905038611575565b90939694925060038114600014611925575050508715611913575b6115df6001600160a01b0385166128ed565b6115f16001600160a01b038516610d93565b9063ffffffff9081611607845463ffffffff1690565b16156118f9575b8161161d845463ffffffff1690565b1660018111611809575b505050906111f5949392918b8a61165f7f000000000000000000000000aec06345b26451bda999d83b361beaad6ea93f87809561385e565b60009590600181016116b7575b5050604051600f9590950b85525050506001600160a01b038981169316917f79a02325cb94513a3505278348f98ec59be59bfe1bd80376ae39c5917247463f915080602081016111ed565b60010160051b01519450919290919089600f86810b60016001607f1b03146117fb5761098e6117dd6117e99489946117e4946117d761099f996117d1610a976117886117f09f60018161175e8f61173961173461173e9261172b61171f611734995460901c90565b6001600160701b031690565b9d0b809d610e0a565b611c70565b611c07565b82546001600160901b031660909190911b6001600160901b031916178255565b6000805160206141cb833981519152546117bf9061178d9061178890611734908d9060801c610e0a565b611bee565b6000805160206141cb83398151915280546001600160801b031660809290921b6001600160801b031916919091179055565b01966117cb8689610df3565b54610e0a565b92610df3565b5561385e565b80966108f1565b610e26565b918d6108f1565b38808b8a828061166c565b5050505050505060006117f0565b61181390426107fd565b908161184c575b5050906118406111f596959493924216829063ffffffff1663ffffffff19825416179055565b90919293943880611627565b8301549060008e8b8e5b858410611866575050505061181a565b60008b866118af6118df9796956118a185966040519485938a602086019863669a9d9d60e01b8a5260018060a01b0316918d60248801610ea4565b03601f198101835282610154565b51907f0000000000000000000000002e98ef87f7f0d31987a0d94051b8bc5d001152e85af46118e7575b506108ba565b8e8b8e611856565b60006020825160051b92013e8f6118d9565b825463ffffffff191663ffffffff4284161617835561160e565b965061191d6127cf565b6001966115cd565b9195949392509060048103611a6c57506001600160a01b038a81169594169385851460008e5b84821061198f5750505050506111f5949392917f953ae389afac40aac3257d935e810a67594cd53c82841043b9cb722af8189a5c916111ed60405192839283610e7f565b906109a7611a49926119f26117348a6119ec6119e661098e8f6119df8f6119d08c8f81956119cb82848d6114e9959215611a4f575b5050610cca565b610d5a565b51600052602052604060002090565b54946108f1565b600f0b90565b90610e0a565b611a086119fe8c610d5a565b6119d0868c6108f1565b5561099f611a1961098e858c6108f1565b6114e9611a3b611a35611a356001890160051b8c015160f81c90565b60ff1690565b916117e461098e84876108f1565b8e61194b565b60009250611a609161098e916108f1565b600f0b1215848d6119c4565b92509392505060058091146000146101975760005b838110611a9557505050506111f5906108ba565b80611ad68c611ac46119e6611abb61098e6001809801891b8a0151948560f81c906108f1565b600003600f0b90565b90848060801b0316600f0b1215610c94565b01611a81565b600191929394508d828b600592828501841b938488015193611b158d8887841a94848960001a01901b80970151919060010160051b0152565b81611b455750505050611b3a9150838060801b0316600f0b82879060010160051b0152565b019085939291611118565b92935090918103611b7157505060016001607f1b036001840160051b88015250611b6c9050565b611b3a565b60028103611b8c575001516001830160051b87015250611b3a565b90506003915014611b9e575b50611b3a565b611bba6119e6611bb5611bc6938b0151309061392a565b611bd5565b6001830160051b870152565b38611b98565b50505050509050565b60026001607f1b0380821015611be9575090565b905090565b6001600160801b0390611c0382821115610ad0565b1690565b6001600160701b0390818111611c1b571690565b60405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663132206269747360c81b6064820152608490fd5b60008112611c7b5790565b606460405162461bcd60e51b815260206004820152602060248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152fd5b919091611ccc8151610888565b600090815b8351811015611d62576001810160051b90818501611d04611cfb611cf630845161392a565b610b3c565b93890151610b3c565b928584820394128185128116918513901516176107f857611d27611d4a93610b2c565b611d388184879060010160051b0152565b600f0b858113611d4f575b50506108ba565b611cd1565b611d5b91309051613baa565b3880611d43565b5093505050565b91608083830312610197578251906001600160401b03918281116101975784019383601f86011215610197578451611da081610175565b90611dae6040519283610154565b808252602096878084019260051b820101918783116101975788809201905b838210611e1f5750505050948101518381116101975784611def918301610f7f565b9360408201518481116101975781611e08918401610f7f565b9360608301519081116101975761045d9201610f7f565b81518152908201908201611dcd565b6001600160a01b039091168152602081019190915260400190565b600160ff1b81146107f85760000390565b90670de0b6b3a7640000918281029281840414901517156107f857565b90633b9aca0091808302928304036107f857565b818102929181159184041417156107f857565b8115611ea8570490565b634e487b7160e01b600052601260045260246000fd5b919082018092116107f857565b611eeb611ef79197969295979493946002611ee58a610d93565b016121d4565b6001600160a01b031690565b60405163376fc5bf60e01b81526001600160a01b03808316969193909260009291600490849087908190611f2e908f868401611e2e565b0381838d5af193841561125a57808093819882976121a2575b50611f648351865181149081612197575b8161218c575b50610881565b815b835181101561218157808f8f928f8f928f928f918f918f918f918f918f918f91908f918f908f9b6001998a850160051b80990198808a51611fa790600f0b90565b9e019d8e51611fb690600f0b90565b611fbf91610e0a565b90808301918251611fd090600f0b90565b611fd991610e0a565b611fe290611e49565b611feb90611c70565b9801519d8e9a8b98611fff8a998a966108f1565b51600f0b600f0b131561201190610881565b51905191519261202094612711565b61202990610d93565b9485019061203691610df3565b60009182526020526040902096835461204f9060901c90565b6001600160701b03161561214657505061208261206e61208992611e5a565b61207c61171f855460901c90565b90611e9e565b8654611ebe565b85555b8684865496019461209d8287610df3565b546120a890886107fd565b9201906120b491610df3565b546120be91611e8b565b670de0b6b3a76400009004976120d392613732565b936120dd91610df3565b5561211095600019831461211557505061099f906114e9612103610a376109a796610b3c565b6114e461098e84876108f1565b611f66565b61213f9350612137925061212890610d5a565b90600052602052604060002090565b918254611ebe565b90556108ba565b90612128612176927f8f688873691912f8fe135293a1e4047b82cd30dddf57571cb75b40a636c8f5d65416610d5a565b90815401905561208c565b8a5160051b60208c01f35b905088511438611f5e565b8b5181149150611f58565b9250955092506121c59196503d8084833e6121bd8183610154565b810190611d69565b97929390939193979538611f47565b906121de9161221a565b905460039190911b1c6001600160a01b031690565b60008051602061426b83398151915280548210156108ec5760005260206000200190600090565b80548210156108ec5760005260206000200190600090565b1561223957565b60405162461bcd60e51b815260206004820152601060248201526f323ab83634b1b0ba32b2103a37b5b2b760811b6044820152606490fd5b1561227857565b60405162461bcd60e51b815260206004820152602560248201527f6475706c69636174656420746f6b656e20696e2056656c6f636f72654f70657260448201526430ba34b7b760d91b6064820152608490fd5b156122d257565b60405162461bcd60e51b81526020600482015260156024820152743a37b5b2b7103737ba1034b7103a37b5b2b72932b360591b6044820152606490fd5b919261231b8351610888565b926123268151610888565b926000958683519282519460015b85811061256557505050612533575b60005b8381106123535750505050565b602061235f82846108f1565b5101518381519160005b8381106123a557509161238c91600194938215928315612392575b5050506122cb565b01612346565b60051b015160001a109050853880612384565b9091508a15612524576001810160051b8201516123f36123e66123d66123cf8d8560001a906108f1565b5160ff1690565b60f81b6001600160f81b03191690565b6001600160f81b03191690565b6001600160f81b03909116176001820160051b83018190525b816001831015806124fd575b61242a575b5050600101908591612369565b929a919b9396949597999890995b836001811015806124d6575b1561246b578c6124669160001901958060051b820151919060010160051b0152565b612438565b6001939c94509a6124a29199979698959d929a9b806000198751011480156124a9575b61249790612271565b60010160051b850152565b903861241d565b506124976002820160051b87015160001a60ff60f81b60f891818660001a841b16921b161415905061248e565b508b8d60ff60f81b908360051b015160001a8160f891821b169260001a901b161115612444565b5060ff60f81b8360051b85015160001a908060f892831b16918460001a901b161115612418565b6001810160051b82015161240c565b60005b8281106125435750612343565b8061255f81600180940160051b8a0151899060010160051b0152565b01612536565b9091925061257a81808b9060010160051b0152565b6001810160051b80830151906125968360051b85015183111590565b6125a9575b505060010190899291612334565b869b50840151908a83918560019e8f805b61262a575b5095848196946125f9856125ed61260496859861260f9b60019e6000190114918215612616575b5050612232565b6001840160051b8c0152565b9060010160051b0152565b60010160051b860152565b903861259b565b6002880160051b015114159050828e6125e6565b92939491505080878b84831015806126a2575b156126965750509061268b91600019019461267b8260051b9161266a838c0151858d9060010160051b0152565b8383820151919060010160051b0152565b89015190899060010160051b0152565b908589838f946125ba565b919594939092506125bf565b506126b38360051b83015187111590565b61263d565b906040929160018060a01b0316936126fe6000938685526000805160206141ab83398151915292836020528686208587526020528686205490600f0b91600f0b90613707565b9483526020528282209082526020522055565b93919392909260018060a01b03169061275a6000958387526000805160206141ab833981519152928360205260408820878952602052604088205490600f0b91600f0b90613707565b908286526020526040852084865260205260408520558382600f0b12612781575b50505050565b61278d61279a92611059565b600f0b928391309161414a565b106100e95780808061277b565b90816020910312610197575190565b6001600160801b0391821690821601919082116107f857565b6000805160206141cb833981519152805460801c6127ea5750565b60405163056d8d4d60e11b81529060208260048160007f000000000000000000000000cc22f6aa610d1b2a0e89ef228079cb3e1831b1d16001600160a01b03165af191821561125a576000926128a4575b5081612845575050565b6102229161286761178861285d612876945493611e77565b8360801c90611e9e565b906001600160801b03166127b6565b6000805160206141cb83398151915280546001600160801b0319166001600160801b03909216919091179055565b6128c691925060203d81116128cd575b6128be8183610154565b8101906127a7565b903861283b565b503d6128b4565b6001600160801b0391821690821603919082116107f857565b600163ffffffff61290a61290084610d93565b5463ffffffff1690565b16036129b9576000905b61291d81610dcc565b9060018060a01b039161297461296a85612964867f000000000000000000000000cc22f6aa610d1b2a0e89ef228079cb3e1831b1d116809590600052602052604060002090565b54613676565b9161212884610dcc565b5516803b1561019757604051620f038760eb1b815260048101929092526000908290602490829084905af1801561125a576129ac5750565b8061152b61022292610126565b6000805160206141cb8339815191525490612a6b612a2d612a23612a07610a976129f861171f6129e888610d93565b5460201c6001600160701b031690565b6001600160801b0388166128d4565b612a1d61171f612a1687610d93565b5460901c90565b90611e8b565b633b9aca00900490565b926001600160701b0316612a4083610d93565b8054640100000000600160901b03191660209290921b640100000000600160901b0316919091179055565b612914565b9194928551946000805b878110612a8c57505050505050505050565b6001810160051b90818401518289015192612aa78483611071565b8782018051919590916001600160801b0316600f90810b9087900b13612b0557612b00956117e48f61099f94612aef8f97958f996109a79a612af99861098e960151906126b8565b518a1a80966108f1565b918a6108f1565b612a7a565b60405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40e4cae6ead8e840c2c4deecca40dac2f60531b6044820152606490fd5b604090815191612b5283610139565b600183528291600091825b602080821015612b8f57825160209291612b7682610106565b8682528681830152606085830152828901015201612b5d565b50505091925050565b60405190612ba582610139565b6001825260203681840137565b929192606091828201838352815180915260809384840191858160051b860101956020809501936000915b838310612c155750505050505061045d9394612c029183019060018060a01b03169052565b6040818303910152602090600081520190565b909192939497607f198882030183528851908681019060018060a01b038351168152888301516003811015612cab5784828b9594939286809401528a604080960151958201528451809452019201906000905b808210612c875750505090806001929a01930193019194939290612bdd565b82516001600160e01b03191684528a94938401939092019160019190910190612c68565b634e487b7160e01b600052602160045260246000fd5b636988ad4560e11b600081815260008051602061422b833981519152602081905260008051602061424b83398151915254909190612d415760008051602061426b83398151915280549290600160401b84101561012157600184018082558410156108ec5784604094828552602085200155549382526020522055600190565b91505090565b60018101636988ad4560e11b91826000528160205260406000205415600014612db0578054600160401b81101561012157806001612d88920183558261221a565b81549060031b9085821b91600019901b19161790555491600052602052604060002055600190565b505050600090565b637a97f8cf60e01b600081815260008051602061422b833981519152602081905260008051602061428b83398151915254909190612d415760008051602061426b83398151915280549290600160401b84101561012157600184018082558410156108ec5784604094828552602085200155549382526020522055600190565b60018101637a97f8cf60e01b91826000528160205260406000205415600014612db0578054600160401b81101561012157806001612d88920183558261221a565b631d51e53960e31b600081815260008051602061422b833981519152602081905260008051602061420b83398151915254909190612d415760008051602061426b83398151915280549290600160401b84101561012157600184018082558410156108ec5784604094828552602085200155549382526020522055600190565b60018101631d51e53960e31b91826000528160205260406000205415600014612db0578054600160401b81101561012157806001612d88920183558261221a565b60008051602061426b8339815191528054908115612f72576000198281019290818410156108ec576000918383526020832001015555565b634e487b7160e01b600052603160045260246000fd5b8054908115612f725760001991820191612fa2838361221a565b909182549160031b1b1916905555565b636988ad4560e11b60005260008051602061422b83398151915260205260008051602061424b8339815191525480156130bb576000198181018281116107f85760008051602061426b833981519152549182019182116107f857808203613054575b50505061301f612f3a565b636988ad4560e11b600090815260008051602061422b83398151915260205260008051602061424b8339815191525b55600190565b61309561307c9161307461306a6130b2956121f3565b90549060031b1c90565b9283916121f3565b90919082549060031b91821b91600019901b1916179055565b60005260008051602061422b833981519152602052604060002090565b55388080613014565b50600090565b636988ad4560e11b600090815260018201602081905260409091205491908215612db05760001991838301908482116107f85780549384019384116107f857600094848361311b9461304e9703613131575b505050612f88565b636988ad4560e11b600052602052604060002090565b61315161307c9161314861306a613161958861221a565b9283918761221a565b8590600052602052604060002090565b55388080613113565b637a97f8cf60e01b600090815260018201602081905260409091205491908215612db05760001991838301908482116107f85780549384019384116107f85760009484836131c39461304e97036131d957505050612f88565b637a97f8cf60e01b600052602052604060002090565b61315161307c916131ed613161948761221a565b90549060031b1c9283918761221a565b637a97f8cf60e01b60005260008051602061422b83398151915260205260008051602061428b8339815191525480156130bb576000198181018281116107f85760008051602061426b833981519152549182019182116107f85780820361329d575b50505061326a612f3a565b637a97f8cf60e01b600090815260008051602061422b83398151915260205260008051602061428b83398151915261304e565b61309561307c916132b06132bf946121f3565b90549060031b1c9283916121f3565b5538808061325f565b631d51e53960e31b600090815260018201602081905260409091205491908215612db05760001991838301908482116107f85780549384019384116107f85760009484836133219461304e97036131d957505050612f88565b631d51e53960e31b600052602052604060002090565b631d51e53960e31b60005260008051602061422b83398151915260205260008051602061420b8339815191525480156130bb576000198181018281116107f85760008051602061426b833981519152549182019182116107f8578082036133d7575b5050506133a4612f3a565b631d51e53960e31b600090815260008051602061422b83398151915260205260008051602061420b83398151915261304e565b61309561307c916132b06133ea946121f3565b55388080613399565b63d3115a8a195490600090600160a01b83101561340c57565b91199160019150565b637a97f8cf195490600090600160a01b83101561340c57565b63ea8f29c8195490600090600160a01b83101561340c57565b61344f613415565b50613458612b43565b906134668361069b846108df565b60006020613473846108df565b51015261347e612b98565b6040613489846108df565b5101526134a961349d60406106e1856108df565b637a97f8cf60e01b9052565b6001600160a01b038181161515906000805160206141eb83398151915290859083613550575b811615948561353d575b6134e860405192839283612bb2565b0390a18319637a97f8cf1955613525575b501561350b57506135086131fd565b50565b6135206135089161351a612db8565b50610d21565b612e38565b61353161353691610d21565b61316a565b50386134f9565b61354b60206107ab836108df565b6134d9565b61355e60206107c6886108df565b6134cf565b61356b61342e565b50613574612b43565b906135828361069b846108df565b6000602061358f846108df565b51015261359a612b98565b60406135a5846108df565b5101526135c56135b960406106e1856108df565b631d51e53960e31b9052565b6001600160a01b038181161515906000805160206141eb83398151915290859083613663575b8116159485613650575b61360460405192839283612bb2565b0390a1831963ea8f29c81955613638575b50156136245750613508613337565b6136336135089161351a612e79565b612ef9565b61364461364991610d21565b6132c8565b5038613615565b61365e60206107ab836108df565b6135f5565b61367160206107c6886108df565b6135eb565b90611734613687918360801c610e0a565b6001600160801b03918216600081128015166107f8576136a690611c70565b9180831680931490816136fb575b50156136cb5760801b6001600160801b0319161790565b60405162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b6044820152606490fd5b905081168114386136b4565b919061173461371f6117346136a6938660801c610e0a565b6001600160801b03949093908516610e0a565b909182156137c257600090600019938481019081116107f85793929193905b8185111561376157505050905090565b6001858303811c860180968160051b86013584811460001461378857505050505050505090565b879850938095969791929394106000146137a9575050015b93929190613751565b9250935080156137ba5701916137a0565b505050505090565b50505060001990565b8051908115613856576137df6000926107e9565b905b818311156137f25750505060001990565b600192808303841c8101938401908160051b83015160008051602061418b8339815191529081811460001461382a5750505050505090565b959192939495106000146138425750505b91906137e1565b9150925080156137c257600019019161383b565b505060001990565b80519182156137c257906138736000936107e9565b905b81841115613887575050505060001990565b600192848303841c85019485948601908160051b840151968388146000146138b457505050505050905090565b9193955091809496106000146138cf5750505b929091613875565b9150935080156138e35760001901926138c7565b5050505060001990565b90816020910312610197575161045d81610204565b60609060208152600d60208201526c34b73b30b634b2103a37b5b2b760991b60408201520190565b6001600160f81b03198116806139bd57506139869160209161395960a082901c6001600160581b031615610881565b6040516370a0823160e01b81526001600160a01b0390921660048301529092839190829081906024820190565b03916001600160a01b03165afa90811561125a576000916139a5575090565b61045d915060203d81116128cd576128be8183610154565b600160f91b81036139fb5750604051627eeac760e11b8152916020918391829081906139869060a085901c6001600160581b03169060048401611e2e565b600160f81b03613a92576040516331a9108f60e11b81526001600160581b0360a083901c166004820152906001600160a01b03906020908390602490829085165afa91821561125a57600092613a62575b508060009316911614600014611a355750600190565b613a8491925060203d8111613a8b575b613a7c8183610154565b8101906138ed565b9038613a4c565b503d613a72565b60008051602061418b83398151915214613ac35760405162461bcd60e51b815280613abf60048201613902565b0390fd5b3190565b15613ace57565b60405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b6044820152606490fd5b6001600160a01b03909116815263deadbeef6020820152604081019190915260600190565b6001600160a01b03918216815291166020820152604081019190915260600190565b15613b5257565b60405162461bcd60e51b815260206004820152602a60248201527f6e617469766520746f6b656e207472616e7366657246726f6d206973206e6f74604482015269081cdd5c1c1bdc9d195960b21b6064820152608490fd5b91906001600160f81b0319831680613bfc5750613bd460a084901c6001600160581b031615610881565b6001600160a01b03908082163003613bf157506102229216613eca565b906102229316613f4c565b60008051602061418b8339815191528492939414600014613c445750613c2e916001600160a01b031630149050613b4b565b6000808080809463deadbeef5af1156100e95750565b91929091600160f81b8103613cb957506001613c609114613ac7565b6001600160a01b03811691823b1561019757604051632142170760e11b8152926000928492839185918391613ca89160a09190911c6001600160581b03169060048401613b04565b03925af1801561125a576129ac5750565b600160f91b03613d36576001600160a01b038216803b1561019757604051637921219560e11b81526001600160a01b03909416600485015263deadbeef602485015260a092831c6001600160581b0316604485015260648401919091526084830191909152600060a4830181905290829081838160c48101613ca8565b60405162461bcd60e51b815280613abf60048201613902565b9291906001600160f81b0319841680613da25750613d7a60a085901c6001600160581b031615610881565b6001600160a01b03908082163003613d9757506102229316613f12565b906102229416613f73565b60008051602061418b833981519152859293949514600014613de75750613dd5916001600160a01b031630149050613b4b565b60008080809481945af1156100e95750565b92939092600160f81b8103613e4b57506001613e039114613ac7565b6001600160a01b038216803b1561019757604051632142170760e11b8152936000938593849286928492613ca89260a09290921c6001600160581b0316919060048501613b29565b909390600160f91b03613d36576001600160a01b03831690813b1561019757604051637921219560e11b81526001600160a01b0393841660048201529216602483015260a092831c6001600160581b0316604483015260648201939093526084810191909152600060a482018190529091829081838160c48101613ca8565b906040519063a9059cbb60e01b602083015263deadbeef602483015260448201526044815260808101918183106001600160401b038411176101215761022292604052613ffa565b613f476102229392613f3960405194859263a9059cbb60e01b602085015260248401611e2e565b03601f198101845283610154565b613ffa565b613f476102229392613f396040519485926323b872dd60e01b602085015260248401613b04565b90613f4790613f39610222956040519586936323b872dd60e01b602086015260248501613b29565b15613fa257565b60405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608490fd5b60018060a01b031661407660405161401181610139565b6020928382527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564848301526000808686829851910182855af13d156140ad573d9161405b8361028f565b926140696040519485610154565b83523d878785013e6140b1565b8051806140835750505050565b818391810103126100ec5701519081151582036100e957506140a490613f9b565b3880808061277b565b6060915b9192901561411357508151156140c5575090565b3b156140ce5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156141265750805190602001fd5b60405162461bcd60e51b815260206004820152908190613abf906024830190610eef565b61416561416a9392948361415e818561392a565b9684613d4f565b61392a565b9081039081116107f85790565b9183916141839361414a565b106101975756feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee41cdc826884889a9d86ce2ed24c534af045774747691a4897641494ae5dd896be35cc21d37873d362c6d20195c3a1c72fa511d9573329821aa68d4bc28c9e7b78faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6734820e2cd0662908c357e2fb320164dcb72822080d1ebe5c73f3fcb31f7680cb3643b8a6b3ed8752748bc6461fd4a02b0c30db5660ff05b0028ccebefb6b5f262bab7550cdc7b21dbbee8fdbbc70303a61ab056018f92c3a9256fa6502aa8e167643b8a6b3ed8752748bc6461fd4a02b0c30db5660ff05b0028ccebefb6b5f26115187d60e1e9a8d1ffcf993b3a6f69d8b9d84a727170945ca56b329bc0ea506fa26469706673582212209a33787c80ccdb01893065a949f63fe8b665ec11963fee4dc5f2a01f47fcacaa64736f6c63430008130033" + }, + { + "address": "0x24bfb3ffe53c9f09960d41369c0dfaf9f7586d33", + "nonce": 18, + "balance": "0x0000000000000000000000000000000000000000000000000ed1478a94f66de1", + "code": "0x" + }, + { + "address": "0xeacf8b19e104803cfcd2557d893d6a407e4994f0", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806384b0196e1161006657806384b0196e146101205780638da5cb5b1461013b578063a3f4df7e1461014c578063f2fde38b14610195578063ffa1ad74146101a857600080fd5b806301ffc9a7146100a3578063378144b0146100cb578063432c1625146100e0578063715018a6146100f35780637ac3c02f146100fb575b600080fd5b6100b66100b1366004610a09565b6101cc565b60405190151581526020015b60405180910390f35b6100de6100d9366004610b22565b610203565b005b6100de6100ee366004610c12565b610301565b6100de61035d565b6003546001600160a01b03165b6040516001600160a01b0390911681526020016100c2565b610128610371565b6040516100c29796959493929190610c73565b6002546001600160a01b0316610108565b6101886040518060400160405280601981526020017f5275627973636f72655f5369676e436865636b4d6f64756c650000000000000081525081565b6040516100c29190610d09565b6100de6101a3366004610c12565b6103f9565b61018860405180604001604052806005815260200164302e302e3160d81b81525081565b60006001600160e01b0319821663367e8d1760e01b14806101fd57506001600160e01b031982166301ffc9a760e01b145b92915050565b60006102c07ff0e9a64d3fffa41ed2083556103227aee77b907d432c6ac0d1263fc416693f63866000015187602001518660405160200161025391906001600160a01b0391909116815260200190565b60408051601f1981840301815282825280516020918201206060808e0151805190840120928501979097529183019490945267ffffffffffffffff90921693810193909352608083015260a082015260c00160405160208183030381529060405280519060200120610477565b90506102cc81856104a4565b6003546001600160a01b039081169116146102fa576040516311c3376b60e11b815260040160405180910390fd5b5050505050565b6103096104c8565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527fc2f263c027e5d0d20cb69b6068f2144a6ce1b7d1369fdc782788faae4bc63db29060200160405180910390a150565b6103656104c8565b61036f6000610522565b565b6000606080828080836103a47f5275627973636f72655f5369676e436865636b4d6f64756c650000000000001983610574565b6103cf7f302e302e310000000000000000000000000000000000000000000000000000056001610574565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6104016104c8565b6001600160a01b03811661046b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61047481610522565b50565b60006101fd61048461061f565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006104b3858561074f565b915091506104c081610794565b509392505050565b6002546001600160a01b0316331461036f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610462565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060ff831461058e57610587836108de565b90506101fd565b81805461059a90610d1c565b80601f01602080910402602001604051908101604052809291908181526020018280546105c690610d1c565b80156106135780601f106105e857610100808354040283529160200191610613565b820191906000526020600020905b8154815290600101906020018083116105f657829003601f168201915b505050505090506101fd565b6000306001600160a01b037f000000000000000000000000eacf8b19e104803cfcd2557d893d6a407e4994f01614801561067857507f000000000000000000000000000000000000000000000000000000000000e70846145b156106a257507f8eafa230e9dce8d6c30f833fae9e71afef4195be817484872b9b9ed5369e4b9f90565b61074a604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f3f77b8ee6f00a81abe90aaeddb04c5c1286e34db39f8293f14483c9387230d41918101919091527fae209a0b48f21c054280f2455d32cf309387644879d9acbd8ffc19916381188560608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b60008082516041036107855760208301516040840151606085015160001a6107798782858561091d565b9450945050505061078d565b506000905060025b9250929050565b60008160048111156107a8576107a8610d56565b036107b05750565b60018160048111156107c4576107c4610d56565b036108115760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610462565b600281600481111561082557610825610d56565b036108725760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610462565b600381600481111561088657610886610d56565b036104745760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610462565b606060006108eb836109e1565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561095457506000905060036109d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156109a8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109d1576000600192509250506109d8565b9150600090505b94509492505050565b600060ff8216601f8111156101fd57604051632cd44ac360e21b815260040160405180910390fd5b600060208284031215610a1b57600080fd5b81356001600160e01b031981168114610a3357600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715610a7357610a73610a3a565b60405290565b600082601f830112610a8a57600080fd5b813567ffffffffffffffff80821115610aa557610aa5610a3a565b604051601f8301601f19908116603f01168101908282118183101715610acd57610acd610a3a565b81604052838152866020858801011115610ae657600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160a01b0381168114610b1d57600080fd5b919050565b60008060008060808587031215610b3857600080fd5b843567ffffffffffffffff80821115610b5057600080fd5b9086019060808289031215610b6457600080fd5b610b6c610a50565b8235815260208301358281168114610b8357600080fd5b6020820152604083013582811115610b9a57600080fd5b610ba68a828601610a79565b604083015250606083013582811115610bbe57600080fd5b610bca8a828601610a79565b60608301525095506020870135915080821115610be657600080fd5b50610bf387828801610a79565b935050610c0260408601610b06565b9396929550929360600135925050565b600060208284031215610c2457600080fd5b610a3382610b06565b6000815180845260005b81811015610c5357602081850181015186830182015201610c37565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e081840152610c9360e084018a610c2d565b8381036040850152610ca5818a610c2d565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015610cf757835183529284019291840191600101610cdb565b50909c9b505050505050505050505050565b602081526000610a336020830184610c2d565b600181811c90821680610d3057607f821691505b602082108103610d5057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220d943e706ed330c01f8962e116fca59b27e243ae6a00ca755f2930ecf5c95621364736f6c63430008130033" + }, + { + "address": "0xe6123d87f80de852fa7e018c775462afa60fa581", + "nonce": 59, + "balance": "0x00000000000000000000000000000000000000000000000001204d0427d7bd05", + "code": "0x" + }, + { + "address": "0x317a744d1650c8432e94d163aeefe07efcf9323e", + "nonce": 14, + "balance": "0x000000000000000000000000000000000000000000000000086628558e07a4b9", + "code": "0x" + }, + { + "address": "0x0000000000000000000000000000000000000000", + "nonce": 0, + "balance": "0x000000000000000000000000000000000000000000000000090de886f085f0c5", + "code": "0x" + }, + { + "address": "0x0000000000000000000000000000000000000001", + "nonce": 0, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000001", + "code": "0x" + }, + { + "address": "0xd04c339222e6b8e23bc86b97980dd5e0b0517513", + "nonce": 36, + "balance": "0x000000000000000000000000000000000000000000000000001b18f104dc95be", + "code": "0x" + }, + { + "address": "0x736f4f046ca29cfc725e278249a1bf34582ee48e", + "nonce": 10, + "balance": "0x0000000000000000000000000000000000000000000000000044da92db8d3ab1", + "code": "0x" + }, + { + "address": "0xc84059133f74ca991442959c22f8d80d6fad7c23", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638129fc1c11610097578063bad908d111610066578063bad908d11461025c578063c851cc321461027a578063f2fde38b14610296578063f887ea40146102b2576100f5565b80638129fc1c146101e857806382e2fbeb146101f25780638da5cb5b1461020e578063a2ea7c6e1461022c576100f5565b80634b63bcf4116100d35780634b63bcf4146101765780634ba4bd2d14610192578063715018a6146101c25780637ddf1ab3146101cc576100f5565b806305d44b55146100fa5780630e500d741461012a57806327258b2214610146575b600080fd5b610114600480360381019061010f9190611332565b6102d0565b6040516101219190611378565b60405180910390f35b610144600480360381019061013f91906114d9565b6102f4565b005b610160600480360381019061015b91906115dc565b61064e565b60405161016d9190611624565b60405180910390f35b610190600480360381019061018b919061169d565b61067c565b005b6101ac60048036038101906101a791906116dd565b61077f565b6040516101b99190611378565b60405180910390f35b6101ca6107af565b005b6101e660048036038101906101e19190611726565b6107c3565b005b6101f06108ef565b005b61020c60048036038101906102079190611782565b610a2d565b005b610216610c44565b60405161022391906117d1565b60405180910390f35b610246600480360381019061024191906115dc565b610c6e565b60405161025391906118e3565b60405180910390f35b610264610f22565b6040516102719190611914565b60405180910390f35b610294600480360381019061028f919061192f565b610f2f565b005b6102b060048036038101906102ab919061192f565b610fe1565b005b6102ba611064565b6040516102c791906119bb565b60405180910390f35b606781815481106102e057600080fd5b906000526020600020016000915090505481565b336000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7dac9766040518163ffffffff1660e01b8152600401602060405180830381865afa158015610364573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038891906119eb565b73ffffffffffffffffffffffffffffffffffffffff1663877b9a67836040518263ffffffff1660e01b81526004016103c091906117d1565b602060405180830381865afa1580156103dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104019190611a44565b90508061043a576040517f55b51ef100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000865103610475576040517fe474746b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008351036104b0576040517fa843786a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006104bb8461077f565b90506104c68161064e565b156104fd576040517f73ef619400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060800160405280888152602001878152602001868152602001858152506066600083815260200190815260200160002060008201518160000190816105469190611c73565b50602082015181600101908161055c9190611c73565b5060408201518160020190816105729190611c73565b5060608201518160030190816105889190611c73565b509050506067819080600181540180825580915050600190039060005260206000200160009091909190915055336068600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550807f4c757208c931a5f2d7900aebd0ab4a238965c74ba1de8d2b54e234513e8a7d9e8888888860405161063d9493929190611d8f565b60405180910390a250505050505050565b60008060666000848152602001908152602001600020600001805461067290611aa0565b9050119050919050565b61068461108a565b61068d8261064e565b6106c3576040517f8cc004a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610729576040517f6c6b392500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806068600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000816040516020016107929190611e2c565b604051602081830303815290604052805190602001209050919050565b6107b761108a565b6107c16000611108565b565b6107cc8261064e565b610802576040517f8cc004a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166068600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461089a576040517fe328c33100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806066600084815260200190815260200160002060020190816108bd9190611c73565b50817f2259f2b8a71fba4214a0830b6c2878525e5bf79911a536b7dab84270fb31947f60405160405180910390a25050565b60008060019054906101000a900460ff161590508080156109205750600160008054906101000a900460ff1660ff16105b8061094d575061092f306111ce565b15801561094c5750600160008054906101000a900460ff1660ff16145b5b61098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390611eb5565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156109c9576001600060016101000a81548160ff0219169083151502179055505b6109d16111f1565b8015610a2a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610a219190611f1d565b60405180910390a15b50565b3360008173ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7dac9766040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad891906119eb565b73ffffffffffffffffffffffffffffffffffffffff1614905080610b28576040517f537b1b3200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b606780549050811015610c3d578473ffffffffffffffffffffffffffffffffffffffff166068600060678481548110610b6757610b66611f38565b5b9060005260206000200154815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610c2d57836068600060678481548110610bd557610bd4611f38565b5b9060005260206000200154815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b610c368161124a565b9050610b2b565b5050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c766112c0565b610c7f8261064e565b610cb5576040517f8cc004a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60666000838152602001908152602001600020604051806080016040529081600082018054610ce390611aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0f90611aa0565b8015610d5c5780601f10610d3157610100808354040283529160200191610d5c565b820191906000526020600020905b815481529060010190602001808311610d3f57829003601f168201915b50505050508152602001600182018054610d7590611aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054610da190611aa0565b8015610dee5780601f10610dc357610100808354040283529160200191610dee565b820191906000526020600020905b815481529060010190602001808311610dd157829003601f168201915b50505050508152602001600282018054610e0790611aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3390611aa0565b8015610e805780601f10610e5557610100808354040283529160200191610e80565b820191906000526020600020905b815481529060010190602001808311610e6357829003601f168201915b50505050508152602001600382018054610e9990611aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec590611aa0565b8015610f125780601f10610ee757610100808354040283529160200191610f12565b820191906000526020600020905b815481529060010190602001808311610ef557829003601f168201915b5050505050815250509050919050565b6000606780549050905090565b610f3761108a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f9d576040517f4944068e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fe961108a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90611fd9565b60405180910390fd5b61106181611108565b50565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611092611257565b73ffffffffffffffffffffffffffffffffffffffff166110b0610c44565b73ffffffffffffffffffffffffffffffffffffffff1614611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90612045565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611237906120d7565b60405180910390fd5b61124861125f565b565b6000600182019050919050565b600033905090565b600060019054906101000a900460ff166112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a5906120d7565b60405180910390fd5b6112be6112b9611257565b611108565b565b6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61130f816112fc565b811461131a57600080fd5b50565b60008135905061132c81611306565b92915050565b600060208284031215611348576113476112f2565b5b60006113568482850161131d565b91505092915050565b6000819050919050565b6113728161135f565b82525050565b600060208201905061138d6000830184611369565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6113e68261139d565b810181811067ffffffffffffffff82111715611405576114046113ae565b5b80604052505050565b60006114186112e8565b905061142482826113dd565b919050565b600067ffffffffffffffff821115611444576114436113ae565b5b61144d8261139d565b9050602081019050919050565b82818337600083830152505050565b600061147c61147784611429565b61140e565b90508281526020810184848401111561149857611497611398565b5b6114a384828561145a565b509392505050565b600082601f8301126114c0576114bf611393565b5b81356114d0848260208601611469565b91505092915050565b600080600080608085870312156114f3576114f26112f2565b5b600085013567ffffffffffffffff811115611511576115106112f7565b5b61151d878288016114ab565b945050602085013567ffffffffffffffff81111561153e5761153d6112f7565b5b61154a878288016114ab565b935050604085013567ffffffffffffffff81111561156b5761156a6112f7565b5b611577878288016114ab565b925050606085013567ffffffffffffffff811115611598576115976112f7565b5b6115a4878288016114ab565b91505092959194509250565b6115b98161135f565b81146115c457600080fd5b50565b6000813590506115d6816115b0565b92915050565b6000602082840312156115f2576115f16112f2565b5b6000611600848285016115c7565b91505092915050565b60008115159050919050565b61161e81611609565b82525050565b60006020820190506116396000830184611615565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061166a8261163f565b9050919050565b61167a8161165f565b811461168557600080fd5b50565b60008135905061169781611671565b92915050565b600080604083850312156116b4576116b36112f2565b5b60006116c2858286016115c7565b92505060206116d385828601611688565b9150509250929050565b6000602082840312156116f3576116f26112f2565b5b600082013567ffffffffffffffff811115611711576117106112f7565b5b61171d848285016114ab565b91505092915050565b6000806040838503121561173d5761173c6112f2565b5b600061174b858286016115c7565b925050602083013567ffffffffffffffff81111561176c5761176b6112f7565b5b611778858286016114ab565b9150509250929050565b60008060408385031215611799576117986112f2565b5b60006117a785828601611688565b92505060206117b885828601611688565b9150509250929050565b6117cb8161165f565b82525050565b60006020820190506117e660008301846117c2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561182657808201518184015260208101905061180b565b60008484015250505050565b600061183d826117ec565b61184781856117f7565b9350611857818560208601611808565b6118608161139d565b840191505092915050565b600060808301600083015184820360008601526118888282611832565b915050602083015184820360208601526118a28282611832565b915050604083015184820360408601526118bc8282611832565b915050606083015184820360608601526118d68282611832565b9150508091505092915050565b600060208201905081810360008301526118fd818461186b565b905092915050565b61190e816112fc565b82525050565b60006020820190506119296000830184611905565b92915050565b600060208284031215611945576119446112f2565b5b600061195384828501611688565b91505092915050565b6000819050919050565b600061198161197c6119778461163f565b61195c565b61163f565b9050919050565b600061199382611966565b9050919050565b60006119a582611988565b9050919050565b6119b58161199a565b82525050565b60006020820190506119d060008301846119ac565b92915050565b6000815190506119e581611671565b92915050565b600060208284031215611a0157611a006112f2565b5b6000611a0f848285016119d6565b91505092915050565b611a2181611609565b8114611a2c57600080fd5b50565b600081519050611a3e81611a18565b92915050565b600060208284031215611a5a57611a596112f2565b5b6000611a6884828501611a2f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ab857607f821691505b602082108103611acb57611aca611a71565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611b337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611af6565b611b3d8683611af6565b95508019841693508086168417925050509392505050565b6000611b70611b6b611b66846112fc565b61195c565b6112fc565b9050919050565b6000819050919050565b611b8a83611b55565b611b9e611b9682611b77565b848454611b03565b825550505050565b600090565b611bb3611ba6565b611bbe818484611b81565b505050565b5b81811015611be257611bd7600082611bab565b600181019050611bc4565b5050565b601f821115611c2757611bf881611ad1565b611c0184611ae6565b81016020851015611c10578190505b611c24611c1c85611ae6565b830182611bc3565b50505b505050565b600082821c905092915050565b6000611c4a60001984600802611c2c565b1980831691505092915050565b6000611c638383611c39565b9150826002028217905092915050565b611c7c826117ec565b67ffffffffffffffff811115611c9557611c946113ae565b5b611c9f8254611aa0565b611caa828285611be6565b600060209050601f831160018114611cdd5760008415611ccb578287015190505b611cd58582611c57565b865550611d3d565b601f198416611ceb86611ad1565b60005b82811015611d1357848901518255600182019150602085019450602081019050611cee565b86831015611d305784890151611d2c601f891682611c39565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b6000611d61826117ec565b611d6b8185611d45565b9350611d7b818560208601611808565b611d848161139d565b840191505092915050565b60006080820190508181036000830152611da98187611d56565b90508181036020830152611dbd8186611d56565b90508181036040830152611dd18185611d56565b90508181036060830152611de58184611d56565b905095945050505050565b600081905092915050565b6000611e06826117ec565b611e108185611df0565b9350611e20818560208601611808565b80840191505092915050565b6000611e388284611dfb565b915081905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000611e9f602e83611d45565b9150611eaa82611e43565b604082019050919050565b60006020820190508181036000830152611ece81611e92565b9050919050565b6000819050919050565b600060ff82169050919050565b6000611f07611f02611efd84611ed5565b61195c565b611edf565b9050919050565b611f1781611eec565b82525050565b6000602082019050611f326000830184611f0e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611fc3602683611d45565b9150611fce82611f67565b604082019050919050565b60006020820190508181036000830152611ff281611fb6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061202f602083611d45565b915061203a82611ff9565b602082019050919050565b6000602082019050818103600083015261205e81612022565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006120c1602b83611d45565b91506120cc82612065565b604082019050919050565b600060208201905081810360008301526120f0816120b4565b905091905056fea26469706673582212209cc5eca21e32fefe6a0fc06048f9458cc04614a263a42a3d05717b9dfaa1d45064736f6c63430008150033" + }, + { + "address": "0xdb535295e772ecf275fafb91419a9d497024a3d7", + "nonce": 3, + "balance": "0x000000000000000000000000000000000000000000000000005cba2d8b26c120", + "code": "0x" + }, + { + "address": "0xe9b964cec023ec6f0912c3e527581f1808fc11bc", + "nonce": 33, + "balance": "0x000000000000000000000000000000000000000000000000000000000000f618", + "code": "0x" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "nonce": 556436, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ca565b610118565b61005b6100933660046106e5565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ca565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610292565b610116610111610331565b61033b565b565b61012061035f565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610392565b50565b6101546100fe565b61016761035f565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610392915050565b505050565b6101c36100fe565b60006101da61035f565b6001600160a01b0316336001600160a01b03161415610200576101fb610331565b905090565b6102086100fe565b90565b61021361035f565b6001600160a01b0316336001600160a01b0316141561015757610154816103f1565b600061023f61035f565b6001600160a01b0316336001600160a01b03161415610200576101fb61035f565b606061028583836040518060600160405280602781526020016107e460279139610445565b9392505050565b3b151590565b61029a61035f565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610519565b3660008037600080366000845af43d6000803e80801561035a573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039b83610541565b6040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a26000825111806103dc5750805b156101c3576103eb8383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61041a61035f565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816105e9565b6060833b6104a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610328565b600080856001600160a01b0316856040516104bf9190610794565b600060405180830381855af49150503d80600081146104fa576040519150601f19603f3d011682016040523d82523d6000602084013e6104ff565b606091505b509150915061050f828286610675565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610383565b803b6105a55760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610328565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b03811661064e5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610328565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036105c8565b60608315610684575081610285565b8251156106945782518084602001fd5b8160405162461bcd60e51b815260040161032891906107b0565b80356001600160a01b03811681146106c557600080fd5b919050565b6000602082840312156106dc57600080fd5b610285826106ae565b6000806000604084860312156106fa57600080fd5b610703846106ae565b9250602084013567ffffffffffffffff8082111561072057600080fd5b818601915086601f83011261073457600080fd5b81358181111561074357600080fd5b87602082850101111561075557600080fd5b6020830194508093505050509250925092565b60005b8381101561078357818101518382015260200161076b565b838111156103eb5750506000910152565b600082516107a6818460208701610768565b9190910192915050565b60208152600082518060208401526107cf816040850160208701610768565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204675187caf3a43285d9a2c1844a981e977bd52a85ff073e7fc649f73847d70a464736f6c63430008090033" + }, + { + "address": "0xd8475ff3ef4576accb0ccf9cfc92ce36d987cd12", + "nonce": 64, + "balance": "0x000000000000000000000000000000000000000000000000003bfa47c7a26598", + "code": "0x" + }, + { + "address": "0x009a0b7c38b542208936f1179151cd08e2943833", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061031a5760003560e01c80638456cb59116101ab578063c2998238116100f7578063e61604cf11610095578063f2b9fdb81161006f578063f2b9fdb8146108b7578063f2fde38b146108ca578063f8982e7a146108ea578063fa680561146109195761031a565b8063e61604cf14610864578063ede4edd014610877578063eefc5947146108975761031a565b8063d6b76b9c116100d1578063d6b76b9c146107f1578063d9452b0414610804578063db91323614610824578063de02d642146108445761031a565b8063c299823814610791578063c4d66de8146107b1578063d136af44146107d15761031a565b80639629417811610164578063abdb5ea81161013e578063abdb5ea814610729578063aced16611461073c578063b1283e7714610751578063c04f31ff146107715761031a565b806396294178146106c9578063a2a2d5bb146106e9578063a8431081146107095761031a565b80638456cb59146106355780638b95e3351461064a5780638c765e941461065f5780638da5cb5b14610674578063928fe47714610689578063929fe9a1146106a95761031a565b8063571abe301161026a5780636922d7b611610223578063748747e6116101fd578063748747e6146105c05780637a81308f146105e05780637f0927f214610600578063830cbbbd146106155761031a565b80636922d7b61461055e5780636e8584fd1461057e578063715018a6146105ab5761031a565b8063571abe30146104cc57806359086a5e146104e157806359341a1a146104f45780635c975abb1461050957806366ae02091461051e57806368155ec11461053e5761031a565b8063186db48f116102d75780633a941f73116102b15780633a941f73146104575780633f4ba83a146104775780634b8a35291461048c5780635189e110146104ac5761031a565b8063186db48f14610400578063375a7cba146104205780633a5381b5146104425761031a565b806305308b9f1461031f5780630c5ff1021461034a57806312348e961461036c5780631327d3d81461038e5780631488ca08146103ae578063158ef93e146103de575b600080fd5b34801561032b57600080fd5b5061033461092e565b604051610341919061474f565b60405180910390f35b34801561035657600080fd5b5061035f610934565b6040516103419190613e02565b34801561037857600080fd5b5061038c610387366004613d62565b610943565b005b34801561039a57600080fd5b5061038c6103a9366004613a9a565b610a19565b3480156103ba57600080fd5b506103ce6103c9366004613a9a565b610adc565b6040516103419493929190613f8d565b3480156103ea57600080fd5b506103f3610b07565b6040516103419190613f82565b34801561040c57600080fd5b5061038c61041b366004613bff565b610b10565b34801561042c57600080fd5b50610435610c6e565b6040516103419190613ee3565b34801561044e57600080fd5b5061035f610cd0565b34801561046357600080fd5b5061038c610472366004613b94565b610cdf565b34801561048357600080fd5b5061038c610f2b565b34801561049857600080fd5b5061038c6104a7366004613bd4565b610f87565b3480156104b857600080fd5b506104356104c7366004613a9a565b6111a7565b3480156104d857600080fd5b5061035f61121d565b61038c6104ef366004613b94565b61122c565b34801561050057600080fd5b5061035f611337565b34801561051557600080fd5b506103f3611346565b34801561052a57600080fd5b5061038c610539366004613a9a565b61134f565b34801561054a57600080fd5b5061038c610559366004613b44565b611412565b34801561056a57600080fd5b5061038c610579366004613a9a565b611571565b34801561058a57600080fd5b5061059e610599366004613a9a565b61160b565b6040516103419190614722565b3480156105b757600080fd5b5061038c611666565b3480156105cc57600080fd5b5061038c6105db366004613a9a565b6116ef565b3480156105ec57600080fd5b5061038c6105fb366004613a9a565b6117b7565b34801561060c57600080fd5b5061038c61187a565b34801561062157600080fd5b50610334610630366004613bd4565b61190d565b34801561064157600080fd5b5061038c611ac3565b34801561065657600080fd5b5061035f611b1d565b34801561066b57600080fd5b50610334611b2c565b34801561068057600080fd5b5061035f611b32565b34801561069557600080fd5b506103f36106a4366004613b0c565b611b41565b3480156106b557600080fd5b506103f36106c4366004613b0c565b611b61565b3480156106d557600080fd5b506103346106e4366004613bd4565b611b91565b3480156106f557600080fd5b5061035f610704366004613bd4565b611c49565b34801561071557600080fd5b5061038c610724366004613d62565b611c7e565b61038c610737366004613bd4565b611d05565b34801561074857600080fd5b5061035f611e0e565b34801561075d57600080fd5b5061035f61076c366004613d62565b611e22565b34801561077d57600080fd5b5061038c61078c366004613bd4565b611e49565b34801561079d57600080fd5b5061038c6107ac366004613c68565b612003565b3480156107bd57600080fd5b5061038c6107cc366004613a9a565b612038565b3480156107dd57600080fd5b5061038c6107ec366004613bff565b6120d1565b61038c6107ff366004613b94565b612228565b34801561081057600080fd5b5061038c61081f366004613ad2565b6123ab565b34801561083057600080fd5b5061038c61083f366004613a9a565b612570565b34801561085057600080fd5b5061038c61085f366004613a9a565b612817565b61038c610872366004613b44565b6128da565b34801561088357600080fd5b5061038c610892366004613a9a565b612ddc565b3480156108a357600080fd5b5061038c6108b2366004613a9a565b612fe3565b6103346108c5366004613bd4565b6130b4565b3480156108d657600080fd5b5061038c6108e5366004613a9a565b61344b565b3480156108f657600080fd5b5061090a610905366004613a9a565b61350b565b60405161034193929190614758565b34801561092557600080fd5b5061038c61359e565b600a5481565b6003546001600160a01b031681565b60025461010090046001600160a01b03163314806109795750610964611b32565b6001600160a01b0316336001600160a01b0316145b61099e5760405162461bcd60e51b81526004016109959061417f565b60405180910390fd5b66b1a2bc2ec5000081101580156109bd5750670c7d713b49da00008111155b6109d95760405162461bcd60e51b81526004016109959061449d565b600a8190556040517fd88469f5aa8525dce9ae07fa2d8df83e2ec766fc060483b66a0082ff36d6582d90610a0e90839061474f565b60405180910390a150565b60025461010090046001600160a01b0316331480610a4f5750610a3a611b32565b6001600160a01b0316336001600160a01b0316145b610a6b5760405162461bcd60e51b81526004016109959061417f565b6001600160a01b038116610a915760405162461bcd60e51b81526004016109959061456e565b600480546001600160a01b0319166001600160a01b0383161790556040517fb3a3a56265020415cf2f7ff198e2052a6e1d43d7eb127450af725829e40e08c290610a0e908390613e02565b600960205260009081526040902080546001820154600283015460039093015460ff90921692909184565b600e5460ff1681565b60025461010090046001600160a01b0316331480610b465750610b31611b32565b6001600160a01b0316336001600160a01b0316145b610b625760405162461bcd60e51b81526004016109959061417f565b8215801590610b7057508281145b610b8c5760405162461bcd60e51b8152600401610995906145dc565b60005b83811015610c6757828282818110610ba357fe5b9050602002013560096000878785818110610bba57fe5b9050602002016020810190610bcf9190613a9a565b6001600160a01b03168152602081019190915260400160002060020155848482818110610bf857fe5b9050602002016020810190610c0d9190613a9a565b6001600160a01b03167f84d2db42497fc6f1882756be420935d982025ad8a2a903dfb83638a09e49a775848484818110610c4357fe5b90506020020135604051610c57919061474f565b60405180910390a2600101610b8f565b5050505050565b60606008805480602002602001604051908101604052809291908181526020018280548015610cc657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ca8575b5050505050905090565b6004546001600160a01b031681565b6001600160a01b038316600090815260096020526040902054839060ff16610d195760405162461bcd60e51b8152600401610995906144d4565b6003546001600160a01b03163314610d435760405162461bcd60e51b8152600401610995906146ed565b60026001541415610d665760405162461bcd60e51b81526004016109959061467f565b6002600155610d73611346565b15610d905760405162461bcd60e51b8152600401610995906142a2565b60006001600160a01b0316846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015610dd457600080fd5b505afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c9190613ab6565b6001600160a01b031614610e325760405162461bcd60e51b8152600401610995906141c6565b610e3c8433613605565b604051634b8a352960e01b81526001600160a01b03851690634b8a352990610e6a9033908690600401613e5d565b602060405180830381600087803b158015610e8457600080fd5b505af1158015610e98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebc9190613d7a565b506006546040516359debb6760e11b81526001600160a01b039091169063b3bd76ce90610eef9087908790600401613e76565b600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b505060018055505050505050565b60025461010090046001600160a01b0316331480610f615750610f4c611b32565b6001600160a01b0316336001600160a01b0316145b610f7d5760405162461bcd60e51b81526004016109959061417f565b610f856136f5565b565b6001600160a01b038216600090815260096020526040902054829060ff16610fc15760405162461bcd60e51b8152600401610995906144d4565b60026001541415610fe45760405162461bcd60e51b81526004016109959061467f565b6002600155610ff1611346565b1561100e5760405162461bcd60e51b8152600401610995906142a2565b6110188333613605565b6004805460405163368f515360e21b81526001600160a01b039091169163da3d454c9161104b9187913391889101613e39565b602060405180830381600087803b15801561106557600080fd5b505af1158015611079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109d9190613d05565b6110b95760405162461bcd60e51b8152600401610995906142cc565b604051634b8a352960e01b81526001600160a01b03841690634b8a3529906110e79033908690600401613e5d565b602060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111399190613d7a565b506006546040516359debb6760e11b81526001600160a01b039091169063b3bd76ce9061116c9086903390600401613e76565b600060405180830381600087803b15801561118657600080fd5b505af115801561119a573d6000803e3d6000fd5b5050600180555050505050565b6001600160a01b0381166000908152600c602090815260409182902080548351818402810184019094528084526060939283018282801561121157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111f3575b50505050509050919050565b6006546001600160a01b031681565b6001600160a01b038316600090815260096020526040902054839060ff166112665760405162461bcd60e51b8152600401610995906144d4565b600260015414156112895760405162461bcd60e51b81526004016109959061467f565b6002600155611296611346565b156112b35760405162461bcd60e51b8152600401610995906142a2565b604051632c84352f60e11b81526001600160a01b038516906359086a5e9034906112e590339088908890600401613e39565b6020604051808303818588803b1580156112fe57600080fd5b505af1158015611312573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ebc9190613d7a565b6005546001600160a01b031681565b60025460ff1690565b60025461010090046001600160a01b03163314806113855750611370611b32565b6001600160a01b0316336001600160a01b0316145b6113a15760405162461bcd60e51b81526004016109959061417f565b6001600160a01b0381166113c75760405162461bcd60e51b815260040161099590614050565b600680546001600160a01b0319166001600160a01b0383161790556040517f2351f252c60252e548e93df4d785886faa1d88410325b8bce69d624a25583ae790610a0e908390613e02565b600260015414156114355760405162461bcd60e51b81526004016109959061467f565b60026001556000805b600854811015611482576008818154811061145557fe5b6000918252602090912001546001600160a01b031633141561147a5760019150611482565b60010161143e565b506001811515146114a55760405162461bcd60e51b8152600401610995906141fd565b604051636119bced60e11b8152339063c23379da906114ce908890889088908890600401613e90565b600060405180830381600087803b1580156114e857600080fd5b505af11580156114fc573d6000803e3d6000fd5b505060065460405163dd9aba1b60e01b81526001600160a01b03909116925063dd9aba1b915061153490339088908890600401613e16565b600060405180830381600087803b15801561154e57600080fd5b505af1158015611562573d6000803e3d6000fd5b50506001805550505050505050565b60025461010090046001600160a01b03163314806115a75750611592611b32565b6001600160a01b0316336001600160a01b0316145b6115c35760405162461bcd60e51b81526004016109959061417f565b6001600160a01b0381166115e95760405162461bcd60e51b815260040161099590614539565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6116136139fb565b506001600160a01b03166000908152600960209081526040918290208251608081018452815460ff1615158152600182015492810192909252600281015492820192909252600390910154606082015290565b61166e613763565b6001600160a01b031661167f611b32565b6001600160a01b0316146116a55760405162461bcd60e51b8152600401610995906143fa565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60025461010090046001600160a01b03163314806117255750611710611b32565b6001600160a01b0316336001600160a01b0316145b6117415760405162461bcd60e51b81526004016109959061417f565b6001600160a01b0381166117675760405162461bcd60e51b81526004016109959061426b565b60028054610100600160a81b0319166101006001600160a01b038416021790556040517f0425bcd291db1d48816f2a98edc7ecaf6dd5c64b973d9e4b3b6b750763dc6c2e90610a0e908390613e02565b60025461010090046001600160a01b03163314806117ed57506117d8611b32565b6001600160a01b0316336001600160a01b0316145b6118095760405162461bcd60e51b81526004016109959061417f565b6001600160a01b03811661182f5760405162461bcd60e51b81526004016109959061442f565b600380546001600160a01b0319166001600160a01b0383161790556040517fa0db7f35e3369b887ccd7d6757ea475d09c689b97f5d0b4ee395add6a5d4545d90610a0e908390613e02565b6002600154141561189d5760405162461bcd60e51b81526004016109959061467f565b600260015560065460405163025181bb60e41b81526001600160a01b03909116906325181bb0906118d5906008903390600401613f20565b600060405180830381600087803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b5050600180555050565b6001600160a01b038216600090815260096020526040812054839060ff166119475760405162461bcd60e51b8152600401610995906144d4565b6002600154141561196a5760405162461bcd60e51b81526004016109959061467f565b6002600155611977611346565b156119945760405162461bcd60e51b8152600401610995906142a2565b60405163830cbbbd60e01b81526000906001600160a01b0386169063830cbbbd906119c59033908890600401613e5d565b602060405180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a179190613d7a565b600654604051639ba24c9b60e01b81529192506001600160a01b031690639ba24c9b90611a4a9088903390600401613e76565b600060405180830381600087803b158015611a6457600080fd5b505af1158015611a78573d6000803e3d6000fd5b505050507fda2fcb771cce6a80cd6c0101db394f4fd1f8755def9185535cc97509f3e03cdd338683604051611aaf93929190613e39565b60405180910390a160018055949350505050565b60025461010090046001600160a01b0316331480611af95750611ae4611b32565b6001600160a01b0316336001600160a01b0316145b611b155760405162461bcd60e51b81526004016109959061417f565b610f85613767565b6007546001600160a01b031681565b600b5481565b6000546001600160a01b031690565b600d60209081526000928352604080842090915290825290205460ff1681565b6001600160a01b038082166000908152600d602090815260408083209386168352929052205460ff165b92915050565b6001600160a01b038216600090815260096020526040812054839060ff16611bcb5760405162461bcd60e51b8152600401610995906144d4565b60026001541415611bee5760405162461bcd60e51b81526004016109959061467f565b6002600155611bfb611346565b15611c185760405162461bcd60e51b8152600401610995906142a2565b6040516312c5282f60e31b81526000906001600160a01b038616906396294178906119c59033908890600401613e5d565b600c6020528160005260406000208181548110611c6257fe5b6000918252602090912001546001600160a01b03169150829050565b60025461010090046001600160a01b0316331480611cb45750611c9f611b32565b6001600160a01b0316336001600160a01b0316145b611cd05760405162461bcd60e51b81526004016109959061417f565b600b8190556040517f6791c9b68799eda502f8f7808e4ab556a632237eea58a66c4f7e4e6f94574d0d90610a0e90839061474f565b6001600160a01b038216600090815260096020526040902054829060ff16611d3f5760405162461bcd60e51b8152600401610995906144d4565b60026001541415611d625760405162461bcd60e51b81526004016109959061467f565b6002600155611d6f611346565b15611d8c5760405162461bcd60e51b8152600401610995906142a2565b60405163157b6bd560e31b81526001600160a01b0384169063abdb5ea8903490611dbc9033908790600401613e5d565b6020604051808303818588803b158015611dd557600080fd5b505af1158015611de9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111399190613d7a565b60025461010090046001600160a01b031681565b60088181548110611e2f57fe5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b0316331480611e7f5750611e6a611b32565b6001600160a01b0316336001600160a01b0316145b611e9b5760405162461bcd60e51b81526004016109959061417f565b6001600160a01b038216600090815260096020526040902054829060ff16611ed55760405162461bcd60e51b8152600401610995906144d4565b670c7d713b49da0000821115611efd5760405162461bcd60e51b815260040161099590614466565b8115801590611f89575060075460405163fc57d4df60e01b81526001600160a01b039091169063fc57d4df90611f37908690600401613e02565b60206040518083038186803b158015611f4f57600080fd5b505afa158015611f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f879190613d7a565b155b15611fa65760405162461bcd60e51b8152600401610995906140da565b6001600160a01b03831660009081526009602052604090819020600301839055517f275d6207ccd4271a12c584febf2bcf32254205dfb4639ce1a9184d2e2609e2d090611ff69085908590613e5d565b60405180910390a1505050565b60005b81518110156120345761202c82828151811061201e57fe5b602002602001015133613605565b600101612006565b5050565b612040613763565b6001600160a01b0316612051611b32565b6001600160a01b0316146120775760405162461bcd60e51b8152600401610995906143fa565b600e5460ff161561209a5760405162461bcd60e51b8152600401610995906142f9565b6120a26137c2565b600780546001600160a01b0319166001600160a01b0392909216919091179055600e805460ff19166001179055565b60025461010090046001600160a01b031633148061210757506120f2611b32565b6001600160a01b0316336001600160a01b0316145b6121235760405162461bcd60e51b81526004016109959061417f565b821580159061213157508281145b61214d5760405162461bcd60e51b8152600401610995906145dc565b60005b83811015610c675782828281811061216457fe5b905060200201356009600087878581811061217b57fe5b90506020020160208101906121909190613a9a565b6001600160a01b031681526020810191909152604001600020600101558484828181106121b957fe5b90506020020160208101906121ce9190613a9a565b6001600160a01b03167f638a463c59949a284e093291dedfbadcb32ebf9007e649767344e67346ab882984848481811061220457fe5b90506020020135604051612218919061474f565b60405180910390a2600101612150565b6001600160a01b038316600090815260096020526040902054839060ff166122625760405162461bcd60e51b8152600401610995906144d4565b6003546001600160a01b0316331461228c5760405162461bcd60e51b8152600401610995906146ed565b600260015414156122af5760405162461bcd60e51b81526004016109959061467f565b60026001556122bc611346565b156122d95760405162461bcd60e51b8152600401610995906142a2565b60006001600160a01b0316846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561231d57600080fd5b505afa158015612331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123559190613ab6565b6001600160a01b03161461237b5760405162461bcd60e51b8152600401610995906141c6565b60405163157b6bd560e31b81526001600160a01b0385169063abdb5ea89034906112e59033908790600401613e5d565b60025461010090046001600160a01b03163314806123e157506123cc611b32565b6001600160a01b0316336001600160a01b0316145b6123fd5760405162461bcd60e51b81526004016109959061417f565b6001600160a01b03841660009081526009602052604090205460ff16156124365760405162461bcd60e51b8152600401610995906146b6565b60005b60085481101561249557846001600160a01b03166008828154811061245a57fe5b6000918252602090912001546001600160a01b0316141561248d5760405162461bcd60e51b8152600401610995906146b6565b600101612439565b506040805160808101825260018082526020808301878152838501878152606085018781526001600160a01b038b16600081815260099095528785209651875460ff1916901515178755925186860155905160028601555160039094019390935560088054928301815590527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055517fcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f90612562908690613e02565b60405180910390a150505050565b60025461010090046001600160a01b03163314806125a65750612591611b32565b6001600160a01b0316336001600160a01b0316145b6125c25760405162461bcd60e51b81526004016109959061417f565b6001600160a01b03811660009081526009602052604090205460ff166125fa5760405162461bcd60e51b815260040161099590614326565b806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561263357600080fd5b505afa158015612647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266b9190613d7a565b1580156126e65750806001600160a01b0316638285ef406040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ac57600080fd5b505afa1580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190613d7a565b155b6127025760405162461bcd60e51b8152600401610995906145a5565b60085460005b8181101561281257826001600160a01b03166008828154811061272757fe5b6000918252602090912001546001600160a01b0316141561280a576008600183038154811061275257fe5b600091825260209091200154600880546001600160a01b03909216918390811061277857fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060088054806127b157fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03851682526009905260408120805460ff19168155600181018290556002810182905560030155612812565b600101612708565b505050565b60025461010090046001600160a01b031633148061284d5750612838611b32565b6001600160a01b0316336001600160a01b0316145b6128695760405162461bcd60e51b81526004016109959061417f565b6001600160a01b03811661288f5760405162461bcd60e51b815260040161099590614608565b600580546001600160a01b0319166001600160a01b0383161790556040517f827daa11640de0eb908d0b06593ffb3f2b5e14e83d678fb922e512075f1d36f090610a0e908390613e02565b600260015414156128fd5760405162461bcd60e51b81526004016109959061467f565b600260015561290a611346565b156129275760405162461bcd60e51b8152600401610995906142a2565b60006001600160a01b0316846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561296b57600080fd5b505afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a39190613ab6565b6001600160a01b0316146129b757806129b9565b345b6001600160a01b03851660009081526009602052604090205490915060ff1680156129fc57506001600160a01b03831660009081526009602052604090205460ff165b612a185760405162461bcd60e51b8152600401610995906144d4565b6001600160a01b038084166000908152600d602090815260408083209386168352929052205460ff16612a5d5760405162461bcd60e51b81526004016109959061464f565b6001600160a01b038316600090815260096020526040902060030154612a955760405162461bcd60e51b81526004016109959061464f565b60048054600a546040516312e8123160e11b81526001600160a01b03909216926325d0246292612acc928992889288929101613eba565b602060405180830381600087803b158015612ae657600080fd5b505af1158015612afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1e9190613d05565b612b3a5760405162461bcd60e51b815260040161099590614502565b600080856001600160a01b031663e61604cf34873388886040518663ffffffff1660e01b8152600401612b709493929190613e90565b6060604051808303818588803b158015612b8957600080fd5b505af1158015612b9d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bc29190613d92565b60405163b2a02ff160e01b815291945092506001600160a01b038716915063b2a02ff190612bf890339088908690600401613e39565b600060405180830381600087803b158015612c1257600080fd5b505af1158015612c26573d6000803e3d6000fd5b505060065460405163dd9aba1b60e01b81526001600160a01b03909116925063dd9aba1b9150612c5e90889088903390600401613e16565b600060405180830381600087803b158015612c7857600080fd5b505af1158015612c8c573d6000803e3d6000fd5b505050506000821115612d6c5760055460405163b2a02ff160e01b81526001600160a01b038781169263b2a02ff192612ccf929091169088908790600401613e39565b600060405180830381600087803b158015612ce957600080fd5b505af1158015612cfd573d6000803e3d6000fd5b505060065460055460405163dd9aba1b60e01b81526001600160a01b03928316945063dd9aba1b9350612d39928a928a92911690600401613e16565b600060405180830381600087803b158015612d5357600080fd5b505af1158015612d67573d6000803e3d6000fd5b505050505b6006546040516359debb6760e11b81526001600160a01b039091169063b3bd76ce90612d9e9089908890600401613e76565b600060405180830381600087803b158015612db857600080fd5b505af1158015612dcc573d6000803e3d6000fd5b5050600180555050505050505050565b6001600160a01b038116600090815260096020526040902054819060ff16612e165760405162461bcd60e51b8152600401610995906144d4565b6001600160a01b0382166000908152600d60209081526040808320338452909152902054829060ff16612e5b5760405162461bcd60e51b815260040161099590614019565b612e63613a25565b60405163497d274760e11b81526001600160a01b038516906392fa4e8e90612e8f903390600401613e02565b606060405180830381600087803b158015612ea957600080fd5b505af1158015612ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee19190613d25565b90508060200151600014612f075760405162461bcd60e51b815260040161099590613fd8565b60048054825160405163eabe7d9160e01b81526001600160a01b039092169263eabe7d9192612f3a928992339201613e39565b602060405180830381600087803b158015612f5457600080fd5b505af1158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190613d05565b612fa85760405162461bcd60e51b815260040161099590614355565b612fb284336137dc565b7fe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d8433604051612562929190613e76565b600260015414156130065760405162461bcd60e51b81526004016109959061467f565b600260019081556040805182815280820190915260609160208083019080368337019050509050818160008151811061303b57fe5b6001600160a01b03928316602091820292909201015260065460405163025181bb60e41b81529116906325181bb09061307a9084903390600401613ef6565b600060405180830381600087803b15801561309457600080fd5b505af11580156130a8573d6000803e3d6000fd5b50506001805550505050565b6001600160a01b038216600090815260096020526040812054839060ff166130ee5760405162461bcd60e51b8152600401610995906144d4565b600260015414156131115760405162461bcd60e51b81526004016109959061467f565b600260015561311e611346565b1561313b5760405162461bcd60e51b8152600401610995906142a2565b60006001600160a01b0316846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561317f57600080fd5b505afa158015613193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b79190613ab6565b6001600160a01b0316146131cb57826131cd565b345b6001600160a01b0385166000908152600960205260409020600101549093508015806132ff5750806132fc856132f6670de0b6b3a76400006132f08a6001600160a01b0316633ba0b9a96040518163ffffffff1660e01b815260040160206040518083038186803b15801561324157600080fd5b505afa158015613255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132799190613d7a565b8b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132b257600080fd5b505afa1580156132c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ea9190613d7a565b90613963565b906139a4565b906139d6565b11155b61331b5760405162461bcd60e51b815260040161099590614148565b6000856001600160a01b031663f2b9fdb83433886040518463ffffffff1660e01b815260040161334c929190613e5d565b6020604051808303818588803b15801561336557600080fd5b505af1158015613379573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061339e9190613d7a565b600654604051639ba24c9b60e01b81529192506001600160a01b031690639ba24c9b906133d19089903390600401613e76565b600060405180830381600087803b1580156133eb57600080fd5b505af11580156133ff573d6000803e3d6000fd5b505050507f2bbccc947c61d8ee81518a7f91c8e99f62691dbacce3401d6ab09fb692fbe17333878760405161343693929190613e39565b60405180910390a16001805595945050505050565b613453613763565b6001600160a01b0316613464611b32565b6001600160a01b03161461348a5760405162461bcd60e51b8152600401610995906143fa565b6001600160a01b0381166134b05760405162461bcd60e51b815260040161099590614094565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60048054604051635ec88c7960e01b8152600092839283926001600160a01b0390911691635ec88c799161354191889101613e02565b60606040518083038186803b15801561355957600080fd5b505afa15801561356d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135919190613d92565b9250925092509193909250565b600654604051637ee0d61360e01b81526001600160a01b0390911690637ee0d613906135d1906008903390600401613f20565b600060405180830381600087803b1580156135eb57600080fd5b505af11580156135ff573d6000803e3d6000fd5b50505050565b6001600160a01b038216600090815260096020526040902054829060ff1661363f5760405162461bcd60e51b8152600401610995906144d4565b6001600160a01b038084166000908152600d602090815260408083209386168352929052205460ff16612812576001600160a01b038084166000818152600d602090815260408083209487168352938152838220805460ff19166001908117909155600c825284832080549182018155835291200180546001600160a01b0319169091179055517f3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a590611ff69085908590613e76565b6136fd611346565b6137195760405162461bcd60e51b815260040161099590613faa565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61374c613763565b6040516137599190613e02565b60405180910390a1565b3390565b61376f611346565b1561378c5760405162461bcd60e51b8152600401610995906142a2565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861374c613763565b6706f05b59d3b20000600a55670ff59ee833b30000600b55565b6001600160a01b0381166000908152600c60205260409020546138115760405162461bcd60e51b8152600401610995906143c3565b6001600160a01b038083166000908152600d602090815260408083209385168352928152828220805460ff19169055600c905290812054905b818110156135ff576001600160a01b038381166000908152600c602052604090208054918616918390811061387b57fe5b6000918252602090912001546001600160a01b0316141561395b576001600160a01b0383166000908152600c60205260409020805460001984019081106138be57fe5b60009182526020808320909101546001600160a01b038681168452600c90925260409092208054919092169190839081106138f557fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600c9091526040902080548061393457fe5b600082815260209020810160001990810180546001600160a01b03191690550190556135ff565b60010161384a565b60008261397257506000611b8b565b8282028284828161397f57fe5b041461399d5760405162461bcd60e51b815260040161099590614382565b9392505050565b60008082116139c55760405162461bcd60e51b815260040161099590614234565b8183816139ce57fe5b049392505050565b60008282018381101561399d5760405162461bcd60e51b815260040161099590614111565b60405180608001604052806000151581526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b8035611b8b816147b5565b60008083601f840112613a62578182fd5b50813567ffffffffffffffff811115613a79578182fd5b6020830191508360208083028501011115613a9357600080fd5b9250929050565b600060208284031215613aab578081fd5b813561399d816147b5565b600060208284031215613ac7578081fd5b815161399d816147b5565b60008060008060808587031215613ae7578283fd5b8435613af2816147b5565b966020860135965060408601359560600135945092505050565b60008060408385031215613b1e578182fd5b8235613b29816147b5565b91506020830135613b39816147b5565b809150509250929050565b60008060008060808587031215613b59578384fd5b8435613b64816147b5565b93506020850135613b74816147b5565b92506040850135613b84816147b5565b9396929550929360600135925050565b600080600060608486031215613ba8578283fd5b8335613bb3816147b5565b92506020840135613bc3816147b5565b929592945050506040919091013590565b60008060408385031215613be6578182fd5b8235613bf1816147b5565b946020939093013593505050565b60008060008060408587031215613c14578384fd5b843567ffffffffffffffff80821115613c2b578586fd5b613c3788838901613a51565b90965094506020870135915080821115613c4f578384fd5b50613c5c87828801613a51565b95989497509550505050565b60006020808385031215613c7a578182fd5b823567ffffffffffffffff811115613c90578283fd5b8301601f81018513613ca0578283fd5b8035613cb3613cae82614795565b61476e565b8181528381019083850185840285018601891015613ccf578687fd5b8694505b83851015613cf957613ce58982613a46565b835260019490940193918501918501613cd3565b50979650505050505050565b600060208284031215613d16578081fd5b8151801515811461399d578182fd5b600060608284031215613d36578081fd5b613d40606061476e565b8251815260208301516020820152604083015160408201528091505092915050565b600060208284031215613d73578081fd5b5035919050565b600060208284031215613d8b578081fd5b5051919050565b600080600060608486031215613da6578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015613df75781516001600160a01b031687529582019590820190600101613dd2565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b60006020825261399d6020830184613dbf565b600060408252613f096040830185613dbf565b905060018060a01b03831660208301529392505050565b6000604082016040835280855480835260608501915086845260209250828420845b82811015613f675781546001600160a01b031684529284019260019182019101613f42565b5050506001600160a01b039490941692019190915250919050565b901515815260200190565b931515845260208401929092526040830152606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526021908201527f436f72653a20626f72726f772062616c616e6365206d757374206265207a65726040820152606f60f81b606082015260800190565b60208082526017908201527f436f72653a206d75737420656e746572206d61726b6574000000000000000000604082015260600190565b60208082526024908201527f436f72653a20696e76616c6964206c61624469737472696275746f72206164646040820152637265737360e01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601e908201527f436f72653a20696e76616c696420756e6465726c79696e672070726963650000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526018908201527f436f72653a20737570706c792063617020726561636865640000000000000000604082015260600190565b60208082526027908201527f436f72653a2063616c6c6572206973206e6f7420746865206f776e6572206f726040820152661035b2b2b832b960c91b606082015260800190565b6020808252601e908201527f436f72653a20696e76616c696420756e6465726c79696e672061737365740000604082015260600190565b6020808252601d908201527f436f72653a2063616c6c65722073686f756c64206265206d61726b6574000000604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b6020808252601c908201527f436f72653a20696e76616c6964206b6565706572206164647265737300000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b602080825260139082015272436f72653a2063616e6e6f7420626f72726f7760681b604082015260600190565b602080825260139082015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604082015260600190565b60208082526015908201527410dbdc994e881d5b9b1a5cdd1959081b585c9ad95d605a1b604082015260600190565b602080825260139082015272436f72653a2063616e6e6f742072656465656d60681b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601c908201527f436f72653a2063616e6e6f7420706f702075736572206d61726b657400000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601e908201527f436f72653a20696e76616c6964206e667420636f726520616464726573730000604082015260600190565b6020808252601f908201527f436f72653a20696e76616c696420636f6c6c61746572616c20666163746f7200604082015260600190565b6020808252601a908201527f436f72653a20696e76616c696420636c6f736520666163746f72000000000000604082015260600190565b60208082526014908201527310dbdc994e881a5b9d985b1a59081b585c9ad95d60621b604082015260600190565b6020808252601d908201527f436f72653a2063616e6e6f74206c697175696461746520626f72726f77000000604082015260600190565b6020808252818101527f436f72653a20696e76616c69642063616c63756c61746f722061646472657373604082015260600190565b6020808252601f908201527f436f72653a20696e76616c69642076616c696461746f72206164647265737300604082015260600190565b6020808252601a908201527f436f72653a2063616e6e6f742072656d6f7665206d61726b6574000000000000604082015260600190565b602080825260129082015271436f72653a20696e76616c6964206461746160701b604082015260600190565b60208082526027908201527f436f72653a20696e76616c6964207265626174654469737472696275746f72206040820152666164647265737360c81b606082015260800190565b60208082526016908201527510dbdc994e881b9bdd08184818dbdb1b185d195c985b60521b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601b908201527f436f72653a20616c7265616479206c6973746564206d61726b65740000000000604082015260600190565b6020808252818101527f436f72653a2063616c6c6572206973206e6f7420746865206e667420636f7265604082015260600190565b81511515815260208083015190820152604080830151908201526060918201519181019190915260800190565b90815260200190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561478d57600080fd5b604052919050565b600067ffffffffffffffff8211156147ab578081fd5b5060209081020190565b6001600160a01b03811681146147ca57600080fd5b5056fea2646970667358221220151fcb4dd0a54ec178948cebb8313a1e99b96e5482dae622bd2c3d035475d03b64736f6c634300060c0033" + }, + { + "address": "0x16675523d9cb8a0354be0f80c9fba48695d3cd98", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000000b3c2dc038ca08", + "code": "0x363d3d373d3d3d363d7308ea843132b8d3df36ce2719c4726347b913db005af43d82803e903d91602b57fd5bf3" + }, + { + "address": "0xa811993ce0eb564f6d2b41baa42e24d9510a13a3", + "nonce": 7, + "balance": "0x000000000000000000000000000000000000000000000000001895f4068516c0", + "code": "0x" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c80632ad47c271461007d5780636282a0141461009257806371eca8dc146101435780638147ef37146101b557806388494e05146101d6578063b124e2f714610220578063b192213c14610233578063d7ec901914610268575b600080fd5b61009061008b36600461098b565b61028b565b005b6100f76100a03660046109ff565b60026020818152600093845260408085209091529183529120805460018201549282015460038301546004840154600585015460069095015493959462ffffff90931693919290916001600160a01b039091169087565b60408051978852602088019690965262ffffff90941694860194909452606085019190915260808401526001600160a01b0390911660a083015260c082015260e0015b60405180910390f35b610156610151366004610a32565b6103dd565b60405161013a9190815181526020808301519082015260408083015162ffffff1690820152606080830151908201526080808301519082015260a0808301516001600160a01b03169082015260c0918201519181019190915260e00190565b6101c86101c3366004610a4d565b6104f9565b60405190815260200161013a565b61020c6101e4366004610a68565b600360209081526000938452604080852082529284528284209052825290205462ffffff1681565b60405162ffffff909116815260200161013a565b61009061022e366004610aab565b610511565b610256610241366004610a32565b60016020526000908152604090205460ff1681565b60405160ff909116815260200161013a565b61027b610276366004610afb565b610575565b604051901515815260200161013a565b858710801561029a5750600087115b6102a357600080fd5b600060ff89166102ff57336000908152600160205260408120805460ff16916102cb83610c02565b82546101009290920a60ff818102199093169183160217909155336000908152600160205260409020541691506103259050565b5033600090815260016020526040902054889060ff908116908216111561032557600080fd5b6040805160e0810182529889526020808a0198895262ffffff9687168a830190815260608b0196875260808b019889526001600160a01b0395861660a08c0190815260c08c01958652336000908152600280855285822060ff979097168252959093529290912099518a55975160018a01559651908801805462ffffff19169190951617909355905160038601559151600485015591516005840180546001600160a01b031916919092161790555160069091015550565b6103e56108fd565b6001600160a01b03821660009081526001602052604090205460ff166104096108fd565b60015b8260ff168160ff16116104f1576001600160a01b03808616600090815260026020818152604080842060ff87168552825292839020835160e08101855281548082526001830154938201939093529281015462ffffff16938301939093526003830154606083015260048301546080830152600583015490931660a082015260069091015460c08201529042108015906104a95750428160200151115b80156104b757506080810151155b156104de5782516104ca578092506104de565b8260600151816060015110156104de578092505b50806104e981610c02565b91505061040c565b509392505050565b6000806105063384610720565b606001519392505050565b33600090815260036020908152604080832060ff8616845282528083206001600160a01b03871684529091528120805483929061055490849062ffffff16610c22565b92506101000a81548162ffffff021916908362ffffff160217905550505050565b6000806105823384610720565b80519091504210806105975750806020015142115b156105a6576000915050610718565b6000816040015162ffffff1611801561060957506040808201513360009081526003602090815283822060ff8816835281528382206001600160a01b038b1683529052919091205462ffffff9182169161060291889116610c22565b62ffffff16115b15610618576000915050610718565b60008160c001511180156106ad575060c081015160a08201516040516370a0823160e01b81526001600160a01b038981166004830152909116906370a082319060240160206040518083038186803b15801561067357600080fd5b505afa158015610687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ab9190610c49565b105b156106bc576000915050610718565b60808101516106cf576001915050610718565b6040516001600160601b0319606088901b16602082015260009060340160405160208183030381529060405280519060200120905061071385836080015183610870565b925050505b949350505050565b6107286108fd565b6001600160a01b03831660009081526001602052604090205460ff16801580159061075957508060ff168360ff1611155b6107955760405162461bcd60e51b8152602060048201526008602482015267085c1a185cd9525960c21b60448201526064015b60405180910390fd5b60ff83166107eb5760006107a8856103dd565b80519091506107e25760405162461bcd60e51b815260206004820152600660248201526521706861736560d01b604482015260640161078c565b915061086a9050565b50506001600160a01b03808316600090815260026020818152604080842060ff87168552825292839020835160e081018552815481526001820154928101929092529182015462ffffff16928101929092526003810154606083015260048101546080830152600581015490921660a082015260069091015460c08201525b92915050565b60008261087d8584610886565b14949350505050565b600081815b84518110156104f1576108b7828683815181106108aa576108aa610c62565b60200260200101516108cb565b9150806108c381610c78565b91505061088b565b60008183106108e75760008281526020849052604090206108f6565b60008381526020839052604090205b9392505050565b6040518060e001604052806000815260200160008152602001600062ffffff168152602001600081526020016000801916815260200160006001600160a01b03168152602001600081525090565b803560ff8116811461095c57600080fd5b919050565b803562ffffff8116811461095c57600080fd5b80356001600160a01b038116811461095c57600080fd5b600080600080600080600080610100898b0312156109a857600080fd5b6109b18961094b565b97506020890135965060408901359550606089013594506109d460808a01610961565b935060a089013592506109e960c08a01610974565b915060e089013590509295985092959890939650565b60008060408385031215610a1257600080fd5b610a1b83610974565b9150610a296020840161094b565b90509250929050565b600060208284031215610a4457600080fd5b6108f682610974565b600060208284031215610a5f57600080fd5b6108f68261094b565b600080600060608486031215610a7d57600080fd5b610a8684610974565b9250610a946020850161094b565b9150610aa260408501610974565b90509250925092565b600080600060608486031215610ac057600080fd5b610ac984610974565b9250610ad76020850161094b565b9150610aa260408501610961565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610b1157600080fd5b610b1a85610974565b93506020610b29818701610961565b935060408601356001600160401b0380821115610b4557600080fd5b818801915088601f830112610b5957600080fd5b813581811115610b6b57610b6b610ae5565b8060051b604051601f19603f83011681018181108582111715610b9057610b90610ae5565b60405291825284820192508381018501918b831115610bae57600080fd5b938501935b82851015610bcc57843584529385019392850192610bb3565b809750505050505050610be16060860161094b565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff811415610c1957610c19610bec565b60010192915050565b600062ffffff808316818516808303821115610c4057610c40610bec565b01949350505050565b600060208284031215610c5b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610c8c57610c8c610bec565b506001019056fea2646970667358221220f11adeee64ff25847ff40c15881026de8ca76fa69a026095c0c33cb13c7dd1a664736f6c63430008090033" + }, + { + "address": "0x51fddcaedb975a1e99b204150db3cdc8626c027a", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000087f25dc97434d6", + "code": "0x" + }, + { + "address": "0xad7f33984bed10518012013d4ab0458d37fee6f3", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033" + }, + { + "address": "0xd13d65e70ec5e3ae8967f889a6d33b82105b2895", + "nonce": 397, + "balance": "0x000000000000000000000000000000000000000000000000012daa8ca72bca97", + "code": "0x" + }, + { + "address": "0x1e703c0607ad08ded4dca06506198dea0d53fdf2", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040908082526004908136101561001757600080fd5b60009060e08235811c918262c5ecd21461245f57508163021a34dd146123cb57816316f0115b146123a25781631848effa146123795781632670e98d146121f65781633659cfe614611f8f5781633b19d92014611e225781633e5005e514611cf95781634cc42b5114611be55781634d3cb81014611abc5781634d506d7714611a7a5781634f1ef2861461172957816352d1902d1461166757816353cb6c75146115ef578163626a7ef214611421578163671e1107146113ab5781636e30e01614611335578163791b98bc1461130c5781638168c0b61461123e5781638e2678d414610eb65781638ffb8b2f14610c8957816390a4a76814610b605781639f89e0fb14610b34578163af2616ab14610b15578163be7cd4c414610ad8578163be82e5b114610987578163c0c53b8b14610820578163c0d7865514610690578163c1872cf3146104a4578163ecd1bbcb146102fd578163f887ea40146102d0578163f9d244fd1461021c575063fca5c7931461019157600080fd5b34610219576020366003190112610219578261021591833581526068602052209283549360018060a01b036001820154169360028201549560ff600384015416918301546005840154600685015460078601549160088701549360098801549660ff600b600a8b01549a01541699519c8d9c8d9860ff808c60081c169b1699612507565b0390f35b80fd5b848334610219575060206101a09261023c610236366127dc565b90614743565b918451948251865260018060a01b03858401511685870152808301519086015261026e606083015160608701906124e4565b6080820151608086015260a082015160a086015260c0820151151560c086015280820151908501526101008082015190850152610120808201519085015261014080910151908401526102c6610160840182516127fb565b0151610180820152f35b8285346102f957816003193601126102f95760715490516001600160a01b039091168152602090f35b5080fd5b828585346104a05760803660031901126104a0576024358181101561049c576103246126e6565b906064356001600160401b0381116104985736602382011215610498576103549036906024818701359101612748565b607154336001600160a01b039182161495919491861561041a575b861561038d575b505061038461038a95612b14565b3561393a565b80f35b909550816020876065541683519283809263477a86ef60e01b82525afa918215610411575087916103cb575b5061038a956103849116331495610376565b90506020813d8211610409575b816103e5602093836126af565b810103126104055761038a956103fd61038492612a7e565b9150956103b9565b8680fd5b3d91506103d8565b513d89823e3d90fd5b9550816020826065541688519283809263c4aa304160e01b82525afa801561048e578291899161044f575b501633149561036f565b9150506020813d8211610486575b8161046a602093836126af565b810103126104825761047c8291612a7e565b89610445565b8780fd5b3d915061045d565b87513d8a823e3d90fd5b8580fd5b8380fd5b8280fd5b828585346104a05760603660031901126104a057803591602435918083101561068c576104cf6126e6565b606554835163c4aa304160e01b81529194602093909290916001600160a01b039081169185818581865afa908115610682578493929187918c91610646575b50821633149283156105ce575b5050506105289150613cc1565b81610551575050906068600b9261038a9587525284205b019060ff801983541691151516179055565b929093948652606a82528086209360ff600386015416848110156105bb57036105835750505090600b61038a9261053f565b5162461bcd60e51b81529182015260146024820152730e8e4c2c8ca40e8f2e0ca40dcdee840dac2e8c6d60631b604482015260649150fd5b634e487b7160e01b885260218552602488fd5b9091925087519384809263477a86ef60e01b82525afa801561063c578990610602575b61052892501633148291858b61051b565b508482813d8311610635575b61061881836126af565b810103126106315761062c61052892612a7e565b6105f1565b8880fd5b503d61060e565b86513d8b823e3d90fd5b94505083813d831161067b575b61065d81836126af565b810103126106775785816106718695612a7e565b9061050e565b8980fd5b503d610653565b87513d8c823e3d90fd5b8480fd5b505091346104a0576020918260031936011261049c576106ae6126d0565b9160018060a01b03918085846065541684519384809262435da560e01b82525afa91821561081657918691859389926107d8575b5060249085519485938492637be53ca160e01b84523390840152165afa9081156107ce578691610769575b50907f612e824501291f520b5ec7914fa88640aef519e3cef9bedcb88d8ece379acb7d9461073e6060959493612a9f565b82607154941692836001600160601b0360a01b8616176071558251943386521690840152820152a180f35b93929190508484813d83116107c7575b61078381836126af565b81010312610498577f612e824501291f520b5ec7914fa88640aef519e3cef9bedcb88d8ece379acb7d9461073e6107bb606096612a92565b9293949550509461070d565b503d610779565b82513d88823e3d90fd5b92839194508092503d831161080f575b6107f281836126af565b8101031261040557839160246108088893612a7e565b91906106e2565b503d6107e8565b83513d89823e3d90fd5b828585346104a05760603660031901126104a0576001600160a01b0381358181169081900361068c576024358281168091036104985760443592831680930361049857855460ff8160081c16159485809661097a575b8015610963575b15610909575060ff1981166001178755846108f8575b506001600160601b0360a01b9182606554161760655581606f541617606f5560705416176070556108c2575080f35b60207f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989161ff001984541684555160018152a180f35b61ffff191661010117865586610893565b608490602088519162461bcd60e51b8352820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152fd5b50303b15801561087d5750600160ff83161461087d565b50600160ff831610610876565b8280858734610ad457602080600319360112610acf57606554825163c4aa304160e01b81526001600160a01b03918216919083818781865afa908115610ac5579082918891610a8d575b50163314918215610a0b575b5050906001936109ee606b93613cc1565b35855260688152610a00838620613db3565b528220828155015580f35b859250839085519687809263477a86ef60e01b82525afa948515610a83578695610a3f575b509093163314836109ee6109dd565b945091908185813d8311610a7c575b610a5881836126af565b81010312610498576109ee606b93610a71600197612a7e565b965091929350610a30565b503d610a4e565b84513d88823e3d90fd5b809250858092503d8311610abe575b610aa681836126af565b8101031261040557610ab88291612a7e565b896109d1565b503d610a9c565b85513d89823e3d90fd5b505050fd5b5050fd5b828585346104a05760203660031901126104a057918192358152606b60205220600160ff825416910154610b0e835180936127fb565b6020820152f35b8285346102f957816003193601126102f9576020906066549051908152f35b8285346102f95780602092610b4836612579565b908252606d8552828220908252845220549051908152f35b8280858734610ad457602080600319360112610acf57606554825163c4aa304160e01b81526001600160a01b03918216919083818781865afa908115610ac5579082918891610c51575b50163314918215610bd9575b505090600193610bc7606b93613cc1565b35855260698152610a00838620613d71565b859250839085519687809263477a86ef60e01b82525afa948515610a83578695610c0d575b50909316331483610bc7610bb6565b945091908185813d8311610c4a575b610c2681836126af565b8101031261049857610bc7606b93610c3f600197612a7e565b965091929350610bfe565b503d610c1c565b809250858092503d8311610c82575b610c6a81836126af565b8101031261040557610c7c8291612a7e565b89610baa565b503d610c60565b828585346104a0576060918260031936011261049c57610ca76126d0565b91610cb06126e6565b606554835163c4aa304160e01b8152602096926001600160a01b0392831692909188818781875afa90811561068257908892918b91610e7d575b5081163314908115610e01575b5090610d1993610d09610d0e93613cc1565b614b8c565b602495863590614cd5565b93848752606c8087528488205461010090818111600014610df95750905b60015b82811115610d46578980f35b878a52818952868a2081840390848211610de757610d6d91610d6791612594565b50613cfc565b60a08101519060808101519088821015610dd557610dd09392610dcb92898e9301511515917f63616e63656c416c6c506f736974696f6e4f72646572730000000000000000008d5194610dbf86612666565b6017865285015261393a565b612adb565b610d3a565b634e487b7160e01b8d5260218952868dfd5b634e487b7160e01b8c5260118852858cfd5b905090610d37565b915050855163477a86ef60e01b815288818781875afa90811561068257908892918b91610e35575b50163314610d19610cf7565b8093508a8092503d8311610e76575b610e4e81836126af565b8101031261067757610d1993610d098992610e6b610d0e95612a7e565b929650929350610e29565b503d610e44565b8093508a8092503d8311610eaf575b610e9681836126af565b810103126106775780610ea98993612a7e565b90610cea565b503d610e8c565b828585346104a05760609283600319360112610219578135936001600160401b03908186116104a057366023870112156104a0578584013591610ef883612808565b95610f05815197886126af565b8387526020978888016024809660051b83010191368311610482578601905b8282106112265750505083358281116104985736602382011215610498578087013590610f5082612808565b91610f5d845193846126af565b808352868b84019160051b830101913683116106315790878c9201905b83821061121757505050506044359283116104985736602384011215610498578287013592610fa884612808565b93610fb5845195866126af565b80855286868c8701920283010191368311610631578701905b8282106111e1575050606554835162435da560e01b81526001600160a01b039250908b9082908b90829086165afa9081156111d757908b9189916111a1575b508451637be53ca160e01b8152338b82015292839189918391165afa801561081657879061116b575b6110409150612a9f565b875181518091149081611160575b501561111e57855b835181101561111a57611069818a612b00565b51600290818110156111085760c08c84938b7f34277869391e6b06632d8da807f22afe881d4d09db9281cdee96b1070871908b948a8a6110b7896110b06111039c8e612b00565b5193612b00565b51936110c284612714565b838252875220918351928381558c8786015195866001840155015195869101558b51953387528601528a8501528b840152608083015260a0820152a1612adb565b611056565b634e487b7160e01b895260218a528789fd5b8680f35b815162461bcd60e51b81528088018a9052601a818701527f696e636f6e73697374656e7420706172616d73206c656e6774680000000000006044820152606490fd5b90508351148a61104e565b508981813d831161119a575b61118181836126af565b810103126104055761119561104091612a92565b611036565b503d611177565b82819392503d83116111d0575b6111b881836126af565b81010312610482576111ca8b91612a7e565b8c61100d565b503d6111ae565b84513d8a823e3d90fd5b8682360312610631578b879186516111f8816125f7565b8435815282850135838201528785013588820152815201910190610fce565b81358152908201908201610f7a565b81356002811015610631578152908a01908a01610f24565b848334610219575060206101e09261125e611258366127dc565b9061497b565b918451948251865260018060a01b038584015116858701528083015190860152611290606083015160608701906124e4565b6080820151608086015260a082015160a086015260c082015160c08601528082015190850152610100808201519085015261012080820151151590850152610140808201511515908501526101608082015190850152610180809101511515908401526113026101a0840182516127fb565b01516101c0820152f35b8285346102f957816003193601126102f95760705490516001600160a01b039091168152602090f35b83858434610219576020366003190112610219578161021591843581526069602052209182549260018060a01b036001820154169460028201549060ff60038401541690830154600584015460ff60068601541691600786015493600887015495600a600989015498015498519b8c9b8c61277f565b83858434610219576020366003190112610219578161021591843581526067602052209182549260018060a01b036001820154169460028201549060ff60038401541690830154600584015460ff60068601541691600786015493600887015495600a600989015498015498519b8c9b8c61277f565b505091346104a05760803660031901126104a0576024359180358184101561068c5761144b6126e6565b606554845163c4aa304160e01b81526064359660209590939290916001600160a01b03918216919087818581865afa9081156115e557889183918d916115a8575b50163314928315611535575b5050506114a59150613cc1565b1561150157806114cd57509160676008926114c894875252842001918254613d64565b905580f35b9092906001146114df575b5050505080f35b60696008926114f694875252842001918254613d64565b9055388080806114d8565b61151d579160686007926114c894875252842001918254613d64565b91606a6007926114c894875252842001918254613d64565b9091925088519384809263477a86ef60e01b82525afa801561159e578990611568575b6114a59250163314388681611498565b508582813d8311611597575b61157e81836126af565b81010312610631576115926114a592612a7e565b611558565b503d611574565b87513d8b823e3d90fd5b928092508391503d83116115de575b6115c181836126af565b810103126115da57816115d48992612a7e565b3861148c565b8a80fd5b503d6115b7565b89513d8d823e3d90fd5b8285346102f95780606092611625611606366126f5565b919083858051611615816125f7565b8281528260208201520152612714565b90825260205220908051611638816125f7565b825492838252826002600183015492602085019384520154920191825282519384525160208401525190820152f35b505034610219578060031936011261021957507f0000000000000000000000001e703c0607ad08ded4dca06506198dea0d53fdf26001600160a01b031630036116c15760208251600080516020614d3e8339815191528152f35b6020608492519162461bcd60e51b8352820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152fd5b505091806003193601126104a05761173f6126d0565b906024356001600160401b03811161068c573660238201121561068c5761176f9036906024818701359101612748565b6001600160a01b0391907f0000000000000000000000001e703c0607ad08ded4dca06506198dea0d53fdf283166117a83082141561281f565b6117c5600080516020614d3e833981519152918583541614612880565b836065541693835180956334cc866d60e21b8252818960209889935afa908115611a70579082918a91611a38575b501633036119ff577f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561183457505050505061038a91506128e1565b8592939495169084516352d1902d60e01b815286818981865afa8991816119d0575b506118b557855162461bcd60e51b8152808901889052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b969192949593960361197b57509085916118ce846128e1565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2845115801590611973575b61190a575b505050505080f35b611968948291660819985a5b195960ca1b865196611927886125f7565b602788527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c8389015287015281519101845af4611962612971565b916129a1565b503880808381611902565b5060016118fd565b845162461bcd60e51b8152908101839052602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b9091508781813d83116119f8575b6119e881836126af565b8101031261067757519038611856565b503d6119de565b835162461bcd60e51b81528088018690526013602482015272556e617574686f72697a65642061636365737360681b6044820152606490fd5b809250878092503d8311611a69575b611a5181836126af565b8101031261063157611a638291612a7e565b386117f3565b503d611a47565b85513d8b823e3d90fd5b8285346102f95780606092611a98611a91366126f5565b9190612714565b90825260205220805491600260018301549201549181519384526020840152820152f35b8280858734610ad457602080600319360112610acf57606554825163c4aa304160e01b81526001600160a01b03918216919083818781865afa908115610ac5579082918891611bad575b50163314918215611b35575b505090600193611b23606b93613cc1565b358552606a8152610a00838620613db3565b859250839085519687809263477a86ef60e01b82525afa948515610a83578695611b69575b50909316331483611b23611b12565b945091908185813d8311611ba6575b611b8281836126af565b8101031261049857611b23606b93611b9b600197612a7e565b965091929350611b5a565b503d611b78565b809250858092503d8311611bde575b611bc681836126af565b8101031261040557611bd88291612a7e565b89611b06565b503d611bbc565b849150833461049c576020908160031936011261068c57928493358452606c825280842091825491611c1683612808565b92611c23825194856126af565b8084528284018095885283882088915b838310611ccc575050505080519482860193838752518094528186019496915b848310611c605786860387f35b909192939484836001928a51848060a01b038151168252838101518483015285810151151586830152606080820151151590830152611ca7608080830151908401906124e4565b60a0808201519083015260c08091015190820152019801930191909694939296611c53565b600586600192611ce3859d999a9b9d9c989c613cfc565b8152019201920191909896959498979397611c33565b8280858734610ad457602080600319360112610acf57606554825163c4aa304160e01b81526001600160a01b03918216919083818781865afa908115610ac5579082918891611dea575b50163314918215611d72575b505090600193611d60606b93613cc1565b35855260678152610a00838620613d71565b859250839085519687809263477a86ef60e01b82525afa948515610a83578695611da6575b50909316331483611d60611d4f565b945091908185813d8311611de3575b611dbf81836126af565b8101031261049857611d60606b93611dd8600197612a7e565b965091929350611d97565b503d611db5565b809250858092503d8311611e1b575b611e0381836126af565b8101031261040557611e158291612a7e565b89611d43565b503d611df9565b60208560031986863683018513610219578135926001600160401b0384116102f95761016090843603011261021957607154336001600160a01b0391821614918215611f17575b8215611e8d575b505090611e80611e869392612b14565b01612c44565b9051908152f35b9091508286836065541687519283809263477a86ef60e01b82525afa918215611f0c578092611ec7575b5050163314611e80611e86611e70565b9091508682813d8311611f05575b611edf81836126af565b810103126102195750611e86939291611efa611e8092612a7e565b918193949550611eb7565b503d611ed5565b8651903d90823e3d90fd5b91508286826065541687519283809263c4aa304160e01b82525afa908115611f85579082918491611f4d575b5016331491611e69565b809250888092503d8311611f7e575b611f6681836126af565b810103126104a057611f788291612a7e565b88611f43565b503d611f5c565b86513d85823e3d90fd5b505091346104a05760208060031936011261049c57611fac6126d0565b916001600160a01b037f0000000000000000000000001e703c0607ad08ded4dca06506198dea0d53fdf28116611fe43082141561281f565b612001600080516020614d3e833981519152918383541614612880565b858483606554168551928380926334cc866d60e21b82525afa9081156111d75790839189916121be575b501633036121855782519161203f83612694565b8783527f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561207b57505050505061038a91506128e1565b8592939495169084516352d1902d60e01b815286818981865afa899181612156575b506120fc57855162461bcd60e51b8152808901889052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b969192949593960361197b5750908591612115846128e1565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a284511580159061214f5761190a57505050505080f35b50816118fd565b9091508781813d831161217e575b61216e81836126af565b810103126106775751903861209d565b503d612164565b825162461bcd60e51b81528087018590526013602482015272556e617574686f72697a65642061636365737360681b6044820152606490fd5b809250868092503d83116121ef575b6121d781836126af565b81010312610482576121e98391612a7e565b3861202b565b503d6121cd565b848484923461049c573660031901126104a057815190612215826125c6565b61221d6126d0565b8252602092602435848401526122316126e6565b8184015260643580151581036104985760608401526084358281101561049857608084015260a43560a084015260c43560c0840152606554815163c4aa304160e01b81526001600160a01b039182169591939190818184818a5afa9081156111d7579085918991612341575b501633149586156122bc575b8761038a876122b78a613cc1565b6145d6565b83829394959750519384809263477a86ef60e01b82525afa928315612338575085926122f9575b505061038a926122b791163314928580806122a9565b90809250813d8311612331575b61231081836126af565b8101031261049c5761038a926123286122b792612a7e565b918194506122e3565b503d612306565b513d87823e3d90fd5b809250838092503d8311612372575b61235a81836126af565b810103126104825761236c8591612a7e565b8961229d565b503d612350565b8285346102f957816003193601126102f95760655490516001600160a01b039091168152602090f35b8285346102f957816003193601126102f957606f5490516001600160a01b039091168152602090f35b83858434610219576123dc36612579565b91908152606c6020528281209081548310156102195750906123fd91612594565b5061245360018060a01b03825416936001830154936002840154916003850154940154948151968752602087015260ff821615159086015260ff8160081c161515606086015260ff608086019160101c166124e4565b60a083015260c0820152f35b839085873461049c57602036600319011261049c579061021591839482358152606a602052208054918460018060a01b036001840154169160028401549060ff60038601541690850154600586015460068701549160078801549360088901549560098a01549860ff600b600a8d01549c0154169b60ff808c60081c169b1699612507565b9060048210156124f15752565b634e487b7160e01b600052602160045260246000fd5b9b99979593919d9c9a98969492909d6101a08d019e8d52600160a01b600190031660208d015260408c015260608b0161253f916124e4565b60808a015260a089015260c088015260e0870152610100860152151561012085015215156101408401526101608301521515906101800152565b604090600319011261258f576004359060243590565b600080fd5b80548210156125b0576000526005602060002091020190600090565b634e487b7160e01b600052603260045260246000fd5b60e081019081106001600160401b038211176125e157604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b038211176125e157604052565b61016081019081106001600160401b038211176125e157604052565b61014081019081106001600160401b038211176125e157604052565b6101a081019081106001600160401b038211176125e157604052565b604081019081106001600160401b038211176125e157604052565b6001600160401b0381116125e157604052565b602081019081106001600160401b038211176125e157604052565b90601f801991011681019081106001600160401b038211176125e157604052565b600435906001600160a01b038216820361258f57565b60443590811515820361258f57565b604090600319011261258f57600435600281101561258f579060243590565b60028110156124f157600052606e602052604060002090565b6001600160401b0381116125e157601f01601f191660200190565b9291926127548261272d565b9161276260405193846126af565b82948184528183011161258f578281602093846000960137010152565b979491936101409996936127b6929d9c9b98956101608b019e8b5260018060a01b031660208b015260408a015260608901906124e4565b608087015260a0860152151560c085015260e08401526101008301526101208201520152565b604090600319011261258f5760043590602435600481101561258f5790565b9060038210156124f15752565b6001600160401b0381116125e15760051b60200190565b1561282657565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608490fd5b1561288757565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608490fd5b803b1561291657600080516020614d3e83398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b3d1561299c573d906129828261272d565b9161299060405193846126af565b82523d6000602084013e565b606090565b91929015612a0357508151156129b5575090565b3b156129be5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015612a165750805190602001fd5b60405162461bcd60e51b815260206004820152908190612a3a906024830190612a3e565b0390fd5b919082519283825260005b848110612a6a575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201612a49565b51906001600160a01b038216820361258f57565b5190811515820361258f57565b15612aa657565b60405162461bcd60e51b815260206004820152600d60248201526c37b7363ca837b7b620b236b4b760991b6044820152606490fd5b6000198114612aea5760010190565b634e487b7160e01b600052601160045260246000fd5b80518210156125b05760209160051b010190565b15612b1b57565b60405162461bcd60e51b815260206004820152601360248201527237b7363ca2bc32b1baba37b9132937baba32b960691b6044820152606490fd5b908161016091031261258f5760405190612b6f82612612565b80518252612b7f60208201612a7e565b6020830152612b9060408201612a7e565b6040830152612ba160608201612a7e565b6060830152612bb260808201612a92565b608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080820151908301526101208082015190830152610140809101519082015290565b903590601e198136030182121561258f57018035906001600160401b03821161258f5760200191813603831361258f57565b35801515810361258f5790565b60048210156124f15752565b80356001600160a01b038116810361258f57606554612c6d9082906001600160a01b0316614b8c565b606f54604051632f7ce47360e21b8152602084013560048201526001600160a01b039091169061016081602481855afa90811561369b57600091613909575b506080810151156138d95760036101008501351015918261258f576101008501356001036137ce575060208481013560009081527f136eb4aae73f7618d8559a84c5ff3678edc6b16994db052447ebc43c429b7d6f9091526040908190209051612d15816125f7565b815491828252600260018201549160208401928352015492604083019384526136b9575b5050505b600460408501351015908161258f5760408501351580156136a7575b6134fe575b60006060860135136134b5575b50600060c08501351315612e1d5761258f57612d8960a08401612c2b565b612d9660c0850135614ca5565b9060405193612da48561262e565b6001600160a01b0316845260208581013590850152612dca604080870135908601612c38565b6060850135606085015260808501356080850152151560a084015260c083015260e083013560e08301526000610100830152610120808401359083015261258f57610100612e1a92013590613fe3565b90565b600060c08594950135126000146133d95761258f57612e3f60c0830135614ca5565b612e4b60a08401612c2b565b9060405194612e598661262e565b6001600160a01b0316855260208481013590860152612e7f604080860135908701612c38565b606084013560608601526080840135608086015260a0850152151560c084015260e082013560e0840152600061010084015261012082013561012084015261258f576066549160018060a01b03815116926020820151604083015160048110156124f1576060840151608085015160a086015191612f2760e08801519460c08901511515966040519b612f118d61264a565b898d5260208d015260408c015260608b01612c38565b608089015260a088015260c0870152600060e087015261010086015261012085015260006101408501524261016085015260006101808501526101208201519060405191612f7483612666565b612f8361010086013584613fbf565b6020830152600052606b602052604060002090805160038110156124f15760019160209160ff801986541691161784550151910155604081015160048110156124f1576132195760c0810151151561014084015260665460005260686020526040600020835181556001810160018060a01b036020860151166001600160601b0360a01b8254161790556040840151600282015560608401519060048210156124f1576130366130d19260038301613fcb565b6080850151600482015560a0850151600582015560c0850151600682015560e0850151600782015561010085015160088201556130a96009820161308d6101208801511515829060ff801983541691151516179055565b610140870151815461ff00191690151560081b61ff0016179055565b610160850151600a820155600b610180860151151591019060ff801983541691151516179055565b6130dc606654612adb565b606655602083015160408401516101208501516060860151926001600160a01b03169190151560048410156124f1576131446131539488519260c08a01519460405196613128886125c6565b8752602087015260408601526000606086015260808501612c38565b60a083015260c0820152614556565b60018060a01b036020840151168351604083015160048110156124f1577f0aeaf4e3bbd479c5214fdf7ae70b422111bf2664b91f8d035d777512e094d11994848761320e93606061016098015160208401516080850151916131df60a08701519461012061014060c08a0151151598015115159801519a6040519c8d5260208d015260408c01906124e4565b60608a0152608089015260a088015260c087015260e086015261010085015261010061012085019101356127fb565b610140820152a15190565b604081015160048110156124f15760010361329e5760c081015115610140840152606654600052606a6020526040600020835181556001810160018060a01b036020860151166001600160601b0360a01b8254161790556040840151600282015560608401519060048210156124f1576130366132999260038301613fcb565b6130d1565b604081015160048110156124f15760020361331e5760c081015115610140840152606654600052606a6020526040600020835181556001810160018060a01b036020860151166001600160601b0360a01b8254161790556040840151600282015560608401519060048210156124f1576130366132999260038301613fcb565b604081015160048110156124f15760030361339f5760c08101511515610140840152606654600052606a6020526040600020835181556001810160018060a01b036020860151166001600160601b0360a01b8254161790556040840151600282015560608401519060048210156124f1576130366132999260038301613fcb565b60405162461bcd60e51b8152602060048201526012602482015271696e76616c6964207472616465207479706560701b6044820152606490fd5b606083949301351561347a5761258f576133f560a08401612c2b565b604051926134028461262e565b6001600160a01b0316835260208481013590840152613428604080860135908501612c38565b6060840135606084015260808401356080840152151560a0830152600060c083015260e083013560e08301526000610100830152610120808401359083015261258f57610100612e1a92013590613fe3565b60405162461bcd60e51b815260206004820152601360248201527218dbdb1b185d195c985b081c995c5d5a5c9959606a1b6044820152606490fd5b604001516134f8906001600160a01b03166134d36060870135614ca5565b606f549091906001600160a01b03166134f0610140890189612bf9565b939092613dfb565b38612d6b565b606f546040516330a66e1560e01b8152602087013560048201529061010090829060249082906001600160a01b03165afa90811561369b576000916135e4575b5060c08601356000811215613555575b5050612d5e565b80159182156135a7575b50501561356d57388061354e565b60405162461bcd60e51b8152602060048201526012602482015271696e76616c69642074726164652073697a6560701b6044820152606490fd5b9091506135b382614ca5565b6040820151111591826135ca575b5050388061355f565b60609192506135d890614ca5565b910151101538806135c1565b610100813d61010011613693575b8161360061010093836126af565b810103126102f95760405191826101008101106001600160401b036101008501111761367f575060e0906101008301604052805183526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c0840152015160e08201523861353e565b634e487b7160e01b81526041600452602490fd5b3d91506135f2565b6040513d6000823e3d90fd5b50600091506040850135600114612d59565b60c08701356136c781614ca5565b8251111593846137c3575b508315613799575b50505061375457600080808060018060a01b03606f5416816040516136fe81612694565b5234905af161370b612971565b501561371957388080612d39565b60405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c88195d1a0819985a5b1959606a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74206e6574776f726b2066656500000000000000006044820152606490fd5b6137a591929350614ca5565b90511190816137b8575b503880806136da565b9050513410386137af565b5134109350386136d2565b600092506101008501356002146137e6575b50612d3d565b60018352606e60205260408320602086013584526020526040832060405161380d816125f7565b81549182825260026001820154916020840192835201549260408301938452613839575b5050506137e0565b60c088013561384781614ca5565b8251111593846138c9575b50831561389a575b50505061375457604082015161389191906001600160a01b0316613882610140880188612bf9565b92909161012089013590613dfb565b38808080613831565b6138a691929350614ca5565b90511190816138b9575b5038808061385a565b90505161012086013510386138b0565b516101208a013510935038613852565b60405162461bcd60e51b8152602060048201526008602482015267191a5cd8589b195960c21b6044820152606490fd5b61392d91506101603d61016011613933575b61392581836126af565b810190612b56565b38612cac565b503d61391b565b929392909115613b375761394e8282614743565b506020810180519091906001600160a01b039081168015613b2d57613977908260655416614b8c565b8083511690604090818401519461010085015115600090600014613b28575060808501515b60c0860151151590606087019788519660049788811015613b135790613a02949392918a516139f360e08d0151928b51976139d6896125c6565b8589528660208a01528c8901526001606089015260808801612c38565b60a086015260c085015261439e565b855184811015613afe57613ad25784516000526067602052613a2683600020613d71565b5116925193519180831015613abd5750927fa17b9023914ac67fce374ea74da20a2d3383a0dcbc348890794328a35a2a9cb0969792613a8e7f7e93a6b00cb3caacf000d7018943b12e2b4ad29e7849df14ebd51caf4fd739b893613ab8965193849384614374565b0390a15b613aa7604051948594855260208501906124e4565b606060408401526060830190612a3e565b0390a1565b602190634e487b7160e01b6000525260246000fd5b855184811015613afe57600103613a265784516000526069602052613af983600020613d71565b613a26565b602185634e487b7160e01b6000525260246000fd5b602189634e487b7160e01b6000525260246000fd5b61399c565b5050505050509050565b613b41828261497b565b506020810180519091906001600160a01b039081168015613b2d57613b6a908260655416614b8c565b8083511690604090818401519460e085015115600090600014613cbc575060808501515b610120860151151590606087019788519660049788811015613b135790613be6949392918a516139f360c08d0151928b5197613bc9896125c6565b8589528660208a01528c8901526000606089015260808801612c38565b855184811015613afe57613c7a5784516000526068602052613c0a83600020613db3565b5116925193519180831015613abd5750927fa17b9023914ac67fce374ea74da20a2d3383a0dcbc348890794328a35a2a9cb0969792613c727fb225fd6bcccad9342bc10ccc7e25ef77175b77348c8393d669ac2dbc98a1ae2993613ab8965193849384614374565b0390a1613a92565b855184811015613afe57600103613ca6578451600052606a602052613ca183600020613db3565b613c0a565b8451600052606a602052613ca183600020613db3565b613b8e565b15613cc857565b60405162461bcd60e51b815260206004820152600c60248201526b37b7363ca2bc32b1baba37b960a11b6044820152606490fd5b90604051613d09816125c6565b60c06004829460018060a01b03815416845260018101546020850152613d5360ff600283015481811615156040880152818160081c161515606088015260101c1660808601612c38565b600381015460a08501520154910152565b91908201809211612aea57565b600a6000918281558260018201558260028201558260038201558260048201558260058201558260068201558260078201558260088201558260098201550155565b600b60009182815582600182015582600282015582600382015582600482015582600582015582600682015582600782015582600882015582600982015582600a8201550155565b90929360018060a01b038092169060409485516370a0823160e01b9485825260009616928360048301526020988983602481895afa928315613fb557908a95949392918993613f7d575b5083613ee4575b5050602491613e5a91613d64565b9487519485938492835260048301525afa928315613ed95792613eaa575b5011613e82575050565b60649250519062461bcd60e51b825260048201526002602482015261746360f01b6044820152fd5b9091508381813d8311613ed2575b613ec281836126af565b8101031261258f57519038613e78565b503d613eb8565b8451903d90823e3d90fd5b909192939450333b15610482578160a489928b5194859384926316e95edb60e31b84528b60048501528960248501528a604485015260806064850152816084850152848401378181018301859052601f01601f1916810103018183335af18015613f7357908994939291613f59575b80613e4c565b91613e5a9197613f6a602494612681565b97915091613f53565b88513d89823e3d90fd5b8092935086919495963d8311613fae575b613f9881836126af565b8101031261048257908994939291519138613e45565b503d613f8e565b89513d8a823e3d90fd5b60038210156124f15752565b9060048110156124f15760ff80198354169116179055565b6066549160018060a01b03825116926020830151604084015160048110156124f1576060850151608086015160a087015115159161403360c08901519460e08a0151966040519b612f118d612612565b608089015260a088015260c087015260e0860152600061010086015261012085015242610140850152610120830151906040519161407083612666565b61407a8484613fbf565b6020830152600052606b602052604060002090805160038110156124f15760019160209160ff801986541691161784550151910155604082015160048110156124f1576142a15760665460005260676020526040600020835181556001810160018060a01b036020860151166001600160601b0360a01b82541617905560408401516002820155606084015160048110156124f15761411c9060038301613fcb565b6080840151600482015560a0840151600582015561414f60c08501511515600683019060ff801983541691151516179055565b60e0840151600782015561010084015160088201556101208401516009820155600a6101408501519101555b614186606654612adb565b6066556020830151604084015160c08501516060860151926001600160a01b03169190151560048410156124f1576131446141ed9488519260e08a015194604051966141d1886125c6565b8752602087015260408601526001606086015260808501612c38565b60018060a01b03602084015116835160208401519260408501519060048210156124f15785610140956142969360607ff40f6abc9c6c249d1ee271694fe4367e2f308812fff71b773c7024b8708ed1b799015161427760808501519260a086015115159461012060c0880151970151996040519b8c5260208c015260408b015260608a01906124e4565b608088015260a087015260c086015260e08501526101008401906127fb565b610120820152a15190565b604082015160048110156124f15760010361339f5760665460005260696020526040600020835181556001810160018060a01b036020860151166001600160601b0360a01b82541617905560408401516002820155606084015160048110156124f1576143119060038301613fcb565b6080840151600482015560a0840151600582015561434460c08501511515600683019060ff801983541691151516179055565b60e0840151600782015561010084015160088201556101208401516009820155600a61014085015191015561417b565b6001600160a01b039091168152602081019190915260608101929161439c91604001906124e4565b565b926143ab909291926145d6565b6000918282136143bc575b50505050565b606f54604051632f7ce47360e21b8152600481018390526001600160a01b039182169190610160908181602481875afa9182156144955761440e9284926040928a92614478575b505001511694614ca5565b90823b1561049857608492869594928692604051998a978896634f7a10db60e11b88526004880152602487015216604485015260648401525af190811561446c575061445d575b8080806143b6565b61446690612681565b38614455565b604051903d90823e3d90fd5b61448e9250803d106139335761392581836126af565b3880614403565b6040513d89823e3d90fd5b91906145405760018060a01b038151166001600160601b0360a01b8354161782556020810151600183015560028201906144ec60408201511515839060ff801983541691151516179055565b6060810151825461ff00191690151560081b61ff001617825560808101519060048210156124f1578260c09262ff0000600495549160101b169062ff0000191617905560a081015160038501550151910155565b634e487b7160e01b600052600060045260246000fd5b8051602082015160408301516145799290151591906001600160a01b0316614cd5565b600090808252606c6020526040822054606d6020526040832060a0850151845260205260408320558152606c60205260408120805491600160401b83101561367f5750816145d091600161439c9594018155612594565b906144a0565b805160208083015160408085015192949390926145ff92901515916001600160a01b0316614cd5565b92600093808552606d825260a08386209401938451865282528285205493818652606c835283862054946000199586810190811161472f5781106146bc575b5090606c9291818752606d83528487209051875282528584812055855252822090815480156146a85701916146738383612594565b61469457808260049255826001820155826002820155826003820155015555565b634e487b7160e01b82526004829052602482fd5b634e487b7160e01b84526031600452602484fd5b828752606c845284872080549087820191821161471b57610d67606c96959493926146e692612594565b8389528585526146fc816145d0848a8d20612594565b838952606d855260a0878a20910151895284528588205590919261463e565b634e487b7160e01b89526011600452602489fd5b634e487b7160e01b88526011600452602488fd5b91909160409081519061475582612612565b600094858352602092868482015286858201528660608201528660808201528660a08201528660c08201528660e082015261010091878383015261012090888284015261014092898482015250888688516147af81612666565b82815201526004811015614967578693929190806148875750600a906001958a5260678752848a20908551946147e486612612565b82548652878060a01b0388840154168987015260028301548787015261481460ff60038501541660608801612c38565b60048301546080870152600583015460a087015260ff600684015416151560c0870152600783015460e0870152600883015490860152600982015490850152015490820152955b86518152606b84522092519261487084612666565b61487e60ff82541685613fbf565b01549082015290565b92949193509160010361492e5791600a6001949287948a5260698752848a20908551946148b386612612565b82548652878060a01b038884015416898701526002830154878701526148e360ff60038501541660608801612c38565b60048301546080870152600583015460a087015260ff600684015416151560c0870152600783015460e08701526008830154908601526009820154908501520154908201529561485b565b855162461bcd60e51b8152602060048201526012602482015271696e76616c6964207472616465207479706560701b6044820152606490fd5b634e487b7160e01b89526021600452602489fd5b91909160409081519361498d8561264a565b600094858152602092868483015286858301528660608301528660808301528660a08301528660c08301528660e0830152610100928784840152610120918883850152610140908982860152610160928a848701528a610180809701528a888a516149f781612666565b82815201526004811015614b78579388959360ff9384888e600b9660019c9a15600014614ad357815260688d522093895198614a328a61264a565b85548a528b8060a01b038c870154168d8b015260028601548b8b0152614a618360038801541660608c01612c38565b600486015460808b0152600586015460a08b0152600686015460c08b0152600786015460e08b01526008860154908a01526009850154908282161515908a015260081c16151590870152600a820154908601520154161515908201529586518152606b84522092519261487084612666565b8152606a8d522093895198614ae78a61264a565b85548a528b8060a01b038c870154168d8b015260028601548b8b0152614b168360038801541660608c01612c38565b600486015460808b0152600586015460a08b0152600686015460c08b0152600786015460e08b01526008860154908a01526009850154908282161515908a015260081c16151590870152600a820154908601520154161515908201529561485b565b634e487b7160e01b8b52602160045260248bfd5b60405162435da560e01b8152602092916001600160a01b039084908390600490829085165afa92831561369b578492600094614c68575b5060405163b36d691960e01b815290821660048201529283916024918391165afa90811561369b57600091614c33575b50614bfb5750565b6064906040519062461bcd60e51b825260048201526011602482015270189b1858dadb1a5cdd081858d8dbdd5b9d607a1b6044820152fd5b908282813d8311614c61575b614c4981836126af565b810103126102195750614c5b90612a92565b38614bf3565b503d614c3f565b919282819592953d8311614c9e575b614c8181836126af565b810103126102195750906024614c978593612a7e565b9390614bc3565b503d614c77565b6000808212614cb2575090565b600160ff1b8214614cc1570390565b634e487b7160e01b81526011600452602490fd5b9091600160401b831015614d125760009015614d0a575060ff60015b169160201b906001600160601b03199060601b16171790565b60ff90614cf1565b60405162461bcd60e51b81526020600482015260036024820152621c1d1b60ea1b6044820152606490fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212207783b1111aa3011505fb6b6141e2961579182eddb4fe6f5ca0a223f39fb096bb64736f6c63430008130033" + }, + { + "address": "0xddb6674d7b7b27ebf8001758820f1b86d784a6d7", + "nonce": 46, + "balance": "0x000000000000000000000000000000000000000000000000002b31c462e36da7", + "code": "0x" + }, + { + "address": "0xce631cde950ef014d2c4fb65d5b85d16a4e4df09", + "nonce": 38, + "balance": "0x00000000000000000000000000000000000000000000000000327d75dab08db0", + "code": "0x" + }, + { + "address": "0xde5f5ebef73981fd290e9885b56473396caadaf2", + "nonce": 41, + "balance": "0x0000000000000000000000000000000000000000000000000008641d60148517", + "code": "0x" + }, + { + "address": "0x3c6cd9cc7c7a4c2cf5a82734cd249d7d593354da", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c80638f6b4d91116100e3578063bc43cbaf1161008c578063f2fde38b11610066578063f2fde38b1461042b578063f8a2abd31461045e578063feaf968c146104915761018d565b8063bc43cbaf146103fa578063c159730414610402578063e8c4be30146104235761018d565b8063a928c096116100bd578063a928c0961461038d578063b5ab58dc146103c0578063b633620c146103dd5761018d565b80638f6b4d911461032957806392eefe9b146103315780639a6fc8f5146103645761018d565b80636001ac531161014557806379ba50971161011f57806379ba50971461030f5780638205bf6a146103195780638da5cb5b146103215761018d565b80636001ac5314610222578063668a0f021461028a5780637284e416146102925761018d565b806350d25bcd1161017657806350d25bcd146101e157806354fd4d50146101fb57806358303b10146102035761018d565b8063245a7bfc14610192578063313ce567146101c3575b600080fd5b61019a610499565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101cb6104bb565b6040805160ff9092168252519081900360200190f35b6101e9610559565b60408051918252519081900360200190f35b6101e96106e0565b61020b61074d565b6040805161ffff9092168252519081900360200190f35b61024b6004803603602081101561023857600080fd5b503569ffffffffffffffffffff16610757565b6040805169ffffffffffffffffffff96871681526020810195909552848101939093526060840191909152909216608082015290519081900360a00190f35b6101e9610978565b61029a610af9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d45781810151838201526020016102bc565b50505050905090810190601f1680156103015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610317610c76565b005b6101e9610d78565b61019a610ef9565b61024b610f15565b6103176004803603602081101561034757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611134565b61024b6004803603602081101561037a57600080fd5b503569ffffffffffffffffffff16611201565b610317600480360360208110156103a357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661138b565b6101e9600480360360208110156103d657600080fd5b50356114ce565b6101e9600480360360208110156103f357600080fd5b5035611657565b61019a6117d9565b61019a6004803603602081101561041857600080fd5b503561ffff166117f5565b61019a61181d565b6103176004803603602081101561044157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611839565b6103176004803603602081101561047457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611935565b61024b611a02565b60025462010000900473ffffffffffffffffffffffffffffffffffffffff1690565b6000600260000160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561052857600080fd5b505afa15801561053c573d6000803e3d6000fd5b505050506040513d602081101561055257600080fd5b5051905090565b60055460009073ffffffffffffffffffffffffffffffffffffffff168015806106675750604080517f6b14daf8000000000000000000000000000000000000000000000000000000008152336004820181815260248301938452366044840181905273ffffffffffffffffffffffffffffffffffffffff861694636b14daf8946000939190606401848480828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201965060209550909350505081840390508186803b15801561063a57600080fd5b505afa15801561064e573d6000803e3d6000fd5b505050506040513d602081101561066457600080fd5b50515b6106d257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6106da611b8b565b91505090565b6000600260000160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b815260040160206040518083038186803b15801561052857600080fd5b60025461ffff1690565b600554600090819081908190819073ffffffffffffffffffffffffffffffffffffffff1680158061086d5750604080517f6b14daf8000000000000000000000000000000000000000000000000000000008152336004820181815260248301938452366044840181905273ffffffffffffffffffffffffffffffffffffffff861694636b14daf8946000939190606401848480828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201965060209550909350505081840390508186803b15801561084057600080fd5b505afa158015610854573d6000803e3d6000fd5b505050506040513d602081101561086a57600080fd5b50515b6108d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff1661095c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4e6f2070726f706f7365642061676772656761746f722070726573656e740000604482015290519081900360640190fd5b61096587611bf8565b939b929a50909850965090945092505050565b60055460009073ffffffffffffffffffffffffffffffffffffffff16801580610a865750604080517f6b14daf8000000000000000000000000000000000000000000000000000000008152336004820181815260248301938452366044840181905273ffffffffffffffffffffffffffffffffffffffff861694636b14daf8946000939190606401848480828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201965060209550909350505081840390508186803b158015610a5957600080fd5b505afa158015610a6d573d6000803e3d6000fd5b505050506040513d6020811015610a8357600080fd5b50515b610af157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6106da611d57565b6060600260000160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637284e4166040518163ffffffff1660e01b815260040160006040518083038186803b158015610b6657600080fd5b505afa158015610b7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015610bc157600080fd5b8101908080516040519392919084640100000000821115610be157600080fd5b908301906020820185811115610bf657600080fd5b8251640100000000811182820188101715610c1057600080fd5b82525081516020918201929091019080838360005b83811015610c3d578181015183820152602001610c25565b50505050905090810190601f168015610c6a5780820380516001836020036101000a031916815260200191505b50604052505050905090565b60015473ffffffffffffffffffffffffffffffffffffffff163314610cfc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015290519081900360640190fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60055460009073ffffffffffffffffffffffffffffffffffffffff16801580610e865750604080517f6b14daf8000000000000000000000000000000000000000000000000000000008152336004820181815260248301938452366044840181905273ffffffffffffffffffffffffffffffffffffffff861694636b14daf8946000939190606401848480828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201965060209550909350505081840390508186803b158015610e5957600080fd5b505afa158015610e6d573d6000803e3d6000fd5b505050506040513d6020811015610e8357600080fd5b50515b610ef157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6106da611e2e565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600554600090819081908190819073ffffffffffffffffffffffffffffffffffffffff1680158061102b5750604080517f6b14daf8000000000000000000000000000000000000000000000000000000008152336004820181815260248301938452366044840181905273ffffffffffffffffffffffffffffffffffffffff861694636b14daf8946000939190606401848480828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201965060209550909350505081840390508186803b158015610ffe57600080fd5b505afa158015611012573d6000803e3d6000fd5b505050506040513d602081101561102857600080fd5b50515b61109657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff1661111a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4e6f2070726f706f7365642061676772656761746f722070726573656e740000604482015290519081900360640190fd5b611122611e9b565b95509550955095509550509091929394565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111ba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600554600090819081908190819073ffffffffffffffffffffffffffffffffffffffff168015806113175750604080517f6b14daf8000000000000000000000000000000000000000000000000000000008152336004820181815260248301938452366044840181905273ffffffffffffffffffffffffffffffffffffffff861694636b14daf8946000939190606401848480828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201965060209550909350505081840390508186803b1580156112ea57600080fd5b505afa1580156112fe573d6000803e3d6000fd5b505050506040513d602081101561131457600080fd5b50515b61138257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61096587611fe4565b60005473ffffffffffffffffffffffffffffffffffffffff16331461141157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff82811691161461149a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e76616c69642070726f706f7365642061676772656761746f720000000000604482015290519081900360640190fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556114cb81612117565b50565b60055460009073ffffffffffffffffffffffffffffffffffffffff168015806115dc5750604080517f6b14daf8000000000000000000000000000000000000000000000000000000008152336004820181815260248301938452366044840181905273ffffffffffffffffffffffffffffffffffffffff861694636b14daf8946000939190606401848480828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201965060209550909350505081840390508186803b1580156115af57600080fd5b505afa1580156115c3573d6000803e3d6000fd5b505050506040513d60208110156115d957600080fd5b50515b61164757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015290519081900360640190fd5b611650836121de565b9392505050565b60055460009073ffffffffffffffffffffffffffffffffffffffff168015806117655750604080517f6b14daf8000000000000000000000000000000000000000000000000000000008152336004820181815260248301938452366044840181905273ffffffffffffffffffffffffffffffffffffffff861694636b14daf8946000939190606401848480828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201965060209550909350505081840390508186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b50515b6117d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015290519081900360640190fd5b611650836122d8565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633146118bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60005473ffffffffffffffffffffffffffffffffffffffff1633146119bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600554600090819081908190819073ffffffffffffffffffffffffffffffffffffffff16801580611b185750604080517f6b14daf8000000000000000000000000000000000000000000000000000000008152336004820181815260248301938452366044840181905273ffffffffffffffffffffffffffffffffffffffff861694636b14daf8946000939190606401848480828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201965060209550909350505081840390508186803b158015611aeb57600080fd5b505afa158015611aff573d6000803e3d6000fd5b505050506040513d6020811015611b1557600080fd5b50515b611b8357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61112261239b565b6000600260000160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561052857600080fd5b600354600090819081908190819073ffffffffffffffffffffffffffffffffffffffff16611c8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4e6f2070726f706f7365642061676772656761746f722070726573656e740000604482015290519081900360640190fd5b600354604080517f9a6fc8f500000000000000000000000000000000000000000000000000000000815269ffffffffffffffffffff89166004820152905173ffffffffffffffffffffffffffffffffffffffff90921691639a6fc8f59160248082019260a092909190829003018186803b158015611d0457600080fd5b505afa158015611d18573d6000803e3d6000fd5b505050506040513d60a0811015611d2e57600080fd5b508051602082015160408301516060840151608090940151929a91995097509195509350915050565b6000611d61612516565b5060408051808201825260025461ffff81168083526201000090910473ffffffffffffffffffffffffffffffffffffffff16602080840182905284517f668a0f0200000000000000000000000000000000000000000000000000000000815294519394611e1c9463668a0f0292600480840193919291829003018186803b158015611deb57600080fd5b505afa158015611dff573d6000803e3d6000fd5b505050506040513d6020811015611e1557600080fd5b50516124b8565b69ffffffffffffffffffff1691505090565b6000600260000160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638205bf6a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561052857600080fd5b600354600090819081908190819073ffffffffffffffffffffffffffffffffffffffff16611f2a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4e6f2070726f706f7365642061676772656761746f722070726573656e740000604482015290519081900360640190fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b158015611f9257600080fd5b505afa158015611fa6573d6000803e3d6000fd5b505050506040513d60a0811015611fbc57600080fd5b5080516020820151604083015160608401516080909401519299919850965091945092509050565b60008060008060008060006120048869ffffffffffffffffffff166124d8565b61ffff821660009081526004602081905260408083205481517f9a6fc8f500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86169381019390935290519496509294509092839283928392839273ffffffffffffffffffffffffffffffffffffffff1691639a6fc8f59160248083019260a0929190829003018186803b1580156120a057600080fd5b505afa1580156120b4573d6000803e3d6000fd5b505050506040513d60a08110156120ca57600080fd5b508051602082015160408301516060840151608090940151929850909650945090925090506120fd85858585858c6124e0565b9b509b509b509b509b505050505050505091939590929450565b60028054604080518082018252600161ffff808516919091011680825273ffffffffffffffffffffffffffffffffffffffff9590951660209182018190527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090931685177fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000084021790935560009384526004909252912080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b600069ffffffffffffffffffff8211156121fa575060006122d3565b600080612206846124d8565b61ffff8216600090815260046020526040902054919350915073ffffffffffffffffffffffffffffffffffffffff168061224657600093505050506122d3565b8073ffffffffffffffffffffffffffffffffffffffff1663b5ab58dc836040518263ffffffff1660e01b8152600401808267ffffffffffffffff16815260200191505060206040518083038186803b1580156122a157600080fd5b505afa1580156122b5573d6000803e3d6000fd5b505050506040513d60208110156122cb57600080fd5b505193505050505b919050565b600069ffffffffffffffffffff8211156122f4575060006122d3565b600080612300846124d8565b61ffff8216600090815260046020526040902054919350915073ffffffffffffffffffffffffffffffffffffffff168061234057600093505050506122d3565b8073ffffffffffffffffffffffffffffffffffffffff1663b633620c836040518263ffffffff1660e01b8152600401808267ffffffffffffffff16815260200191505060206040518083038186803b1580156122a157600080fd5b60008060008060006123ab612516565b5060408051808201825260025461ffff8116825262010000900473ffffffffffffffffffffffffffffffffffffffff166020820181905282517ffeaf968c0000000000000000000000000000000000000000000000000000000081529251919260009283928392839283929163feaf968c9160048083019260a0929190829003018186803b15801561243c57600080fd5b505afa158015612450573d6000803e3d6000fd5b505050506040513d60a081101561246657600080fd5b5080516020820151604083015160608401516080909401518a5193995091975095509193509091506124a190869086908690869086906124e0565b9a509a509a509a509a505050505050509091929394565b67ffffffffffffffff1660409190911b69ffff0000000000000000161790565b604081901c91565b60008060008060006124f2868c6124b8565b8a8a8a6124ff8a8c6124b8565b939f929e50909c509a509098509650505050505050565b60408051808201909152600080825260208201529056fea2646970667358221220c6148a0e63011d3b8b4f67078be31115256b163e26351db6fe3b70d7faf433f964736f6c63430006060033" + }, + { + "address": "0xeb205b722d60334ba8d45a8b4585a6ddfd56ed83", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461013d578063b7dac9761461015b578063bfa6658514610179578063edec795214610197578063f10b5cc8146101b5578063f2fde38b146101d3576100b4565b806316675734146100b957806345a8d0f1146100d5578063499e4112146100f15780636cb745621461010d578063715018a6146101295780638129fc1c14610133575b600080fd5b6100d360048036038101906100ce919061095e565b6101ef565b005b6100ef60048036038101906100ea919061095e565b61027e565b005b61010b6004803603810190610106919061095e565b61030d565b005b6101276004803603810190610122919061095e565b61039c565b005b61013161042b565b005b61013b61043f565b005b61014561057d565b604051610152919061099a565b60405180910390f35b6101636105a7565b604051610170919061099a565b60405180910390f35b6101816105d1565b60405161018e919061099a565b60405180910390f35b61019f6105fb565b6040516101ac919061099a565b60405180910390f35b6101bd610625565b6040516101ca919061099a565b60405180910390f35b6101ed60048036038101906101e8919061095e565b61064f565b005b6101f76106d2565b80606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f0115b36746cbcd5759972b4c5f80450d3be1be0f624693378417d61cad103b3a60405160405180910390a250565b6102866106d2565b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fb823bfcaa11e0b58fbe97ffae2b42a865c1202c49bc6f75ba47903473cf79e2960405160405180910390a250565b6103156106d2565b80606860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f2f627562d11b69216f18d7a2e496468641735ab36d043fb3c3e3b958044d459660405160405180910390a250565b6103a46106d2565b80606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f37de513e8c3a97267dea780aab6b3413bc6aee6aff9e4dd4f5d8bffbab7a043360405160405180910390a250565b6104336106d2565b61043d6000610750565b565b60008060019054906101000a900460ff161590508080156104705750600160008054906101000a900460ff1660ff16105b8061049d575061047f30610816565b15801561049c5750600160008054906101000a900460ff1660ff16145b5b6104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610a38565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610519576001600060016101000a81548160ff0219169083151502179055505b610521610839565b801561057a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516105719190610aaa565b60405180910390a15b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106576106d2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bd90610b37565b60405180910390fd5b6106cf81610750565b50565b6106da610892565b73ffffffffffffffffffffffffffffffffffffffff166106f861057d565b73ffffffffffffffffffffffffffffffffffffffff161461074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074590610ba3565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f90610c35565b60405180910390fd5b61089061089a565b565b600033905090565b600060019054906101000a900460ff166108e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e090610c35565b60405180910390fd5b6108f96108f4610892565b610750565b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061092b82610900565b9050919050565b61093b81610920565b811461094657600080fd5b50565b60008135905061095881610932565b92915050565b600060208284031215610974576109736108fb565b5b600061098284828501610949565b91505092915050565b61099481610920565b82525050565b60006020820190506109af600083018461098b565b92915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000610a22602e836109b5565b9150610a2d826109c6565b604082019050919050565b60006020820190508181036000830152610a5181610a15565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b6000610a94610a8f610a8a84610a58565b610a6f565b610a62565b9050919050565b610aa481610a79565b82525050565b6000602082019050610abf6000830184610a9b565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610b216026836109b5565b9150610b2c82610ac5565b604082019050919050565b60006020820190508181036000830152610b5081610b14565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610b8d6020836109b5565b9150610b9882610b57565b602082019050919050565b60006020820190508181036000830152610bbc81610b80565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000610c1f602b836109b5565b9150610c2a82610bc3565b604082019050919050565b60006020820190508181036000830152610c4e81610c12565b905091905056fea264697066735822122094bdb023d2b72f08b0dfd5b63dd0d0ad86dcb546060ffd1c33503e3f990dd6c464736f6c63430008150033" + }, + { + "address": "0x3b9b9364bf69761d308145371c38d9b558013d40", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033" + }, + { + "address": "0xe1503dc691bb93af200f2b5adddbc65480227f7d", + "nonce": 17, + "balance": "0x0000000000000000000000000000000000000000000000000035ba2f48ab9c65", + "code": "0x" + }, + { + "address": "0xed320adcf1e612e691db3d6fe9bb530f32d3c849", + "nonce": 35, + "balance": "0x0000000000000000000000000000000000000000000000000002699c5873729c", + "code": "0x" + }, + { + "address": "0xf89d7b9c864f589bbf53a82105107622b35eaa40", + "nonce": 221924, + "balance": "0x00000000000000000000000000000000000000000000017702534d739efe9c7c", + "code": "0x" + }, + { + "address": "0x417b4adc279743fc49f047c323fc668db9e600d8", + "nonce": 5550, + "balance": "0x000000000000000000000000000000000000000000000000105fc58fd102ee1b", + "code": "0x" + }, + { + "address": "0xb8ddafe7385a962a4515821248368823e93fa61f", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101285760003560e01c80631621835f1461012d57806316dc165b146101c45780631aae2e55146101e4578063252c09d7146101fb5780632c4812521461023557806333005cd51461025d578063537c2d8e14610268578063588e59ae1461028857806358c51ce61461029157806362ccaafd146102a55780636d01843b146102f957806375c0e0d51461032b57806381794fba146103ae5780638790aca3146103da57806387e7d5fe146104a857806398a0f72e14610521578063b7d19fc414610541578063c19d93fb14610554578063c45a015514610618578063d3b168641461062b578063ddca3f431461063f578063e556289f14610655578063edcba3b214610660578063f094685a14610683575b600080fd5b61018161013b366004613a5b565b600f60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b604080519687526001600160801b039586166020880152938516938601939093529083166060850152821660808401521660a082015260c0015b60405180910390f35b6002546101d7906001600160a01b031681565b6040516101bb9190613aff565b6101ed60045481565b6040519081526020016101bb565b61020e610209366004613a5b565b610696565b6040805163ffffffff909416845260069290920b60208401521515908201526060016101bb565b610248610243366004613985565b6106ca565b604080519283526020830191909152016101bb565b6101ed620100105481565b6000546102759060020b81565b60405160029190910b81526020016101bb565b6101ed60055481565b60035461027590600160b81b900460020b81565b6101816102b3366004613a5b565b600e60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b60005461031390600160301b90046001600160801b031681565b6040516001600160801b0390911681526020016101bb565b610377610339366004613a94565b600b6020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b929060ff1685565b604080516001600160801b039096168652600f9490940b60208601529284019190915260608301521515608082015260a0016101bb565b62010016546103c690600160a01b900462ffffff1681565b60405162ffffff90911681526020016101bb565b6104476103e8366004613a94565b600d6020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160801b0380871697600160801b978890048216978583169581900483169480841694919004909216918a565b604080516001600160801b039b8c168152998b1660208b01528901979097526060880195909552928716608087015290861660a0860152851660c085015290931660e0830152610100820192909252610120810191909152610140016101bb565b6104ef6104b6366004613a5b565b600960205260009081526040902080546001820154600283015460038401546004909401546001600160801b0390931693919290919085565b604080516001600160801b0390961686526020860194909452928401919091526060830152608082015260a0016101bb565b6101ed61052f366004613a73565b600a6020526000908152604090205481565b6003546101d7906001600160a01b031681565b6007546008546105b9916001600160a01b03811691600160a01b820460020b9161ffff600160b81b8204811692600160c81b8304821692600160d81b81049092169160ff600160e81b90910416906001600160801b0380821691600160801b90041688565b604080516001600160a01b03909916895260029790970b602089015261ffff9586169688019690965292841660608701529216608085015290151560a08401526001600160801b0390811660c08401521660e0820152610100016101bb565b6001546101d7906001600160a01b031681565b600054610275906301000000900460020b81565b6003546103c690600160a01b900462ffffff1681565b6101ed6201000f5481565b61027561066e366004613a94565b600c6020526000908152604090205460020b81565b610248610691366004613985565b6112fa565b60108161ffff81106106a757600080fd5b015463ffffffff81169150600160201b810460060b90600160581b900460ff1683565b6000806000866001600160801b0316116107105760405162461bcd60e51b8152602060048201526002602482015261041560f41b60448201526064015b60405180910390fd5b6000546107289086906301000000900460020b611a63565b60408051610100810182526007546001600160a01b0381168252600160a01b8104600290810b810b900b6020830152600160b81b810461ffff90811693830193909352600160c81b810483166060830152600160d81b81049092166080820152600160e81b90910460ff16151560a08201526008546001600160801b0380821660c0840152600160801b9091041660e0820152909550600092508291506107cd613927565b6004548152600554602080830191909152600060408301526006546001600160a01b03166060830152600354600160b81b9004600290810b810b900b608083018190529083015161082191600c9190611a83565b600290810b810b60a08301526020830151810b900b60c0808301919091528201516001600160801b031660e082015263ffffffff42166101008201525b8660020b826020015160020b12801561087957508060400151155b1561108f5760008160a0015160021660020b1315610c2057600354600090620f4240906108b290600160a01b900462ffffff1682613f2e565b6108ca9062ffffff166001600160801b038c16613e26565b6108d49190613cb6565b90506001600160801b03811615610c1657602080840151600290810b900b6000908152600d909152604081208054855191926001600160801b0390911691819061092090869085611ad0565b91509150826001600160801b0316816001600160801b031610806109565750846001600160801b0316826001600160801b031610155b1561096357600160408701525b6000856001600160801b0316836001600160801b03161061098f57610988838f613ecb565b9050610a45565b6003546109ab90600160a01b900462ffffff16620f4240613f2e565b60035462ffffff918216916109d191600160a01b9004166001600160801b038616613e26565b6109db9190613cb6565b6003549091506000906109fd90600160a01b900462ffffff16620f4240613f2e565b60035462ffffff91821691610a2391600160a01b9004166001600160801b038716613e26565b610a2d9190614023565b90508015610a4357610a40600183613c1c565b91505b505b806001600160801b0316620100106000828254610a629190613c64565b90915550610a7290508184613c1c565b610a7c908f613ecb565b9d50806001600160801b0316836001600160801b03168a610a9d9190613c64565b610aa79190613c64565b9850610abc6001600160801b0383168b613c64565b9950610ac88285613ecb565b85546001600160801b0319166001600160801b038281169190911780885591955084918791601091610b03918591600160801b900416613c1c565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826001600160801b0316856001016000828254610b449190613c64565b90915550506001600160801b038416610c0c5784546003860180546001600160801b03600160801b909304831692600091610b8191859116613c1c565b82546101009290920a6001600160801b03818102199093169183160217909155865481168755600187015460028801556003870154600160801b90041615159050610c0c5760a087015160208901516080890151600190921691610be891600c9184611b6e565b8060020b60001415610c0a5760208901516080890151610c0a91600a91611bb5565b505b5050505050610c1e565b600160408301525b505b806040015115610c2f5761108f565b6000610c4f83602001518360800151600a611c1e9092919063ffffffff16565b90506000610c6d828460800151600c611a839092919063ffffffff16565b90508860020b8260020b1315610c84575087905060005b60c08401516001600160801b0316610d3957600282810b900b60208501819052610cad90611d16565b6001600160a01b0316845260006001821660020b1315610d2857600282810b900b6000908152600b602090815260409091208451918501519091610cf391839190612128565b805460c0860151600160801b909104600f0b90610d109082612143565b6001600160801b031660c0870181905260e087015250505b600281810b900b60a0840152611088565b600354600090620f424090610d5a90600160a01b900462ffffff1682613f2e565b610d729062ffffff166001600160801b038e16613e26565b610d7c9190613cb6565b90506001600160801b03811615610fc7576000610d9f8685876060015185612174565b80511515604087015260208101519091506000906001600160801b03808516911610610ddb576020820151610dd4908e613ecb565b9050610e9b565b600354610df790600160a01b900462ffffff16620f4240613f2e565b600354602084015162ffffff92831692610e2292600160a01b900416906001600160801b0316613e26565b610e2c9190613cb6565b600354909150600090610e4e90600160a01b900462ffffff16620f4240613f2e565b600354602085015162ffffff92831692610e7992600160a01b900416906001600160801b0316613e26565b610e839190614023565b90508015610e9957610e96600183613c1c565b91505b505b6040820151610eaa908a613c64565b9850806001600160801b031682602001516001600160801b031689610ecf9190613c64565b610ed99190613c64565b9750808260200151610eeb9190613c1c565b610ef5908e613ecb565b6201001654909d50600090606490610f2290600160a01b900462ffffff166001600160801b038516613e26565b610f2c9190613cb6565b905080620100106000828254610f429190613c64565b90915550610f769050610f5e826001600160801b038516613f4a565b600160801b8a60c001516001600160801b03166124a6565b8760200151610f859190613c64565b6020808901919091526060840151600290810b900b90890152505060808101516001600160a01b0316865260a001516001600160801b031660e0860152610fcf565b600160408501525b8260020b856020015160020b141561105b5760008260011660020b131561104757600283810b900b6000908152600b60209081526040909120855191860151909161101c91839190612128565b60c086015181546110379190600160801b9004600f0b612143565b6001600160801b031660c0870152505b60c08501516001600160801b031660e08601525b8260020b856020015160020b141561107e57600282810b900b60a0850152611086565b600060a08501525b505b505061085e565b816020015160020b8160c0015160020b146110e7576110d582604001518261010001518360c001518560600151866080015160106125539095949392919063ffffffff16565b61ffff90811660608501521660408301525b6020808201516005558251600780549285015160408601516060870151608088015160a08901511515600160e81b0260ff60e81b1961ffff928316600160d81b021662ffffff60d81b19938316600160c81b0261ffff60c81b1993909516600160b81b029290921663ffffffff60b81b1960029690960b62ffffff16600160a01b026001600160b81b03199099166001600160a01b039098169790971797909717939093169490941717929092169190911791909117905560c082015160e08301516001600160801b03908116600160801b02911617600855836111f25760405162461bcd60e51b8152602060048201526002602482015261282960f11b6044820152606401610707565b600254611209906001600160a01b03168a866126ba565b6000831161123e5760405162461bcd60e51b8152602060048201526002602482015261050560f41b6044820152606401610707565b60006112486127bb565b6040516334f870a160e21b8152909150339063d3e1c2849061127490889088908c908c90600401613b13565b600060405180830381600087803b15801561128e57600080fd5b505af11580156112a2573d6000803e3d6000fd5b5050505083816112b29190613c64565b6112ba6127bb565b10156112ed5760405162461bcd60e51b8152602060048201526002602482015261594560f01b6044820152606401610707565b5050509550959350505050565b6000806000866001600160801b03161161133b5760405162461bcd60e51b8152602060048201526002602482015261058560f41b6044820152606401610707565b6000546113539086906301000000900460020b611a63565b60408051610100810182526007546001600160a01b0381168252600160a01b8104600290810b810b900b6020830152600160b81b810461ffff90811693830193909352600160c81b810483166060830152600160d81b81049092166080820152600160e81b90910460ff16151560a08201526008546001600160801b0380821660c0840152600160801b9091041660e0820152909550600092508291506113f8613927565b6004548152600554602080830191909152600060408301526006546001600160a01b03166060830152600354600160b81b9004600290810b810b900b608083018190529083015161144c91600c9190611a83565b600290810b810b60a08301526020830151810b900b60c0808301919091528201516001600160801b031660e082015263ffffffff42166101008201525b8660020b826020015160020b1280156114a457508060400151155b1561108f5760008160a0015160021660020b131561171f57602080830151600290810b900b6000908152600d909152604081208054845191926001600160801b039091169181906114f7908d908561289f565b915091508b6001600160801b0316816001600160801b03161061151c57600160408601525b600354600090611554906001600160801b03851690600160a01b900462ffffff1661154a81620f4240613f2e565b62ffffff166128fe565b90508062010010600082825461156a9190613c64565b90915550506001600160801b03808316908e1611156115925761158d828e613ecb565b611595565b60005b9c506115aa816001600160801b038516613c64565b6115b49089613c64565b97506115c96001600160801b0383168a613c64565b98506115d58285613ecb565b85546001600160801b0319166001600160801b038281169190911780885591955084918791601091611610918591600160801b900416613c1c565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826001600160801b03168560010160008282546116519190613c64565b90915550506001600160801b0384166117195784546003860180546001600160801b03600160801b90930483169260009161168e91859116613c1c565b82546101009290920a6001600160801b03818102199093169183160217909155865481168755600187015460028801556003870154600160801b900416151590506117195760a0860151602088015160808801516001909216916116f591600c9184611b6e565b8060020b60001415611717576020880151608088015161171791600a91611bb5565b505b50505050505b80604001511561172e5761108f565b600061174e83602001518360800151600a611c1e9092919063ffffffff16565b9050600061176c828460800151600c611a839092919063ffffffff16565b90508860020b8260020b1315611783575087905060005b60c08401516001600160801b031661183857600282810b900b602085018190526117ac90611d16565b6001600160a01b0316845260006001821660020b131561182757600282810b900b6000908152600b6020908152604090912084519185015190916117f291839190612128565b805460c0860151600160801b909104600f0b9061180f9082612143565b6001600160801b031660c0870181905260e087015250505b600281810b900b60a0840152611a5c565b6001600160801b038a161561199d576000611859858486606001518e612955565b805115156040860152602081015160035491925060009161188e9190600160a01b900462ffffff1661154a81620f4240613f2e565b62010016549091506000906064906118b290600160a01b900462ffffff1684613e26565b6118bc9190613cb6565b9050806201001060008282546118d29190613c64565b909155505060408301516118ef906001600160801b03168a613c64565b98508183602001516119019190613c64565b61190b9089613c64565b975061191b8d8460400151612c73565b611925908e613ecb565b9c5061194c6119348284613f4a565b600160801b8960c001516001600160801b03166124a6565b866020015161195b9190613c64565b6020808801919091526060840151600290810b900b90880152505060808101516001600160a01b0316855260a001516001600160801b031660e08501526119a5565b600160408401525b8160020b846020015160020b1415611a315760008160011660020b1315611a1d57600282810b900b6000908152600b6020908152604090912084519185015190916119f291839190612128565b60c08501518154611a0d9190600160801b9004600f0b612143565b6001600160801b031660c0860152505b60c08401516001600160801b031660e08501525b8160020b846020015160020b1415611a5457600281810b900b60a0840152611a5c565b600060a08401525b5050611489565b60008160020b8360020b1215611a7a575081611a7d565b50805b92915050565b6000611a8f8284613fe0565b60020b15611a9f57506000611ac9565b836000611aac8486613c7c565b600290810b810b8252602082019290925260400160002054900b90505b9392505050565b6000806000611af6866001600160801b0316600160601b876001600160a01b03166124a6565b9050611b22611b1382600160601b886001600160a01b03166124a6565b856001600160801b0316612c96565b9150611b45826001600160801b0316866001600160a01b0316600160601b6128fe565b90506000611b6182876001600160a01b0316600160601b6128fe565b9792965091945050505050565b80846000611b7c8587613c7c565b60020b60020b815260200190815260200160002060006101000a81548162ffffff021916908360020b62ffffff16021790555050505050565b611bbf8183613fe0565b60020b15611bcc57600080fd5b6000611bd88284613c7c565b9050600281900b60081d6000611bf061010084613fe0565b600192830b830b60009081526020979097526040909620805460ff9097169290921b19909516905550505050565b600080611c2b8385613c7c565b905060008460020b128015611c4b5750611c458385613fe0565b60020b15155b15611c5e5780611c5a81613fa1565b9150505b611c69600182613b50565b9050600281900b60081d6000611c8161010084613fe0565b90506000611c96600160ff841681901b613f4a565b600184810b900b600090815260208a90526040902054901916905080611cde5785611cc28360ff613f7e565b611ccf9060ff1686613b50565b611cd99190613cca565b611d0a565b8582611ce983612ca7565b611cf39190613f7e565b611d009060ff1686613b50565b611d0a9190613cca565b98975050505050505050565b60008060008360020b12611d2d578260020b611d3a565b8260020b611d3a90614077565b9050611d49620d89e71961405d565b60020b811115611d7f5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610707565b600060018216611d9357600160801b611da5565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615611dda576080611dd5826ffff97272373d413259a46990580e213a613e26565b901c90505b6004821615611e04576080611dff826ffff2e50f5f656932ef12357cf3c7fdcc613e26565b901c90505b6008821615611e2e576080611e29826fffe5caca7e10e4e61c3624eaa0941cd0613e26565b901c90505b6010821615611e58576080611e53826fffcb9843d60f6159c9db58835c926644613e26565b901c90505b6020821615611e82576080611e7d826fff973b41fa98c081472e6896dfb254c0613e26565b901c90505b6040821615611eac576080611ea7826fff2ea16466c96a3843ec78b326b52861613e26565b901c90505b6080821615611ed6576080611ed1826ffe5dee046a99a2a811c461f1969c3053613e26565b901c90505b610100821615611f01576080611efc826ffcbe86c7900a88aedcffc83b479aa3a4613e26565b901c90505b610200821615611f2c576080611f27826ff987a7253ac413176f2b074cf7815e54613e26565b901c90505b610400821615611f57576080611f52826ff3392b0822b70005940c7a398e4b70f3613e26565b901c90505b610800821615611f82576080611f7d826fe7159475a2c29b7443b29c7fa6e889d9613e26565b901c90505b611000821615611fad576080611fa8826fd097f3bdfd2022b8845ad8f792aa5825613e26565b901c90505b612000821615611fd8576080611fd3826fa9f746462d870fdf8a65dc1f90e061e5613e26565b901c90505b614000821615612003576080611ffe826f70d869a156d2a1b890bb3df62baf32f7613e26565b901c90505b61800082161561202e576080612029826f31be135f97d08fd981231505542fcfa6613e26565b901c90505b6201000082161561205a576080612055826f09aa508b5b7a84e1c677de54f3e99bc9613e26565b901c90505b62020000821615612085576080612080826e5d6af8dedb81196699c329225ee604613e26565b901c90505b620400008216156120af5760806120aa826d2216e584f5fa1ea926041bedfe98613e26565b901c90505b620800008216156120d75760806120d2826b048a170391f7dc42444e8fa2613e26565b901c90505b60008460020b13156120f2576120ef81600019613cb6565b90505b612100600160201b82614023565b1561210c57600161210f565b60005b6121209060ff16602083901c613c64565b949350505050565b60018301805460029094018054949093039055919091039055565b60008082600f0b121561216a5761215982614037565b6121639084613ecb565b9050611a7d565b611ac98284613c1c565b6040805160c08082018352600080835260208301819052928201839052606082018390526080820183905260a08201929092529085015160e08601516001600160801b039182169116108015612313576121d78387600001518860e00151612dd9565b6001600160801b0390811660a08601819052604086019290925291909116602084015215158061221d5750826001600160801b031682602001516001600160801b031610155b1561224d5750600181526020850151600290810b900b606082015284516001600160a01b03166080820152612120565b602082015161225c9084613ecb565b92506001866020018181516122719190613b50565b600290810b810b909152602088015187820b910b141590506122bb576020860151600290810b900b60608301526122a785611d16565b6001600160a01b0316608083015250612120565b600160601b6122d3816001600160a01b038716613f4a565b87516122e891906001600160a01b0316613e26565b6122f29190613cb6565b865161230791906001600160a01b0316613c64565b6001600160a01b031686525b600061231e86611d16565b9050600061238e6040518060c001604052808a60c001516001600160801b031681526020018a600001516001600160a01b031681526020018a6020015160020b8152602001846001600160a01b031681526020018960020b8152602001886001600160a01b031681525086612e89565b90508060000151846020018181516123a69190613c1c565b6001600160801b031690525080516123be9086613ecb565b94508060200151846040018181516123d69190613c64565b905250604081015115612410576001600160801b038516158452600287810b900b60608501526001600160a01b038216608085015261249b565b6000806124268784608001518c60c00151612dd9565b6001600160801b031660a0890152602088018051929450909250839161244d908390613c1c565b6001600160801b031690525060408601805182919061246d908390613c64565b9052505060018552506080808201516001600160a01b031690850152606080820151600290810b900b908501525b505050949350505050565b6000808060001985870985870292508281108382030391505080600014156124e057600084116124d557600080fd5b508290049050611ac9565b8084116124ec57600080fd5b6000848688096001861981018716968790046003810260029081188083028203028083028203028083028203028083028203028083028203029182029003026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000806000888861ffff1661ffff811061257d57634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b90920460ff1615159383019390935290925090881614156125d857878592509250506126af565b8461ffff168461ffff1611801561260057506125f5600186613ef3565b61ffff168861ffff16145b1561260d57839150612611565b8491505b8161261d896001613c47565b6126279190614002565b9250612634818888613096565b898461ffff1661ffff811061265957634e487b7160e01b600052603260045260246000fd5b82519101805460208401516040909401511515600160581b0260ff60581b1960069590950b66ffffffffffffff16600160201b026001600160581b031990921663ffffffff909416939093171792909216179055505b965096945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916127169190613ac6565b6000604051808303816000865af19150503d8060008114612753576040519150601f19603f3d011682016040523d82523d6000602084013e612758565b606091505b50915091508180156127825750805115806127825750808060200190518101906127829190613a3b565b6127b45760405162461bcd60e51b8152602060048201526003602482015262544e5360e81b6044820152606401610707565b5050505050565b600354604051600091829182916001600160a01b0316906370a0823160e01b906127e9903090602401613aff565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516128279190613ac6565b600060405180830381855afa9150503d8060008114612862576040519150601f19603f3d011682016040523d82523d6000602084013e612867565b606091505b509150915081801561287b57506020815110155b61288457600080fd5b808060200190518101906128989190613aae565b9250505090565b6000806128ac8584612c73565b905060006128d1826001600160801b0316866001600160a01b0316600160601b6128fe565b90506128f36128ee82876001600160a01b0316600160601b6128fe565b613115565b925050935093915050565b600061290b8484846124a6565b90506000828061292b57634e487b7160e01b600052601260045260246000fd5b8486091115611ac957600019811061294257600080fd5b8061294c81613fc5565b95945050505050565b6040805160c08082018352600080835260208301819052928201839052606082018390526080820183905260a08201929092529085015160e08601516001600160801b039182169116108015612ade576129b88387600001518860e00151613157565b6001600160801b0390811660a086018190529116604085015260208401919091521515806129fc5750826001600160801b031682604001516001600160801b031610155b15612a2c5750600181526020850151600290810b900b606082015284516001600160a01b03166080820152612120565b6040820151612a3b9084613ecb565b9250600186602001818151612a509190613b50565b600290810b810b909152602088015187820b910b14159050612a86576020860151600290810b900b60608301526122a785611d16565b600160601b612a9e816001600160a01b038716613f4a565b8751612ab391906001600160a01b0316613e26565b612abd9190613cb6565b8651612ad291906001600160a01b0316613c64565b6001600160a01b031686525b6000612ae986611d16565b90506000612b596040518060c001604052808a60c001516001600160801b031681526020018a600001516001600160a01b031681526020018a6020015160020b8152602001846001600160a01b031681526020018960020b8152602001886001600160a01b0316815250866131e8565b9050806000015184602001818151612b719190613c64565b9052506020810151604085018051612b8a908390613c1c565b6001600160801b03169052506020810151612ba59086613ecb565b9450806040015115612bde576001600160801b038516158452600287810b900b60608501526001600160a01b038216608085015261249b565b600080612bf48784608001518c60c00151613157565b6001600160801b031660a08901526020880180519294509092508391612c1b908390613c64565b905250604086018051829190612c32908390613c1c565b6001600160801b0316905250506001855250606080820151600290810b900b908501526080808201516001600160a01b031690850152505050949350505050565b6000816001600160801b0316836001600160801b03161015611a7a575081611a7d565b600081831015611a7a575081611a7d565b6000808211612cb557600080fd5b5060ff6001600160801b03821615612cd957612cd2608082613f7e565b9050612ce1565b608082901c91505b6001600160401b03821615612d0257612cfb604082613f7e565b9050612d0a565b604082901c91505b63ffffffff821615612d2857612d21602082613f7e565b9050612d30565b602082901c91505b61ffff821615612d4c57612d45601082613f7e565b9050612d54565b601082901c91505b60ff821615612d6f57612d68600882613f7e565b9050612d77565b600882901c91505b600f821615612d9257612d8b600482613f7e565b9050612d9a565b600482901c91505b6003821615612db557612dae600282613f7e565b9050612dbd565b600282901c91505b6001821615612dd457612dd1600182613f7e565b90505b919050565b60008080806001600160a01b038616612dff600160601b6001600160801b038a16613e26565b612e099190613cb6565b90506000612e2082876001600160801b0316612c96565b9050612e43816001600160801b0316886001600160a01b0316600160601b6128fe565b94506001600160a01b038716612e66600160601b6001600160801b038416613e26565b612e709190613cb6565b9350612e7c8187613ecb565b9250505093509350939050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526000612ed48460000151856020015186606001518760a001516001613485565b9050826001600160801b03168111612f28576001600160801b0381168252835160408501516080860151606087015160a0880151612f179493929190600061350c565b60208301526001604083015261308f565b600084602001516001600160a01b0316612f72856001600160801b0316600160601b8860a001516001600160a01b0316612f629190613f4a565b88516001600160801b03166124a6565b612f7c9190613c64565b9050612f87816135d8565b600290810b900b606084018190526040860151612fa391613910565b600290810b900b60608401526080850151612fce90612fc490600190613e45565b8460600151611a63565b600290810b900b6060840181905260006040850152612fec90611d16565b6001600160a01b0316608084015260408501516060840151600291820b910b141561302257505060008082526020820152611a7d565b60006130428660000151876020015186608001518960a001516001613485565b905061305781866001600160801b0316612c96565b6001600160801b03168452855160408701516060860151608087015160a08a01516130879493929190600061350c565b602085015250505b5092915050565b604080516060810182526000808252602082018190529181019190915283516000906130c29085613f61565b63ffffffff16905060405180606001604052808563ffffffff168152602001828560020b6130f09190613dd6565b87602001516130ff9190613bd7565b60060b8152600160209091015295945050505050565b806001600160801b0381168114612dd45760405162461bcd60e51b8152600401610707906020808252600490820152630866264760e31b604082015260600190565b60008060008061317e876001600160801b0316876001600160a01b0316600160601b6128fe565b9050600061319582876001600160801b0316612c96565b90506131b8816001600160801b0316886001600160a01b0316600160601b6128fe565b9450612e706001600160a01b0388166131de600160601b6001600160801b038516613e26565b6128ee9190613cb6565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152600061323884600001518560400151866080015187606001518860a00151600061350c565b9050826001600160801b0316811161328a576001600160801b038116602080840191909152845190850151606086015160a087015161327b939291906001613485565b82525060016040820152611a7d565b60006132a8856040015186608001516132a39190613e45565b611d16565b6001600160a01b0316905060008560a001516001600160a01b0316600160601b87606001516001600160a01b03166132e09190613e26565b6132ea9190613cb6565b90506000613327866001600160801b031683896060015161330b9190613f0e565b6001600160a01b031689600001516001600160801b03166124a6565b6133319084613f4a565b9050600081600160601b89606001516001600160a01b03166133539190613e26565b61335d9190613cb6565b60006040880152905061336f816135d8565b600290810b900b60608701819052604089015161338b91613910565b600290810b900b606087015260808801516133b6906133ac90600190613e45565b8760600151611a63565b600290810b900b606087018190526133cd90611d16565b6001600160a01b0316608087015260408801516060870151600291820b910b1415613408575050600060208501819052845250611a7d915050565b600060408088018290528951908a0151606089015160808a015160a08d01516134489561343995949392919061350c565b886001600160801b0316612c96565b6001600160801b0316602080880191909152885190890151608088015160a08b0151613478939291906001613485565b8652505050505092915050565b6000806134928686613f0e565b905060006134a4600160601b86613f0e565b9050836134d8576134d1886001600160801b0316836001600160a01b0316836001600160a01b03166124a6565b9250613501565b6134fe886001600160801b0316836001600160a01b0316836001600160a01b03166128fe565b92505b505095945050505050565b60008061351c6132a38888613e45565b90506000846001600160a01b0316600160601b876001600160a01b03166135439190613e26565b61354d9190613cb6565b9050600061355f600160601b84613f0e565b9050600061356d8389613f0e565b9050856135a15761359a8b6001600160801b0316836001600160a01b0316836001600160a01b03166124a6565b94506135ca565b6135c78b6001600160801b0316836001600160a01b0316836001600160a01b03166128fe565b94505b505050509695505050505050565b60006401000276a36001600160a01b03831610801590613614575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6136445760405162461bcd60e51b81526020600482015260016024820152602960f91b6044820152606401610707565b600160201b600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106136dd576136d3607f82613f4a565b83901c91506136ee565b6136e881607f613f4a565b83901b91505b600060406136fd608084613e8c565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b8217915050600081693627a301d71055774c856138809190613d53565b9050600060806138a06f028f6481ab7f045a5af012a19d003aaa84613e8c565b901d9050600060806138c2846fdb2df09e81959a81455e260799a0632f613b96565b901d90508060020b8260020b1461390157886001600160a01b03166138e682611d16565b6001600160a01b031611156138fb5781613903565b80613903565b815b9998505050505050505050565b60008160020b8360020b1315611a7a575081611a7d565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b8035600281900b8114612dd457600080fd5b60008060008060006080868803121561399c578081fd5b85356001600160a01b03811681146139b2578182fd5b945060208601356001600160801b03811681146139cd578182fd5b93506139db60408701613973565b925060608601356001600160401b03808211156139f6578283fd5b818801915088601f830112613a09578283fd5b813581811115613a17578384fd5b896020828501011115613a28578384fd5b9699959850939650602001949392505050565b600060208284031215613a4c578081fd5b81518015158114611ac9578182fd5b600060208284031215613a6c578081fd5b5035919050565b600060208284031215613a84578081fd5b81358060010b8114611ac9578182fd5b600060208284031215613aa5578081fd5b611ac982613973565b600060208284031215613abf578081fd5b5051919050565b60008251815b81811015613ae65760208186018101518583015201613acc565b81811115613af45782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b60008160020b8360020b82821282627fffff03821381151615613b7557613b75614091565b82627fffff19038212811615613b8d57613b8d614091565b50019392505050565b600080821280156001600160ff1b0384900385131615613bb857613bb8614091565b600160ff1b8390038412811615613bd157613bd1614091565b50500190565b60008160060b8360060b82821282667fffffffffffff03821381151615613c0057613c00614091565b82667fffffffffffff19038212811615613b8d57613b8d614091565b60006001600160801b03828116848216808303821115613c3e57613c3e614091565b01949350505050565b600061ffff808316818516808303821115613c3e57613c3e614091565b60008219821115613c7757613c77614091565b500190565b60008160020b8360020b80613c9357613c936140a7565b627fffff19821460001982141615613cad57613cad614091565b90059392505050565b600082613cc557613cc56140a7565b500490565b60008160020b8360020b627fffff83821384841383830485118282161615613cf457613cf4614091565b627fffff1986851282811687830587121615613d1257613d12614091565b878712925085820587128484161615613d2d57613d2d614091565b85850587128184161615613d4357613d43614091565b5050509290910295945050505050565b60006001600160ff1b0381841382841380821686840486111615613d7957613d79614091565b600160ff1b84871282811687830589121615613d9757613d97614091565b858712925087820587128484161615613db257613db2614091565b87850587128184161615613dc857613dc8614091565b505050929093029392505050565b60008160060b8360060b667fffffffffffff83821384841383830485118282161615613e0457613e04614091565b667fffffffffffff1986851282811687830587121615613d1257613d12614091565b6000816000190483118215151615613e4057613e40614091565b500290565b60008160020b8360020b82811281627fffff1901831281151615613e6b57613e6b614091565b81627fffff018313811615613e8257613e82614091565b5090039392505050565b60008083128015600160ff1b850184121615613eaa57613eaa614091565b6001600160ff1b0384018313811615613ec557613ec5614091565b50500390565b60006001600160801b0383811690831681811015613eeb57613eeb614091565b039392505050565b600061ffff83811690831681811015613eeb57613eeb614091565b60006001600160a01b0383811690831681811015613eeb57613eeb614091565b600062ffffff83811690831681811015613eeb57613eeb614091565b600082821015613f5c57613f5c614091565b500390565b600063ffffffff83811690831681811015613eeb57613eeb614091565b600060ff821660ff841680821015613f9857613f98614091565b90039392505050565b60008160020b627fffff19811415613fbb57613fbb614091565b6000190192915050565b6000600019821415613fd957613fd9614091565b5060010190565b60008260020b80613ff357613ff36140a7565b808360020b0791505092915050565b600061ffff80841680614017576140176140a7565b92169190910692915050565b600082614032576140326140a7565b500690565b6000600f82900b60016001607f1b031981141561405657614056614091565b9003919050565b60008160020b627fffff1981141561405657614056614091565b6000600160ff1b82141561408d5761408d614091565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea26469706673582212200700262a6f9f5bc9181197842c75b5dd436908dc93e49fb4d3a8c174666aa12a64736f6c63430008040033" + }, + { + "address": "0x46e950611f644ac46766790b86b6616fde36cca9", + "nonce": 26, + "balance": "0x000000000000000000000000000000000000000000000000003a00050d6124dd", + "code": "0x" + }, + { + "address": "0x1dfcd042f164c2848cc249cdfa7856162e5cd3a9", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101c25760003560e01c806301ffc9a7146101c757806306fdde03146101ef578063081812fc14610204578063095ea7b31461022f57806318160ddd1461024457806323b872dd1461025a5780632a55205a1461026d5780632ad47c271461029f5780632dd0066e146102b25780633197cbb6146102ba5780633cf40df3146102c357806342842e0e146102d757806342966c68146102ea57806352a284a2146102fd578063617692dd146103105780636273c8b4146103495780636352211e1461035c5780636da7870b1461036f5780636dbe6c1f1461038257806370a08231146103965780637c6e551d146103c85780638147ef37146103eb5780638da5cb5b146103fe57806395d89b4114610418578063a22cb46514610420578063a2309ff814610433578063a5097ebf1461043b578063b19ab24514610443578063b88d4fde14610456578063c87b56dd14610469578063d112fe331461047c578063d1ad17bf1461048f578063d2fb1929146104a2578063d5abeb01146104b5578063d72822bb146104cb578063e8a3d485146104de578063e985e9c5146104e6578063efc585ad146104f9575b600080fd5b6101da6101d5366004611cbf565b61050d565b60405190151581526020015b60405180910390f35b6101f7610544565b6040516101e69190611d3b565b610217610212366004611d4e565b6105d6565b6040516001600160a01b0390911681526020016101e6565b61024261023d366004611d7e565b610606565b005b61024c610666565b6040519081526020016101e6565b610242610268366004611da8565b610687565b61028061027b366004611de4565b6106c5565b604080516001600160a01b0390931683526020830191909152016101e6565b6102426102ad366004611e2a565b610702565b6101f76107c1565b61024c600e5481565b600f546101da90600160201b900460ff1681565b6102426102e5366004611da8565b61084f565b6102426102f8366004611d4e565b610894565b61024261030b366004611e9e565b6108b3565b61024c61031e366004611eb9565b6001600160a01b0316600090815260076020526040902054600160401b90046001600160401b031690565b610242610357366004611fd3565b6108eb565b61021761036a366004611d4e565b610b10565b61024261037d366004611d4e565b610b24565b600f546101da906301000000900460ff1681565b61024c6103a4366004611eb9565b6001600160a01b03166000908152600760205260409020546001600160401b031690565b600f546103d79062ffffff1681565b60405162ffffff90911681526020016101e6565b61024c6103f9366004612152565b610be3565b600f5461021790600160281b90046001600160a01b031681565b6101f7610c62565b61024261042e36600461216d565b610c71565b61024c610cf3565b6101f7610d0a565b6102426104513660046121a4565b610d17565b6102426104643660046121d8565b610d5a565b6101f7610477366004611d4e565b610d90565b61024c61048a366004612253565b610e0d565b600a54610217906001600160a01b031681565b6102426104b0366004611d4e565b610f7f565b600a546103d790600160a01b900462ffffff1681565b600c54610217906001600160a01b031681565b6101f7611068565b6101da6104f4366004612321565b611090565b600c546101da90600160a01b900460ff1681565b60006001600160e01b031982166380ac58cd60e01b148061053e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546105539061234b565b80601f016020809104026020016040519081016040528092919081815260200182805461057f9061234b565b80156105cc5780601f106105a1576101008083540402835291602001916105cc565b820191906000526020600020905b8154815290600101906020018083116105af57829003601f168201915b5050505050905090565b60006105e1826110be565b6105ea57600080fd5b506000908152600560205260409020546001600160a01b031690565b600061061182610b10565b9050806001600160a01b0316836001600160a01b0316141561063257600080fd5b336001600160a01b038216148061064e575061064e8133611090565b61065757600080fd5b61066183836110e1565b505050565b600061067061114f565b610678610cf3565b610682919061239c565b905090565b600f54600160201b900460ff16156106ba5760405162461bcd60e51b81526004016106b1906123b3565b60405180910390fd5b6106618383836111c3565b600f546001600160a01b03600160281b82041690600090612710906106ef9062ffffff16856123e6565b6106f9919061241b565b90509250929050565b600f54600160281b90046001600160a01b0316331461072057600080fd5b600a54604051632ad47c2760e01b815260ff8a16600482015260248101899052604481018890526064810187905262ffffff8616608482015260a481018590526001600160a01b0384811660c483015260e4820184905290911690632ad47c279061010401600060405180830381600087803b15801561079f57600080fd5b505af11580156107b3573d6000803e3d6000fd5b505050505050505050505050565b600d80546107ce9061234b565b80601f01602080910402602001604051908101604052809291908181526020018280546107fa9061234b565b80156108475780601f1061081c57610100808354040283529160200191610847565b820191906000526020600020905b81548152906001019060200180831161082a57829003601f168201915b505050505081565b600f54600160201b900460ff16156108795760405162461bcd60e51b81526004016106b1906123b3565b610661838383604051806020016040528060008152506111e1565b61089e3382611200565b6108a757600080fd5b6108b081611272565b50565b600f54600160281b90046001600160a01b031633146108d157600080fd5b600f805462ffffff191662ffffff92909216919091179055565b600f54600160c81b900460ff161561090257600080fd5b610914846000015185602001516112be565b600f805460ff60c81b1916600160c81b179055600c80546001600160a01b0384166001600160a01b03199091161790556060840151805161095d91600d91602090910190611c10565b506080840151600a805462ffffff909216600160a01b0262ffffff60a01b199092169190911790556040840151805161099e91600b91602090910190611c10565b5060a0840151600c8054911515600160a01b90810260ff60a01b19909316929092179081905560e0860151600e55610100860151600f80546101208901511515600160201b0260ff60201b199315156301000000029390931664ffff0000001990911617919091179055610a2791900460ff16610a1c576001610a1f565b60005b60ff166112e5565b60c0840151600f80546001600160a01b03808716600160281b0264ffff000001600160c81b031990921662ffffff90941693909317179055600a80549183166001600160a01b031990921691909117905561014084015115610b0a57600a54600160a01b900462ffffff161580610ab15750610140840151600a54600160a01b900462ffffff1610155b610afb5760405162461bcd60e51b815260206004820152601b60248201527a6d6178537570706c79203c207072656d696e745175616e7469747960281b60448201526064016106b1565b610b0a838561014001516112f7565b50505050565b600080610b1c836113de565b509392505050565b60026009541415610b475760405162461bcd60e51b81526004016106b19061242f565b6002600955600f54600160281b90046001600160a01b03163314610b6a57600080fd5b600a54600160a01b900462ffffff1615610bb05780610b87610cf3565b610b919190612466565b600a54600160a01b900462ffffff161015610bab57600080fd5b610bbe565b600e544210610bbe57600080fd5b600f54610bdb90600160281b90046001600160a01b0316826112f7565b506001600955565b600a54604051638147ef3760e01b815260ff831660048201526000916001600160a01b031690638147ef379060240160206040518083038186803b158015610c2a57600080fd5b505afa158015610c3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053e919061247e565b6060600280546105539061234b565b6001600160a01b038216331415610c8757600080fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000610cfd61141d565b600454610682919061239c565b600b80546107ce9061234b565b600f54600160281b90046001600160a01b03163314610d3557600080fd5b600e544210610d4357600080fd5b8051610d5690600d906020840190611c10565b5050565b600f54600160201b900460ff1615610d845760405162461bcd60e51b81526004016106b1906123b3565b610b0a848484846111e1565b600a54606090600160a01b900462ffffff161580610db75750600f546301000000900460ff165b80610dce5750600d8054610dca9061234b565b1590505b15610ddb5761053e611068565b600d610de683611443565b604051602001610df7929190612531565b6040516020818303038152906040529050919050565b600060026009541415610e325760405162461bcd60e51b81526004016106b19061242f565b6002600955600c546001600160a01b03163314610e4e57600080fd5b610e5a85858585611540565b610e935760405162461bcd60e51b815260206004820152600a602482015269085a5cd05b1b1bddd95960b21b60448201526064016106b1565b600a5460405163b124e2f760e01b81526001600160a01b03878116600483015260ff8516602483015262ffffff871660448301529091169063b124e2f790606401600060405180830381600087803b158015610eee57600080fd5b505af1158015610f02573d6000803e3d6000fd5b50505050610f15858562ffffff166112f7565b7f59f9fb6d992d2aee0ed338bb4c504a17fd3f67ae91a3135bc2ef947e308c41b285610f4060045490565b604080516001600160a01b039093168352602083019190915262ffffff87169082015260600160405180910390a1600454600160095595945050505050565b336001600160a01b037f00000000000000000000000061104fbe07ecc735d8d84422c7f045f8d29dbf1516148015610fc15750600f54600160d01b900460ff16155b8015610fce575060058111155b610fd757600080fd5b600a54600160a01b900462ffffff161561101d5780610ff4610cf3565b610ffe9190612466565b600a54600160a01b900462ffffff16101561101857600080fd5b61102b565b600e54421061102b57600080fd5b600f805460ff60d01b1916600160d01b1790556108b07f00000000000000000000000061104fbe07ecc735d8d84422c7f045f8d29dbf15826112f7565b6060600b60405160200161107c9190612585565b604051602081830303815290604052905090565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b60006110cb600883611625565b156110d857506000919050565b61053e8261164c565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061111682610b10565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080600861115c61141d565b901c90506000600861116d60045490565b611179911c6001612466565b9050815b818110156111bd5760008181526008602052604090205461119d81611671565b6111a79086612466565b94505080806111b5906125a1565b91505061117d565b50505090565b6111cd3382611200565b6111d657600080fd5b610661838383611690565b6111eb3383611200565b6111f457600080fd5b610b0a848484846117b7565b600061120b826110be565b61121457600080fd5b600061121f83610b10565b9050806001600160a01b0316846001600160a01b0316148061125a5750836001600160a01b031661124f846105d6565b6001600160a01b0316145b8061126a575061126a8185611090565b949350505050565b600061127d82610b10565b905061128a6008836117d9565b60405182906000906001600160a01b03841690600080516020612721833981519152908390a4610d56816000846001611805565b81516112d1906001906020850190611c10565b508051610661906002906020840190611c10565b600454156112f257600080fd5b600455565b600061130260045490565b90506000821161131157600080fd5b6001600160a01b03831661132457600080fd5b81600460008282546113369190612466565b9091555050600081815260036020526040812080546001600160a01b0319166001600160a01b03861617905561136c90826117d9565b6000806113798484612466565b90506001600160a01b038516915082826000600080516020612721833981519152600080a4600183015b8181146113c95780836000600080516020612721833981519152600080a46001016113a3565b506113d76000868587611805565b5050505050565b6000806113ea836110be565b6113f357600080fd5b6113fc83611983565b6000818152600360205260409020546001600160a01b031694909350915050565b600c54600090600160a01b900460ff1661143857600161143b565b60005b60ff16905090565b6060816114675750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611491578061147b816125a1565b915061148a9050600a8361241b565b915061146b565b6000816001600160401b038111156114ab576114ab611ed4565b6040519080825280601f01601f1916602001820160405280156114d5576020820181803683370190505b5090505b841561126a576114ea60018361239c565b91506114f7600a866125bc565b611502906030612466565b60f81b818381518110611517576115176125d0565b60200101906001600160f81b031916908160001a905350611539600a8661241b565b94506114d9565b6000600e54421061155057600080fd5b600a54600160a01b900462ffffff1615611596578362ffffff16611572610cf3565b61157c9190612466565b600a54600160a01b900462ffffff16101561159657600080fd5b600a5460405163d7ec901960e01b81526001600160a01b039091169063d7ec9019906115cc9088908890889088906004016125e6565b60206040518083038186803b1580156115e457600080fd5b505afa1580156115f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161c9190612656565b95945050505050565b600881901c600090815260208390526040902054600160ff1b60ff83161c16151592915050565b600061165760045490565b8210801561053e57508161166961141d565b111592915050565b60005b811561168b57600019820190911690600101611674565b919050565b60008061169c836113de565b91509150846001600160a01b0316826001600160a01b0316146116be57600080fd5b6001600160a01b0384166116d157600080fd5b6116dc6000846110e1565b60006116e9846001612466565b90506116f6600082611625565b158015611704575060045481105b1561173a57600081815260036020526040812080546001600160a01b0319166001600160a01b03891617905561173a90826117d9565b600084815260036020526040902080546001600160a01b0319166001600160a01b038716179055818414611773576117736000856117d9565b83856001600160a01b0316876001600160a01b031660008051602061272183398151915260405160405180910390a46117af8686866001611805565b505050505050565b6117c2848484611690565b6117d084848460018561198f565b610b0a57600080fd5b600881901c600090815260209290925260409091208054600160ff1b60ff9093169290921c9091179055565b600160401b811061181557600080fd5b806001600160a01b0385161561187f576001600160a01b038516600090815260076020526040812080548392906118569084906001600160401b0316612673565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506118df565b6001600160a01b038416600090815260076020526040902080548291906008906118ba908490600160401b90046001600160401b031661269b565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b03841615611948576001600160a01b0384166000908152600760205260408120805483929061191f9084906001600160401b031661269b565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506113d7565b6001600160a01b0385166000908152600760205260409020805482919060109061191f908490600160801b90046001600160401b031661269b565b600061053e8183611af6565b60006001600160a01b0385163b15611aea57506001835b6119b08486612466565b811015611ae457604051630a85bd0160e11b81526001600160a01b0387169063150b7a02906119e99033908b90869089906004016126c6565b602060405180830381600087803b158015611a0357600080fd5b505af1925050508015611a33575060408051601f3d908101601f19168201909252611a3091810190612703565b60015b611ab2573d808015611a61576040519150601f19603f3d011682016040523d82523d6000602084013e611a66565b606091505b508051611aaa5760405162461bcd60e51b81526020600482015260126024820152713737b71022a9219b9918a932b1b2b4bb32b960711b60448201526064016106b1565b805181602001fd5b828015611acf57506001600160e01b03198116630a85bd0160e11b145b92505080611adc816125a1565b9150506119a6565b5061161c565b50600195945050505050565b600881901c60008181526020849052604081205490919060ff808516919082181c8015611b3857611b2681611b8e565b60ff168203600884901b179350611b85565b60008311611b4557600080fd5b506000199091016000818152602086905260409020549091908015611b8057611b6d81611b8e565b60ff0360ff16600884901b179350611b85565b611b38565b50505092915050565b60006040518061012001604052806101008152602001612741610100913960f87e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff611bd785611bf8565b02901c81518110611bea57611bea6125d0565b016020015160f81c92915050565b6000808211611c0657600080fd5b5060008190031690565b828054611c1c9061234b565b90600052602060002090601f016020900481019282611c3e5760008555611c84565b82601f10611c5757805160ff1916838001178555611c84565b82800160010185558215611c84579182015b82811115611c84578251825591602001919060010190611c69565b50611c90929150611c94565b5090565b5b80821115611c905760008155600101611c95565b6001600160e01b0319811681146108b057600080fd5b600060208284031215611cd157600080fd5b8135611cdc81611ca9565b9392505050565b60005b83811015611cfe578181015183820152602001611ce6565b83811115610b0a5750506000910152565b60008151808452611d27816020860160208601611ce3565b601f01601f19169290920160200192915050565b602081526000611cdc6020830184611d0f565b600060208284031215611d6057600080fd5b5035919050565b80356001600160a01b038116811461168b57600080fd5b60008060408385031215611d9157600080fd5b611d9a83611d67565b946020939093013593505050565b600080600060608486031215611dbd57600080fd5b611dc684611d67565b9250611dd460208501611d67565b9150604084013590509250925092565b60008060408385031215611df757600080fd5b50508035926020909101359150565b803560ff8116811461168b57600080fd5b803562ffffff8116811461168b57600080fd5b600080600080600080600080610100898b031215611e4757600080fd5b611e5089611e06565b9750602089013596506040890135955060608901359450611e7360808a01611e17565b935060a08901359250611e8860c08a01611d67565b915060e089013590509295985092959890939650565b600060208284031215611eb057600080fd5b611cdc82611e17565b600060208284031215611ecb57600080fd5b611cdc82611d67565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b0381118282101715611f0d57611f0d611ed4565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611f3b57611f3b611ed4565b604052919050565b60006001600160401b03831115611f5c57611f5c611ed4565b611f6f601f8401601f1916602001611f13565b9050828152838383011115611f8357600080fd5b828260208301376000602084830101529392505050565b600082601f830112611fab57600080fd5b611cdc83833560208501611f43565b80151581146108b057600080fd5b803561168b81611fba565b60008060008060808587031215611fe957600080fd5b84356001600160401b038082111561200057600080fd5b90860190610160828903121561201557600080fd5b61201d611eea565b82358281111561202c57600080fd5b6120388a828601611f9a565b82525060208301358281111561204d57600080fd5b6120598a828601611f9a565b60208301525060408301358281111561207157600080fd5b61207d8a828601611f9a565b60408301525060608301358281111561209557600080fd5b6120a18a828601611f9a565b6060830152506120b360808401611e17565b60808201526120c460a08401611fc8565b60a08201526120d560c08401611e17565b60c082015260e083013560e082015261010091506120f4828401611fc8565b828201526101209150612108828401611fc8565b828201526101409150818301358282015280965050505061212b60208601611d67565b925061213960408601611d67565b915061214760608601611d67565b905092959194509250565b60006020828403121561216457600080fd5b611cdc82611e06565b6000806040838503121561218057600080fd5b61218983611d67565b9150602083013561219981611fba565b809150509250929050565b6000602082840312156121b657600080fd5b81356001600160401b038111156121cc57600080fd5b61126a84828501611f9a565b600080600080608085870312156121ee57600080fd5b6121f785611d67565b935061220560208601611d67565b92506040850135915060608501356001600160401b0381111561222757600080fd5b8501601f8101871361223857600080fd5b61224787823560208401611f43565b91505092959194509250565b6000806000806080858703121561226957600080fd5b61227285611d67565b93506020612281818701611e17565b935060408601356001600160401b038082111561229d57600080fd5b818801915088601f8301126122b157600080fd5b8135818111156122c3576122c3611ed4565b8060051b91506122d4848301611f13565b818152918301840191848101908b8411156122ee57600080fd5b938501935b8385101561230c578435825293850193908501906122f3565b80975050505050505061214760608601611e06565b6000806040838503121561233457600080fd5b61233d83611d67565b91506106f960208401611d67565b600181811c9082168061235f57607f821691505b6020821081141561238057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156123ae576123ae612386565b500390565b60208082526019908201527814d0950e881d1c985b9cd9995c881b9bdd08185b1b1bddd959603a1b604082015260600190565b600081600019048311821515161561240057612400612386565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261242a5761242a612405565b500490565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561247957612479612386565b500190565b60006020828403121561249057600080fd5b5051919050565b8054600090600181811c90808316806124b157607f831692505b60208084108214156124d357634e487b7160e01b600052602260045260246000fd5b8180156124e757600181146124f857612525565b60ff19861689528489019650612525565b60008881526020902060005b8681101561251d5781548b820152908501908301612504565b505084890196505b50505050505092915050565b66697066733a2f2f60c81b8152600061254d6007830185612497565b602f60f81b81528351612567816001840160208801611ce3565b64173539b7b760d91b60019290910191820152600601949350505050565b66697066733a2f2f60c81b81526000611cdc6007830184612497565b60006000198214156125b5576125b5612386565b5060010190565b6000826125cb576125cb612405565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038516815262ffffff841660208083019190915260806040830181905284519083018190526000918581019160a0850190845b8181101561263c57845183529383019391830191600101612620565b505080935050505060ff8316606083015295945050505050565b60006020828403121561266857600080fd5b8151611cdc81611fba565b60006001600160401b038381169083168181101561269357612693612386565b039392505050565b60006001600160401b038281168482168083038211156126bd576126bd612386565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906126f990830184611d0f565b9695505050505050565b60006020828403121561271557600080fd5b8151611cdc81611ca956feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0001020903110a19042112290b311a3905412245134d2a550c5d32651b6d3a7506264262237d468514804e8d2b95569d0d495ea533a966b11c886eb93bc176c9071727374353637324837e9b47af86c7155181ad4fd18ed32c9096db57d59ee30e2e4a6a5f92a6be3498aae067ddb2eb1d5989b56fd7baf33ca0c2ee77e5caf7ff0810182028303840444c545c646c7425617c847f8c949c48a4a8b087b8c0c816365272829aaec650acd0d28fdad4e22d6991bd97dfdcea58b4d6f29fede4f6fe0f1f2f3f4b5b6b607b8b93a3a7b7bf357199c5abcfd9e168bcdee9b3f1ecf5fd1e3e5a7a8aa2b670c4ced8bbe8f0f4fc3d79a1c3cde7effb78cce6facbf9f8a2646970667358221220fa1614539cafc0d215b15c50efedbe08914aab6af4e1132bd230a7b9d7566c4d64736f6c63430008090033" + }, + { + "address": "0x3ad7d53378752802e6ac1be9530f6da2d068f76e", + "nonce": 44, + "balance": "0x000000000000000000000000000000000000000000000000002df9354a4b9fd0", + "code": "0x" + }, + { + "address": "0x89044c4fb920b2ccd1cc86937facebc244732cd3", + "nonce": 11, + "balance": "0x0000000000000000000000000000000000000000000000000011920b06f860e4", + "code": "0x" + }, + { + "address": "0x2933749e45796d50eba9a352d29eed6fe58af8bb", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000b0c042dbe7d569f6", + "code": "0x6080604052600436106100dd5760003560e01c8063bc197c811161007f578063de9b29bb11610059578063de9b29bb1461023e578063f02bc6d51461025e578063f23a6e6114610271578063f2fde38b14610291576100dd565b8063bc197c81146101de578063c021e61d146101fe578063dc11a4961461021e576100dd565b806374e39dc3116100bb57806374e39dc31461015c578063863704201461017c5780638da5cb5b1461019c578063968f383f146101be576100dd565b806301ffc9a7146100e2578063150b7a0214610118578063715018a614610145575b600080fd5b3480156100ee57600080fd5b506101026100fd3660046117f6565b6102b1565b60405161010f9190611a6d565b60405180910390f35b34801561012457600080fd5b506101386101333660046114e0565b6102de565b60405161010f9190611a78565b34801561015157600080fd5b5061015a6102ee565b005b34801561016857600080fd5b5061015a610177366004611756565b610342565b34801561018857600080fd5b5061015a610197366004611646565b61054e565b3480156101a857600080fd5b506101b1610747565b60405161010f91906118d7565b3480156101ca57600080fd5b5061015a6101d9366004611646565b610756565b3480156101ea57600080fd5b506101386101f936600461143a565b610986565b34801561020a57600080fd5b5061015a6102193660046116f5565b610997565b34801561022a57600080fd5b5061015a6102393660046116bf565b610b56565b34801561024a57600080fd5b5061015a6102593660046115a9565b610c1d565b61015a61026c36600461181e565b610e63565b34801561027d57600080fd5b5061013861028c366004611546565b610f83565b34801561029d57600080fd5b5061015a6102ac366004611420565b610f94565b60006001600160e01b03198216630271189760e51b14806102d657506102d682611005565b90505b919050565b630a85bd0160e11b949350505050565b6102f661101e565b6001600160a01b0316610307610747565b6001600160a01b0316146103365760405162461bcd60e51b815260040161032d90611c5e565b60405180910390fd5b6103406000611022565b565b600260005414156103655760405162461bcd60e51b815260040161032d90611db5565b6002600055805182511461038b5760405162461bcd60e51b815260040161032d90611b06565b82518251146103ac5760405162461bcd60e51b815260040161032d90611cca565b60005b82518110156104fe5760006001600160a01b03168382815181106103e357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156104125760405162461bcd60e51b815260040161032d90611c93565b82818151811061043257634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663f242432a333085858151811061046a57634e487b7160e01b600052603260045260246000fd5b602002602001015188868151811061049257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518563ffffffff1660e01b81526004016104b9949392919061190f565b600060405180830381600087803b1580156104d357600080fd5b505af11580156104e7573d6000803e3d6000fd5b5050505080806104f690611e94565b9150506103af565b50336001600160a01b03167f33ea835135236f9a13245ef7983ca24e58215c57b30f6454342c01331513264784838560405161053c93929190611a2a565b60405180910390a25050600160005550565b600260005414156105715760405162461bcd60e51b815260040161032d90611db5565b600260005561057e611074565b6001600160a01b0384166105a45760405162461bcd60e51b815260040161032d90611c19565b81518351146105c55760405162461bcd60e51b815260040161032d90611b06565b3360009081526002602052604090205460ff1615156001146105f95760405162461bcd60e51b815260040161032d90611bc3565b60005b83518110156106c85783818151811061062557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166342842e0e308786858151811061065d57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518463ffffffff1660e01b8152600401610683939291906118eb565b600060405180830381600087803b15801561069d57600080fd5b505af11580156106b1573d6000803e3d6000fd5b5050505080806106c090611e94565b9150506105fc565b50604051339082156108fc029083906000818181858888f193505050501580156106f6573d6000803e3d6000fd5b50836001600160a01b03167f367b163311068ee1ba6b869adb881379c948282de72660d6b1130b24c57c27cf848484604051610734939291906119f4565b60405180910390a2505060016000555050565b6001546001600160a01b031690565b600260005414156107795760405162461bcd60e51b815260040161032d90611db5565b6002600055610786611074565b6001600160a01b0384166107ac5760405162461bcd60e51b815260040161032d90611c19565b81518351146107cd5760405162461bcd60e51b815260040161032d90611b8e565b60005b835181101561091a5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b031684828151811061081757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316141561089c57846001600160a01b03166108fc8385848151811061085c57634e487b7160e01b600052603260045260246000fd5b602002602001015161086e9190611e51565b6040518115909202916000818181858888f19350505050158015610896573d6000803e3d6000fd5b50610908565b610908858483815181106108c057634e487b7160e01b600052603260045260246000fd5b60200260200101518684815181106108e857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166110a89092919063ffffffff16565b8061091281611e94565b9150506107d0565b50604051339082156108fc029083906000818181858888f19350505050158015610948573d6000803e3d6000fd5b50836001600160a01b03167fa86a82382202a497e9f1773c231fd73374b105e05fa938cd6702ecb4d279879b848484604051610734939291906119f4565b63bc197c8160e01b95945050505050565b600260005414156109ba5760405162461bcd60e51b815260040161032d90611db5565b600260005580518251146109e05760405162461bcd60e51b815260040161032d90611b06565b60005b8251811015610b095760006001600160a01b0316838281518110610a1757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161415610a465760405162461bcd60e51b815260040161032d90611c93565b828181518110610a6657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166342842e0e3330858581518110610a9e57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518463ffffffff1660e01b8152600401610ac4939291906118eb565b600060405180830381600087803b158015610ade57600080fd5b505af1158015610af2573d6000803e3d6000fd5b505050508080610b0190611e94565b9150506109e3565b50336001600160a01b03167fc4ba118e37400d34b6a5bc0c246b0e09b00a77f6e4408bbb752544f4d17b355f8383604051610b4592919061197b565b60405180910390a250506001600055565b610b5e61101e565b6001600160a01b0316610b6f610747565b6001600160a01b031614610b955760405162461bcd60e51b815260040161032d90611c5e565b6001600160a01b038216610bbb5760405162461bcd60e51b815260040161032d90611d36565b6001600160a01b03821660009081526002602052604090819020805460ff1916831515179055517f54433240a6771f6f4e12e1da49fc183689313603b8a582d53c24dcdb235f00d790610c119084908490611947565b60405180910390a15050565b60026000541415610c405760405162461bcd60e51b815260040161032d90611db5565b6002600055610c4d611074565b6001600160a01b038516610c735760405162461bcd60e51b815260040161032d90611c19565b8251845114610c945760405162461bcd60e51b815260040161032d90611b06565b8151845114610cb55760405162461bcd60e51b815260040161032d90611b8e565b3360009081526002602052604090205460ff161515600114610ce95760405162461bcd60e51b815260040161032d90611bc3565b60005b8451811015610de157848181518110610d1557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663f242432a3088878581518110610d4d57634e487b7160e01b600052603260045260246000fd5b6020026020010151878681518110610d7557634e487b7160e01b600052603260045260246000fd5b60200260200101516040518563ffffffff1660e01b8152600401610d9c949392919061190f565b600060405180830381600087803b158015610db657600080fd5b505af1158015610dca573d6000803e3d6000fd5b505050508080610dd990611e94565b915050610cec565b50604051339082156108fc029083906000818181858888f19350505050158015610e0f573d6000803e3d6000fd5b50846001600160a01b03167fb1c8f137fd635241fd3dad11bda64b704395cf3105491ce291a82c638b09c55c85858585604051610e4f94939291906119a9565b60405180910390a250506001600055505050565b60026000541415610e865760405162461bcd60e51b815260040161032d90611db5565b60026000556001600160a01b038116610eb15760405162461bcd60e51b815260040161032d90611c93565b600034118015610edd57506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b15610f2a57336001600160a01b03167fd973cf570dd85436f791bb28c92d38633ef4d82b20a5369b79cd79859d599a453483604051610f1d929190611dec565b60405180910390a2610f7a565b610f3f6001600160a01b038216333085611103565b336001600160a01b03167fd973cf570dd85436f791bb28c92d38633ef4d82b20a5369b79cd79859d599a458383604051610b45929190611dec565b50506001600055565b63f23a6e6160e01b95945050505050565b610f9c61101e565b6001600160a01b0316610fad610747565b6001600160a01b031614610fd35760405162461bcd60e51b815260040161032d90611c5e565b6001600160a01b038116610ff95760405162461bcd60e51b815260040161032d90611ac0565b61100281611022565b50565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b3360009081526002602052604090205460ff1615156001146103405760405162461bcd60e51b815260040161032d90611bc3565b6110fe8363a9059cbb60e01b84846040516024016110c7929190611962565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261112a565b505050565b611124846323b872dd60e01b8585856040516024016110c7939291906118eb565b50505050565b600061117f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111b99092919063ffffffff16565b8051909150156110fe578080602001905181019061119d91906117da565b6110fe5760405162461bcd60e51b815260040161032d90611d6b565b60606111c884846000856111d2565b90505b9392505050565b6060824710156111f45760405162461bcd60e51b815260040161032d90611b48565b6111fd85611292565b6112195760405162461bcd60e51b815260040161032d90611cff565b600080866001600160a01b0316858760405161123591906118bb565b60006040518083038185875af1925050503d8060008114611272576040519150601f19603f3d011682016040523d82523d6000602084013e611277565b606091505b5091509150611287828286611298565b979650505050505050565b3b151590565b606083156112a75750816111cb565b8251156112b75782518084602001fd5b8160405162461bcd60e51b815260040161032d9190611a8d565b80356001600160a01b03811681146102d957600080fd5b600082601f8301126112f8578081fd5b8135602061130d61130883611e2d565b611e03565b8281528181019085830183850287018401881015611329578586fd5b855b8581101561134e5761133c826112d1565b8452928401929084019060010161132b565b5090979650505050505050565b600082601f83011261136b578081fd5b8135602061137b61130883611e2d565b8281528181019085830183850287018401881015611397578586fd5b855b8581101561134e57813584529284019290840190600101611399565b600082601f8301126113c5578081fd5b813567ffffffffffffffff8111156113df576113df611ec5565b6113f2601f8201601f1916602001611e03565b818152846020838601011115611406578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611431578081fd5b6111cb826112d1565b600080600080600060a08688031215611451578081fd5b61145a866112d1565b9450611468602087016112d1565b9350604086013567ffffffffffffffff80821115611484578283fd5b61149089838a0161135b565b945060608801359150808211156114a5578283fd5b6114b189838a0161135b565b935060808801359150808211156114c6578283fd5b506114d3888289016113b5565b9150509295509295909350565b600080600080608085870312156114f5578384fd5b6114fe856112d1565b935061150c602086016112d1565b925060408501359150606085013567ffffffffffffffff81111561152e578182fd5b61153a878288016113b5565b91505092959194509250565b600080600080600060a0868803121561155d578081fd5b611566866112d1565b9450611574602087016112d1565b93506040860135925060608601359150608086013567ffffffffffffffff81111561159d578182fd5b6114d3888289016113b5565b600080600080600060a086880312156115c0578081fd5b6115c9866112d1565b9450602086013567ffffffffffffffff808211156115e5578283fd5b6115f189838a016112e8565b95506040880135915080821115611606578283fd5b61161289838a0161135b565b94506060880135915080821115611627578283fd5b506116348882890161135b565b95989497509295608001359392505050565b6000806000806080858703121561165b578384fd5b611664856112d1565b9350602085013567ffffffffffffffff80821115611680578485fd5b61168c888389016112e8565b945060408701359150808211156116a1578384fd5b506116ae8782880161135b565b949793965093946060013593505050565b600080604083850312156116d1578182fd5b6116da836112d1565b915060208301356116ea81611edb565b809150509250929050565b60008060408385031215611707578182fd5b823567ffffffffffffffff8082111561171e578384fd5b61172a868387016112e8565b9350602085013591508082111561173f578283fd5b5061174c8582860161135b565b9150509250929050565b60008060006060848603121561176a578081fd5b833567ffffffffffffffff80821115611781578283fd5b61178d8783880161135b565b945060208601359150808211156117a2578283fd5b6117ae878388016112e8565b935060408601359150808211156117c3578283fd5b506117d08682870161135b565b9150509250925092565b6000602082840312156117eb578081fd5b81516111cb81611edb565b600060208284031215611807578081fd5b81356001600160e01b0319811681146111cb578182fd5b60008060408385031215611830578182fd5b82359150611840602084016112d1565b90509250929050565b6000815180845260208085019450808401835b838110156118815781516001600160a01b03168752958201959082019060010161185c565b509495945050505050565b6000815180845260208085019450808401835b838110156118815781518752958201959082019060010161189f565b600082516118cd818460208701611e68565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03929092168252602082015260400190565b60006040825261198e6040830185611849565b82810360208401526119a0818561188c565b95945050505050565b6000608082526119bc6080830187611849565b82810360208401526119ce818761188c565b905082810360408401526119e2818661188c565b91505082606083015295945050505050565b600060608252611a076060830186611849565b8281036020840152611a19818661188c565b915050826040830152949350505050565b600060608252611a3d606083018661188c565b8281036020840152611a4f818661188c565b90508281036040840152611a638185611849565b9695505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6000602082528251806020840152611aac816040850160208701611e68565b601f01601f19169190910160400192915050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f746f6b656e20616e6420746f6b656e496473206c656e677468206d69736d61746040820152610c6d60f31b606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252818101527f746f6b656e20616e6420726577617264206c656e677468206d69736d61746368604082015260600190565b60208082526036908201527f596f7520646f6e2774206861766520746865207065726d697373696f6e20746f60408201527520696e766f6b6520746869732066756e6374696f6e2160501b606082015260800190565b60208082526025908201527f7061727469636970616e742063616e206e6f742062652061207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f596f75206e65656420746f2066696c6c20746f6b656e20616464726573732100604082015260600190565b6020808252818101527f746f6b656e20616e6420616d6f756e74206c656e677468206d69736d61746368604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252818101527f43616e6e6f74206368616e676520746f20696e76616c69642061646472657373604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b9182526001600160a01b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611e2557611e25611ec5565b604052919050565b600067ffffffffffffffff821115611e4757611e47611ec5565b5060209081020190565b600082821015611e6357611e63611eaf565b500390565b60005b83811015611e83578181015183820152602001611e6b565b838111156111245750506000910152565b6000600019821415611ea857611ea8611eaf565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461100257600080fdfea264697066735822122069e1d91defefd5176f6d38fdf6adb3a215c83e34554781fd0db6c586bdd91df464736f6c63430008000033" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000042432dd6dcf4f0e6ee", + "code": "0x60806040526004361061014f5760003560e01c8063b914cc64116100b6578063d9d98ce41161006f578063d9d98ce4146103db578063ec85b12b146103fb578063f24286211461042f578063f2fde38b14610463578063f7888aec14610483578063f9609f08146104a357600080fd5b8063b914cc6414610318578063beabacc814610338578063c499f8ce14610358578063cfaa541e1461036e578063d66bd5241461038e578063d9caed12146103bb57600080fd5b8063613255ab11610108578063613255ab1461025c5780636b6b9f691461027c5780636cb568c11461029c578063715018a6146102bc5780638da5cb5b146102d1578063a16e5112146102f857600080fd5b806316c38b3c146101985780632d2da806146101b85780634782f779146101e1578063511de15b146102015780635c975abb146102145780635cffe9de1461023c57600080fd5b3661019357336001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f16146101915761018f6000336104b1565b505b005b600080fd5b3480156101a457600080fd5b506101916101b3366004611cb1565b61071f565b6101cb6101c6366004611cf7565b6107cf565b6040516101d89190611d20565b60405180910390f35b3480156101ed57600080fd5b506101916101fc366004611d3f565b610868565b6101cb61020f366004611d7c565b6108fc565b34801561022057600080fd5b50600154600160a01b900460ff165b6040516101d89190611dd4565b34801561024857600080fd5b5061022f610257366004611ef7565b610b87565b34801561026857600080fd5b506101cb610277366004611cf7565b610e33565b34801561028857600080fd5b50610191610297366004611f76565b610ea3565b3480156102a857600080fd5b506101916102b7366004611fab565b610f13565b3480156102c857600080fd5b5061019161101b565b3480156102dd57600080fd5b506001546001600160a01b03165b6040516101d8919061200c565b34801561030457600080fd5b506003546102eb906001600160a01b031681565b34801561032457600080fd5b50610191610333366004611cf7565b61102f565b34801561034457600080fd5b50610191610353366004611d7c565b61107f565b34801561036457600080fd5b506101cb60025481565b34801561037a57600080fd5b50610191610389366004612132565b611137565b34801561039a57600080fd5b506101cb6103a9366004611cf7565b60056020526000908152604090205481565b3480156103c757600080fd5b506101916103d6366004611d7c565b6115f1565b3480156103e757600080fd5b506101cb6103f6366004611d3f565b6116c9565b34801561040757600080fd5b506101cb7f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd981565b34801561043b57600080fd5b506102eb7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b34801561046f57600080fd5b5061019161047e366004611cf7565b6116d4565b34801561048f57600080fd5b506101cb61049e3660046121af565b61170e565b6101cb6104b13660046121af565b60006104bb61177a565b6001600160a01b0383166104d05750346106b7565b34156104db57600080fd5b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316836001600160a01b03160361062b576040516370a0823160e01b8152600093506001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f16906370a082319061056490309060040161200c565b602060405180830381865afa158015610581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a591906121ed565b604051632e1a7d4d60e01b81529091506001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f1690632e1a7d4d906105f4908490600401611d20565b600060405180830381600087803b15801561060e57600080fd5b505af1158015610622573d6000803e3d6000fd5b505050506106b7565b6001600160a01b038316600081815260056020526040908190205490516370a0823160e01b81529091906370a082319061066990309060040161200c565b602060405180830381865afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa91906121ed565b6106b49190612224565b90505b6001600160a01b038316600090815260056020526040812080548392906106df90849061223b565b90915550506001600160a01b0380841660009081526004602090815260408083209386168352929052208054820190556107196001600055565b92915050565b6107276117a3565b8015610771576107356117dc565b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051610764919061200c565b60405180910390a16107b1565b610779611806565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336040516107a8919061200c565b60405180910390a15b60018054911515600160a01b0260ff60a01b19909216919091179055565b60006107d961177a565b50600080805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc8054349283929161081790849061223b565b90915550506001600160a01b03821660009081527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec602052604090208054820190556108636001600055565b919050565b61087061177a565b61087a828261182f565b3360009081527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec6020526040812080548392906108b8908490612224565b90915550506000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc805482900390556108f86001600055565b5050565b600061090661177a565b6001600160a01b0384166109255734821461092057600080fd5b610b1c565b341561093057600080fd5b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316846001600160a01b031603610a84576040516323b872dd60e01b8152600094506001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f16906323b872dd906109bd90339030908790600401612253565b6020604051808303816000875af11580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a009190612286565b50604051632e1a7d4d60e01b81526001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f1690632e1a7d4d90610a4d908590600401611d20565b600060405180830381600087803b158015610a6757600080fd5b505af1158015610a7b573d6000803e3d6000fd5b50505050610b1c565b610a90843330856118ac565b6001600160a01b038416600081815260056020526040908190205490516370a0823160e01b81529091906370a0823190610ace90309060040161200c565b602060405180830381865afa158015610aeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0f91906121ed565b610b199190612224565b91505b6001600160a01b03841660009081526005602052604081208054849290610b4490849061223b565b9091555050506001600160a01b03808416600090815260046020908152604080832093861683529290522080548201905580610b806001600055565b9392505050565b6000610b9161177a565b610b996117dc565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190610bc890309060040161200c565b602060405180830381865afa158015610be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0991906121ed565b90506000610c16856119a2565b905084821015610c415760405162461bcd60e51b8152600401610c38906122de565b60405180910390fd5b610c4c8688876119c5565b6040516323e30c8b60e01b81527f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9906001600160a01b038916906323e30c8b90610ca29033908b908b9088908c9060040161234c565b6020604051808303816000875af1158015610cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce591906121ed565b14610d025760405162461bcd60e51b8152600401610c38906123d2565b6040516370a0823160e01b81526000906001600160a01b038816906370a0823190610d3190309060040161200c565b602060405180830381865afa158015610d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7291906121ed565b905082811015610d945760405162461bcd60e51b8152600401610c3890612416565b6000610da08483612224565b905082811015610dc25760405162461bcd60e51b8152600401610c3890612468565b610dcc8882611ab8565b876001600160a01b0316896001600160a01b03167f0d7d75e01ab95780d3cd1c8ec0dd6c2ce19e3a20427eec8bf53283b6fb8e95f08984604051610e11929190612478565b60405180910390a36001945050505050610e2b6001600055565b949350505050565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610e6290309060040161200c565b602060405180830381865afa158015610e7f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906121ed565b610eab6117a3565b67016345785d8a0000811115610ed35760405162461bcd60e51b8152600401610c38906124d2565b7f36e8f57c180167765b2da71700ae4d0d3237d63cd1552cefa8bafca7c1d3fc3d60025482604051610f06929190612478565b60405180910390a1600255565b610f1b61177a565b6001600160a01b038416610f4d578060ff16600203610f4357610f3e8383611b40565b610fb4565b610f3e838361182f565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316846001600160a01b031603610fa957600093508060ff16600103610f9f57610f3e838361182f565b610f3e8383611b40565b610fb48484846119c5565b6001600160a01b038416600090815260046020908152604080832033845290915281208054849290610fe7908490612224565b90915550506001600160a01b0384166000908152600560205260409020805483900390556110156001600055565b50505050565b6110236117a3565b61102d6000611c45565b565b6110376117a3565b6001600160a01b03811661105d5760405162461bcd60e51b8152600401610c3890612514565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61108761177a565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316836001600160a01b0316036110c557600092505b6001600160a01b0383166000908152600460209081526040808320338452909152812080548392906110f8908490612224565b90915550506001600160a01b0380841660009081526004602090815260408083209386168352929052208054820190556111326001600055565b505050565b61113f61177a565b6111476117dc565b8251825181146111695760405162461bcd60e51b8152600401610c3890612550565b60008167ffffffffffffffff81111561118457611184611e01565b6040519080825280602002602001820160405280156111ad578160200160208202803683370190505b50905060008267ffffffffffffffff8111156111cb576111cb611e01565b6040519080825280602002602001820160405280156111f4578160200160208202803683370190505b5090506000806000805b868310156113e15789838151811061121857611218612560565b6020026020010151915088838151811061123457611234612560565b60200260200101519050836001600160a01b0316826001600160a01b03161160006001600160a01b0316836001600160a01b03161461129a576040518060400160405280600f81526020016e554e534f525445445f544f4b454e5360881b8152506112be565b6040518060400160405280600a8152602001692d22a927afaa27a5a2a760b11b8152505b906112dc5760405162461bcd60e51b8152600401610c389190612576565b50819350816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161130c919061200c565b602060405180830381865afa158015611329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134d91906121ed565b85848151811061135f5761135f612560565b602002602001018181525050611374816119a2565b86848151811061138657611386612560565b602002602001018181525050808584815181106113a5576113a5612560565b602002602001015110156113cb5760405162461bcd60e51b8152600401610c38906122de565b6113d6828c836119c5565b8260010192506111fe565b60405163f04f270760e01b81526001600160a01b038c169063f04f270790611413908d908d908b908e9060040161262e565b600060405180830381600087803b15801561142d57600080fd5b505af1158015611441573d6000803e3d6000fd5b5050505060008060008095505b898610156115dd578c868151811061146857611468612560565b6020026020010151945087868151811061148457611484612560565b60200260200101519250846001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016114ba919061200c565b602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb91906121ed565b91508282101561151d5760405162461bcd60e51b8152600401610c3890612416565b6115278383612224565b905088868151811061153b5761153b612560565b60200260200101518110156115625760405162461bcd60e51b8152600401610c3890612468565b61156c8582611ab8565b846001600160a01b03168e6001600160a01b03167f0d7d75e01ab95780d3cd1c8ec0dd6c2ce19e3a20427eec8bf53283b6fb8e95f08e89815181106115b3576115b3612560565b6020026020010151846040516115ca929190612478565b60405180910390a385600101955061144e565b505050505050505050506110156001600055565b6115f961177a565b6001600160a01b03831661161657611611828261182f565b611668565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316836001600160a01b03160361165d57600092506116118282611b40565b6116688383836119c5565b6001600160a01b03831660009081526004602090815260408083203384529091528120805483929061169b908490612224565b90915550506001600160a01b0383166000908152600560205260409020805482900390556111326001600055565b6000610b80826119a2565b6116dc6117a3565b6001600160a01b0381166117025760405162461bcd60e51b8152600401610c38906126c8565b61170b81611c45565b50565b60007f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316836001600160a01b03160361174e57600092505b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b60026000540361179c5760405162461bcd60e51b8152600401610c389061270c565b6002600055565b336117b66001546001600160a01b031690565b6001600160a01b03161461102d5760405162461bcd60e51b8152600401610c389061274e565b600154600160a01b900460ff161561102d5760405162461bcd60e51b8152600401610c3890612785565b600154600160a01b900460ff1661102d5760405162461bcd60e51b8152600401610c38906127c0565b6000826001600160a01b031682604051611848906127da565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b50509050806111325760405163b12d13eb60e01b815260040160405180910390fd5b600080856001600160a01b03166323b872dd8686866040516024016118d393929190612253565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161190c9190612807565b6000604051808303816000865af19150503d8060008114611949576040519150601f19603f3d011682016040523d82523d6000602084013e61194e565b606091505b509150915081158061197c575080511580159061197c57508080602001905181019061197a9190612286565b155b1561199a57604051631e4e7d0960e21b815260040160405180910390fd5b505050505050565b6000670de0b6b3a7640000600254836119bb9190612813565b6107199190612848565b600080846001600160a01b031663a9059cbb85856040516024016119ea92919061285c565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611a239190612807565b6000604051808303816000865af19150503d8060008114611a60576040519150601f19603f3d011682016040523d82523d6000602084013e611a65565b606091505b5091509150811580611a935750805115801590611a93575080806020019051810190611a919190612286565b155b15611ab1576040516312171d8360e31b815260040160405180910390fd5b5050505050565b80156108f8576003546001600160a01b0316611ad58382846119c5565b600254604051631087d04360e31b81526001600160a01b0383169163843e821891611b0991600a918891889160040161288d565b600060405180830381600087803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b50505050505050565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b9b57600080fd5b505af1158015611baf573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f16935063a9059cbb9250611c0291508590859060040161285c565b6020604051808303816000875af1158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111329190612286565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8015155b811461170b57600080fd5b803561071981611c97565b600060208284031215611cc657611cc6600080fd5b6000610e2b8484611ca6565b60006001600160a01b038216610719565b611c9b81611cd2565b803561071981611ce3565b600060208284031215611d0c57611d0c600080fd5b6000610e2b8484611cec565b805b82525050565b602081016107198284611d18565b80611c9b565b803561071981611d2e565b60008060408385031215611d5557611d55600080fd5b6000611d618585611cec565b9250506020611d7285828601611d34565b9150509250929050565b600080600060608486031215611d9457611d94600080fd5b6000611da08686611cec565b9350506020611db186828701611cec565b9250506040611dc286828701611d34565b9150509250925092565b801515611d1a565b602081016107198284611dcc565b600061071982611cd2565b611c9b81611de2565b803561071981611ded565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611e3d57611e3d611e01565b6040525050565b6000611e4f60405190565b90506108638282611e17565b600067ffffffffffffffff821115611e7557611e75611e01565b601f19601f83011660200192915050565b82818337506000910152565b6000611ea5611ea084611e5b565b611e44565b905082815260208101848484011115611ec057611ec0600080fd5b611ecb848285611e86565b509392505050565b600082601f830112611ee757611ee7600080fd5b8135610e2b848260208601611e92565b60008060008060808587031215611f1057611f10600080fd5b6000611f1c8787611df6565b9450506020611f2d87828801611cec565b9350506040611f3e87828801611d34565b925050606085013567ffffffffffffffff811115611f5e57611f5e600080fd5b611f6a87828801611ed3565b91505092959194509250565b600060208284031215611f8b57611f8b600080fd5b6000610e2b8484611d34565b60ff8116611c9b565b803561071981611f97565b60008060008060808587031215611fc457611fc4600080fd5b6000611fd08787611cec565b9450506020611fe187828801611cec565b9350506040611ff287828801611d34565b9250506060611f6a87828801611fa0565b611d1a81611cd2565b602081016107198284612003565b600067ffffffffffffffff82111561203457612034611e01565b5060209081020190565b600061204c611ea08461201a565b8381529050602080820190840283018581111561206b5761206b600080fd5b835b8181101561208f57806120808882611cec565b8452506020928301920161206d565b5050509392505050565b600082601f8301126120ad576120ad600080fd5b8135610e2b84826020860161203e565b60006120cb611ea08461201a565b838152905060208082019084028301858111156120ea576120ea600080fd5b835b8181101561208f57806120ff8882611d34565b845250602092830192016120ec565b600082601f83011261212257612122600080fd5b8135610e2b8482602086016120bd565b6000806000806080858703121561214b5761214b600080fd5b60006121578787611df6565b945050602085013567ffffffffffffffff81111561217757612177600080fd5b61218387828801612099565b935050604085013567ffffffffffffffff8111156121a3576121a3600080fd5b611f3e8782880161210e565b600080604083850312156121c5576121c5600080fd5b60006121d18585611cec565b9250506020611d7285828601611cec565b805161071981611d2e565b60006020828403121561220257612202600080fd5b6000610e2b84846121e2565b634e487b7160e01b600052601160045260246000fd5b6000828210156122365761223661220e565b500390565b6000821982111561224e5761224e61220e565b500190565b606081016122618286612003565b61226e6020830185612003565b610e2b6040830184611d18565b805161071981611c97565b60006020828403121561229b5761229b600080fd5b6000610e2b848461227b565b601f81526000602082017f494e53554646494349454e545f464c4153485f4c4f414e5f42414c414e434500815291505b5060200190565b60208082528101610719816122a7565b60005b838110156123095781810151838201526020016122f1565b838111156110155750506000910152565b6000612324825190565b80845260208401935061233b8185602086016122ee565b601f01601f19169290920192915050565b60a0810161235a8288612003565b6123676020830187612003565b6123746040830186611d18565b6123816060830185611d18565b8181036080830152612393818461231a565b979650505050505050565b601881526000602082017f49455243333135365f43414c4c4241434b5f4641494c45440000000000000000815291506122d7565b602080825281016107198161239e565b601981526000602082017f494e56414c49445f504f53545f4c4f414e5f42414c414e434500000000000000815291506122d7565b60208082528101610719816123e2565b602281526000602082017f494e53554646494349454e545f464c4153485f4c4f414e5f4645455f414d4f55815261139560f21b602082015291505b5060400190565b6020808252810161071981612426565b604081016124868285611d18565b610b806020830184611d18565b602281526000602082017f464c4153485f4c4f414e5f4645455f50455243454e544147455f544f4f5f484981526108e960f31b60208201529150612461565b6020808252810161071981612493565b60208082527f494e56414c49445f464c4153485f4c4f414e5f4645455f524543495049454e54910190815260006122d7565b60208082528101610719816124e2565b60158152600060208201740929ca0aaa8be988a9c8ea890be9a92a69a82a8869605b1b815291506122d7565b6020808252810161071981612524565b634e487b7160e01b600052603260045260246000fd5b60208082528101610b80818461231a565b60006125938383612003565b505060200190565b60006125a5825190565b80845260209384019383018060005b838110156125d95781516125c88882612587565b9750602083019250506001016125b4565b509495945050505050565b60006125938383611d18565b60006125fa825190565b80845260209384019383018060005b838110156125d957815161261d88826125e4565b975060208301925050600101612609565b6080808252810161263f818761259b565b9050818103602083015261265381866125f0565b9050818103604083015261266781856125f0565b9050818103606083015261267b818461231a565b9695505050505050565b602681526000602082017f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b60208201529150612461565b6020808252810161071981612685565b601f81526000602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815291506122d7565b60208082528101610719816126d8565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572910190815260006122d7565b602080825281016107198161271c565b601081526000602082016f14185d5cd8589b194e881c185d5cd95960821b815291506122d7565b602080825281016107198161275e565b601481526000602082017314185d5cd8589b194e881b9bdd081c185d5cd95960621b815291506122d7565b6020808252810161071981612795565b6000815b91505090565b6000610719826127d0565b60006127ef825190565b6127fd8185602086016122ee565b9290920192915050565b6000610b8082846127e5565b600081600019048311821515161561282d5761282d61220e565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261285757612857612832565b500490565b604081016124868285612003565b600061ffff8216610719565b611d1a8161286a565b6000808252602082016127d4565b60a0810161289b8287612876565b6128a86020830186612003565b6128b56040830185611d18565b6128c26060830184611d18565b818103608083015261267b8161287f56fea26469706673582212208539bcd7e1382783133f2080efcd30632940d2710efb2f5de93727ff03fcb9f464736f6c634300080f0033" + }, + { + "address": "0x29bac895f50746fa136b16d4fe7a7d9f80ec9320", + "nonce": 20, + "balance": "0x0000000000000000000000000000000000000000000000000025358cf587fec9", + "code": "0x" + }, + { + "address": "0xbc3c845c58c3f97be75b684b1adf19d9f6f322fa", + "nonce": 84, + "balance": "0x000000000000000000000000000000000000000000000000002236f8cc183109", + "code": "0x" + }, + { + "address": "0x8cf3909b7f7992e41c5fa3b26ff2c8e97cabb27d", + "nonce": 17, + "balance": "0x000000000000000000000000000000000000000000000000000ddd5c6116a37f", + "code": "0x" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636871ee401161008c578063a22cb46511610066578063a22cb465146101d6578063b88d4fde146101e9578063c87b56dd146101fc578063e985e9c51461020f57600080fd5b80636871ee40146101a557806370a08231146101ad57806395d89b41146101ce57600080fd5b8063095ea7b3116100c8578063095ea7b31461015757806323b872dd1461016c57806342842e0e1461017f5780636352211e1461019257600080fd5b806301ffc9a7146100ef57806306fdde0314610117578063081812fc1461012c575b600080fd5b6101026100fd366004610d25565b61024b565b60405190151581526020015b60405180910390f35b61011f61029d565b60405161010e9190610d8f565b61013f61013a366004610da2565b61032f565b6040516001600160a01b03909116815260200161010e565b61016a610165366004610dd7565b610356565b005b61016a61017a366004610e01565b610470565b61016a61018d366004610e01565b6104a1565b61013f6101a0366004610da2565b6104bc565b61016a61051c565b6101c06101bb366004610e3d565b61057f565b60405190815260200161010e565b61011f610605565b61016a6101e4366004610e58565b610614565b61016a6101f7366004610eaa565b610623565b61011f61020a366004610da2565b61065b565b61010261021d366004610f86565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061027c57506001600160e01b03198216635b5e139f60e01b145b8061029757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546102ac90610fb9565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610fb9565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b600061033a82610665565b506000908152600460205260409020546001600160a01b031690565b6000610361826104bc565b9050806001600160a01b0316836001600160a01b0316036103d35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103ef57506103ef813361021d565b6104615760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016103ca565b61046b83836106c4565b505050565b61047a3382610732565b6104965760405162461bcd60e51b81526004016103ca90610ff3565b61046b8383836107b1565b61046b83838360405180602001604052806000815250610623565b6000818152600260205260408120546001600160a01b0316806102975760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103ca565b63660f14d042111561055b5760405162461bcd60e51b8152602060048201526008602482015267546f6f206c61746560c01b60448201526064016103ca565b600680546000918261056c83611040565b91905055905061057c3382610915565b50565b60006001600160a01b0382166105e95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103ca565b506001600160a01b031660009081526003602052604090205490565b6060600180546102ac90610fb9565b61061f33838361092f565b5050565b61062d3383610732565b6106495760405162461bcd60e51b81526004016103ca90610ff3565b610655848484846109fd565b50505050565b6060610297610a30565b6000818152600260205260409020546001600160a01b031661057c5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103ca565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906106f9826104bc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061073e836104bc565b9050806001600160a01b0316846001600160a01b0316148061078557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806107a95750836001600160a01b031661079e8461032f565b6001600160a01b0316145b949350505050565b826001600160a01b03166107c4826104bc565b6001600160a01b0316146107ea5760405162461bcd60e51b81526004016103ca90611067565b6001600160a01b03821661084c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103ca565b826001600160a01b031661085f826104bc565b6001600160a01b0316146108855760405162461bcd60e51b81526004016103ca90611067565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61061f828260405180602001604052806000815250610a50565b816001600160a01b0316836001600160a01b0316036109905760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103ca565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610a088484846107b1565b610a1484848484610a83565b6106555760405162461bcd60e51b81526004016103ca906110ac565b60606040518060a001604052806062815260200161115960629139905090565b610a5a8383610b84565b610a676000848484610a83565b61046b5760405162461bcd60e51b81526004016103ca906110ac565b60006001600160a01b0384163b15610b7957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610ac79033908990889088906004016110fe565b6020604051808303816000875af1925050508015610b02575060408051601f3d908101601f19168201909252610aff9181019061113b565b60015b610b5f573d808015610b30576040519150601f19603f3d011682016040523d82523d6000602084013e610b35565b606091505b508051600003610b575760405162461bcd60e51b81526004016103ca906110ac565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506107a9565b506001949350505050565b6001600160a01b038216610bda5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103ca565b6000818152600260205260409020546001600160a01b031615610c3f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103ca565b6000818152600260205260409020546001600160a01b031615610ca45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103ca565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b03198116811461057c57600080fd5b600060208284031215610d3757600080fd5b8135610d4281610d0f565b9392505050565b6000815180845260005b81811015610d6f57602081850181015186830182015201610d53565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d426020830184610d49565b600060208284031215610db457600080fd5b5035919050565b80356001600160a01b0381168114610dd257600080fd5b919050565b60008060408385031215610dea57600080fd5b610df383610dbb565b946020939093013593505050565b600080600060608486031215610e1657600080fd5b610e1f84610dbb565b9250610e2d60208501610dbb565b9150604084013590509250925092565b600060208284031215610e4f57600080fd5b610d4282610dbb565b60008060408385031215610e6b57600080fd5b610e7483610dbb565b915060208301358015158114610e8957600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610ec057600080fd5b610ec985610dbb565b9350610ed760208601610dbb565b925060408501359150606085013567ffffffffffffffff80821115610efb57600080fd5b818701915087601f830112610f0f57600080fd5b813581811115610f2157610f21610e94565b604051601f8201601f19908116603f01168101908382118183101715610f4957610f49610e94565b816040528281528a6020848701011115610f6257600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215610f9957600080fd5b610fa283610dbb565b9150610fb060208401610dbb565b90509250929050565b600181811c90821680610fcd57607f821691505b602082108103610fed57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60006001820161106057634e487b7160e01b600052601160045260246000fd5b5060010190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061113190830184610d49565b9695505050505050565b60006020828403121561114d57600080fd5b8151610d4281610d0f56fe68747470733a2f2f6261667962656962726c6a69777961356a7461697072676d6c65723661706d6e6774326c356533377a6973346d6b3567776c33756d3479716563712e697066732e6e667473746f726167652e6c696e6b2f6a736f6e2e6a736f6ea26469706673582212202b1afc9e6124ab92979b94df77e17911400f205da205eebf068c9a1b878ac1ac64736f6c63430008140033" + }, + { + "address": "0xeda8d95134e1d153e8abdfbbe8be955b38e32cc4", + "nonce": 28, + "balance": "0x00000000000000000000000000000000000000000000000000101a69bc4828e7", + "code": "0x" + }, + { + "address": "0x3fb385aab3a6e24be80e401bc1862f1b10eff936", + "nonce": 13, + "balance": "0x000000000000000000000000000000000000000000000000000eab6676ebfe42", + "code": "0x" + }, + { + "address": "0x19275666125736df3a99564f15064b09501650bf", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100385760003560e01c8063769047a514610044578063ab1be68614610059578063cae5f11e146100845761003f565b3661003f57005b600080fd5b610057610052366004610549565b610099565b005b34801561006557600080fd5b5061006e61042b565b60405161007b91906105ce565b60405180910390f35b34801561009057600080fd5b5061006e610443565b60006100b36100ae60a0860160808701610506565b61045b565b905060006100bf61042b565b6001600160a01b03166100d86080870160608801610506565b6001600160a01b031614156100ee575060408401355b6100f661042b565b6001600160a01b031661010f6080870160608801610506565b6001600160a01b0316146101c15761012d6080860160608701610506565b6001600160a01b031663095ea7b361014b60e0880160c08901610506565b87604001356040518363ffffffff1660e01b815260040161016d9291906105e2565b602060405180830381600087803b15801561018757600080fd5b505af115801561019b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bf9190610529565b505b60006101d360e0870160c08801610506565b6001600160a01b0316826101ea602089018961067f565b6040516101f89291906105be565b60006040518083038185875af1925050503d8060008114610235576040519150601f19603f3d011682016040523d82523d6000602084013e61023a565b606091505b50509050806102645760405162461bcd60e51b815260040161025b9061063d565b60405180910390fd5b60006102796100ae60a0890160808a01610506565b9050600061028785836106cb565b90508760a001358110156102ad5760405162461bcd60e51b815260040161025b906105fb565b86156103b0576102bb61042b565b6001600160a01b03166102d460808a0160608b01610506565b6001600160a01b0316141561031f576040516001600160a01b0387169088156108fc029089906000818181858888f19350505050158015610319573d6000803e3d6000fd5b506103b0565b61032f6080890160608a01610506565b6001600160a01b031663a9059cbb87896040518363ffffffff1660e01b815260040161035c9291906105e2565b602060405180830381600087803b15801561037657600080fd5b505af115801561038a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ae9190610529565b505b6103c06080890160608a01610506565b6001600160a01b03166103d960a08a0160808b01610506565b6001600160a01b03167fa17c303de64bbe2a5a0c748556bd31f47ebb75f1a9cfbf999bbd0a0992ea571a838b604001358b60405161041993929190610669565b60405180910390a35050505050505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90565b73e5d7c2a44ffddf6b295a15c148167daaaf5cf34f90565b600061046561042b565b6001600160a01b0316826001600160a01b0316146104fe576040516370a0823160e01b81526001600160a01b038316906370a08231906104a99030906004016105ce565b60206040518083038186803b1580156104c157600080fd5b505afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f991906105a6565b610500565b475b92915050565b600060208284031215610517578081fd5b8135610522816106ee565b9392505050565b60006020828403121561053a578081fd5b81518015158114610522578182fd5b60008060006060848603121561055d578182fd5b833567ffffffffffffffff811115610573578283fd5b840160e08187031215610584578283fd5b925060208401359150604084013561059b816106ee565b809150509250925092565b6000602082840312156105b7578081fd5b5051919050565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b60208082526022908201527f526563656965766564204c65737320546f6b656e73205468616e204d696e696d604082015261756d60f01b606082015260800190565b6020808252601290820152711154948e8810d0531308149155915495115160721b604082015260600190565b9283526020830191909152604082015260600190565b6000808335601e19843603018112610695578283fd5b83018035915067ffffffffffffffff8211156106af578283fd5b6020019150368190038213156106c457600080fd5b9250929050565b6000828210156106e957634e487b7160e01b81526011600452602481fd5b500390565b6001600160a01b038116811461070357600080fd5b5056fea2646970667358221220d972cdab328e8639e27796ba2c3169d671864e4520e70d887199a230073d76e664736f6c63430008000033" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100435760003560e01c80635c60da1b1461005c578063715018a6146100875780638da5cb5b1461009e578063f2fde38b146100c957610052565b36610052576100506100f2565b005b61005a6100f2565b005b34801561006857600080fd5b5061007161010c565b60405161007e91906105dd565b60405180910390f35b34801561009357600080fd5b5061009c61011b565b005b3480156100aa57600080fd5b506100b36101a3565b6040516100c091906105dd565b60405180910390f35b3480156100d557600080fd5b506100f060048036038101906100eb9190610629565b6101cc565b005b6100fa6102fa565b61010a6101056102fc565b610353565b565b60006101166102fc565b905090565b610123610379565b73ffffffffffffffffffffffffffffffffffffffff166101416101a3565b73ffffffffffffffffffffffffffffffffffffffff1614610197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018e906106b3565b60405180910390fd5b6101a16000610381565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6101d4610379565b73ffffffffffffffffffffffffffffffffffffffff166101f26101a3565b73ffffffffffffffffffffffffffffffffffffffff1614610248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023f906106b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ae90610745565b60405180910390fd5b6102c081610381565b50565b6000819050919050565b60606102f283836040518060600160405280602781526020016108f760279139610445565b905092915050565b565b600061032a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6102c3565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3660008037600080366000845af43d6000803e8060008114610374573d6000f35b3d6000fd5b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606061045084610512565b61048f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610486906107d7565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516104b79190610868565b600060405180830381855af49150503d80600081146104f2576040519150601f19603f3d011682016040523d82523d6000602084013e6104f7565b606091505b5091509150610507828286610535565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060831561054557829050610595565b6000835111156105585782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058c91906108d4565b60405180910390fd5b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006105c78261059c565b9050919050565b6105d7816105bc565b82525050565b60006020820190506105f260008301846105ce565b92915050565b600080fd5b610606816105bc565b811461061157600080fd5b50565b600081359050610623816105fd565b92915050565b60006020828403121561063f5761063e6105f8565b5b600061064d84828501610614565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061069d602083610656565b91506106a882610667565b602082019050919050565b600060208201905081810360008301526106cc81610690565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061072f602683610656565b915061073a826106d3565b604082019050919050565b6000602082019050818103600083015261075e81610722565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006107c1602683610656565b91506107cc82610765565b604082019050919050565b600060208201905081810360008301526107f0816107b4565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561082b578082015181840152602081019050610810565b60008484015250505050565b6000610842826107f7565b61084c8185610802565b935061085c81856020860161080d565b80840191505092915050565b60006108748284610837565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b60006108a68261087f565b6108b08185610656565b93506108c081856020860161080d565b6108c98161088a565b840191505092915050565b600060208201905081810360008301526108ee818461089b565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b4cfcaef4bdee62c7960fc25a7589cde0192356122ed16d40336a7d4cdb9d76964736f6c63430008120033" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101fa5760003560e01c80638a8411781161011a578063b3bd76ce116100ad578063ee7c979a1161007c578063ee7c979a14610407578063f2f4eb261461042b578063f2fde38b14610433578063f8c8765e14610446578063fdea88b214610459576101fa565b8063b3bd76ce146103c6578063d7b96d4e146103d9578063dd9aba1b146103e1578063df0a56bb146103f4576101fa565b80639353b9df116100e95780639353b9df1461037257806396c55175146103985780639ba24c9b146103ab5780639f2b03b6146103be576101fa565b80638a8411781461033a5780638b95e335146103425780638da5cb5b146103575780638de4ce701461035f576101fa565b80635c975abb11610192578063715018a611610161578063715018a6146103045780637b1442941461030c5780637ee0d6131461031f5780638456cb5914610332576101fa565b80635c975abb146102a957806362349285146102b157806364d6c99d146102d15780636922d7b6146102f1576101fa565b806325181bb0116101ce57806325181bb01461025a5780633f4ba83a1461026d578063547b26a31461027557806358d3232f14610296576101fa565b80628c0715146101ff578063095ea7b31461021d578063158ef93e1461023d578063171060ec14610245575b600080fd5b610207610479565b60405161021491906143a6565b60405180910390f35b61023061022b366004613b46565b61047f565b6040516102149190613dc8565b6102306104ef565b610258610253366004613a31565b6104ff565b005b610258610268366004613ba5565b610560565b610258610800565b610288610283366004613a69565b610849565b6040516102149291906143af565b6102586102a4366004613b46565b610a85565b610230610ae4565b6102c46102bf366004613a69565b610aed565b60405161021491906142f3565b6102e46102df366004613a69565b610b39565b604051610214919061431e565b6102586102ff366004613a31565b610ba6565b610258610c07565b61025861031a366004613b71565b610c90565b61025861032d366004613ba5565b610e2b565b610258610f26565b610207610f6d565b61034a610f72565b6040516102149190613d7a565b61034a610f81565b61025861036d366004613a31565b610f90565b610385610380366004613a31565b610fc2565b60405161021497969594939291906143e0565b6102586103a6366004613a31565b611004565b6102586103b9366004613a69565b6112bf565b61034a6114dd565b6102586103d4366004613a69565b6114f1565b61034a611700565b6102586103ef366004613aa1565b61170f565b610207610402366004613ba5565b6119e6565b61041a610415366004613a69565b611a3a565b6040516102149594939291906143bd565b61034a611a74565b610258610441366004613a31565b611a83565b610258610454366004613aeb565b611b43565b61046c610467366004613a31565b611cfc565b6040516102149190614358565b61012c81565b6000610489611d6d565b6001600160a01b031661049a610f81565b6001600160a01b0316146104c95760405162461bcd60e51b81526004016104c0906141bc565b60405180910390fd5b6002546104e59061010090046001600160a01b03168484611d71565b5060015b92915050565b600554600160a01b900460ff1681565b610507611d6d565b6001600160a01b0316610518610f81565b6001600160a01b03161461053e5760405162461bcd60e51b81526004016104c0906141bc565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461058a5760405162461bcd60e51b81526004016104c090613e38565b610592610ae4565b156105af5760405162461bcd60e51b81526004016104c0906140a8565b6004805460405163099d7a2b60e11b815260009283926001600160a01b03169163133af456916105e191879101613d7a565b60206040518083038186803b1580156105f957600080fd5b505afa15801561060d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106319190613ce5565b90506000600460009054906101000a90046001600160a01b03166001600160a01b031663c006719f6040518163ffffffff1660e01b8152600401604080518083038186803b15801561068257600080fd5b505afa158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190613cfd565b50905060005b85811015610708576106fe6106f78888848181106106da57fe5b90506020020160208101906106ef9190613a31565b878686611e5f565b8590611ecd565b93506001016106c0565b506002546040516370a0823160e01b81526107989185916101009091046001600160a01b0316906370a0823190610743903090600401613d7a565b60206040518083038186803b15801561075b57600080fd5b505afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107939190613ce5565b611ef9565b6002549093506107b79061010090046001600160a01b03168585611f0f565b836001600160a01b03167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a846040516107f091906143a6565b60405180910390a2505050505050565b610808611d6d565b6001600160a01b0316610819610f81565b6001600160a01b03161461083f5760405162461bcd60e51b81526004016104c0906141bc565b610847611ff6565b565b6000806000846001600160a01b03166370a08231856040518263ffffffff1660e01b815260040161087a9190613d7a565b60206040518083038186803b15801561089257600080fd5b505afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca9190613ce5565b905060006109d6866001600160a01b031663d88c3f226040518163ffffffff1660e01b815260040160206040518083038186803b15801561090a57600080fd5b505afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109429190613ce5565b6109d0670de0b6b3a7640000896001600160a01b031663374c49b48a6040518263ffffffff1660e01b815260040161097a9190613d7a565b60206040518083038186803b15801561099257600080fd5b505afa1580156109a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ca9190613ce5565b90612064565b9061209e565b9050600082116109e7576000610a28565b6001600160a01b03808716600090815260076020908152604080832093891683529290522060010154610a289083906109d090670de0b6b3a7640000612064565b935060008111610a39576000610a7a565b6001600160a01b03808716600090815260076020908152604080832093891683529290522060020154610a7a9082906109d090670de0b6b3a7640000612064565b925050509250929050565b610a8d611d6d565b6001600160a01b0316610a9e610f81565b6001600160a01b031614610ac45760405162461bcd60e51b81526004016104c0906141bc565b600254610ae09061010090046001600160a01b03168383611f0f565b5050565b60025460ff1690565b610af5613992565b600080610b01856120d0565b91509150600080610b128787612514565b60408051608081018252968752602087019590955293850152505060608201529392505050565b610b416139ba565b506001600160a01b039182166000908152600760209081526040808320939094168252918252829020825160a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600490910154608082015290565b610bae611d6d565b6001600160a01b0316610bbf610f81565b6001600160a01b031614610be55760405162461bcd60e51b81526004016104c0906141bc565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b610c0f611d6d565b6001600160a01b0316610c20610f81565b6001600160a01b031614610c465760405162461bcd60e51b81526004016104c0906141bc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610c98611d6d565b6001600160a01b0316610ca9610f81565b6001600160a01b031614610ccf5760405162461bcd60e51b81526004016104c0906141bc565b6001600160a01b038316600090815260066020819052604090912090810154849190610cfc574260068201555b600081600601544211610d10576000610d20565b6006820154610d20904290612712565b90508015610dba57600282015415610d7157610d6b610d6083600201546109d0670de0b6b3a76400006109ca86886000015461206490919063ffffffff16565b600484015490611ecd565b60048301555b600382015415610dba57610db4610da983600301546109d0670de0b6b3a76400006109ca86886001015461206490919063ffffffff16565b600584015490611ecd565b60058301555b426006808401919091556001600160a01b03871660008181526020929092526040918290208781556001810187905591517f82fa95a256c435087b2f48e9a001e742ea207ae0e8e91e1e34e96a8f7b87995890610e1a90899089906143af565b60405180910390a250505050505050565b6003546001600160a01b03163314610e555760405162461bcd60e51b81526004016104c090613e38565b6001600160a01b038116610e7b5760405162461bcd60e51b81526004016104c09061404b565b60048054604051638497fab960e01b81526000926001600160a01b0390921691638497fab991610ead91869101613d7a565b60206040518083038186803b158015610ec557600080fd5b505afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190613ce5565b905080610f1457610f114262278d00611ecd565b90505b610f208484848461273a565b50505050565b610f2e611d6d565b6001600160a01b0316610f3f610f81565b6001600160a01b031614610f655760405162461bcd60e51b81526004016104c0906141bc565b61084761292b565b609681565b6005546001600160a01b031681565b6000546001600160a01b031690565b6001600160a01b038116610fb65760405162461bcd60e51b81526004016104c09061404b565b610fbf81612986565b50565b60066020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b600260015414156110275760405162461bcd60e51b81526004016104c0906142bc565b60026001556364b7a61042101561103d576112b8565b6004805460405163099d7a2b60e11b81526000926001600160a01b039092169163133af4569161106f91869101613d7a565b60206040518083038186803b15801561108757600080fd5b505afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf9190613ce5565b905080156110df5760405162461bcd60e51b81526004016104c090613f66565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663c006719f6040518163ffffffff1660e01b8152600401604080518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111669190613cfd565b5090506060600360009054906101000a90046001600160a01b03166001600160a01b031663375a7cba6040518163ffffffff1660e01b815260040160006040518083038186803b1580156111b957600080fd5b505afa1580156111cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111f59190810190613c1a565b905060005b81518110156112b357600082828151811061121157fe5b602002602001015190506112236139ba565b506001600160a01b038082166000908152600760209081526040808320938a16835292815290829020825160a08101845281548152600182015492810183905260028201549381019390935260038101546060840152600401546080830152156112935761129382888888612bef565b6040810151156112a9576112a982888888612d9e565b50506001016111fa565b505050505b5060018055565b600260015414156112e25760405162461bcd60e51b81526004016104c0906142bc565b60026001556003546001600160a01b031633146113115760405162461bcd60e51b81526004016104c090613e38565b6001600160a01b03821660009081526006602081905260409091209081015483919061133e574260068201555b600081600601544211611352576000611362565b6006820154611362904290612712565b905080156113e6576002820154156113a8576113a2610d6083600201546109d0670de0b6b3a76400006109ca86886000015461206490919063ffffffff16565b60048301555b6003820154156113e6576113e0610da983600301546109d0670de0b6b3a76400006109ca86886001015461206490919063ffffffff16565b60058301555b42600683018190556364b7a61011156113fe576114d2565b6001600160a01b0380861660009081526006602090815260408083206007835281842094891684529390915290206001810154156114875760006114538260030154846004015461271290919063ffffffff16565b905061148361147b670de0b6b3a76400006109d085600101548561206490919063ffffffff16565b835490611ecd565b8255505b60048201546003820155600061149d8888612f4d565b90506114c482600101546114be838660020154611ecd90919063ffffffff16565b90612712565b600290930192909255600101555b505060018055505050565b60025461010090046001600160a01b031681565b600260015414156115145760405162461bcd60e51b81526004016104c0906142bc565b60026001556003546001600160a01b031633146115435760405162461bcd60e51b81526004016104c090613e38565b6001600160a01b038216600090815260066020819052604090912090810154839190611570574260068201555b600081600601544211611584576000611594565b6006820154611594904290612712565b90508015611618576002820154156115da576115d4610d6083600201546109d0670de0b6b3a76400006109ca86886000015461206490919063ffffffff16565b60048301555b60038201541561161857611612610da983600301546109d0670de0b6b3a76400006109ca86886001015461206490919063ffffffff16565b60058301555b42600683018190556364b7a6101115611630576114d2565b6001600160a01b0380861660009081526006602090815260408083206007835281842094891684529390915290206002810154156116b15760006116858260040154846005015461271290919063ffffffff16565b90506116ad61147b670de0b6b3a76400006109d085600201548561206490919063ffffffff16565b8255505b6005820154600482015560006116c78888613171565b90506116e882600201546114be838660030154611ecd90919063ffffffff16565b60039093019290925560020155505060018055505050565b6004546001600160a01b031681565b600260015414156117325760405162461bcd60e51b81526004016104c0906142bc565b60026001556003546001600160a01b031633146117615760405162461bcd60e51b81526004016104c090613e38565b6001600160a01b03831660009081526006602081905260409091209081015484919061178e574260068201555b6000816006015442116117a25760006117b2565b60068201546117b2904290612712565b90508015611836576002820154156117f8576117f2610d6083600201546109d0670de0b6b3a76400006109ca86886000015461206490919063ffffffff16565b60048301555b60038201541561183657611830610da983600301546109d0670de0b6b3a76400006109ca86886001015461206490919063ffffffff16565b60058301555b42600683018190556364b7a610111561184e576119da565b836001600160a01b0316856001600160a01b031614156118805760405162461bcd60e51b81526004016104c090613dd3565b6001600160a01b038681166000908152600660209081526040808320600783528184208a8616855290925280832093881683529091206001830154919291156119145760006118e08360030154856004015461271290919063ffffffff16565b9050611910611908670de0b6b3a76400006109d086600101548561206490919063ffffffff16565b845490611ecd565b8355505b600483015460038301556001810154156119715760006119458260030154856004015461271290919063ffffffff16565b905061196d61147b670de0b6b3a76400006109d085600101548561206490919063ffffffff16565b8255505b6004830154600382015560006119878a8a612f4d565b905060006119958b8a612f4d565b90506119c883600101546114be86600101546114be856119c2888c60020154611ecd90919063ffffffff16565b90611ecd565b60029095019490945560019283015501555b50506001805550505050565b600080805b84811015611a3157611a27611a20878784818110611a0557fe5b9050602002016020810190611a1a9190613a31565b866133e4565b8390611ecd565b91506001016119eb565b50949350505050565b6007602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b6003546001600160a01b031681565b611a8b611d6d565b6001600160a01b0316611a9c610f81565b6001600160a01b031614611ac25760405162461bcd60e51b81526004016104c0906141bc565b6001600160a01b038116611ae85760405162461bcd60e51b81526004016104c090613ec3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611b4b611d6d565b6001600160a01b0316611b5c610f81565b6001600160a01b031614611b825760405162461bcd60e51b81526004016104c0906141bc565b600554600160a01b900460ff1615611bac5760405162461bcd60e51b81526004016104c0906140d2565b6001600160a01b038416611bd25760405162461bcd60e51b81526004016104c090613e7a565b6001600160a01b038316611bf85760405162461bcd60e51b81526004016104c0906141f1565b6001600160a01b038216611c1e5760405162461bcd60e51b81526004016104c090614270565b6001600160a01b038116611c445760405162461bcd60e51b81526004016104c0906140ff565b6004546001600160a01b031615611c6d5760405162461bcd60e51b81526004016104c090613f9b565b6003546001600160a01b031615611c965760405162461bcd60e51b81526004016104c09061423b565b60028054610100600160a81b0319166101006001600160a01b0396871602179055600380546001600160a01b03199081169486169490941790556004805484169285169290921790915560058054600160a01b9316919093161760ff60a01b1916179055565b611d046139e9565b506001600160a01b0316600090815260066020818152604092839020835160e081018552815481526001820154928101929092526002810154938201939093526003830154606082015260048301546080820152600583015460a082015291015460c082015290565b3390565b60006060846001600160a01b031663095ea7b38585604051602401611d97929190613d8e565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611dd09190613d41565b6000604051808303816000865af19150503d8060008114611e0d576040519150601f19603f3d011682016040523d82523d6000602084013e611e12565b606091505b5091509150818015611e3c575080511580611e3c575080806020019051810190611e3c9190613cc5565b611e585760405162461bcd60e51b81526004016104c090613f09565b5050505050565b6001600160a01b0380851660009081526007602090815260408083209387168352929052908120600181015415611e9c57611e9c86868686612bef565b600281015415611eb257611eb286868686612d9e565b8054611ebf908390611ecd565b600090915595945050505050565b600082820183811015611ef25760405162461bcd60e51b81526004016104c090613f2f565b9392505050565b6000818310611f085781611ef2565b5090919050565b60006060846001600160a01b031663a9059cbb8585604051602401611f35929190613d8e565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611f6e9190613d41565b6000604051808303816000865af19150503d8060008114611fab576040519150601f19603f3d011682016040523d82523d6000602084013e611fb0565b606091505b5091509150818015611fda575080511580611fda575080806020019051810190611fda9190613cc5565b611e585760405162461bcd60e51b81526004016104c090614195565b611ffe610ae4565b61201a5760405162461bcd60e51b81526004016104c090613e0a565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61204d611d6d565b60405161205a9190613d7a565b60405180910390a1565b600082612073575060006104e9565b8282028284828161208057fe5b0414611ef25760405162461bcd60e51b81526004016104c090614154565b60008082116120bf5760405162461bcd60e51b81526004016104c090614014565b8183816120c857fe5b049392505050565b60008060006120de8461362a565b60055460025460405163b95ed06f60e01b815292935060009261219a926001600160a01b039081169263b95ed06f926121239261010090920490911690600401613d7a565b60206040518083038186803b15801561213b57600080fd5b505afa15801561214f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121739190613ce5565b6001600160a01b0387166000908152600660205260409020546109ca906301e13380612064565b60055460405163fc57d4df60e01b81529192506000916122d8916ec097ce7bc90715b34b9f1000000000916109d0916001600160a01b03169063fc57d4df906121e7908c90600401613d7a565b60206040518083038186803b1580156121ff57600080fd5b505afa158015612213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122379190613ce5565b6109ca8a6001600160a01b0316633ba0b9a96040518163ffffffff1660e01b815260040160206040518083038186803b15801561227357600080fd5b505afa158015612287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ab9190613ce5565b6001600160a01b038c166000908152600660205260409020600201546109ca9060128b9003600a0a612064565b9050600081116122e95760006122f3565b6122f3828261209e565b60055460025460405163b95ed06f60e01b8152929750600094506123b193506001600160a01b039182169263b95ed06f926123379261010090041690600401613d7a565b60206040518083038186803b15801561234f57600080fd5b505afa158015612363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123879190613ce5565b6001600160a01b0387166000908152600660205260409020600101546109ca906301e13380612064565b60055460405163fc57d4df60e01b81529192506000916124ef916ec097ce7bc90715b34b9f1000000000916109d0916001600160a01b03169063fc57d4df906123fe908c90600401613d7a565b60206040518083038186803b15801561241657600080fd5b505afa15801561242a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244e9190613ce5565b6109ca8a6001600160a01b031663d88c3f226040518163ffffffff1660e01b815260040160206040518083038186803b15801561248a57600080fd5b505afa15801561249e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c29190613ce5565b6001600160a01b038c166000908152600660205260409020600301546109ca9060128b9003600a0a612064565b90506000811161250057600061250a565b61250a828261209e565b9350505050915091565b6000806001600160a01b0383166125305750600090508061270b565b60008061253c866120d0565b915091506000866001600160a01b03166370a08231876040518263ffffffff1660e01b815260040161256e9190613d7a565b60206040518083038186803b15801561258657600080fd5b505afa15801561259a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125be9190613ce5565b9050600081116125cf576000612609565b6001600160a01b038088166000908152600760209081526040808320938a16835292905220600101546126099082906109d0908690612064565b945060006126b9886001600160a01b031663d88c3f226040518163ffffffff1660e01b815260040160206040518083038186803b15801561264957600080fd5b505afa15801561265d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126819190613ce5565b6109d0670de0b6b3a76400008b6001600160a01b031663374c49b48c6040518263ffffffff1660e01b815260040161097a9190613d7a565b9050600081116126ca576000612704565b6001600160a01b038089166000908152600760209081526040808320938b16835292905220600201546127049082906109d0908690612064565b9450505050505b9250929050565b6000828211156127345760405162461bcd60e51b81526004016104c090613fdd565b50900390565b6004805460405163099d7a2b60e11b815260009283926001600160a01b03169163133af4569161276c91889101613d7a565b60206040518083038186803b15801561278457600080fd5b505afa158015612798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bc9190613ce5565b90506000600460009054906101000a90046001600160a01b03166001600160a01b031663c006719f6040518163ffffffff1660e01b8152600401604080518083038186803b15801561280d57600080fd5b505afa158015612821573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128459190613cfd565b50905060005b8681101561288c576128826106f789898481811061286557fe5b905060200201602081019061287a9190613a31565b888686611e5f565b935060010161284b565b506004805460405163b51b1d2960e01b81526001600160a01b039091169163b51b1d29916128c091899188918a9101613da7565b600060405180830381600087803b1580156128da57600080fd5b505af11580156128ee573d6000803e3d6000fd5b50505050846001600160a01b03167f169f1815ebdea059aac3bb00ec9a9594c7a5ffcb64a17e8392b5d84909a1455684604051610e1a91906143a6565b612933610ae4565b156129505760405162461bcd60e51b81526004016104c0906140a8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861204d611d6d565b6364b7a61042101561299757610fbf565b6004805460405163099d7a2b60e11b81526000926001600160a01b039092169163133af456916129c991869101613d7a565b60206040518083038186803b1580156129e157600080fd5b505afa1580156129f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a199190613ce5565b90506000600460009054906101000a90046001600160a01b03166001600160a01b031663c006719f6040518163ffffffff1660e01b8152600401604080518083038186803b158015612a6a57600080fd5b505afa158015612a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa29190613cfd565b5090506060600360009054906101000a90046001600160a01b03166001600160a01b031663375a7cba6040518163ffffffff1660e01b815260040160006040518083038186803b158015612af557600080fd5b505afa158015612b09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b319190810190613c1a565b905060005b8151811015611e58576000828281518110612b4d57fe5b60200260200101519050612b5f6139ba565b506001600160a01b038082166000908152600760209081526040808320938a16835292815290829020825160a0810184528154815260018201549281018390526002820154938101939093526003810154606084015260040154608083015215612bcf57612bcf82888888612bef565b604081015115612be557612be582888888612d9e565b5050600101612b36565b6001600160a01b038416600090815260066020819052604090912090810154859190612c1c574260068201555b600081600601544211612c30576000612c40565b6006820154612c40904290612712565b90508015612cc457600282015415612c8657612c80610d6083600201546109d0670de0b6b3a76400006109ca86886000015461206490919063ffffffff16565b60048301555b600382015415612cc457612cbe610da983600301546109d0670de0b6b3a76400006109ca86886001015461206490919063ffffffff16565b60058301555b426006808401919091556001600160a01b0380891660009081526020928352604080822060078552818320938b1683529290935291909120600181015415612d4f576000612d238260030154846004015461271290919063ffffffff16565b9050612d4b61147b670de0b6b3a76400006109d085600101548561206490919063ffffffff16565b8255505b600482015460038201556000612d678a8a8a8a613734565b9050612d8882600101546114be838660020154611ecd90919063ffffffff16565b6002909301929092556001015550505050505050565b6001600160a01b038416600090815260066020819052604090912090810154859190612dcb574260068201555b600081600601544211612ddf576000612def565b6006820154612def904290612712565b90508015612e7357600282015415612e3557612e2f610d6083600201546109d0670de0b6b3a76400006109ca86886000015461206490919063ffffffff16565b60048301555b600382015415612e7357612e6d610da983600301546109d0670de0b6b3a76400006109ca86886001015461206490919063ffffffff16565b60058301555b426006808401919091556001600160a01b0380891660009081526020928352604080822060078552818320938b1683529290935291909120600281015415612efe576000612ed28260040154846005015461271290919063ffffffff16565b9050612efa61147b670de0b6b3a76400006109d085600201548561206490919063ffffffff16565b8255505b600582015460048201556000612f168a8a8a8a61383c565b9050612f3782600201546114be838660030154611ecd90919063ffffffff16565b6003909301929092556002015550505050505050565b600080836001600160a01b03166370a08231846040518263ffffffff1660e01b8152600401612f7c9190613d7a565b60206040518083038186803b158015612f9457600080fd5b505afa158015612fa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fcc9190613ce5565b6004805460405163099d7a2b60e11b815292935083926000926001600160a01b039092169163133af4569161300391899101613d7a565b60206040518083038186803b15801561301b57600080fd5b505afa15801561302f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130539190613ce5565b90506000600460009054906101000a90046001600160a01b03166001600160a01b031663c006719f6040518163ffffffff1660e01b8152600401604080518083038186803b1580156130a457600080fd5b505afa1580156130b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130dc9190613cfd565b5090506000821180156130ef5750600081115b1561315157600061314160646109d060966109ca866109d0898f6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561099257600080fd5b905061314d8482611ecd565b9350505b6131668361079360646109d08861012c612064565b979650505050505050565b600080836001600160a01b031663d88c3f226040518163ffffffff1660e01b815260040160206040518083038186803b1580156131ad57600080fd5b505afa1580156131c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e59190613ce5565b90506000613225826109d0670de0b6b3a7640000886001600160a01b031663374c49b4896040518263ffffffff1660e01b815260040161097a9190613d7a565b6004805460405163099d7a2b60e11b815292935083926000926001600160a01b039092169163133af4569161325c918a9101613d7a565b60206040518083038186803b15801561327457600080fd5b505afa158015613288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ac9190613ce5565b90506000600460009054906101000a90046001600160a01b03166001600160a01b031663c006719f6040518163ffffffff1660e01b8152600401604080518083038186803b1580156132fd57600080fd5b505afa158015613311573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133359190613cfd565b5090506000821180156133485750600081115b156133c3576000613398866109d0670de0b6b3a76400008c6001600160a01b0316638285ef406040518163ffffffff1660e01b815260040160206040518083038186803b15801561099257600080fd5b905060006133b260646109d060966109ca8783888b612064565b90506133be8582611ecd565b945050505b6133d88361079360646109d08861012c612064565b98975050505050505050565b60006133ee6139e9565b506001600160a01b038316600090815260066020818152604092839020835160e081018552815481526001820154928101929092526002810154938201939093526003830154606082015260048301546080820152600583015460a082015291015460c082015261345d6139ba565b506001600160a01b0380851660009081526007602090815260408083209387168352928152828220835160a080820186528254808352600184015494830194909452600283015495820195909552600382015460608201526004909101546080808301919091528501519385015160c086015191949293909142116134e35760006134f3565b60c08601516134f3904290612712565b90506000811180613508575084606001518314155b80613517575084608001518214155b1561361d576040860151156135a05761355b61355487604001516109d0670de0b6b3a76400006109ca868c6000015161206490919063ffffffff16565b8490611ecd565b92506000613590670de0b6b3a76400006109d061358589606001518861271290919063ffffffff16565b60208a015190612064565b905061359c8582611ecd565b9450505b60608601511561361d576135d8611a2087606001516109d0670de0b6b3a76400006109ca868c6020015161206490919063ffffffff16565b9150600061360d670de0b6b3a76400006109d061360289608001518761271290919063ffffffff16565b60408a015190612064565b90506136198582611ecd565b9450505b5091979650505050505050565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561366657600080fd5b505afa15801561367a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369e9190613a4d565b90506001600160a01b0381166136b7576012915061372e565b806001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156136f057600080fd5b505afa158015613704573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137289190613d20565b60ff1691505b50919050565b600080856001600160a01b03166370a08231866040518263ffffffff1660e01b81526004016137639190613d7a565b60206040518083038186803b15801561377b57600080fd5b505afa15801561378f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b39190613ce5565b90508084158015906137c55750600084115b1561382757600061381760646109d060966109ca896109d08c8f6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561099257600080fd5b90506138238282611ecd565b9150505b6131668161079360646109d08661012c612064565b600080856001600160a01b031663d88c3f226040518163ffffffff1660e01b815260040160206040518083038186803b15801561387857600080fd5b505afa15801561388c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b09190613ce5565b905060006138f0826109d0670de0b6b3a76400008a6001600160a01b031663374c49b48b6040518263ffffffff1660e01b815260040161097a9190613d7a565b90508085158015906139025750600085115b1561397d576000613952846109d0670de0b6b3a76400008c6001600160a01b0316638285ef406040518163ffffffff1660e01b815260040160206040518083038186803b15801561099257600080fd5b9050600061396c60646109d060966109ca8b83888f612064565b90506139788382611ecd565b925050505b6133d88161079360646109d08661012c612064565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80516104e981614437565b600060208284031215613a42578081fd5b8135611ef281614437565b600060208284031215613a5e578081fd5b8151611ef281614437565b60008060408385031215613a7b578081fd5b8235613a8681614437565b91506020830135613a9681614437565b809150509250929050565b600080600060608486031215613ab5578081fd5b8335613ac081614437565b92506020840135613ad081614437565b91506040840135613ae081614437565b809150509250925092565b60008060008060808587031215613b00578081fd5b8435613b0b81614437565b93506020850135613b1b81614437565b92506040850135613b2b81614437565b91506060850135613b3b81614437565b939692955090935050565b60008060408385031215613b58578182fd5b8235613b6381614437565b946020939093013593505050565b600080600060608486031215613b85578283fd5b8335613b9081614437565b95602085013595506040909401359392505050565b600080600060408486031215613bb9578283fd5b833567ffffffffffffffff80821115613bd0578485fd5b818601915086601f830112613be3578485fd5b813581811115613bf1578586fd5b8760208083028501011115613c04578586fd5b60209283019550935050840135613ae081614437565b60006020808385031215613c2c578182fd5b825167ffffffffffffffff80821115613c43578384fd5b818501915085601f830112613c56578384fd5b815181811115613c64578485fd5b8381029150613c74848301614410565b8181528481019084860184860187018a1015613c8e578788fd5b8795505b83861015613cb857613ca48a82613a26565b835260019590950194918601918601613c92565b5098975050505050505050565b600060208284031215613cd6578081fd5b81518015158114611ef2578182fd5b600060208284031215613cf6578081fd5b5051919050565b60008060408385031215613d0f578182fd5b505080516020909101519092909150565b600060208284031215613d31578081fd5b815160ff81168114611ef2578182fd5b60008251815b81811015613d615760208186018101518583015201613d47565b81811115613d6f5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b901515815260200190565b6020808252601e908201527f514469737472696275746f723a20696e76616c6964207472616e736665720000604082015260600190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526022908201527f4c41424469737472696275746f723a2063616c6c6572206973206e6f7420436f604082015261726560f01b606082015260800190565b60208082526029908201527f4c41424469737472696275746f723a206c616220616464726573732063616e2760408201526874206265207a65726f60b81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600c908201526b2173616665417070726f766560a01b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f4c41424469737472696275746f723a206b69636b206e6f7420616c6c6f776564604082015260600190565b60208082526022908201527f4c41424469737472696275746f723a206c6f636b657220616c72656164792073604082015261195d60f21b606082015260800190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b6020808252603c908201527f4c41424469737472696275746f723a20636f6d706f756e643a2055736572206160408201527f63636f756e742063616e2774206265207a65726f206164647265737300000000606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b602080825260139082015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604082015260600190565b60208082526035908201527f4c41424469737472696275746f723a20707269636543616c63756c61746f7220604082015274616464726573732063616e2774206265207a65726f60581b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252600d908201526c10b9b0b332aa3930b739b332b960991b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602a908201527f4c41424469737472696275746f723a20636f726520616464726573732063616e6040820152692774206265207a65726f60b01b606082015260800190565b6020808252818101527f4c41424469737472696275746f723a20636f726520616c726561647920736574604082015260600190565b6020808252602c908201527f4c41424469737472696275746f723a206c6f636b65722061646472657373206360408201526b616e2774206265207a65726f60a01b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b8151815260208083015190820152604080830151908201526060918201519181019190915260800190565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b90815260200190565b918252602082015260400190565b948552602085019390935260408401919091526060830152608082015260a00190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b60405181810167ffffffffffffffff8111828210171561442f57600080fd5b604052919050565b6001600160a01b0381168114610fbf57600080fdfea2646970667358221220c6adcf9fd58f8b068eaa57e88eb6d883da04159da2bd450636ce6dcb8ce3442e64736f6c634300060c0033" + }, + { + "address": "0x8ce9892329e04a86ea25056ba77bb9aa60817045", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061035d5760003560e01c80637f1e06be116101d3578063bd6d894d11610104578063f2b3abbd116100a2578063f851a4401161007c578063f851a44014610732578063f8f9da281461074a578063fca7820b14610752578063fe9c44ae1461076557600080fd5b8063f2b3abbd146106f9578063f3fdb15a1461070c578063f5e3c4621461071f57600080fd5b8063c5ebeaec116100de578063c5ebeaec14610692578063db006a75146106a5578063dd62ed3e146106b8578063e9c714f2146106f157600080fd5b8063bd6d894d14610644578063c37f68e21461064c578063c39b127f1461067f57600080fd5b8063a6afed9511610171578063ae9d70b01161014b578063ae9d70b014610603578063b2a02ff11461060b578063b57a4a721461061e578063b71d1a0c1461063157600080fd5b8063a6afed95146105df578063a9059cbb146105e7578063aa5af0fd146105fa57600080fd5b806395d89b41116101ad57806395d89b411461059e57806395dd9193146105a657806399d8c1b4146105b9578063a0712d68146105cc57600080fd5b80637f1e06be1461056f578063852a12e3146105825780638f840ddd1461059557600080fd5b8063313ce567116102ad578063601a0bf11161024b5780636c540baf116102255780636c540baf146105225780636f307dc31461052b57806370a082311461053e57806373acee981461056757600080fd5b8063601a0bf1146104f95780636752e7021461050c57806369ab32501461051a57600080fd5b80633e941010116102875780633e941010146104b75780634576b5db146104ca57806347bd3718146104dd5780635fe3b567146104e657600080fd5b8063313ce5671461047d5780633af9e6691461049c5780633b1d21a2146104af57600080fd5b806318160ddd1161031a5780631be19560116102f45780631be195601461043157806323b872dd146104445780632608f81814610457578063267822471461046a57600080fd5b806318160ddd1461040b578063182df0f5146104145780631a31d4651461041c57600080fd5b806306fdde0314610362578063095ea7b3146103805780630d983cc6146103a35780630e752702146103ce578063173b9904146103ef57806317bfdfbc146103f8575b600080fd5b61036a61076d565b60405161037791906137de565b60405180910390f35b61039361038e36600461384b565b6107fb565b6040519015158152602001610377565b6011546103b6906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b6103e16103dc366004613877565b610869565b604051908152602001610377565b6103e160085481565b6103e1610406366004613890565b61087c565b6103e1600d5481565b6103e16108e4565b61042f61042a366004613966565b6108f3565b005b61042f61043f366004613890565b610988565b610393610452366004613a1c565b610b54565b6103e161046536600461384b565b610bb0565b6004546103b6906001600160a01b031681565b60035461048a9060ff1681565b60405160ff9091168152602001610377565b6103e16104aa366004613890565b610bc5565b6103e1610c0b565b6103e16104c5366004613877565b610c15565b6103e16104d8366004613890565b610c26565b6103e1600b5481565b6005546103b6906001600160a01b031681565b6103e1610507366004613877565b610d78565b6103e1666379da05b6000081565b6103e1600081565b6103e160095481565b6012546103b6906001600160a01b031681565b6103e161054c366004613890565b6001600160a01b03166000908152600e602052604090205490565b6103e1610dbf565b61042f61057d366004613890565b610e15565b6103e1610590366004613877565b610eec565b6103e1600c5481565b61036a610ef7565b6103e16105b4366004613890565b610f04565b61042f6105c7366004613a5d565b610f0f565b6103e16105da366004613877565b611172565b6103e161117d565b6103936105f536600461384b565b61136a565b6103e1600a5481565b6103e16113c5565b6103e1610619366004613a1c565b61145d565b61042f61062c366004613aff565b6114b8565b6103e161063f366004613890565b61160f565b6103e161169c565b61065f61065a366004613890565b6116f8565b604080519485526020850193909352918301526060820152608001610377565b6103e161068d366004613890565b611739565b6103e16106a0366004613877565b6117c6565b6103e16106b3366004613877565b6117d1565b6103e16106c6366004613bca565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6103e16117dc565b6103e1610707366004613890565b6118e3565b6006546103b6906001600160a01b031681565b6103e161072d366004613c03565b6118f7565b6003546103b69061010090046001600160a01b031681565b6103e161190e565b6103e1610760366004613877565b611961565b610393600181565b6001805461077a90613c45565b80601f01602080910402602001604051908101604052809291908181526020018280546107a690613c45565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108579087815260200190565b60405180910390a35060019392505050565b6000610874826119a8565b506000919050565b6000805462010000900460ff166108ae5760405162461bcd60e51b81526004016108a590613c80565b60405180910390fd5b6000805462ff0000191690556108c261117d565b506108cc82610f04565b90506000805462ff0000191662010000179055919050565b60006108ee611a05565b905090565b610901868686868686610f0f565b601280546001600160a01b0319166001600160a01b038916908117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190613ca4565b5050505050505050565b60035461010090046001600160a01b031633146109ff5760405162461bcd60e51b815260206004820152602f60248201527f4345726332303a3a7377656570546f6b656e3a206f6e6c792061646d696e206360448201526e616e20737765657020746f6b656e7360881b60648201526084016108a5565b6012546001600160a01b0382811691161415610a785760405162461bcd60e51b815260206004820152603260248201527f4345726332303a3a7377656570546f6b656e3a2063616e206e6f74207377656560448201527138103ab73232b9363cb4b733903a37b5b2b760711b60648201526084016108a5565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae39190613ca4565b60035460405163a9059cbb60e01b81526001600160a01b03610100909204821660048201526024810183905291925083169063a9059cbb90604401600060405180830381600087803b158015610b3857600080fd5b505af1158015610b4c573d6000803e3d6000fd5b505050505050565b6000805462010000900460ff16610b7d5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019168155610b9533868686611a6f565b1490506000805462ff00001916620100001790559392505050565b6000610bbc8383611c9d565b50600092915050565b6000806040518060200160405280610bdb61169c565b90526001600160a01b0384166000908152600e6020526040902054909150610c04908290611cfb565b9392505050565b60006108ee611d1b565b6000610c2082611d90565b92915050565b60035460009061010090046001600160a01b03163314610c595760405163d219dc1f60e01b815260040160405180910390fd5b60055460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd29160048083019260209291908290030181865afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190613cbd565b610d135760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016108a5565b600580546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d91015b60405180910390a150600092915050565b6000805462010000900460ff16610da15760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055610db561117d565b506108cc82611df3565b6000805462010000900460ff16610de85760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055610dfc61117d565b5050600b546000805462ff000019166201000017905590565b60035461010090046001600160a01b03163314610e8a5760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652061646d696e206d6179207365742074686520636f6d702d60448201526c6c696b652064656c656761746560981b60648201526084016108a5565b6012546040516317066a5760e21b81526001600160a01b03838116600483015290911690635c19a95c90602401600060405180830381600087803b158015610ed157600080fd5b505af1158015610ee5573d6000803e3d6000fd5b5050505050565b600061087482611f15565b6002805461077a90613c45565b6000610c2082611f72565b60035461010090046001600160a01b03163314610f7a5760405162461bcd60e51b8152602060048201526024808201527f6f6e6c792061646d696e206d617920696e697469616c697a6520746865206d616044820152631c9ad95d60e21b60648201526084016108a5565b600954158015610f8a5750600a54155b610fe25760405162461bcd60e51b815260206004820152602360248201527f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f6044820152626e636560e81b60648201526084016108a5565b60078490558361104d5760405162461bcd60e51b815260206004820152603060248201527f696e697469616c2065786368616e67652072617465206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b60648201526084016108a5565b600061105887610c26565b905080156110a85760405162461bcd60e51b815260206004820152601a60248201527f73657474696e6720636f6d7074726f6c6c6572206661696c656400000000000060448201526064016108a5565b42600955670de0b6b3a7640000600a556110c186611fbc565b9050801561111c5760405162461bcd60e51b815260206004820152602260248201527f73657474696e6720696e7465726573742072617465206d6f64656c206661696c604482015261195960f21b60648201526084016108a5565b835161112f90600190602087019061374e565b50825161114390600290602086019061374e565b50506003805460ff90921660ff1990921691909117905550506000805462ff0000191662010000179055505050565b600061087482612131565b6009546000904290808214156111965760009250505090565b60006111a0611d1b565b600b54600c54600a546006546040516315f2405360e01b81526004810186905260248101859052604481018490529495509293919290916000916001600160a01b0316906315f2405390606401602060405180830381865afa15801561120a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122e9190613ca4565b9050645d21dba0008111156112855760405162461bcd60e51b815260206004820152601c60248201527f626f72726f772072617465206973206162737572646c7920686967680000000060448201526064016108a5565b60006112918789613cf5565b905060006112ad60405180602001604052808581525083612178565b905060006112bb8288611cfb565b905060006112c98883613d0c565b905060006112e86040518060200160405280600854815250848a6121a9565b905060006112f785898a6121a9565b60098e9055600a819055600b849055600c839055604080518d815260208101879052908101829052606081018590529091507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc049060800160405180910390a160009d505050505050505050505050505090565b6000805462010000900460ff166113935760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191681556113ab33808686611a6f565b1490506000805462ff000019166201000017905592915050565b6006546000906001600160a01b031663b81688166113e1611d1b565b600b54600c546008546040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015611439573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee9190613ca4565b6000805462010000900460ff166114865760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561149e338585856121ca565b50600080805462ff00001916620100001790559392505050565b600054610100900460ff16158080156114d85750600054600160ff909116105b806114f25750303b1580156114f2575060005460ff166001145b6115555760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108a5565b6000805460ff191660011790558015611578576000805461ff0019166101001790555b60038054610100600160a81b031916336101000217905561159e898989898989896108f3565b60038054610100600160a81b0319166101006001600160a01b038516021790558015611604576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60035460009061010090046001600160a01b0316331461164257604051635cb56c2b60e01b815260040160405180910390fd5b600480546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99101610d67565b6000805462010000900460ff166116c55760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191690556116d961117d565b506116e26108e4565b90506000805462ff000019166201000017905590565b6001600160a01b0381166000908152600e6020526040812054819081908190819061172287611f72565b61172a611a05565b93509350935093509193509193565b60035460009061010090046001600160a01b0316331461176c57604051632f7aaee760e01b815260040160405180910390fd5b601180546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fe3f5272426aa3e70e583474d1155b19c7d9a5394147c40191dfaf32b792bc9789101610d67565b600061087482612443565b60006108748261248a565b6004546000906001600160a01b0316331415806117f7575033155b1561181557604051631ba24f2960e21b815260040160405180910390fd5b60038054600480546001600160a01b03808216610100818102610100600160a81b0319871617968790556001600160a01b031990931690935560408051948390048216808652929095041660208401529290917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600454604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160009250505090565b60006118ed61117d565b50610c2082611fbc565b60006119048484846124d3565b5060009392505050565b6006546000906001600160a01b03166315f2405361192a611d1b565b600b54600c546040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260640161141c565b6000805462010000900460ff1661198a5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561199e61117d565b506108cc826125bd565b60005462010000900460ff166119d05760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191690556119e461117d565b506119f0333383612679565b50506000805462ff0000191662010000179055565b600d5460009080611a1857505060075490565b6000611a22611d1b565b90506000600c54600b5483611a379190613d0c565b611a419190613cf5565b9050600083611a58670de0b6b3a764000084613d24565b611a629190613d43565b95945050505050565b5090565b6005546040516317b9b84b60e31b81523060048201526001600160a01b038581166024830152848116604483015260648201849052600092839291169063bdcdc258906084016020604051808303816000875af1158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190613ca4565b90508015611b1c5760405163089d427760e11b8152600481018290526024016108a5565b836001600160a01b0316856001600160a01b03161415611b4f57604051638cd22d1960e01b815260040160405180910390fd5b6000856001600160a01b0316876001600160a01b03161415611b745750600019611b9c565b506001600160a01b038086166000908152600f60209081526040808320938a16835292905220545b6000611ba88583613cf5565b6001600160a01b0388166000908152600e602052604081205491925090611bd0908790613cf5565b6001600160a01b0388166000908152600e602052604081205491925090611bf8908890613d0c565b6001600160a01b03808b166000908152600e6020526040808220869055918b1681522081905590506000198414611c52576001600160a01b03808a166000908152600f60209081526040808320938e168352929052208390555b876001600160a01b0316896001600160a01b0316600080516020613dcf83398151915289604051611c8591815260200190565b60405180910390a35060009998505050505050505050565b60005462010000900460ff16611cc55760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055611cd961117d565b50611ce5338383612679565b50506000805462ff000019166201000017905550565b600080611d088484612178565b9050611d1381612822565b949350505050565b6012546040516370a0823160e01b81523060048201526000916001600160a01b03169081906370a0823190602401602060405180830381865afa158015611d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8a9190613ca4565b91505090565b6000805462010000900460ff16611db95760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055611dcd61117d565b50611dd78261283a565b5050600090506000805462ff0000191662010000179055919050565b600354600090819061010090046001600160a01b03163314801590611e2357506011546001600160a01b03163314155b15611e4157604051630f7e5e6d60e41b815260040160405180910390fd5b4260095414611e6357604051630dff50cb60e41b815260040160405180910390fd5b82611e6c611d1b565b1015611e8b57604051633345e99960e01b815260040160405180910390fd5b600c54831115611eae576040516378d2980560e11b815260040160405180910390fd5b82600c54611ebc9190613cf5565b600c8190559050611ecd33846128ce565b7f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e600360019054906101000a90046001600160a01b03168483604051610d6793929190613d65565b60005462010000900460ff16611f3d5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055611f5161117d565b50611f5e336000836129b8565b506000805462ff0000191662010000179055565b6001600160a01b03811660009081526010602052604081208054611f995750600092915050565b600a548154600091611faa91613d24565b9050816001015481611d139190613d43565b600354600090819061010090046001600160a01b03163314611ff15760405163407fded560e01b815260040160405180910390fd5b426009541461201357604051630be2a5cb60e11b815260040160405180910390fd5b600660009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208d9190613cbd565b6120d95760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016108a5565b600680546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f9269101610d67565b60005462010000900460ff166121595760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561216d61117d565b50611f5e3382612c95565b60408051602081019091526000815260405180602001604052806121a0856000015185612ebe565b90529392505050565b6000806121b68585612178565b9050611a626121c482612822565b84612eca565b60055460405163d02f735160e01b81523060048201526001600160a01b0386811660248301528581166044830152848116606483015260848201849052600092169063d02f73519060a4016020604051808303816000875af1158015612234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122589190613ca4565b9050801561227c576040516363e00e3360e11b8152600481018290526024016108a5565b836001600160a01b0316836001600160a01b031614156122af57604051633a94626760e11b815260040160405180910390fd5b60006122d0836040518060200160405280666379da05b60000815250612ed6565b905060006122de8285613cf5565b9050600060405180602001604052806122f5611a05565b9052905060006123058285611cfb565b9050600081600c546123179190613d0c565b600c819055600d5490915061232d908690613cf5565b600d556001600160a01b0388166000908152600e6020526040902054612354908890613cf5565b6001600160a01b03808a166000908152600e602052604080822093909355908b1681522054612384908590613d0c565b6001600160a01b03808b166000818152600e602052604090819020939093559151908a1690600080516020613dcf833981519152906123c69088815260200190565b60405180910390a360405185815230906001600160a01b038a1690600080516020613dcf8339815191529060200160405180910390a37fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc530838360405161242f93929190613d65565b60405180910390a150505050505050505050565b60005462010000900460ff1661246b5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561247f61117d565b50611f5e3382612ef9565b60005462010000900460ff166124b25760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191690556124c661117d565b50611f5e338260006129b8565b60005462010000900460ff166124fb5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561250f61117d565b506000816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612552573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125769190613ca4565b9050801561259a57604051633eea49b760e11b8152600481018290526024016108a5565b6125a633858585613098565b50506000805462ff00001916620100001790555050565b60035460009061010090046001600160a01b031633146125f057604051631205b57b60e11b815260040160405180910390fd5b426009541461261257604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a764000082111561263b5760405163717220f360e11b815260040160405180910390fd5b600880549083905560408051828152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609101610d67565b600554604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283929116906324008a62906084016020604051808303816000875af11580156126de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127029190613ca4565b9050801561272657604051638c81362d60e01b8152600481018290526024016108a5565b42600954146127485760405163c9021e2f60e01b815260040160405180910390fd5b600061275385611f72565b9050600060001985146127665784612768565b815b905060006127768883613552565b905060006127848285613cf5565b9050600082600b546127969190613cf5565b6001600160a01b038a8116600081815260106020908152604091829020878155600a54600190910155600b8590558151938f168452830191909152810185905260608101849052608081018290529091507f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060a00160405180910390a1509098975050505050505050565b8051600090610c2090670de0b6b3a764000090613d43565b60008080804260095414612864576040516338acf79960e01b8152600481018290526024016108a5565b61286e3386613552565b905080600c5461287e9190613d0c565b915081600c819055507fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc53382846040516128ba93929190613d65565b60405180910390a160009590945092505050565b60125460405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905290911690819063a9059cbb90604401600060405180830381600087803b15801561291e57600080fd5b505af1158015612932573d6000803e3d6000fd5b5050505060003d6000811461294e576020811461295857600080fd5b6000199150612964565b60206000803e60005191505b50806129b25760405162461bcd60e51b815260206004820152601960248201527f544f4b454e5f5452414e534645525f4f55545f4641494c45440000000000000060448201526064016108a5565b50505050565b8115806129c3575080155b612a2c5760405162461bcd60e51b815260206004820152603460248201527f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416044820152736d6f756e74496e206d757374206265207a65726f60601b60648201526084016108a5565b60006040518060200160405280612a41611a05565b905290506000808415612a6257849150612a5b8386611cfb565b9050612a72565b612a6c8484613729565b91508390505b60055460405163eabe7d9160e01b81526000916001600160a01b03169063eabe7d9190612aa79030908b908890600401613d86565b6020604051808303816000875af1158015612ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aea9190613ca4565b90508015612b0e5760405163480f424760e01b8152600481018290526024016108a5565b4260095414612b30576040516397b5cfcd60e01b815260040160405180910390fd5b81612b39611d1b565b1015612b58576040516391240a1b60e01b815260040160405180910390fd5b82600d54612b669190613cf5565b600d556001600160a01b0387166000908152600e6020526040902054612b8d908490613cf5565b6001600160a01b0388166000908152600e6020526040902055612bb087836128ce565b60405183815230906001600160a01b03891690600080516020613dcf8339815191529060200160405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929878385604051612c1193929190613d65565b60405180910390a16005546040516351dff98960e01b81523060048201526001600160a01b0389811660248301526044820185905260648201869052909116906351dff98990608401600060405180830381600087803b158015612c7457600080fd5b505af1158015612c88573d6000803e3d6000fd5b5050505050505050505050565b600554604051634ef4c3e160e01b81526000916001600160a01b031690634ef4c3e190612cca90309087908790600401613d86565b6020604051808303816000875af1158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d9190613ca4565b90508015612d31576040516349abd4fd60e01b8152600481018290526024016108a5565b4260095414612d53576040516338d8859760e01b815260040160405180910390fd5b60006040518060200160405280612d68611a05565b905290506000612d788585613552565b90506000612d868284613729565b905080600d54612d969190613d0c565b600d556001600160a01b0386166000908152600e6020526040902054612dbd908290613d0c565b6001600160a01b0387166000908152600e60205260409081902091909155517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f90612e0d90889085908590613d65565b60405180910390a16040518181526001600160a01b038716903090600080516020613dcf8339815191529060200160405180910390a36005546040516341c728b960e01b81523060048201526001600160a01b0388811660248301526044820185905260648201849052909116906341c728b990608401600060405180830381600087803b158015612e9e57600080fd5b505af1158015612eb2573d6000803e3d6000fd5b50505050505050505050565b6000610c048284613d24565b6000610c048284613d0c565b6000670de0b6b3a7640000612eef848460000151612ebe565b610c049190613d43565b60055460405163368f515360e21b81526000916001600160a01b03169063da3d454c90612f2e90309087908790600401613d86565b6020604051808303816000875af1158015612f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f719190613ca4565b90508015612f955760405163918db40f60e01b8152600481018290526024016108a5565b4260095414612fb757604051630e8d8c6160e21b815260040160405180910390fd5b81612fc0611d1b565b1015612fdf576040516348c2588160e01b815260040160405180910390fd5b6000612fea84611f72565b90506000612ff88483613d0c565b9050600084600b5461300a9190613d0c565b6001600160a01b0387166000908152601060205260409020838155600a54600190910155600b819055905061303f86866128ce565b604080516001600160a01b038816815260208101879052908101839052606081018290527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a1505050505050565b600554604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000921690635fc7e71e9060a4016020604051808303816000875af1158015613102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131269190613ca4565b9050801561314a57604051630a14d17960e11b8152600481018290526024016108a5565b426009541461316c576040516380965b1b60e01b815260040160405180910390fd5b42826001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cf9190613ca4565b146131ed57604051631046f38d60e31b815260040160405180910390fd5b846001600160a01b0316846001600160a01b0316141561322057604051631bd1a62160e21b815260040160405180910390fd5b8261323e5760405163d29da7ef60e01b815260040160405180910390fd5b60001983141561326157604051635982c5bb60e11b815260040160405180910390fd5b600061326e868686612679565b60055460405163c488847b60e01b815291925060009182916001600160a01b03169063c488847b906132a890309089908890600401613d86565b6040805180830381865afa1580156132c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e89190613daa565b91509150600082146133585760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016108a5565b6040516370a0823160e01b81526001600160a01b0388811660048301528291908716906370a0823190602401602060405180830381865afa1580156133a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c59190613ca4565b10156134135760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016108a5565b6001600160a01b03851630141561343557613430308989846121ca565b6134ef565b60405163b2a02ff160e01b81526000906001600160a01b0387169063b2a02ff190613468908c908c908790600401613d86565b6020604051808303816000875af1158015613487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ab9190613ca4565b146134ef5760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b881cd95a5e9d5c994819985a5b195960621b60448201526064016108a5565b604080516001600160a01b038a811682528981166020830152818301869052871660608201526080810183905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a15050505050505050565b6012546040516370a0823160e01b81523060048201526000916001600160a01b0316908190839082906370a0823190602401602060405180830381865afa1580156135a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c59190613ca4565b6040516323b872dd60e01b81529091506001600160a01b038316906323b872dd906135f890899030908a90600401613d86565b600060405180830381600087803b15801561361257600080fd5b505af1158015613626573d6000803e3d6000fd5b5050505060003d60008114613642576020811461364c57600080fd5b6000199150613658565b60206000803e60005191505b50806136a65760405162461bcd60e51b815260206004820152601860248201527f544f4b454e5f5452414e534645525f494e5f4641494c4544000000000000000060448201526064016108a5565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156136ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137119190613ca4565b905061371d8382613cf5565b98975050505050505050565b6000610c0461374084670de0b6b3a7640000612ebe565b83516000610c048284613d43565b82805461375a90613c45565b90600052602060002090601f01602090048101928261377c57600085556137c2565b82601f1061379557805160ff19168380011785556137c2565b828001600101855582156137c2579182015b828111156137c25782518255916020019190600101906137a7565b50611a6b9291505b80821115611a6b57600081556001016137ca565b600060208083528351808285015260005b8181101561380b578581018301518582016040015282016137ef565b8181111561381d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461384857600080fd5b50565b6000806040838503121561385e57600080fd5b823561386981613833565b946020939093013593505050565b60006020828403121561388957600080fd5b5035919050565b6000602082840312156138a257600080fd5b8135610c0481613833565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126138d457600080fd5b813567ffffffffffffffff808211156138ef576138ef6138ad565b604051601f8301601f19908116603f01168101908282118183101715613917576139176138ad565b8160405283815286602085880101111561393057600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff8116811461396157600080fd5b919050565b600080600080600080600060e0888a03121561398157600080fd5b873561398c81613833565b9650602088013561399c81613833565b955060408801356139ac81613833565b945060608801359350608088013567ffffffffffffffff808211156139d057600080fd5b6139dc8b838c016138c3565b945060a08a01359150808211156139f257600080fd5b506139ff8a828b016138c3565b925050613a0e60c08901613950565b905092959891949750929550565b600080600060608486031215613a3157600080fd5b8335613a3c81613833565b92506020840135613a4c81613833565b929592945050506040919091013590565b60008060008060008060c08789031215613a7657600080fd5b8635613a8181613833565b95506020870135613a9181613833565b945060408701359350606087013567ffffffffffffffff80821115613ab557600080fd5b613ac18a838b016138c3565b94506080890135915080821115613ad757600080fd5b50613ae489828a016138c3565b925050613af360a08801613950565b90509295509295509295565b600080600080600080600080610100898b031215613b1c57600080fd5b8835613b2781613833565b97506020890135613b3781613833565b96506040890135613b4781613833565b955060608901359450608089013567ffffffffffffffff80821115613b6b57600080fd5b613b778c838d016138c3565b955060a08b0135915080821115613b8d57600080fd5b50613b9a8b828c016138c3565b935050613ba960c08a01613950565b915060e0890135613bb981613833565b809150509295985092959890939650565b60008060408385031215613bdd57600080fd5b8235613be881613833565b91506020830135613bf881613833565b809150509250929050565b600080600060608486031215613c1857600080fd5b8335613c2381613833565b9250602084013591506040840135613c3a81613833565b809150509250925092565b600181811c90821680613c5957607f821691505b60208210811415613c7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600a90820152691c994b595b9d195c995960b21b604082015260600190565b600060208284031215613cb657600080fd5b5051919050565b600060208284031215613ccf57600080fd5b81518015158114610c0457600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613d0757613d07613cdf565b500390565b60008219821115613d1f57613d1f613cdf565b500190565b6000816000190483118215151615613d3e57613d3e613cdf565b500290565b600082613d6057634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008060408385031215613dbd57600080fd5b50508051602090910151909290915056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d4df95c5c8f54f7f4acbfb2d7a897a6443d06603441cc4447cd2434eb357351764736f6c634300080a0033" + }, + { + "address": "0xcf68a2721394dcf5dcf66f6265c1819720f24528", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000018593b0cadbe55c2f", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ca565b610118565b61005b6100933660046106e5565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ca565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610292565b610116610111610331565b61033b565b565b61012061035f565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610392565b50565b6101546100fe565b61016761035f565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610392915050565b505050565b6101c36100fe565b60006101da61035f565b6001600160a01b0316336001600160a01b03161415610200576101fb610331565b905090565b6102086100fe565b90565b61021361035f565b6001600160a01b0316336001600160a01b0316141561015757610154816103f1565b600061023f61035f565b6001600160a01b0316336001600160a01b03161415610200576101fb61035f565b606061028583836040518060600160405280602781526020016107e460279139610445565b9392505050565b3b151590565b61029a61035f565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610519565b3660008037600080366000845af43d6000803e80801561035a573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039b83610541565b6040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a26000825111806103dc5750805b156101c3576103eb8383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61041a61035f565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816105e9565b6060833b6104a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610328565b600080856001600160a01b0316856040516104bf9190610794565b600060405180830381855af49150503d80600081146104fa576040519150601f19603f3d011682016040523d82523d6000602084013e6104ff565b606091505b509150915061050f828286610675565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610383565b803b6105a55760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610328565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b03811661064e5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610328565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036105c8565b60608315610684575081610285565b8251156106945782518084602001fd5b8160405162461bcd60e51b815260040161032891906107b0565b80356001600160a01b03811681146106c557600080fd5b919050565b6000602082840312156106dc57600080fd5b610285826106ae565b6000806000604084860312156106fa57600080fd5b610703846106ae565b9250602084013567ffffffffffffffff8082111561072057600080fd5b818601915086601f83011261073457600080fd5b81358181111561074357600080fd5b87602082850101111561075557600080fd5b6020830194508093505050509250925092565b60005b8381101561078357818101518382015260200161076b565b838111156103eb5750506000910152565b600082516107a6818460208701610768565b9190910192915050565b60208152600082518060208401526107cf816040850160208701610768565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204675187caf3a43285d9a2c1844a981e977bd52a85ff073e7fc649f73847d70a464736f6c63430008090033" + }, + { + "address": "0xbff841e28e36bf7859ad41033131c08c4b677ea4", + "nonce": 41, + "balance": "0x000000000000000000000000000000000000000000000000001302745443d21b", + "code": "0x" + }, + { + "address": "0xf669de7d30725e943e0850b0b6a01f38cb1c78d0", + "nonce": 0, + "balance": "0x000000000000000000000000000000000000000000000000001733001a622000", + "code": "0x" + }, + { + "address": "0xedb5e41592a67e7008fe87ec783fa344b4737ebc", + "nonce": 15, + "balance": "0x00000000000000000000000000000000000000000000000000215c7439f0663c", + "code": "0x" + }, + { + "address": "0x052932456a8fd199cd33be91312638a35c8b7ca5", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80637bb7bed1116100ad578063c4f59f9b11610071578063c4f59f9b1461035e578063e86b2fbe14610373578063eb8f280614610386578063f2fde38b14610399578063f49dc6b6146103ac57600080fd5b80637bb7bed1146102d8578063831e8dec146102eb5780638da5cb5b146103275780638daa0acb14610338578063c4d66de81461034b57600080fd5b806345a49d3c116100f457806345a49d3c146102525780635ce65fe9146102655780635fe3b5671461027857806366f91a24146102a3578063715018a6146102d057600080fd5b8063246467e8146101315780632e4a5d6014610146578063318d9e5d1461017e57806332894a6d1461019157806342cbb15c14610235575b600080fd5b61014461013f3660046119cf565b6103bf565b005b610169610154366004611a0b565b60696020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61014461018c366004611b03565b610462565b6101f461019f366004611b40565b6066602090815260009283526040808420909152908252902080546001820154600283015460039093015491926001600160e01b038083169363ffffffff600160e01b94859004811694928216929091041686565b604080519687526001600160e01b03958616602088015263ffffffff94851690870152606086019290925290921660808401521660a082015260c001610175565b61023d6104b6565b60405163ffffffff9091168152602001610175565b610144610260366004611b40565b6104fc565b610144610273366004611a0b565b61057c565b60655461028b906001600160a01b031681565b6040516001600160a01b039091168152602001610175565b6102b86a0c097ce7bc90715b34b9f160241b81565b6040516001600160e01b039091168152602001610175565b6101446105f6565b61028b6102e6366004611b73565b61060a565b6103196102f9366004611b40565b606760209081526000928352604080842090915290825290206002015481565b604051908152602001610175565b6033546001600160a01b031661028b565b610144610346366004611a0b565b610634565b610144610359366004611a0b565b610798565b6103666108c4565b6040516101759190611b8c565b610144610381366004611a0b565b610926565b610144610394366004611b40565b6109a0565b6101446103a7366004611a0b565b610a1b565b6101446103ba366004611c34565b610a94565b6103c7610c75565b6001600160a01b03831660009081526069602052604090205460ff166104515760405162461bcd60e51b815260206004820152603460248201527f5265776172644469737472696275746f723a206772616e7420726577617264206044820152731d1bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b60648201526084015b60405180910390fd5b61045c838383610ccf565b50505050565b60005b6068548110156104b2576104a06068828154811061048557610485611ccd565b6000918252602090912001546001600160a01b031683610e2a565b806104aa81611cf9565b915050610465565b5050565b60006104f7426040518060400160405280601c81526020017f626c6f636b206e756d6265722065786365656473203332206269747300000000815250610ece565b905090565b6065546001600160a01b031633146105265760405162461bcd60e51b815260040161044890611d14565b60005b606854811015610577576105656068828154811061054957610549611ccd565b6000918252602090912001546001600160a01b03168484610efe565b8061056f81611cf9565b915050610529565b505050565b6065546001600160a01b031633146105a65760405162461bcd60e51b815260040161044890611d14565b60005b6068548110156104b2576105e4606882815481106105c9576105c9611ccd565b6000918252602090912001546001600160a01b031683611096565b806105ee81611cf9565b9150506105a9565b6105fe610c75565b61060860006112e8565b565b6068818154811061061a57600080fd5b6000918252602090912001546001600160a01b0316905081565b61063c610c75565b6001600160a01b0381166106b15760405162461bcd60e51b815260206004820152603660248201527f5265776172644469737472696275746f723a2072657761726420746f6b656e2060448201527563616e6e6f74206265207a65726f206164647265737360501b6064820152608401610448565b6001600160a01b03811660009081526069602052604090205460ff16156107315760405162461bcd60e51b815260206004820152602e60248201527f5265776172644469737472696275746f723a2072657761726420746f6b656e2060448201526d616c72656164792065786973747360901b6064820152608401610448565b6068805460018181019092557fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530180546001600160a01b039093166001600160a01b031990931683179055600091825260696020526040909120805460ff19169091179055565b600054610100900460ff16158080156107b85750600054600160ff909116105b806107d25750303b1580156107d2575060005460ff166001145b6108355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610448565b6000805460ff191660011790558015610858576000805461ff0019166101001790555b61086061133a565b606580546001600160a01b0319166001600160a01b03841617905580156104b2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6060606880548060200260200160405190810160405280929190818152602001828054801561091c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108fe575b5050505050905090565b6065546001600160a01b031633146109505760405162461bcd60e51b815260040161044890611d14565b60005b6068548110156104b25761098e6068828154811061097357610973611ccd565b6000918252602090912001546001600160a01b031683611369565b8061099881611cf9565b915050610953565b6065546001600160a01b031633146109ca5760405162461bcd60e51b815260040161044890611d14565b60005b60685481101561057757610a09606882815481106109ed576109ed611ccd565b6000918252602090912001546001600160a01b03168484611501565b80610a1381611cf9565b9150506109cd565b610a23610c75565b6001600160a01b038116610a885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610448565b610a91816112e8565b50565b610a9c610c75565b6001600160a01b03841660009081526069602052604090205460ff16610b1b5760405162461bcd60e51b815260206004820152602e60248201527f5265776172644469737472696275746f723a2072657761726420746f6b656e2060448201526d191bd95cc81b9bdd08195e1a5cdd60921b6064820152608401610448565b8151835114610b8a5760405162461bcd60e51b815260206004820152603560248201527f5265776172644469737472696275746f723a20737570706c79207370656564206044820152740c2e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6064820152608401610448565b8051835114610bf95760405162461bcd60e51b815260206004820152603560248201527f5265776172644469737472696275746f723a20626f72726f77207370656564206044820152740c2e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6064820152608401610448565b60005b8351811015610c6e57610c5c85858381518110610c1b57610c1b611ccd565b6020026020010151858481518110610c3557610c35611ccd565b6020026020010151858581518110610c4f57610c4f611ccd565b602002602001015161171b565b80610c6681611cf9565b915050610bfc565b5050505050565b6033546001600160a01b031633146106085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610448565b6040516370a0823160e01b815230600482015260009081906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c9190611d71565b9050600083118015610d4e5750808311155b15610e1e5760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303816000875af1158015610da2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc69190611d8a565b50836001600160a01b0316856001600160a01b03167f6123969dd9705ebe9fca0229b85009158c92cae456c32d917d8d435748f3abd385604051610e0c91815260200190565b60405180910390a36000915050610e23565b829150505b9392505050565b60005b8151811015610577576001600160a01b038316600090815260676020526040812083518290859085908110610e6457610e64611ccd565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000209050610eb684848481518110610ea457610ea4611ccd565b60200260200101518360020154610ccf565b60029091015580610ec681611cf9565b915050610e2d565b6000816401000000008410610ef65760405162461bcd60e51b81526004016104489190611dac565b509192915050565b6001600160a01b03808416600081815260666020908152604080832087861680855290835281842094845260678352818420958716845294825280832060018501549584529182905290912080546001600160e01b0390941690819055919290919080158015610f7c57506a0c097ce7bc90715b34b9f160241b8210155b15610f9257506a0c097ce7bc90715b34b9f160241b5b60006040518060200160405280610fa98585611875565b90526040516370a0823160e01b81526001600160a01b0388811660048301529192506000918916906370a0823190602401602060405180830381865afa158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101b9190611d71565b905060006110298284611881565b90506110398660020154826118aa565b600287018190556040805183815260208101929092526001600160a01b038a811692908d16917ffd07974d3aaf62e9d6f1492b77eba5e72f99d8367e456eaf203de8491d42c999910160405180910390a350505050505050505050565b60006040518060200160405280836001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111059190611d71565b90526001600160a01b03808516600090815260666020908152604080832093871683529290529081209192506111396104b6565b600383015490915063ffffffff600160e01b90910481169082161115610c6e576002820154156112c057600382015460009061118290600160e01b900463ffffffff1683611e01565b63ffffffff16905060006111f7866001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190611d71565b866118b6565b905060006112098386600201546118d4565b905060008083116112295760405180602001604052806000815250611233565b61123382846118e0565b604080516020810190915260038801546001600160e01b031681529091506112999061125f9083611924565b5160408051808201909152601a81527f6e657720696e64657820657863656564732032323420626974730000000000006020820152611950565b6003870180546001600160e01b0319166001600160e01b0392909216919091179055505050505b60038201805463ffffffff8316600160e01b026001600160e01b039091161790555050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166113615760405162461bcd60e51b815260040161044890611e26565b610608611977565b6001600160a01b0380831660009081526066602090815260408083209385168352929052908120906113996104b6565b600183015490915063ffffffff600160e01b9091048116908216111561045c578154156114da5760018201546000906113df90600160e01b900463ffffffff1683611e01565b63ffffffff1690506000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144b9190611d71565b9050600061145d8386600001546118d4565b9050600080831161147d5760405180602001604052806000815250611487565b61148782846118e0565b604080516020810190915260018801546001600160e01b031681529091506114b39061125f9083611924565b6001870180546001600160e01b0319166001600160e01b0392909216919091179055505050505b60018201805463ffffffff8316600160e01b026001600160e01b0390911617905550505050565b60006040518060200160405280846001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190611d71565b90526001600160a01b03808616600081815260666020908152604080832089861680855290835281842094845260678352818420958916845294825280832060038501549584526001810190925290912080546001600160e01b039094169081905593945090929091801580156115f557506a0c097ce7bc90715b34b9f160241b8210155b1561160b57506a0c097ce7bc90715b34b9f160241b5b600060405180602001604052806116228585611875565b90526040516395dd919360e01b81526001600160a01b03898116600483015291925060009161169f91908b16906395dd919390602401602060405180830381865afa158015611675573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116999190611d71565b886118b6565b905060006116ad8284611881565b90506116bd8660020154826118aa565b600287018190556040805183815260208101929092526001600160a01b038b811692908e16917ffd07974d3aaf62e9d6f1492b77eba5e72f99d8367e456eaf203de8491d42c999910160405180910390a35050505050505050505050565b6001600160a01b038085166000908152606660209081526040808320938716835292905220805483146117ce5760018101546001600160e01b031661177d576001810180546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1790555b6117878585611369565b8281556040518381526001600160a01b0385811691908716907f61918eb908e35e96d460dc030b7c4f6448ac64f1383759571b9c7cab50efd0469060200160405180910390a35b81816002015414610c6e5760038101546001600160e01b031661180e576003810180546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1790555b6118188585611096565b818160020181905550836001600160a01b0316856001600160a01b03167f13b9c4bac6e50afba9701545614343a5e29bc815d483928198270e878c42eaf98460405161186691815260200190565b60405180910390a35050505050565b6000610e238284611e71565b60006a0c097ce7bc90715b34b9f160241b6118a08484600001516118d4565b610e239190611e88565b6000610e238284611eaa565b6000610e236118cd84670de0b6b3a76400006118d4565b83516119a7565b6000610e238284611ec2565b604080516020810190915260008152604051806020016040528061191b611915866a0c097ce7bc90715b34b9f160241b6118d4565b856119a7565b90529392505050565b604080516020810190915260008152604051806020016040528061191b856000015185600001516118aa565b600081600160e01b8410610ef65760405162461bcd60e51b81526004016104489190611dac565b600054610100900460ff1661199e5760405162461bcd60e51b815260040161044890611e26565b610608336112e8565b6000610e238284611e88565b80356001600160a01b03811681146119ca57600080fd5b919050565b6000806000606084860312156119e457600080fd5b6119ed846119b3565b92506119fb602085016119b3565b9150604084013590509250925092565b600060208284031215611a1d57600080fd5b610e23826119b3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a6557611a65611a26565b604052919050565b600067ffffffffffffffff821115611a8757611a87611a26565b5060051b60200190565b600082601f830112611aa257600080fd5b81356020611ab7611ab283611a6d565b611a3c565b82815260059290921b84018101918181019086841115611ad657600080fd5b8286015b84811015611af857611aeb816119b3565b8352918301918301611ada565b509695505050505050565b600060208284031215611b1557600080fd5b813567ffffffffffffffff811115611b2c57600080fd5b611b3884828501611a91565b949350505050565b60008060408385031215611b5357600080fd5b611b5c836119b3565b9150611b6a602084016119b3565b90509250929050565b600060208284031215611b8557600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b81811015611bcd5783516001600160a01b031683529284019291840191600101611ba8565b50909695505050505050565b600082601f830112611bea57600080fd5b81356020611bfa611ab283611a6d565b82815260059290921b84018101918181019086841115611c1957600080fd5b8286015b84811015611af85780358352918301918301611c1d565b60008060008060808587031215611c4a57600080fd5b611c53856119b3565b9350602085013567ffffffffffffffff80821115611c7057600080fd5b611c7c88838901611a91565b94506040870135915080821115611c9257600080fd5b611c9e88838901611bd9565b93506060870135915080821115611cb457600080fd5b50611cc187828801611bd9565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611d0d57611d0d611ce3565b5060010190565b6020808252603a908201527f5265776172644469737472696275746f723a206f6e6c7920636f6d7074726f6c60408201527f6c65722063616e2063616c6c20746869732066756e6374696f6e000000000000606082015260800190565b600060208284031215611d8357600080fd5b5051919050565b600060208284031215611d9c57600080fd5b81518015158114610e2357600080fd5b600060208083528351808285015260005b81811015611dd957858101830151858201604001528201611dbd565b81811115611deb576000604083870101525b50601f01601f1916929092016040019392505050565b600063ffffffff83811690831681811015611e1e57611e1e611ce3565b039392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600082821015611e8357611e83611ce3565b500390565b600082611ea557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611ebd57611ebd611ce3565b500190565b6000816000190483118215151615611edc57611edc611ce3565b50029056fea2646970667358221220e9a06b071c3568fbafe83520663c6e0bd4e31f3556227072604a44d44ab5913a64736f6c634300080a0033" + }, + { + "address": "0x431d47ed942f1c3ad7bd8ba43c47a5afb50c657c", + "nonce": 137, + "balance": "0x0000000000000000000000000000000000000000000000000003331bb6a1b707", + "code": "0x" + }, + { + "address": "0x63ce21bd9af8cc603322cb025f26db567de8102b", + "nonce": 1, + "balance": "0x00000000000000000000000000000000000000000000000022694f10010f0000", + "code": "0x6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea2646970667358221220d0232cfa81216c3e4973e570f043b57ccb69ae4a81b8bc064338713721c87a9f64736f6c63430008140033" + }, + { + "address": "0x5c660efaa824024c069463c47ae96655c3b096ea", + "nonce": 9, + "balance": "0x0000000000000000000000000000000000000000000000000020a4c0a692cf0a", + "code": "0x" + }, + { + "address": "0x92a02f0902586526c6585afc9aece852240979ba", + "nonce": 10, + "balance": "0x000000000000000000000000000000000000000000000000001273cef3af5a03", + "code": "0x" + }, + { + "address": "0xb450028848ad2739c48bd060b60478165f6fcc60", + "nonce": 17, + "balance": "0x0000000000000000000000000000000000000000000000000042ae407ff824b8", + "code": "0x" + }, + { + "address": "0x80fff752807758f53dc164874fa4606968db115a", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061019c5760003560e01c8063485cc955116100ec578063a217fddf1161008a578063e839551311610064578063e8395513146104f1578063f3af927214610511578063f56e9c6614610531578063fc0c546a1461055157600080fd5b8063a217fddf1461048c578063ba872d67146104a1578063d547741f146104d157600080fd5b806354fd4d50116100c657806354fd4d50146104165780637bb489411461042c5780638e520e8e1461044c57806391d148541461046c57600080fd5b8063485cc955146103ce5780634f1ef286146103ee57806352d1902d1461040157600080fd5b80632f2ff15d116101595780633659cfe6116101335780633659cfe614610327578063370fd8b51461034757806346094f111461036757806347ccca021461039657600080fd5b80632f2ff15d146102c757806333ea60ae146102e757806336568abe1461030757600080fd5b806301ffc9a7146101a157806307bd0265146101d65780630c6dcdce1461021857806310eee73414610248578063144fa6d714610275578063248a9ca314610297575b600080fd5b3480156101ad57600080fd5b506101c16101bc3660046115e3565b610571565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b5061020a7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b6040519081526020016101cd565b34801561022457600080fd5b506101c161023336600461160d565b600090815260fe602052604090205460ff1690565b34801561025457600080fd5b5061020a61026336600461160d565b60ff6020526000908152604090205481565b34801561028157600080fd5b5061029561029036600461164b565b6105a8565b005b3480156102a357600080fd5b5061020a6102b236600461160d565b60009081526065602052604090206001015490565b3480156102d357600080fd5b506102956102e2366004611668565b6105d6565b3480156102f357600080fd5b506102956103023660046116a6565b610600565b34801561031357600080fd5b50610295610322366004611668565b61062c565b34801561033357600080fd5b5061029561034236600461164b565b6106af565b34801561035357600080fd5b506102956103623660046116cb565b61078e565b34801561037357600080fd5b506101c161038236600461160d565b600090815260ff6020526040902054151590565b3480156103a257600080fd5b5060fd546103b6906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b3480156103da57600080fd5b506102956103e9366004611716565b610822565b6102956103fc36600461175a565b6109bb565b34801561040d57600080fd5b5061020a610a87565b34801561042257600080fd5b5061020a60fb5481565b34801561043857600080fd5b5061029561044736600461186a565b610b3a565b34801561045857600080fd5b50610295610467366004611668565b610c02565b34801561047857600080fd5b506101c1610487366004611668565b610d2c565b34801561049857600080fd5b5061020a600081565b3480156104ad57600080fd5b506101c16104bc36600461160d565b60fe6020526000908152604090205460ff1681565b3480156104dd57600080fd5b506102956104ec366004611668565b610d57565b3480156104fd57600080fd5b5061029561050c3660046118d6565b610d7c565b34801561051d57600080fd5b5061020a61052c36600461160d565b610d9a565b34801561053d57600080fd5b5061029561054c36600461164b565b610e0a565b34801561055d57600080fd5b5060fc546103b6906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b14806105a257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006105b381610e38565b5060fc80546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152606560205260409020600101546105f181610e38565b6105fb8383610e42565b505050565b600061060b81610e38565b50600091825260fe6020526040909120805460ff1916911515919091179055565b6001600160a01b03811633146106a15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6106ab8282610ec8565b5050565b6001600160a01b037f00000000000000000000000080fff752807758f53dc164874fa4606968db115a1630036106f75760405162461bcd60e51b8152600401610698906118f8565b7f00000000000000000000000080fff752807758f53dc164874fa4606968db115a6001600160a01b0316610740600080516020611c11833981519152546001600160a01b031690565b6001600160a01b0316146107665760405162461bcd60e51b815260040161069890611944565b61076f81610f2f565b6040805160008082526020820190925261078b91839190610f53565b50565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e636107b881610e38565b60fd5460405163221f5ebb60e21b81526001600160a01b039091169063887d7aec906107ea90869086906004016119bc565b600060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b5050505050505050565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108bf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610698565b6000805460ff1916600117905580156108e2576000805461ff0019166101001790555b6108ea6110be565b6108f26110be565b6108fd600033610e42565b60fc80546001600160a01b038086166001600160a01b03199283161790925560fd8054928516929091169190911790556040805160a0810182526101008082526102006020830152610400928201929092526108006060820152611000608082015261096b9190600561157d565b50600160fb5580156105fb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6001600160a01b037f00000000000000000000000080fff752807758f53dc164874fa4606968db115a163003610a035760405162461bcd60e51b8152600401610698906118f8565b7f00000000000000000000000080fff752807758f53dc164874fa4606968db115a6001600160a01b0316610a4c600080516020611c11833981519152546001600160a01b031690565b6001600160a01b031614610a725760405162461bcd60e51b815260040161069890611944565b610a7b82610f2f565b6106ab82826001610f53565b6000306001600160a01b037f00000000000000000000000080fff752807758f53dc164874fa4606968db115a1614610b275760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610698565b50600080516020611c1183398151915290565b6000610b4581610e38565b838214610b945760405162461bcd60e51b815260206004820181905260248201527f54696c6552657761726448656c7065723a20696e76616c6964206c656e6774686044820152606401610698565b60005b84811015610bfa57838382818110610bb157610bb1611a6c565b9050602002013560ff6000888885818110610bce57610bce611a6c565b905060200201358152602001908152602001600020819055508080610bf290611a98565b915050610b97565b505050505050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610c2c81610e38565b600083815260ff6020526040902054156105fb5760fc54600084815260ff60205260408082205490516323b872dd60e01b81523360048201526001600160a01b0386811660248301526044820192909252919216906323b872dd906064016020604051808303816000875af1158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611ab1565b905080610d265760405162461bcd60e51b815260206004820152602160248201527f54696c6552657761726448656c7065723a207472616e73666572206661696c656044820152601960fa1b6064820152608401610698565b50505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600082815260656020526040902060010154610d7281610e38565b6105fb8383610ec8565b6000610d8781610e38565b50600091825260ff602052604090912055565b600080805b61010054811015610e03576101008181548110610dbe57610dbe611a6c565b90600052602060002001548410610df1576101008181548110610de357610de3611a6c565b906000526020600020015491505b80610dfb81611a98565b915050610d9f565b5092915050565b6000610e1581610e38565b5060fd80546001600160a01b0319166001600160a01b0392909216919091179055565b61078b813361112b565b610e4c8282610d2c565b6106ab5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610e843390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610ed28282610d2c565b156106ab5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f3a81610e38565b60fb8054906000610f4a83611a98565b91905055505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610f86576105fb83611184565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610fe0575060408051601f3d908101601f19168201909252610fdd91810190611ace565b60015b6110435760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610698565b600080516020611c1183398151915281146110b25760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610698565b506105fb838383611220565b600054610100900460ff166111295760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610698565b565b6111358282610d2c565b6106ab5761114281611245565b61114d836020611257565b60405160200161115e929190611b0b565b60408051601f198184030181529082905262461bcd60e51b825261069891600401611b80565b6001600160a01b0381163b6111f15760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610698565b600080516020611c1183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611229836113fa565b6000825111806112365750805b156105fb57610d26838361143a565b60606105a26001600160a01b03831660145b60606000611266836002611bb3565b611271906002611bca565b67ffffffffffffffff81111561128957611289611744565b6040519080825280601f01601f1916602001820160405280156112b3576020820181803683370190505b509050600360fc1b816000815181106112ce576112ce611a6c565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106112fd576112fd611a6c565b60200101906001600160f81b031916908160001a9053506000611321846002611bb3565b61132c906001611bca565b90505b60018111156113a4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061136057611360611a6c565b1a60f81b82828151811061137657611376611a6c565b60200101906001600160f81b031916908160001a90535060049490941c9361139d81611bdd565b905061132f565b5083156113f35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610698565b9392505050565b61140381611184565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606113f38383604051806060016040528060278152602001611c31602791396060600080856001600160a01b0316856040516114779190611bf4565b600060405180830381855af49150503d80600081146114b2576040519150601f19603f3d011682016040523d82523d6000602084013e6114b7565b606091505b50915091506114c8868383876114d2565b9695505050505050565b6060831561154157825160000361153a576001600160a01b0385163b61153a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610698565b508161154b565b61154b8383611553565b949350505050565b8151156115635781518083602001fd5b8060405162461bcd60e51b81526004016106989190611b80565b8280548282559060005260206000209081019282156115be579160200282015b828111156115be578251829061ffff1690559160200191906001019061159d565b506115ca9291506115ce565b5090565b5b808211156115ca57600081556001016115cf565b6000602082840312156115f557600080fd5b81356001600160e01b0319811681146113f357600080fd5b60006020828403121561161f57600080fd5b5035919050565b6001600160a01b038116811461078b57600080fd5b803561164681611626565b919050565b60006020828403121561165d57600080fd5b81356113f381611626565b6000806040838503121561167b57600080fd5b82359150602083013561168d81611626565b809150509250929050565b801515811461078b57600080fd5b600080604083850312156116b957600080fd5b82359150602083013561168d81611698565b60008060008385036101008112156116e257600080fd5b8435935060208501356116f481611626565b925060c0603f198201121561170857600080fd5b506040840190509250925092565b6000806040838503121561172957600080fd5b823561173481611626565b9150602083013561168d81611626565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561176d57600080fd5b823561177881611626565b9150602083013567ffffffffffffffff8082111561179557600080fd5b818501915085601f8301126117a957600080fd5b8135818111156117bb576117bb611744565b604051601f8201601f19908116603f011681019083821181831017156117e3576117e3611744565b816040528281528860208487010111156117fc57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f84011261183057600080fd5b50813567ffffffffffffffff81111561184857600080fd5b6020830191508360208260051b850101111561186357600080fd5b9250929050565b6000806000806040858703121561188057600080fd5b843567ffffffffffffffff8082111561189857600080fd5b6118a48883890161181e565b909650945060208701359150808211156118bd57600080fd5b506118ca8782880161181e565b95989497509550505050565b600080604083850312156118e957600080fd5b50508035926020909101359150565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b803564ffffffffff8116811461164657600080fd5b80356001600160801b038116811461164657600080fd5b6001600160a01b038316815260e08101823561ffff81168082146119df57600080fd5b8060208501525050602083013562ffffff811681146119fd57600080fd5b62ffffff8116604084015250611a1560408401611990565b64ffffffffff8116606084015250611a2f606084016119a5565b6001600160801b038116608084015250611a4b6080840161163b565b6001600160a01b03811660a08401525060a083013560c08301529392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611aaa57611aaa611a82565b5060010190565b600060208284031215611ac357600080fd5b81516113f381611698565b600060208284031215611ae057600080fd5b5051919050565b60005b83811015611b02578181015183820152602001611aea565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611b43816017850160208801611ae7565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611b74816028840160208801611ae7565b01602801949350505050565b6020815260008251806020840152611b9f816040850160208701611ae7565b601f01601f19169190910160400192915050565b80820281158282048414176105a2576105a2611a82565b808201808211156105a2576105a2611a82565b600081611bec57611bec611a82565b506000190190565b60008251611c06818460208701611ae7565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220065a227832f9e45920d98b1a6f7363dc2b3f514ee6eada80354887ffd3f46a9864736f6c63430008140033" + }, + { + "address": "0x1d0188c4b276a09366d05d6be06af61a73bc7535", + "nonce": 1, + "balance": "0x00000000000000000000000000000000000000000000000b2e962fcdf070db8a", + "code": "0x36600557005b6000803560e01c6372656164811460975763766965778114607957195480602a575080fd5b81600160a01b821060625750637669657760e01b825219600452368160243780806024360181305af43d82803e605e573d90f35b3d90fd5b8091368280378136915af43d82803e15605e573d90f35b50808036602319018060248337816004355af43d82803e605e573d90f35b60045b36811060a95736600319016004f35b8035548152602001609a56" + }, + { + "address": "0x612af58f8016c06e603d803829ccfd843f787618", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063736c0d5b1161008c57806399565aeb1161006657806399565aeb146101eb578063c2365b411461021b578063f2fde38b1461024b578063f9f2a7ce14610267576100ea565b8063736c0d5b146101935780638456cb59146101c35780638da5cb5b146101cd576100ea565b80633f4ba83a116100c85780633f4ba83a146101455780635c975abb1461014f57806369d037381461016d578063715018a614610189576100ea565b8063064a181e146100ef578063310c87cc1461010b5780633d6ef74a14610129575b600080fd5b61010960048036038101906101049190610cf9565b610297565b005b6101136105a7565b6040516101209190610d9a565b60405180910390f35b610143600480360381019061013e9190610e19565b6105cd565b005b61014d610630565b005b610157610642565b6040516101649190610e68565b60405180910390f35b61018760048036038101906101829190610e83565b610658565b005b610191610713565b005b6101ad60048036038101906101a89190610e83565b610727565b6040516101ba9190610e68565b60405180910390f35b6101cb610747565b005b6101d5610759565b6040516101e29190610d9a565b60405180910390f35b61020560048036038101906102009190610eb0565b610782565b6040516102129190610f30565b60405180910390f35b61023560048036038101906102309190610f4b565b6107bb565b6040516102429190610fa7565b60405180910390f35b61026560048036038101906102609190610e83565b6107e6565b005b610281600480360381019061027c9190610e83565b610869565b60405161028e9190610e68565b60405180910390f35b61029f6108bf565b6000600383836040516102b3929190611001565b90815260200160405180910390205414610302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f990611077565b60405180910390fd5b60008311610345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033c906110e3565b60405180910390fd5b60006103c2610378853330600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610782565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610909565b9050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104479061114f565b60405180910390fd5b8360038484604051610463929190611001565b9081526020016040518091039020819055506001600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a14481943360016040518363ffffffff1660e01b815260040161052b9291906111b4565b600060405180830381600087803b15801561054557600080fd5b505af1158015610559573d6000803e3d6000fd5b50505050833373ffffffffffffffffffffffffffffffffffffffff167fdded99d0facabf972699aecf4807cfd50dbe4cd23a257c329bde4e03318f219d60405160405180910390a350505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105d5610994565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610638610994565b610640610a12565b565b60008060009054906101000a900460ff16905090565b610660610994565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c690611229565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61071b610994565b6107256000610a74565b565b60026020528060005260406000206000915054906101000a900460ff1681565b61074f610994565b610757610b39565b565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008484848460405160200161079b9493929190611309565b604051602081830303815290604052805190602001209050949350505050565b6000600383836040516107cf929190611001565b908152602001604051809103902054905092915050565b6107ee610994565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361085d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610854906113d4565b60405180910390fd5b61086681610a74565b50565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6108c7610642565b15610907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fe90611440565b60405180910390fd5b565b60008060008061091885610b9b565b925092509250601b8360ff16101561093a57601b83610937919061149c565b92505b6001868484846040516000815260200160405260405161095d94939291906114e0565b6020604051602081039080840390855afa15801561097f573d6000803e3d6000fd5b50505060206040510351935050505092915050565b61099c610c03565b73ffffffffffffffffffffffffffffffffffffffff166109ba610759565b73ffffffffffffffffffffffffffffffffffffffff1614610a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0790611571565b60405180910390fd5b565b610a1a610c0b565b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610a5d610c03565b604051610a6a9190610d9a565b60405180910390a1565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610b416108bf565b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b84610c03565b604051610b919190610d9a565b60405180910390a1565b60008060006041845114610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb906115dd565b60405180910390fd5b6020840151915060408401519050606084015160001a92509193909250565b600033905090565b610c13610642565b610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990611649565b60405180910390fd5b565b600080fd5b600080fd5b6000819050919050565b610c7181610c5e565b8114610c7c57600080fd5b50565b600081359050610c8e81610c68565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610cb957610cb8610c94565b5b8235905067ffffffffffffffff811115610cd657610cd5610c99565b5b602083019150836001820283011115610cf257610cf1610c9e565b5b9250929050565b600080600060408486031215610d1257610d11610c54565b5b6000610d2086828701610c7f565b935050602084013567ffffffffffffffff811115610d4157610d40610c59565b5b610d4d86828701610ca3565b92509250509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d8482610d59565b9050919050565b610d9481610d79565b82525050565b6000602082019050610daf6000830184610d8b565b92915050565b610dbe81610d79565b8114610dc957600080fd5b50565b600081359050610ddb81610db5565b92915050565b60008115159050919050565b610df681610de1565b8114610e0157600080fd5b50565b600081359050610e1381610ded565b92915050565b60008060408385031215610e3057610e2f610c54565b5b6000610e3e85828601610dcc565b9250506020610e4f85828601610e04565b9150509250929050565b610e6281610de1565b82525050565b6000602082019050610e7d6000830184610e59565b92915050565b600060208284031215610e9957610e98610c54565b5b6000610ea784828501610dcc565b91505092915050565b60008060008060808587031215610eca57610ec9610c54565b5b6000610ed887828801610c7f565b9450506020610ee987828801610dcc565b9350506040610efa87828801610dcc565b9250506060610f0b87828801610dcc565b91505092959194509250565b6000819050919050565b610f2a81610f17565b82525050565b6000602082019050610f456000830184610f21565b92915050565b60008060208385031215610f6257610f61610c54565b5b600083013567ffffffffffffffff811115610f8057610f7f610c59565b5b610f8c85828601610ca3565b92509250509250929050565b610fa181610c5e565b82525050565b6000602082019050610fbc6000830184610f98565b92915050565b600081905092915050565b82818337600083830152505050565b6000610fe88385610fc2565b9350610ff5838584610fcd565b82840190509392505050565b600061100e828486610fdc565b91508190509392505050565b600082825260208201905092915050565b7f7369672075736564000000000000000000000000000000000000000000000000600082015250565b600061106160088361101a565b915061106c8261102b565b602082019050919050565b6000602082019050818103600083015261109081611054565b9050919050565b7f696e76616c6964206e6f6e636500000000000000000000000000000000000000600082015250565b60006110cd600d8361101a565b91506110d882611097565b602082019050919050565b600060208201905081810360008301526110fc816110c0565b9050919050565b7f7369676e657220696e76616c6964000000000000000000000000000000000000600082015250565b6000611139600e8361101a565b915061114482611103565b602082019050919050565b600060208201905081810360008301526111688161112c565b9050919050565b6000819050919050565b6000819050919050565b600061119e6111996111948461116f565b611179565b610c5e565b9050919050565b6111ae81611183565b82525050565b60006040820190506111c96000830185610d8b565b6111d660208301846111a5565b9392505050565b7f7a65726f20616464726573730000000000000000000000000000000000000000600082015250565b6000611213600c8361101a565b915061121e826111dd565b602082019050919050565b6000602082019050818103600083015261124281611206565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a313137000000600082015250565b600061128a601d83611249565b915061129582611254565b601d82019050919050565b6000819050919050565b6112bb6112b682610c5e565b6112a0565b82525050565b60008160601b9050919050565b60006112d9826112c1565b9050919050565b60006112eb826112ce565b9050919050565b6113036112fe82610d79565b6112e0565b82525050565b60006113148261127d565b915061132082876112aa565b60208201915061133082866112f2565b60148201915061134082856112f2565b60148201915061135082846112f2565b60148201915081905095945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006113be60268361101a565b91506113c982611362565b604082019050919050565b600060208201905081810360008301526113ed816113b1565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600061142a60108361101a565b9150611435826113f4565b602082019050919050565b600060208201905081810360008301526114598161141d565b9050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114a782611460565b91506114b283611460565b9250828201905060ff8111156114cb576114ca61146d565b5b92915050565b6114da81611460565b82525050565b60006080820190506114f56000830187610f21565b61150260208301866114d1565b61150f6040830185610f21565b61151c6060830184610f21565b95945050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061155b60208361101a565b915061156682611525565b602082019050919050565b6000602082019050818103600083015261158a8161154e565b9050919050565b7f696e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b60006115c760188361101a565b91506115d282611591565b602082019050919050565b600060208201905081810360008301526115f6816115ba565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061163360148361101a565b915061163e826115fd565b602082019050919050565b6000602082019050818103600083015261166281611626565b905091905056fea2646970667358221220dc4196df076ba72a6e19447144ab36b64dde86b7135ae32ef6da14ed6f0ea1f664736f6c63430008130033" + }, + { + "address": "0x373f4dffbdfed366832b5b4341282916b43aa169", + "nonce": 2, + "balance": "0x000000000000000000000000000000000000000000000000002234dd9566541a", + "code": "0x" + }, + { + "address": "0xe4edb277e41dc89ab076a1f049f4a3efa700bce8", + "nonce": 1000425, + "balance": "0x00000000000000000000000000000000000000000000000c98e4d0e7c730b895", + "code": "0x" + }, + { + "address": "0x564477025731ee7197eecf2c4a0d0106cc3e4572", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106101665760003560e01c80635b7d7482116100d15780638456cb591161008a578063a457c2d711610064578063a457c2d7146104d1578063a9059cbb1461050e578063dd62ed3e1461054b578063f2fde38b1461058857610166565b80638456cb59146104645780638da5cb5b1461047b57806395d89b41146104a657610166565b80635b7d74821461037c5780635c975abb146103a557806370a08231146103d0578063715018a61461040d57806379cc6790146104245780638129fc1c1461044d57610166565b80633950935111610123578063395093511461028f5780633f4ba83a146102cc57806340c10f19146102e357806342966c681461030c5780634f1ef2861461033557806352d1902d1461035157610166565b806306fdde031461016b578063095ea7b31461019657806318160ddd146101d357806323b872dd146101fe578063313ce5671461023b5780633659cfe614610266575b600080fd5b34801561017757600080fd5b506101806105b1565b60405161018d91906122d7565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b891906123a1565b610643565b6040516101ca91906123fc565b60405180910390f35b3480156101df57600080fd5b506101e8610666565b6040516101f59190612426565b60405180910390f35b34801561020a57600080fd5b5061022560048036038101906102209190612441565b610670565b60405161023291906123fc565b60405180910390f35b34801561024757600080fd5b5061025061069f565b60405161025d91906124b0565b60405180910390f35b34801561027257600080fd5b5061028d600480360381019061028891906124cb565b6106a8565b005b34801561029b57600080fd5b506102b660048036038101906102b191906123a1565b610830565b6040516102c391906123fc565b60405180910390f35b3480156102d857600080fd5b506102e1610867565b005b3480156102ef57600080fd5b5061030a600480360381019061030591906123a1565b610879565b005b34801561031857600080fd5b50610333600480360381019061032e91906124f8565b61088f565b005b61034f600480360381019061034a919061265a565b6108a3565b005b34801561035d57600080fd5b506103666109df565b60405161037391906126cf565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e919061278b565b610a98565b005b3480156103b157600080fd5b506103ba610b18565b6040516103c791906123fc565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f291906124cb565b610b2f565b6040516104049190612426565b60405180910390f35b34801561041957600080fd5b50610422610b78565b005b34801561043057600080fd5b5061044b600480360381019061044691906123a1565b610b8c565b005b34801561045957600080fd5b50610462610bac565b005b34801561047057600080fd5b50610479610d76565b005b34801561048757600080fd5b50610490610d88565b60405161049d9190612812565b60405180910390f35b3480156104b257600080fd5b506104bb610db2565b6040516104c891906122d7565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906123a1565b610e44565b60405161050591906123fc565b60405180910390f35b34801561051a57600080fd5b50610535600480360381019061053091906123a1565b610ebb565b60405161054291906123fc565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d919061282d565b610ede565b60405161057f9190612426565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa91906124cb565b610f65565b005b6060603680546105c09061289c565b80601f01602080910402602001604051908101604052809291908181526020018280546105ec9061289c565b80156106395780601f1061060e57610100808354040283529160200191610639565b820191906000526020600020905b81548152906001019060200180831161061c57829003601f168201915b5050505050905090565b60008061064e610fe8565b905061065b818585610ff0565b600191505092915050565b6000603554905090565b60008061067b610fe8565b90506106888582856111b9565b610693858585611245565b60019150509392505050565b60006012905090565b7f000000000000000000000000564477025731ee7197eecf2c4a0d0106cc3e457273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072d9061293f565b60405180910390fd5b7f000000000000000000000000564477025731ee7197eecf2c4a0d0106cc3e457273ffffffffffffffffffffffffffffffffffffffff166107756114be565b73ffffffffffffffffffffffffffffffffffffffff16146107cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c2906129d1565b60405180910390fd5b6107d481611515565b61082d81600067ffffffffffffffff8111156107f3576107f261252f565b5b6040519080825280601f01601f1916602001820160405280156108255781602001600182028036833780820191505090505b506000611520565b50565b60008061083b610fe8565b905061085c81858561084d8589610ede565b6108579190612a20565b610ff0565b600191505092915050565b61086f61168e565b61087761170c565b565b61088161168e565b61088b828261176f565b5050565b6108a061089a610fe8565b826118c6565b50565b7f000000000000000000000000564477025731ee7197eecf2c4a0d0106cc3e457273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603610931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109289061293f565b60405180910390fd5b7f000000000000000000000000564477025731ee7197eecf2c4a0d0106cc3e457273ffffffffffffffffffffffffffffffffffffffff166109706114be565b73ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd906129d1565b60405180910390fd5b6109cf82611515565b6109db82826001611520565b5050565b60007f000000000000000000000000564477025731ee7197eecf2c4a0d0106cc3e457273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690612ac6565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6000610aa2610fe8565b905081604051610ab29190612b22565b604051809103902083604051610ac89190612b22565b60405180910390208273ffffffffffffffffffffffffffffffffffffffff167f5c0bf6ba470f83fe17f0b8fd9fdf4799eaeb1b63bbf39e4868fc7e0798e7abeb60405160405180910390a4505050565b6000609760009054906101000a900460ff16905090565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b8061168e565b610b8a6000611a95565b565b610b9e82610b98610fe8565b836111b9565b610ba882826118c6565b5050565b60008060019054906101000a900460ff16159050808015610bdd5750600160008054906101000a900460ff1660ff16105b80610c0a5750610bec30611b5b565b158015610c095750600160008054906101000a900460ff1660ff16145b5b610c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4090612bab565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c86576001600060016101000a81548160ff0219169083151502179055505b610cfa6040518060400160405280601081526020017f446d61696c204d61696c20546f6b656e000000000000000000000000000000008152506040518060400160405280600381526020017f444d540000000000000000000000000000000000000000000000000000000000815250611b7e565b610d02611bdb565b610d0a611c2c565b610d12611c85565b610d1a611cde565b8015610d735760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d6a9190612c10565b60405180910390a15b50565b610d7e61168e565b610d86611d2f565b565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060378054610dc19061289c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ded9061289c565b8015610e3a5780601f10610e0f57610100808354040283529160200191610e3a565b820191906000526020600020905b815481529060010190602001808311610e1d57829003601f168201915b5050505050905090565b600080610e4f610fe8565b90506000610e5d8286610ede565b905083811015610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990612c9d565b60405180910390fd5b610eaf8286868403610ff0565b60019250505092915050565b600080610ec6610fe8565b9050610ed3818585611245565b600191505092915050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f6d61168e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390612d2f565b60405180910390fd5b610fe581611a95565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690612dc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590612e53565b60405180910390fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ac9190612426565b60405180910390a3505050565b60006111c58484610ede565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461123f5781811015611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122890612ebf565b60405180910390fd5b61123e8484848403610ff0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90612f51565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a90612fe3565b60405180910390fd5b61132e838383611d92565b6000603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac90613075565b60405180910390fd5b818103603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a59190612426565b60405180910390a36114b8848484611daa565b50505050565b60006114ec7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611daf565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61151d61168e565b50565b61154c7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611db9565b60000160009054906101000a900460ff16156115705761156b83611dc3565b611689565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156115d857506040513d601f19601f820116820180604052508101906115d591906130c1565b60015b611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90613160565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461167c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611673906131f2565b60405180910390fd5b50611688838383611e7c565b5b505050565b611696610fe8565b73ffffffffffffffffffffffffffffffffffffffff166116b4610d88565b73ffffffffffffffffffffffffffffffffffffffff161461170a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117019061325e565b60405180910390fd5b565b611714611ea8565b6000609760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611758610fe8565b6040516117659190612812565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d5906132ca565b60405180910390fd5b6117ea60008383611d92565b80603560008282546117fc9190612a20565b9250508190555080603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118ae9190612426565b60405180910390a36118c260008383611daa565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c9061335c565b60405180910390fd5b61194182600083611d92565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bf906133ee565b60405180910390fd5b818103603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603560008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a7c9190612426565b60405180910390a3611a9083600084611daa565b505050565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc490613480565b60405180910390fd5b611bd78282611ef1565b5050565b600060019054906101000a900460ff16611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190613480565b60405180910390fd5b565b600060019054906101000a900460ff16611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290613480565b60405180910390fd5b611c83611f64565b565b600060019054906101000a900460ff16611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb90613480565b60405180910390fd5b611cdc611fd0565b565b600060019054906101000a900460ff16611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490613480565b60405180910390fd5b565b611d37612031565b6001609760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611d7b610fe8565b604051611d889190612812565b60405180910390a1565b611d9a612031565b611da583838361207b565b505050565b505050565b6000819050919050565b6000819050919050565b611dcc81611b5b565b611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0290613512565b60405180910390fd5b80611e387f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611daf565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e8583612080565b600082511180611e925750805b15611ea357611ea183836120cf565b505b505050565b611eb0610b18565b611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee69061357e565b60405180910390fd5b565b600060019054906101000a900460ff16611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790613480565b60405180910390fd5b8160369081611f4f9190613740565b508060379081611f5f9190613740565b505050565b600060019054906101000a900460ff16611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa90613480565b60405180910390fd5b6000609760006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff1661201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690613480565b60405180910390fd5b61202f61202a610fe8565b611a95565b565b612039610b18565b15612079576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120709061385e565b60405180910390fd5b565b505050565b61208981611dc3565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606120f48383604051806060016040528060278152602001613949602791396120fc565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161212691906138c5565b600060405180830381855af49150503d8060008114612161576040519150601f19603f3d011682016040523d82523d6000602084013e612166565b606091505b509150915061217786838387612182565b925050509392505050565b606083156121e45760008351036121dc5761219c85611b5b565b6121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290613928565b60405180910390fd5b5b8290506121ef565b6121ee83836121f7565b5b949350505050565b60008251111561220a5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e91906122d7565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b83811015612281578082015181840152602081019050612266565b60008484015250505050565b6000601f19601f8301169050919050565b60006122a982612247565b6122b38185612252565b93506122c3818560208601612263565b6122cc8161228d565b840191505092915050565b600060208201905081810360008301526122f1818461229e565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123388261230d565b9050919050565b6123488161232d565b811461235357600080fd5b50565b6000813590506123658161233f565b92915050565b6000819050919050565b61237e8161236b565b811461238957600080fd5b50565b60008135905061239b81612375565b92915050565b600080604083850312156123b8576123b7612303565b5b60006123c685828601612356565b92505060206123d78582860161238c565b9150509250929050565b60008115159050919050565b6123f6816123e1565b82525050565b600060208201905061241160008301846123ed565b92915050565b6124208161236b565b82525050565b600060208201905061243b6000830184612417565b92915050565b60008060006060848603121561245a57612459612303565b5b600061246886828701612356565b935050602061247986828701612356565b925050604061248a8682870161238c565b9150509250925092565b600060ff82169050919050565b6124aa81612494565b82525050565b60006020820190506124c560008301846124a1565b92915050565b6000602082840312156124e1576124e0612303565b5b60006124ef84828501612356565b91505092915050565b60006020828403121561250e5761250d612303565b5b600061251c8482850161238c565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125678261228d565b810181811067ffffffffffffffff821117156125865761258561252f565b5b80604052505050565b60006125996122f9565b90506125a5828261255e565b919050565b600067ffffffffffffffff8211156125c5576125c461252f565b5b6125ce8261228d565b9050602081019050919050565b82818337600083830152505050565b60006125fd6125f8846125aa565b61258f565b9050828152602081018484840111156126195761261861252a565b5b6126248482856125db565b509392505050565b600082601f83011261264157612640612525565b5b81356126518482602086016125ea565b91505092915050565b6000806040838503121561267157612670612303565b5b600061267f85828601612356565b925050602083013567ffffffffffffffff8111156126a05761269f612308565b5b6126ac8582860161262c565b9150509250929050565b6000819050919050565b6126c9816126b6565b82525050565b60006020820190506126e460008301846126c0565b92915050565b600067ffffffffffffffff8211156127055761270461252f565b5b61270e8261228d565b9050602081019050919050565b600061272e612729846126ea565b61258f565b90508281526020810184848401111561274a5761274961252a565b5b6127558482856125db565b509392505050565b600082601f83011261277257612771612525565b5b813561278284826020860161271b565b91505092915050565b600080604083850312156127a2576127a1612303565b5b600083013567ffffffffffffffff8111156127c0576127bf612308565b5b6127cc8582860161275d565b925050602083013567ffffffffffffffff8111156127ed576127ec612308565b5b6127f98582860161275d565b9150509250929050565b61280c8161232d565b82525050565b60006020820190506128276000830184612803565b92915050565b6000806040838503121561284457612843612303565b5b600061285285828601612356565b925050602061286385828601612356565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128b457607f821691505b6020821081036128c7576128c661286d565b5b50919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612929602c83612252565b9150612934826128cd565b604082019050919050565b600060208201905081810360008301526129588161291c565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006129bb602c83612252565b91506129c68261295f565b604082019050919050565b600060208201905081810360008301526129ea816129ae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a2b8261236b565b9150612a368361236b565b9250828201905080821115612a4e57612a4d6129f1565b5b92915050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000612ab0603883612252565b9150612abb82612a54565b604082019050919050565b60006020820190508181036000830152612adf81612aa3565b9050919050565b600081905092915050565b6000612afc82612247565b612b068185612ae6565b9350612b16818560208601612263565b80840191505092915050565b6000612b2e8284612af1565b915081905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612b95602e83612252565b9150612ba082612b39565b604082019050919050565b60006020820190508181036000830152612bc481612b88565b9050919050565b6000819050919050565b6000819050919050565b6000612bfa612bf5612bf084612bcb565b612bd5565b612494565b9050919050565b612c0a81612bdf565b82525050565b6000602082019050612c256000830184612c01565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612c87602583612252565b9150612c9282612c2b565b604082019050919050565b60006020820190508181036000830152612cb681612c7a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d19602683612252565b9150612d2482612cbd565b604082019050919050565b60006020820190508181036000830152612d4881612d0c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612dab602483612252565b9150612db682612d4f565b604082019050919050565b60006020820190508181036000830152612dda81612d9e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e3d602283612252565b9150612e4882612de1565b604082019050919050565b60006020820190508181036000830152612e6c81612e30565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612ea9601d83612252565b9150612eb482612e73565b602082019050919050565b60006020820190508181036000830152612ed881612e9c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f3b602583612252565b9150612f4682612edf565b604082019050919050565b60006020820190508181036000830152612f6a81612f2e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612fcd602383612252565b9150612fd882612f71565b604082019050919050565b60006020820190508181036000830152612ffc81612fc0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061305f602683612252565b915061306a82613003565b604082019050919050565b6000602082019050818103600083015261308e81613052565b9050919050565b61309e816126b6565b81146130a957600080fd5b50565b6000815190506130bb81613095565b92915050565b6000602082840312156130d7576130d6612303565b5b60006130e5848285016130ac565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b600061314a602e83612252565b9150613155826130ee565b604082019050919050565b600060208201905081810360008301526131798161313d565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006131dc602983612252565b91506131e782613180565b604082019050919050565b6000602082019050818103600083015261320b816131cf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613248602083612252565b915061325382613212565b602082019050919050565b600060208201905081810360008301526132778161323b565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006132b4601f83612252565b91506132bf8261327e565b602082019050919050565b600060208201905081810360008301526132e3816132a7565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613346602183612252565b9150613351826132ea565b604082019050919050565b6000602082019050818103600083015261337581613339565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006133d8602283612252565b91506133e38261337c565b604082019050919050565b60006020820190508181036000830152613407816133cb565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b600061346a602b83612252565b91506134758261340e565b604082019050919050565b600060208201905081810360008301526134998161345d565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006134fc602d83612252565b9150613507826134a0565b604082019050919050565b6000602082019050818103600083015261352b816134ef565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613568601483612252565b915061357382613532565b602082019050919050565b600060208201905081810360008301526135978161355b565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135c3565b61360a86836135c3565b95508019841693508086168417925050509392505050565b600061363d6136386136338461236b565b612bd5565b61236b565b9050919050565b6000819050919050565b61365783613622565b61366b61366382613644565b8484546135d0565b825550505050565b600090565b613680613673565b61368b81848461364e565b505050565b5b818110156136af576136a4600082613678565b600181019050613691565b5050565b601f8211156136f4576136c58161359e565b6136ce846135b3565b810160208510156136dd578190505b6136f16136e9856135b3565b830182613690565b50505b505050565b600082821c905092915050565b6000613717600019846008026136f9565b1980831691505092915050565b60006137308383613706565b9150826002028217905092915050565b61374982612247565b67ffffffffffffffff8111156137625761376161252f565b5b61376c825461289c565b6137778282856136b3565b600060209050601f8311600181146137aa5760008415613798578287015190505b6137a28582613724565b86555061380a565b601f1984166137b88661359e565b60005b828110156137e0578489015182556001820191506020850194506020810190506137bb565b868310156137fd57848901516137f9601f891682613706565b8355505b6001600288020188555050505b505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613848601083612252565b915061385382613812565b602082019050919050565b600060208201905081810360008301526138778161383b565b9050919050565b600081519050919050565b600081905092915050565b600061389f8261387e565b6138a98185613889565b93506138b9818560208601612263565b80840191505092915050565b60006138d18284613894565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613912601d83612252565b915061391d826138dc565b602082019050919050565b6000602082019050818103600083015261394181613905565b905091905056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ada24e0abf9f1e20949e60d9c55d9bcf2698c87949a4b980eb41348fcd6c328364736f6c63430008120033" + }, + { + "address": "0x897e2c9c4f8ac1f38729979ac4794ccf5ed83397", + "nonce": 16, + "balance": "0x0000000000000000000000000000000000000000000000000014b80ff8a81b80", + "code": "0x" + }, + { + "address": "0x44a19e678f803cc001229dfce41f104bb9b9c312", + "nonce": 43, + "balance": "0x0000000000000000000000000000000000000000000000000019bde00206fc57", + "code": "0x" + }, + { + "address": "0x621972ebcee38b4f2d2fd1627b7add8a456637c4", + "nonce": 29, + "balance": "0x0000000000000000000000000000000000000000000000000006eba72368d7b9", + "code": "0x" + }, + { + "address": "0x106ff529e927fcffd2a4c6e4290f39e2ebc20b44", + "nonce": 1, + "balance": "0x00000000000000000000000000000000000000000000000002ade749fb4f1283", + "code": "0x" + }, + { + "address": "0x0f2af301d159b5894533ecb30cda92aa57eb7d9e", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100f15760003560e01c806301ffc9a7146100f657806306fdde031461011e578063081812fc14610133578063095ea7b31461015357806318160ddd1461016857806323b872dd1461017a5780632f745c591461018d57806342842e0e146101a0578063481c6a75146101b35780634f6ccce7146101c65780636352211e146101d95780636a627842146101ec5780636c0360eb146101ff57806370a082311461020757806395d89b411461021a578063a22cb46514610222578063b88d4fde14610235578063c87b56dd14610248578063e985e9c51461025b575b600080fd5b610109610104366004610eb6565b61026e565b60405190151581526020015b60405180910390f35b610126610299565b6040516101159190610f20565b610146610141366004610f33565b61032b565b6040516101159190610f4c565b610166610161366004610f7c565b610340565b005b6008545b604051908152602001610115565b610166610188366004610fa6565b61034f565b61016c61019b366004610f7c565b6103e3565b6101666101ae366004610fa6565b61043a565b600c54610146906001600160a01b031681565b61016c6101d4366004610f33565b61045a565b6101466101e7366004610f33565b6104ae565b6101666101fa366004610fe2565b6104b9565b610126610530565b61016c610215366004610fe2565b6105be565b610126610606565b610166610230366004610ffd565b610615565b61016661024336600461104f565b610620565b610126610256366004610f33565b610637565b61010961026936600461112a565b610641565b60006001600160e01b0319821663780e9d6360e01b148061029357506102938261066f565b92915050565b6060600080546102a89061115d565b80601f01602080910402602001604051908101604052809291908181526020018280546102d49061115d565b80156103215780601f106102f657610100808354040283529160200191610321565b820191906000526020600020905b81548152906001019060200180831161030457829003601f168201915b5050505050905090565b6000610336826106bf565b50610293826106f7565b61034b828233610712565b5050565b6001600160a01b038216610382576000604051633250574960e11b81526004016103799190610f4c565b60405180910390fd5b600061038f83833361071f565b9050836001600160a01b0316816001600160a01b0316146103dd576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610379565b50505050565b60006103ee836105be565b821061041157828260405163295f44f760e21b8152600401610379929190611197565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61045583838360405180602001604052806000815250610620565b505050565b600061046560085490565b82106104895760008260405163295f44f760e21b8152600401610379929190611197565b6008828154811061049c5761049c6111b0565b90600052602060002001549050919050565b6000610293826106bf565b600c546001600160a01b0316331461050b5760405162461bcd60e51b815260206004820152601560248201527413db9b1e481b585b9859d95c8818d85b881b5a5b9d605a1b6044820152606401610379565b6001600a600082825461051e91906111dc565b9091555050600a5461034b82826107f4565b600b805461053d9061115d565b80601f01602080910402602001604051908101604052809291908181526020018280546105699061115d565b80156105b65780601f1061058b576101008083540402835291602001916105b6565b820191906000526020600020905b81548152906001019060200180831161059957829003601f168201915b505050505081565b60006001600160a01b0382166105ea5760006040516322718ad960e21b81526004016103799190610f4c565b506001600160a01b031660009081526003602052604090205490565b6060600180546102a89061115d565b61034b33838361080e565b61062b84848461034f565b6103dd848484846108a4565b60606102936109bb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b14806106a057506001600160e01b03198216635b5e139f60e01b145b8061029357506301ffc9a760e01b6001600160e01b0319831614610293565b6000806106cb836109ca565b90506001600160a01b03811661029357604051637e27328960e01b815260048101849052602401610379565b6000908152600460205260409020546001600160a01b031690565b61045583838360016109e5565b60008061072d858585610ae2565b90506001600160a01b03811661078a5761078584600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6107ad565b846001600160a01b0316816001600160a01b0316146107ad576107ad8185610bd6565b6001600160a01b0385166107c9576107c484610c67565b6107ec565b846001600160a01b0316816001600160a01b0316146107ec576107ec8585610d16565b949350505050565b61034b828260405180602001604052806000815250610d66565b6001600160a01b0382166108375781604051630b61174360e31b81526004016103799190610f4c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156103dd57604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906108e69033908890879087906004016111ef565b6020604051808303816000875af1925050508015610921575060408051601f3d908101601f1916820190925261091e9181019061122c565b60015b610981573d80801561094f576040519150601f19603f3d011682016040523d82523d6000602084013e610954565b606091505b5080516000036109795783604051633250574960e11b81526004016103799190610f4c565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b146109b45783604051633250574960e11b81526004016103799190610f4c565b5050505050565b6060600b80546102a89061115d565b6000908152600260205260409020546001600160a01b031690565b80806109f957506001600160a01b03821615155b15610ab2576000610a09846106bf565b90506001600160a01b03831615801590610a355750826001600160a01b0316816001600160a01b031614155b8015610a485750610a468184610641565b155b15610a68578260405163a9fbf51f60e01b81526004016103799190610f4c565b8115610ab05783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600080610aee846109ca565b90506001600160a01b03831615610b0a57610b0a818486610d7d565b6001600160a01b03811615610b4857610b276000856000806109e5565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615610b77576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6000610be1836105be565b600083815260076020526040902054909150808214610c34576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090610c7990600190611249565b60008381526009602052604081205460088054939450909284908110610ca157610ca16111b0565b906000526020600020015490508060088381548110610cc257610cc26111b0565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480610cfa57610cfa61125c565b6001900381819060005260206000200160009055905550505050565b60006001610d23846105be565b610d2d9190611249565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b610d708383610dd3565b61045560008484846108a4565b610d88838383610e38565b610455576001600160a01b038316610db657604051637e27328960e01b815260048101829052602401610379565b818160405163177e802f60e01b8152600401610379929190611197565b6001600160a01b038216610dfd576000604051633250574960e11b81526004016103799190610f4c565b6000610e0b8383600061071f565b90506001600160a01b038116156104555760006040516339e3563760e11b81526004016103799190610f4c565b60006001600160a01b038316158015906107ec5750826001600160a01b0316846001600160a01b03161480610e725750610e728484610641565b806107ec5750826001600160a01b0316610e8b836106f7565b6001600160a01b031614949350505050565b6001600160e01b031981168114610eb357600080fd5b50565b600060208284031215610ec857600080fd5b8135610ed381610e9d565b9392505050565b6000815180845260005b81811015610f0057602081850181015186830182015201610ee4565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ed36020830184610eda565b600060208284031215610f4557600080fd5b5035919050565b6001600160a01b0391909116815260200190565b80356001600160a01b0381168114610f7757600080fd5b919050565b60008060408385031215610f8f57600080fd5b610f9883610f60565b946020939093013593505050565b600080600060608486031215610fbb57600080fd5b610fc484610f60565b9250610fd260208501610f60565b9150604084013590509250925092565b600060208284031215610ff457600080fd5b610ed382610f60565b6000806040838503121561101057600080fd5b61101983610f60565b91506020830135801515811461102e57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561106557600080fd5b61106e85610f60565b935061107c60208601610f60565b92506040850135915060608501356001600160401b038082111561109f57600080fd5b818701915087601f8301126110b357600080fd5b8135818111156110c5576110c5611039565b604051601f8201601f19908116603f011681019083821181831017156110ed576110ed611039565b816040528281528a602084870101111561110657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561113d57600080fd5b61114683610f60565b915061115460208401610f60565b90509250929050565b600181811c9082168061117157607f821691505b60208210810361119157634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610293576102936111c6565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061122290830184610eda565b9695505050505050565b60006020828403121561123e57600080fd5b8151610ed381610e9d565b81810381811115610293576102936111c6565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220b98969357de95c6315f64aef7fd3e153951325bbfe2bacd7605e79edba1a271464736f6c63430008140033" + }, + { + "address": "0xd10fbd67ab320d2cdcd2d5b7dd758db233ff6dc1", + "nonce": 25, + "balance": "0x00000000000000000000000000000000000000000000000000155b5f1f19bd52", + "code": "0x" + }, + { + "address": "0x0f95dcec4c7a93f2637eb13b655f2223ea036b59", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033" + }, + { + "address": "0x6129f06f872e80e0ff336aa74507ee1136574dfa", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c80636352211e116100b85780639382f7391161007c5780639382f7391461031457806395d89b4114610332578063a22cb46514610350578063b88d4fde1461036c578063c87b56dd14610388578063e985e9c5146103b857610137565b80636352211e1461026e57806370a082311461029e578063717a002b146102ce578063879dbfed146102ec578063931e2e49146102f657610137565b80631249c58b116100ff5780631249c58b146101f257806318160ddd146101fc57806323b872dd1461021a57806342842e0e146102365780635a56936c1461025257610137565b806301ffc9a71461013c57806302fe53051461016c57806306fdde0314610188578063081812fc146101a6578063095ea7b3146101d6575b600080fd5b61015660048036038101906101519190611cf4565b6103e8565b6040516101639190611d3c565b60405180910390f35b61018660048036038101906101819190611e9d565b6104ca565b005b6101906105f4565b60405161019d9190611f6e565b60405180910390f35b6101c060048036038101906101bb9190611fc6565b610686565b6040516101cd9190612034565b60405180910390f35b6101f060048036038101906101eb919061207b565b6106cc565b005b6101fa6107e4565b005b6102046108c8565b60405161021191906120ca565b60405180910390f35b610234600480360381019061022f91906120e5565b6108ce565b005b610250600480360381019061024b91906120e5565b61095e565b005b61026c60048036038101906102679190612138565b6109ee565b005b61028860048036038101906102839190611fc6565b610b91565b6040516102959190612034565b60405180910390f35b6102b860048036038101906102b39190612178565b610c18565b6040516102c591906120ca565b60405180910390f35b6102d6610cd0565b6040516102e391906120ca565b60405180910390f35b6102f4610cd6565b005b6102fe610ddd565b60405161030b91906120ca565b60405180910390f35b61031c610de3565b6040516103299190612204565b60405180910390f35b61033a610e09565b6040516103479190611f6e565b60405180910390f35b61036a6004803603810190610365919061224b565b610e9b565b005b6103866004803603810190610381919061232c565b610eb1565b005b6103a2600480360381019061039d9190611fc6565b610f13565b6040516103af9190611f6e565b60405180910390f35b6103d260048036038101906103cd91906123af565b610fb0565b6040516103df9190611d3c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104b357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104c357506104c282611044565b5b9050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b81526004016105259190612034565b602060405180830381865afa158015610542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105669190612404565b61059c576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000815114156105d9576040517f3ba0191100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600a90805190602001906105ef929190611be5565b505050565b60606000805461060390612460565b80601f016020809104026020016040519081016040528092919081815260200182805461062f90612460565b801561067c5780601f106106515761010080835404028352916020019161067c565b820191906000526020600020905b81548152906001019060200180831161065f57829003601f168201915b5050505050905090565b6000610691826110ae565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106d782610b91565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073f90612504565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107676110f9565b73ffffffffffffffffffffffffffffffffffffffff1614806107965750610795816107906110f9565b610fb0565b5b6107d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cc90612596565b60405180910390fd5b6107df8383611101565b505050565b600754421015610820576040517ff3c63b2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060085414158015610834575060085442115b1561086b576040517ff3c63b2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610877336009546111ba565b6009600081548092919061088a906125e5565b91905055507f3c3284d117c92d0b1699230960384e794dcba184cc48ff114fe4fed20c9b0565336040516108be9190612034565b60405180910390a1565b60095481565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461094d5760006008541480610915575060085442105b1561094c576040517fa24e573d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6109588484846113d8565b50505050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109dd57600060085414806109a5575060085442105b156109dc576040517fa24e573d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6109e8848484611438565b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b8152600401610a499190612034565b602060405180830381865afa158015610a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8a9190612404565b610ac0576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818142821015610afc576040517fb290253c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008114158015610b0d5750818111155b15610b44576040517f38af65f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600781905550826008819055507f6a476217ed477f13112d8e6543df89c81df26b035019460fecf60943c8ec19ce8484604051610b8392919061262e565b60405180910390a150505050565b600080610b9d83611458565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c06906126a3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8090612735565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b8152600401610d319190612034565b602060405180830381865afa158015610d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d729190612404565b610da8576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426008819055507f3e0a88b7f473f23267f4f675ce2bf9648d402704c089c5dea378f1433a7ba0d460405160405180910390a1565b60075481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610e1890612460565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4490612460565b8015610e915780601f10610e6657610100808354040283529160200191610e91565b820191906000526020600020905b815481529060010190602001808311610e7457829003601f168201915b5050505050905090565b610ead610ea66110f9565b8383611495565b5050565b610ec2610ebc6110f9565b83611602565b610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef8906127c7565b60405180910390fd5b610f0d84848484611697565b50505050565b6060610f1e826110ae565b600a8054610f2b90612460565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5790612460565b8015610fa45780601f10610f7957610100808354040283529160200191610fa4565b820191906000526020600020905b815481529060010190602001808311610f8757829003601f168201915b50505050509050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6110b7816116f3565b6110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed906126a3565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661117483610b91565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190612833565b60405180910390fd5b611233816116f3565b15611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061289f565b60405180910390fd5b611281600083836001611734565b61128a816116f3565b156112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c19061289f565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46113d460008383600161173a565b5050565b6113e96113e36110f9565b82611602565b611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f906127c7565b60405180910390fd5b611433838383611740565b505050565b61145383838360405180602001604052806000815250610eb1565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb9061290b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115f59190611d3c565b60405180910390a3505050565b60008061160e83610b91565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611650575061164f8185610fb0565b5b8061168e57508373ffffffffffffffffffffffffffffffffffffffff1661167684610686565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b6116a2848484611740565b6116ae84848484611a3a565b6116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e49061299d565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff1661171583611458565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b8273ffffffffffffffffffffffffffffffffffffffff1661176082610b91565b73ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad90612a2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90612ac1565b60405180910390fd5b6118338383836001611734565b8273ffffffffffffffffffffffffffffffffffffffff1661185382610b91565b73ffffffffffffffffffffffffffffffffffffffff16146118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a090612a2f565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a35838383600161173a565b505050565b6000611a5b8473ffffffffffffffffffffffffffffffffffffffff16611bc2565b15611bb5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611a846110f9565b8786866040518563ffffffff1660e01b8152600401611aa69493929190612b36565b6020604051808303816000875af1925050508015611ae257506040513d601f19601f82011682018060405250810190611adf9190612b97565b60015b611b65573d8060008114611b12576040519150601f19603f3d011682016040523d82523d6000602084013e611b17565b606091505b50600081511415611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b549061299d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611bba565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611bf190612460565b90600052602060002090601f016020900481019282611c135760008555611c5a565b82601f10611c2c57805160ff1916838001178555611c5a565b82800160010185558215611c5a579182015b82811115611c59578251825591602001919060010190611c3e565b5b509050611c679190611c6b565b5090565b5b80821115611c84576000816000905550600101611c6c565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611cd181611c9c565b8114611cdc57600080fd5b50565b600081359050611cee81611cc8565b92915050565b600060208284031215611d0a57611d09611c92565b5b6000611d1884828501611cdf565b91505092915050565b60008115159050919050565b611d3681611d21565b82525050565b6000602082019050611d516000830184611d2d565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611daa82611d61565b810181811067ffffffffffffffff82111715611dc957611dc8611d72565b5b80604052505050565b6000611ddc611c88565b9050611de88282611da1565b919050565b600067ffffffffffffffff821115611e0857611e07611d72565b5b611e1182611d61565b9050602081019050919050565b82818337600083830152505050565b6000611e40611e3b84611ded565b611dd2565b905082815260208101848484011115611e5c57611e5b611d5c565b5b611e67848285611e1e565b509392505050565b600082601f830112611e8457611e83611d57565b5b8135611e94848260208601611e2d565b91505092915050565b600060208284031215611eb357611eb2611c92565b5b600082013567ffffffffffffffff811115611ed157611ed0611c97565b5b611edd84828501611e6f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f20578082015181840152602081019050611f05565b83811115611f2f576000848401525b50505050565b6000611f4082611ee6565b611f4a8185611ef1565b9350611f5a818560208601611f02565b611f6381611d61565b840191505092915050565b60006020820190508181036000830152611f888184611f35565b905092915050565b6000819050919050565b611fa381611f90565b8114611fae57600080fd5b50565b600081359050611fc081611f9a565b92915050565b600060208284031215611fdc57611fdb611c92565b5b6000611fea84828501611fb1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061201e82611ff3565b9050919050565b61202e81612013565b82525050565b60006020820190506120496000830184612025565b92915050565b61205881612013565b811461206357600080fd5b50565b6000813590506120758161204f565b92915050565b6000806040838503121561209257612091611c92565b5b60006120a085828601612066565b92505060206120b185828601611fb1565b9150509250929050565b6120c481611f90565b82525050565b60006020820190506120df60008301846120bb565b92915050565b6000806000606084860312156120fe576120fd611c92565b5b600061210c86828701612066565b935050602061211d86828701612066565b925050604061212e86828701611fb1565b9150509250925092565b6000806040838503121561214f5761214e611c92565b5b600061215d85828601611fb1565b925050602061216e85828601611fb1565b9150509250929050565b60006020828403121561218e5761218d611c92565b5b600061219c84828501612066565b91505092915050565b6000819050919050565b60006121ca6121c56121c084611ff3565b6121a5565b611ff3565b9050919050565b60006121dc826121af565b9050919050565b60006121ee826121d1565b9050919050565b6121fe816121e3565b82525050565b600060208201905061221960008301846121f5565b92915050565b61222881611d21565b811461223357600080fd5b50565b6000813590506122458161221f565b92915050565b6000806040838503121561226257612261611c92565b5b600061227085828601612066565b925050602061228185828601612236565b9150509250929050565b600067ffffffffffffffff8211156122a6576122a5611d72565b5b6122af82611d61565b9050602081019050919050565b60006122cf6122ca8461228b565b611dd2565b9050828152602081018484840111156122eb576122ea611d5c565b5b6122f6848285611e1e565b509392505050565b600082601f83011261231357612312611d57565b5b81356123238482602086016122bc565b91505092915050565b6000806000806080858703121561234657612345611c92565b5b600061235487828801612066565b945050602061236587828801612066565b935050604061237687828801611fb1565b925050606085013567ffffffffffffffff81111561239757612396611c97565b5b6123a3878288016122fe565b91505092959194509250565b600080604083850312156123c6576123c5611c92565b5b60006123d485828601612066565b92505060206123e585828601612066565b9150509250929050565b6000815190506123fe8161221f565b92915050565b60006020828403121561241a57612419611c92565b5b6000612428848285016123ef565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061247857607f821691505b6020821081141561248c5761248b612431565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006124ee602183611ef1565b91506124f982612492565b604082019050919050565b6000602082019050818103600083015261251d816124e1565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000612580603d83611ef1565b915061258b82612524565b604082019050919050565b600060208201905081810360008301526125af81612573565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006125f082611f90565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612623576126226125b6565b5b600182019050919050565b600060408201905061264360008301856120bb565b61265060208301846120bb565b9392505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061268d601883611ef1565b915061269882612657565b602082019050919050565b600060208201905081810360008301526126bc81612680565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061271f602983611ef1565b915061272a826126c3565b604082019050919050565b6000602082019050818103600083015261274e81612712565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006127b1602d83611ef1565b91506127bc82612755565b604082019050919050565b600060208201905081810360008301526127e0816127a4565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061281d602083611ef1565b9150612828826127e7565b602082019050919050565b6000602082019050818103600083015261284c81612810565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612889601c83611ef1565b915061289482612853565b602082019050919050565b600060208201905081810360008301526128b88161287c565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006128f5601983611ef1565b9150612900826128bf565b602082019050919050565b60006020820190508181036000830152612924816128e8565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000612987603283611ef1565b91506129928261292b565b604082019050919050565b600060208201905081810360008301526129b68161297a565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612a19602583611ef1565b9150612a24826129bd565b604082019050919050565b60006020820190508181036000830152612a4881612a0c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612aab602483611ef1565b9150612ab682612a4f565b604082019050919050565b60006020820190508181036000830152612ada81612a9e565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612b0882612ae1565b612b128185612aec565b9350612b22818560208601611f02565b612b2b81611d61565b840191505092915050565b6000608082019050612b4b6000830187612025565b612b586020830186612025565b612b6560408301856120bb565b8181036060830152612b778184612afd565b905095945050505050565b600081519050612b9181611cc8565b92915050565b600060208284031215612bad57612bac611c92565b5b6000612bbb84828501612b82565b9150509291505056fea2646970667358221220b7cc06e74febd3fafd8402dd922f552470a38f39e04e8e962a0546de8ce7496a64736f6c634300080c0033" + }, + { + "address": "0x447ff8fc8962ff2d8ab758b7d7a0853c2038c996", + "nonce": 16, + "balance": "0x000000000000000000000000000000000000000000000000002e4ab302b3c821", + "code": "0x" + }, + { + "address": "0xf812ba858d9fa57788df0f792ef35752d54863f1", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100965760003560e01c806342afe79a116100695780638d03f4561161004e5780638d03f45614610129578063ca360ae01461013c578063d40e64cc1461014f57600080fd5b806342afe79a1461010357806355c99cd81461011657600080fd5b806303add8c31461009b5780630680ded4146100b0578063082bc047146100d05780630b4cb5d8146100e3575b600080fd5b6100ae6100a936600461286d565b610162565b005b3480156100bc57600080fd5b506100ae6100cb366004612910565b6102bf565b6100ae6100de36600461286d565b610362565b3480156100ef57600080fd5b506100ae6100fe36600461286d565b6103c7565b6100ae610111366004612b0e565b610508565b6100ae61012436600461286d565b610672565b6100ae610137366004612b0e565b610749565b6100ae61014a366004612b0e565b6107d8565b6100ae61015d366004612b0e565b6108a9565b61017260c0820160a08301612c53565b73ffffffffffffffffffffffffffffffffffffffff1663deace8f56101a061010084013560c0860135612c9f565b60e08501356101b560c0870160a08801612c53565b8660c00135866060013587608001358860c00160208101906101d79190612c53565b60405160e089811b7fffffffff00000000000000000000000000000000000000000000000000000000168252600482019790975273ffffffffffffffffffffffffffffffffffffffff958616602482015260448101949094526064840192909252608483015290911660a48201529085013560c482015260e4015b6000604051808303818588803b15801561026b57600080fd5b505af115801561027f573d6000803e3d6000fd5b50505050507fcba69f43792f9f399347222505213b55af8e0b0b54b893085c2e27ecbe1644f1826040516102b39190612d5f565b60405180910390a15050565b6102c76109d6565b60005b8381101561035b576103498383838181106102e7576102e7612eb2565b90506020020160208101906102fc9190612c53565b86868481811061030e5761030e612eb2565b90506020020160208101906103239190612c53565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a4b565b8061035381612ee1565b9150506102ca565b5050505050565b61038161037560a0840160808501612c53565b33308560c00135610b93565b61039160c0820160a08301612c53565b73ffffffffffffffffffffffffffffffffffffffff1663deace8f561010083013560e08501356101b560c0870160a08801612c53565b6103da61037560a0840160808501612c53565b6103ea60c0820160a08301612c53565b73ffffffffffffffffffffffffffffffffffffffff1663eea0d7b260e084013561041a60c0860160a08701612c53565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff909116602483015260c08601356044830152843560648301526020850135608483015284013560a4820152606084013560c4820152608084013560e482015261010401600060405180830381600087803b1580156104c157600080fd5b505af11580156104d5573d6000803e3d6000fd5b505050507fcba69f43792f9f399347222505213b55af8e0b0b54b893085c2e27ecbe1644f1826040516102b39190612d5f565b61052384600001518560c00151858533866101000135610dad565b60c08086019190915261053b90820160a08301612c53565b73ffffffffffffffffffffffffffffffffffffffff1663deace8f58261010001358660e001518760a001518860c00151866060013587608001358860c00160208101906105889190612c53565b60405160e089811b7fffffffff00000000000000000000000000000000000000000000000000000000168252600482019790975273ffffffffffffffffffffffffffffffffffffffff958616602482015260448101949094526064840192909252608483015290911660a48201529085013560c482015260e4015b6000604051808303818588803b15801561061c57600080fd5b505af1158015610630573d6000803e3d6000fd5b50505050507fcba69f43792f9f399347222505213b55af8e0b0b54b893085c2e27ecbe1644f1846040516106649190612f87565b60405180910390a150505050565b61068260c0820160a08301612c53565b73ffffffffffffffffffffffffffffffffffffffff1663eea0d7b260c0840180359060e0860135906106b79060a08801612c53565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff909116602483015260c08701356044830152853560648301526020860135608483015285013560a4820152606085013560c4820152608085013560e482015261010401610252565b61076484600001518560c00151858533866101000135610dad565b60c08086019190915261077c90820160a08301612c53565b73ffffffffffffffffffffffffffffffffffffffff1663deace8f58261010001358660c001516107ac9190612c9f565b8660e001518760a001518860c00151866060013587608001358860c00160208101906105889190612c53565b6107ed84600001518560c00151858533610f4d565b60c08086019190915261080590820160a08301612c53565b60c085015160e086015160a0870151604080517feea0d7b2000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301849052853560648401526020860135608484015285013560a4830152606085013560c4830152608085013560e4830152929092169163eea0d7b2919061010401610603565b6108be84600001518560c00151858533610f4d565b60c0808601919091526108d690820160a08301612c53565b60e085015160a086015160c0870151604080517feea0d7b2000000000000000000000000000000000000000000000000000000008152600481019490945273ffffffffffffffffffffffffffffffffffffffff92831660248501526044840191909152843560648401526020850135608484015284013560a4830152606084013560c4830152608084013560e4830152919091169063eea0d7b29061010401600060405180830381600087803b15801561098f57600080fd5b505af11580156109a3573d6000803e3d6000fd5b505050507fcba69f43792f9f399347222505213b55af8e0b0b54b893085c2e27ecbe1644f1846040516106649190612f87565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6004015473ffffffffffffffffffffffffffffffffffffffff163314610a49576040517f277d76f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73ffffffffffffffffffffffffffffffffffffffff8316610a6b57505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ab8576040517f63ba9bff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282919085169063dd62ed3e90604401602060405180830381865afa158015610b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b519190613099565b1015610b8e57610b6383836000611090565b610b8e83837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611090565b505050565b73ffffffffffffffffffffffffffffffffffffffff8416610be0576040517fd1bebf0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610c2d576040517f21f7434500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015285916000918316906370a0823190602401602060405180830381865afa158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc29190613099565b9050610cd082868686611290565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152849183918516906370a0823190602401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190613099565b610d6e91906130b2565b14610da5576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b600083808203610de9576040517f0503c3ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008686610df86001856130b2565b818110610e0757610e07612eb2565b9050602002810190610e1991906130c5565b610e2a906080810190606001612c53565b90506000610e37826112f4565b905073ffffffffffffffffffffffffffffffffffffffff8216610e6157610e5e34826130b2565b90505b6000610e6d89896113ad565b9050610e7989896114b9565b604080516060810182528c815273ffffffffffffffffffffffffffffffffffffffff89166020820152908101879052610eb4818b8b85611526565b600083610ec0866112f4565b610eca91906130b2565b905073ffffffffffffffffffffffffffffffffffffffff8516610ef457610ef188826130b2565b90505b8b811015610f3d576040517f275c273c000000000000000000000000000000000000000000000000000000008152600481018d9052602481018290526044015b60405180910390fd5b9c9b505050505050505050505050565b600082808203610f89576040517f0503c3ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008585610f986001856130b2565b818110610fa757610fa7612eb2565b9050602002810190610fb991906130c5565b610fca906080810190606001612c53565b90506000610fd7826112f4565b905073ffffffffffffffffffffffffffffffffffffffff821661100157610ffe34826130b2565b90505b600061100d88886113ad565b905061101988886114b9565b6110268a8989898561191c565b600082611032856112f4565b61103c91906130b2565b905089811015611082576040517f275c273c000000000000000000000000000000000000000000000000000000008152600481018b905260248101829052604401610f34565b9a9950505050505050505050565b80158061113057506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e9190613099565b155b6111bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610f34565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b8e9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611be5565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526112ee9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161120e565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff8216156113a5576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561137c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a09190613099565b6113a7565b475b92915050565b60608160008167ffffffffffffffff8111156113cb576113cb61297c565b6040519080825280602002602001820160405280156113f4578160200160208202803683370190505b5090506000805b838110156114ae5786868281811061141557611415612eb2565b905060200281019061142791906130c5565b611438906080810190606001612c53565b9150611443826112f4565b83828151811061145557611455612eb2565b602090810291909101015273ffffffffffffffffffffffffffffffffffffffff82166114a6573483828151811061148e5761148e612eb2565b602002602001018181516114a291906130b2565b9052505b6001016113fb565b509095945050505050565b60005b81811015610b8e57368383838181106114d7576114d7612eb2565b90506020028101906114e991906130c5565b90506114fb60e0820160c08301613103565b1561151d5761151d6115136060830160408401612c53565b8260800135611cf4565b506001016114bc565b602084015160408501518491849184908360018114611835576000868661154e6001856130b2565b81811061155d5761155d612eb2565b905060200281019061156f91906130c5565b611580906080810190606001612c53565b9050600089815b8181101561172d57368d8d838181106115a2576115a2612eb2565b90506020028101906115b491906130c5565b90506115e36115c96060830160408401612c53565b73ffffffffffffffffffffffffffffffffffffffff161590565b8061164657506116466115fc6040830160208401612c53565b73ffffffffffffffffffffffffffffffffffffffff1660009081527f7a8ac5d3b7183f220a0602439da45ea337311d699902d1ed11a3725a714e7f1e602052604090205460ff1690565b801561165d575061165d6115fc6020830183612c53565b80156116e257506116e261167460a0830183613120565b61168391600491600091613185565b61168c916131af565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527f7a8ac5d3b7183f220a0602439da45ea337311d699902d1ed11a3725a714e7f1f602052604090205460ff1690565b611718576040517f9453980400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8e516117249082611e6a565b50600101611587565b505060005b61173d6001856130b2565b81101561182d57600089898381811061175857611758612eb2565b905060200281019061176a91906130c5565b61177b906080810190606001612c53565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611824578682815181106117c2576117c2612eb2565b60200260200101516117d3826112f4565b6117dd91906130b2565b9250600073ffffffffffffffffffffffffffffffffffffffff821615611804576000611806565b865b9050831561182257611822828a61181d84886130b2565b612180565b505b50600101611732565b505050611910565b8760005b8181101561190d57368b8b8381811061185457611854612eb2565b905060200281019061186691906130c5565b905061187b6115c96060830160408401612c53565b8061189457506118946115fc6040830160208401612c53565b80156118ab57506118ab6115fc6020830183612c53565b80156118c257506118c261167460a0830183613120565b6118f8576040517f9453980400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c516119049082611e6a565b50600101611839565b50505b50505050505050505050565b838383838260018114611b0f57600085856119386001856130b2565b81811061194757611947612eb2565b905060200281019061195991906130c5565b61196a906080810190606001612c53565b9050600089815b81811015611a4357368d8d8381811061198c5761198c612eb2565b905060200281019061199e91906130c5565b90506119b36115c96060830160408401612c53565b806119cc57506119cc6115fc6040830160208401612c53565b80156119e357506119e36115fc6020830183612c53565b80156119fa57506119fa61167460a0830183613120565b611a30576040517f9453980400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a3a8f82611e6a565b50600101611971565b505060005b611a536001856130b2565b81101561182d576000888883818110611a6e57611a6e612eb2565b9050602002810190611a8091906130c5565b611a91906080810190606001612c53565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b0657858281518110611ad857611ad8612eb2565b6020026020010151611ae9826112f4565b611af391906130b2565b92508215611b0657611b06818885612180565b50600101611a48565b8760005b8181101561190d57368b8b83818110611b2e57611b2e612eb2565b9050602002810190611b4091906130c5565b9050611b556115c96060830160408401612c53565b80611b6e5750611b6e6115fc6040830160208401612c53565b8015611b855750611b856115fc6020830183612c53565b8015611b9c5750611b9c61167460a0830183613120565b611bd2576040517f9453980400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bdc8d82611e6a565b50600101611b13565b6000611c47826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121b19092919063ffffffff16565b9050805160001480611c68575080806020019051810190611c6891906131f7565b610b8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610f34565b80600003611d2e576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611d875780341015611d83576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e189190613099565b905081811015611e5e576040517fcf4791810000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610f34565b610b8e83333085610b93565b611e80611e7a6020830183612c53565b3b151590565b611eb6576040517f6eefed2000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60808101356000819003611ef6576040517fe46e079c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611f0b6115c96060850160408601612c53565b611f16576000611f1c565b82608001355b90506000611f38611f336060860160408701612c53565b6112f4565b90506000611f4f611f336080870160608801612c53565b905082600003611f8657611f86611f6c6060870160408801612c53565b611f7c6040880160208901612c53565b8760800135610a4b565b8460800135821015611fd1576040517fcf4791810000000000000000000000000000000000000000000000000000000081526080860135600482015260248101839052604401610f34565b600080611fe16020880188612c53565b73ffffffffffffffffffffffffffffffffffffffff168561200560a08a018a613120565b604051612013929190613214565b60006040518083038185875af1925050503d8060008114612050576040519150601f19603f3d011682016040523d82523d6000602084013e612055565b606091505b5091509150816120a057600061206a826121c8565b9050806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f349190613224565b60006120b5611f3360808a0160608b01612c53565b90507f7bfdfdb5e3a3776976e53cb0607060f54c5312701c8cba1155cc4d5394440b38896120e660208b018b612c53565b6120f660608c0160408d01612c53565b61210660808d0160608e01612c53565b8c608001358987116121185786612122565b6121228a886130b2565b6040805196875273ffffffffffffffffffffffffffffffffffffffff95861660208801529385169386019390935292166060840152608083019190915260a08201524260c082015260e00160405180910390a1505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316156121a757610b8e838383612246565b610b8e82826123c2565b60606121c084846000856124ec565b949350505050565b606060448251101561220d57505060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000602082015290565b6000612229600480855161222191906130b2565b859190612605565b90508080602001905181019061223f9190613237565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8316612293576040517fd1bebf0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166122e0576040517f21f7434500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa15801561234d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123719190613099565b9050808211156123b7576040517fcf4791810000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610f34565b6112ee84848461271f565b73ffffffffffffffffffffffffffffffffffffffff821661240f576040517f21f7434500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b47811115612452576040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052476024820152604401610f34565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146124ac576040519150601f19603f3d011682016040523d82523d6000602084013e6124b1565b606091505b5050905080610b8e576040517f5a04673700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608247101561257e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610f34565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125a791906132ae565b60006040518083038185875af1925050503d80600081146125e4576040519150601f19603f3d011682016040523d82523d6000602084013e6125e9565b606091505b50915091506125fa87838387612775565b979650505050505050565b60608161261381601f612c9f565b101561264b576040517f47aaf07a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126558284612c9f565b8451101561268f576040517f3b99b53d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060821580156126ae5760405191506000825260208201604052612716565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156126e75780518352602092830192016126cf565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b8e9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161120e565b6060831561280b5782516000036128045773ffffffffffffffffffffffffffffffffffffffff85163b612804576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f34565b50816121c0565b6121c083838151156128205781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f349190613224565b6000610120828403121561286757600080fd5b50919050565b60008061014080848603121561288257600080fd5b833567ffffffffffffffff81111561289957600080fd5b84018086038213156128aa57600080fd5b92506128bb90508460208501612854565b90509250929050565b60008083601f8401126128d657600080fd5b50813567ffffffffffffffff8111156128ee57600080fd5b6020830191508360208260051b850101111561290957600080fd5b9250929050565b6000806000806040858703121561292657600080fd5b843567ffffffffffffffff8082111561293e57600080fd5b61294a888389016128c4565b9096509450602087013591508082111561296357600080fd5b50612970878288016128c4565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff811182821017156129cf576129cf61297c565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612a1c57612a1c61297c565b604052919050565b600067ffffffffffffffff821115612a3e57612a3e61297c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112612a7b57600080fd5b8135612a8e612a8982612a24565b6129d5565b818152846020838601011115612aa357600080fd5b816020850160208301376000918101602001919091529392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114612ae257600080fd5b50565b8035612af081612ac0565b919050565b8015158114612ae257600080fd5b8035612af081612af5565b6000806000806101608587031215612b2557600080fd5b843567ffffffffffffffff80821115612b3d57600080fd5b908601906101408289031215612b5257600080fd5b612b5a6129ab565b82358152602083013582811115612b7057600080fd5b612b7c8a828601612a6a565b602083015250604083013582811115612b9457600080fd5b612ba08a828601612a6a565b604083015250612bb260608401612ae5565b6060820152612bc360808401612ae5565b6080820152612bd460a08401612ae5565b60a082015260c083013560c082015260e083013560e0820152610100612bfb818501612b03565b90820152610120612c0d848201612b03565b9082015295506020870135915080821115612c2757600080fd5b50612c34878288016128c4565b9094509250612c4890508660408701612854565b905092959194509250565b600060208284031215612c6557600080fd5b813561223f81612ac0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156113a7576113a7612c70565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612ce757600080fd5b830160208101925035905067ffffffffffffffff811115612d0757600080fd5b80360382131561290957600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152813560208201526000612d796020840184612cb2565b610140806040860152612d9161016086018385612d16565b9250612da06040870187612cb2565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868503016060870152612dd7848483612d16565b935050612de660608701612ae5565b73ffffffffffffffffffffffffffffffffffffffff811660808701529150612e1060808701612ae5565b73ffffffffffffffffffffffffffffffffffffffff811660a08701529150612e3a60a08701612ae5565b73ffffffffffffffffffffffffffffffffffffffff811660c0870152915060c086013560e0860152610100915060e086013582860152612e7b828701612b03565b9150610120612e8d8187018415159052565b612e98818801612b03565b925050612ea88186018315159052565b5090949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f1257612f12612c70565b5060010190565b60005b83811015612f34578181015183820152602001612f1c565b50506000910152565b60008151808452612f55816020860160208601612f19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081528151602082015260006020830151610140806040850152612fb0610160850183612f3d565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858403016060860152612feb8382612f3d565b9250506060850151613015608086018273ffffffffffffffffffffffffffffffffffffffff169052565b50608085015173ffffffffffffffffffffffffffffffffffffffff811660a08601525060a085015173ffffffffffffffffffffffffffffffffffffffff811660c08601525060c085015160e085015260e08501516101008181870152808701519150506101206130888187018315159052565b860151801515838701529050612ea8565b6000602082840312156130ab57600080fd5b5051919050565b818103818111156113a7576113a7612c70565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218336030181126130f957600080fd5b9190910192915050565b60006020828403121561311557600080fd5b813561223f81612af5565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261315557600080fd5b83018035915067ffffffffffffffff82111561317057600080fd5b60200191503681900382131561290957600080fd5b6000808585111561319557600080fd5b838611156131a257600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156131ef5780818660040360031b1b83161692505b505092915050565b60006020828403121561320957600080fd5b815161223f81612af5565b8183823760009101908152919050565b60208152600061223f6020830184612f3d565b60006020828403121561324957600080fd5b815167ffffffffffffffff81111561326057600080fd5b8201601f8101841361327157600080fd5b805161327f612a8982612a24565b81815285602083850101111561329457600080fd5b6132a5826020830160208601612f19565b95945050505050565b600082516130f9818460208701612f1956fea2646970667358221220c3ec4a031130eb7a68802607d4750e58453077ffece05c14ec44f063738aa29864736f6c63430008110033" + }, + { + "address": "0x847c6bd970b7af8be8330123fc6408878ab9727c", + "nonce": 13, + "balance": "0x0000000000000000000000000000000000000000000000000010e430dc1fedcd", + "code": "0x" + }, + { + "address": "0xd06c066a909186500bbe6fc178e13992e832d664", + "nonce": 3, + "balance": "0x0000000000000000000000000000000000000000000000000033f11c63ebfea4", + "code": "0x" + }, + { + "address": "0x743281db4c21f138a62be1b8e9d3aa0ad167c7ee", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e8383604051806060016040528060278152602001610268602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b6060600080856001600160a01b0316856040516100e09190610218565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091506101318683838761013b565b9695505050505050565b606083156101ac5782516101a5576001600160a01b0385163b6101a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b50816101b6565b6101b683836101be565b949350505050565b8151156101ce5781518083602001fd5b8060405162461bcd60e51b815260040161019c9190610234565b60005b838110156102035781810151838201526020016101eb565b83811115610212576000848401525b50505050565b6000825161022a8184602087016101e8565b9190910192915050565b60208152600082518060208401526102538160408501602087016101e8565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ff8e6f2d761d58b3bd984933269e01a7ff1f70a460b808056daa4cff1ee8ab6964736f6c63430008090033" + }, + { + "address": "0x3bf6b744459282fee0d17793d604092d92b1841d", + "nonce": 62, + "balance": "0x000000000000000000000000000000000000000000000000000cae09d95a93b5", + "code": "0x" + }, + { + "address": "0xc64a931356e0e25c280224b80fa4c87e6131e1d6", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c8063704802751161010f578063a923fc40116100a2578063cf456ae711610071578063cf456ae714610492578063cfad57a2146104a5578063dd62ed3e146104b8578063dfbaefb1146104f157600080fd5b8063a923fc4014610434578063aa271e1a14610447578063af640d0f1461046a578063c93be6361461048957600080fd5b806395d89b41116100de57806395d89b41146103f35780639cb7de4b146103fb5780639dc29fac1461040e578063a9059cbb1461042157600080fd5b8063704802751461038c57806370a082311461039f578063817b1cd2146103c85780639554381a146103d057600080fd5b806327e235e31161018757806346ea87af1161015657806346ea87af1461031857806355b6ed5c1461033b5780635a47a1a714610366578063602172671461037957600080fd5b806327e235e3146102a8578063313ce567146102c857806340c10f19146102e2578063429b62e5146102f557600080fd5b806312d43a51116101c357806312d43a51146102405780631785f53c1461026b57806318160ddd1461027e57806323b872dd1461029557600080fd5b806301e33667146101ea57806306fdde03146101ff578063095ea7b31461021d575b600080fd5b6101fd6101f83660046113c3565b6104fe565b005b61020761054a565b6040516102149190611423565b60405180910390f35b61023061022b366004611456565b6105d8565b6040519015158152602001610214565b600454610253906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b6101fd610279366004611480565b6105ef565b61028760025481565b604051908152602001610214565b6102306102a33660046113c3565b61063a565b6102876102b6366004611480565b60056020526000908152604090205481565b6102d0601281565b60405160ff9091168152602001610214565b6101fd6102f0366004611456565b610741565b610230610303366004611480565b60086020526000908152604090205460ff1681565b610230610326366004611480565b600a6020526000908152604090205460ff1681565b61028761034936600461149b565b600660209081526000928352604080842090915290825290205481565b6101fd6103743660046114dc565b6107ae565b610287610387366004611480565b6107eb565b6101fd61039a366004611480565b610830565b6102876103ad366004611480565b6001600160a01b031660009081526005602052604090205490565b61028761087e565b6102306103de366004611480565b60076020526000908152604090205460ff1681565b610207610895565b6101fd6104093660046114f9565b6108a2565b6101fd61041c366004611456565b6108f7565b61023061042f366004611456565b610960565b6101fd6104423660046115d3565b61096d565b610230610455366004611480565b600b6020526000908152604090205460ff1681565b60408051808201909152600381526204c4c560ec1b6020820152610207565b61028760035481565b6101fd6104a03660046114f9565b6109b0565b6101fd6104b3366004611480565b610a05565b6102876104c636600461149b565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6009546102309060ff1681565b6004546001600160a01b031633146105315760405162461bcd60e51b815260040161052890611637565b60405180910390fd5b6105456001600160a01b0384168383610a51565b505050565b6000805461055790611665565b80601f016020809104026020016040519081016040528092919081815260200182805461058390611665565b80156105d05780601f106105a5576101008083540402835291602001916105d0565b820191906000526020600020905b8154815290600101906020018083116105b357829003601f168201915b505050505081565b60006105e5338484610aa3565b5060015b92915050565b6004546001600160a01b031633146106195760405162461bcd60e51b815260040161052890611637565b6001600160a01b03166000908152600860205260409020805460ff19169055565b336000908152600a602052604081205460ff16156106655761065d848484610bd1565b50600161073a565b6001600160a01b03841660009081526006602090815260408083203384529091529020548211156106ed5760405162461bcd60e51b815260206004820152602c60248201527f42617365546f6b656e3a207472616e7366657220616d6f756e7420657863656560448201526b647320616c6c6f77616e636560a01b6064820152608401610528565b6001600160a01b038416600090815260066020908152604080832033845290915281205461071c9084906116b5565b9050610729853383610aa3565b610734858585610bd1565b60019150505b9392505050565b336000908152600b602052604090205460ff166107a05760405162461bcd60e51b815260206004820152601c60248201527f4d696e7461626c6542617365546f6b656e3a20666f7262696464656e000000006044820152606401610528565b6107aa8282610ea4565b5050565b6004546001600160a01b031633146107d85760405162461bcd60e51b815260040161052890611637565b6009805460ff1916911515919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561081457506000919050565b506001600160a01b031660009081526005602052604090205490565b6004546001600160a01b0316331461085a5760405162461bcd60e51b815260040161052890611637565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b600060035460025461089091906116b5565b905090565b6001805461055790611665565b6004546001600160a01b031633146108cc5760405162461bcd60e51b815260040161052890611637565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b336000908152600b602052604090205460ff166109565760405162461bcd60e51b815260206004820152601c60248201527f4d696e7461626c6542617365546f6b656e3a20666f7262696464656e000000006044820152606401610528565b6107aa8282610fc0565b60006105e5338484610bd1565b6004546001600160a01b031633146109975760405162461bcd60e51b815260040161052890611637565b60006109a38382611716565b5060016105458282611716565b6004546001600160a01b031633146109da5760405162461bcd60e51b815260040161052890611637565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6004546001600160a01b03163314610a2f5760405162461bcd60e51b815260040161052890611637565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261054590849061115a565b6001600160a01b038316610b0a5760405162461bcd60e51b815260206004820152602860248201527f42617365546f6b656e3a20617070726f76652066726f6d20746865207a65726f604482015267206164647265737360c01b6064820152608401610528565b6001600160a01b038216610b6f5760405162461bcd60e51b815260206004820152602660248201527f42617365546f6b656e3a20617070726f766520746f20746865207a65726f206160448201526564647265737360d01b6064820152608401610528565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610c395760405162461bcd60e51b815260206004820152602960248201527f42617365546f6b656e3a207472616e736665722066726f6d20746865207a65726044820152686f206164647265737360b81b6064820152608401610528565b6001600160a01b038216610c9f5760405162461bcd60e51b815260206004820152602760248201527f42617365546f6b656e3a207472616e7366657220746f20746865207a65726f206044820152666164647265737360c81b6064820152608401610528565b60095460ff1615610d1757336000908152600a602052604090205460ff16610d175760405162461bcd60e51b815260206004820152602560248201527f42617365546f6b656e3a206d73672e73656e646572206e6f742077686974656c6044820152641a5cdd195960da1b6064820152608401610528565b6001600160a01b038316600090815260056020526040902054811115610d925760405162461bcd60e51b815260206004820152602a60248201527f42617365546f6b656e3a207472616e7366657220616d6f756e7420657863656560448201526964732062616c616e636560b01b6064820152608401610528565b6001600160a01b038316600090815260056020526040902054610db69082906116b5565b6001600160a01b038085166000908152600560205260408082209390935590841681522054610de69082906117d6565b6001600160a01b0380841660009081526005602090815260408083209490945591861681526007909152205460ff1615610e2c5780600354610e2891906116b5565b6003555b6001600160a01b03821660009081526007602052604090205460ff1615610e5f5780600354610e5b91906117d6565b6003555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bc491815260200190565b6001600160a01b038216610f065760405162461bcd60e51b815260206004820152602360248201527f42617365546f6b656e3a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610528565b80600254610f1491906117d6565b6002556001600160a01b038216600090815260056020526040902054610f3b9082906117d6565b6001600160a01b03831660009081526005602090815260408083209390935560079052205460ff1615610f7a5780600354610f7691906117d6565b6003555b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6001600160a01b0382166110245760405162461bcd60e51b815260206004820152602560248201527f42617365546f6b656e3a206275726e2066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610528565b6001600160a01b03821660009081526005602052604090205481111561109b5760405162461bcd60e51b815260206004820152602660248201527f42617365546f6b656e3a206275726e20616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610528565b6001600160a01b0382166000908152600560205260409020546110bf9082906116b5565b6001600160a01b0383166000908152600560205260409020556002546110e69082906116b5565b6002556001600160a01b03821660009081526007602052604090205460ff161561111c578060035461111891906116b5565b6003555b6040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610fb4565b60006111af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661122f9092919063ffffffff16565b80519091501561054557808060200190518101906111cd91906117e9565b6105455760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610528565b50565b606061123e8484600085611246565b949350505050565b6060824710156112a75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610528565b843b6112f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610528565b600080866001600160a01b031685876040516113119190611806565b60006040518083038185875af1925050503d806000811461134e576040519150601f19603f3d011682016040523d82523d6000602084013e611353565b606091505b509150915061136382828661136e565b979650505050505050565b6060831561137d57508161073a565b82511561138d5782518084602001fd5b8160405162461bcd60e51b81526004016105289190611423565b80356001600160a01b03811681146113be57600080fd5b919050565b6000806000606084860312156113d857600080fd5b6113e1846113a7565b92506113ef602085016113a7565b9150604084013590509250925092565b60005b8381101561141a578181015183820152602001611402565b50506000910152565b60208152600082518060208401526114428160408501602087016113ff565b601f01601f19169190910160400192915050565b6000806040838503121561146957600080fd5b611472836113a7565b946020939093013593505050565b60006020828403121561149257600080fd5b61073a826113a7565b600080604083850312156114ae57600080fd5b6114b7836113a7565b91506114c5602084016113a7565b90509250929050565b801515811461122c57600080fd5b6000602082840312156114ee57600080fd5b813561073a816114ce565b6000806040838503121561150c57600080fd5b611515836113a7565b91506020830135611525816114ce565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261155757600080fd5b813567ffffffffffffffff8082111561157257611572611530565b604051601f8301601f19908116603f0116810190828211818310171561159a5761159a611530565b816040528381528660208588010111156115b357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156115e657600080fd5b823567ffffffffffffffff808211156115fe57600080fd5b61160a86838701611546565b9350602085013591508082111561162057600080fd5b5061162d85828601611546565b9150509250929050565b6020808252601490820152732130b9b2aa37b5b2b71d103337b93134b23232b760611b604082015260600190565b600181811c9082168061167957607f821691505b60208210810361169957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105e9576105e961169f565b601f82111561054557600081815260208120601f850160051c810160208610156116ef5750805b601f850160051c820191505b8181101561170e578281556001016116fb565b505050505050565b815167ffffffffffffffff81111561173057611730611530565b6117448161173e8454611665565b846116c8565b602080601f83116001811461177957600084156117615750858301515b600019600386901b1c1916600185901b17855561170e565b600085815260208120601f198616915b828110156117a857888601518255948401946001909101908401611789565b50858210156117c65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156105e9576105e961169f565b6000602082840312156117fb57600080fd5b815161073a816114ce565b600082516118188184602087016113ff565b919091019291505056fea2646970667358221220a9ab863dcbb2cc9b4da5e2f4605f48ad82762e16bd2a36e962545d51174d7a9464736f6c63430008130033" + }, + { + "address": "0x2f10ac1d4f508506cb5bd03131f76ae08da76bdd", + "nonce": 23, + "balance": "0x0000000000000000000000000000000000000000000000000010ef61efb8bbec", + "code": "0x" + }, + { + "address": "0x047ffe4def817e48f8c026aefe0469d53d341f54", + "nonce": 53, + "balance": "0x0000000000000000000000000000000000000000000000000009ac81c9eeb589", + "code": "0x" + }, + { + "address": "0x5ec5b1e9b1bd5198343abb6e55fb695d2f7bb308", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063b1dd61b6116100a2578063ee97f7f311610071578063ee97f7f31461048e578063f66eab5b146104b5578063fbfa77cf146104d5578063ff9c8ac6146104fc57600080fd5b8063b1dd61b614610414578063d21220a714610429578063d505accf14610450578063dd62ed3e1461046357600080fd5b806395d89b41116100de57806395d89b41146103de578063a287c795146103e6578063a5a41031146103f9578063a9059cbb1461040157600080fd5b806370a082311461036b5780637132bb7f1461038b5780637ecebe001461039e5780638b4c5470146103be57600080fd5b806323b872dd116101875780633644e515116101565780633644e5151461033c578063443cb4bc146103445780635a76f25e1461034d57806367e4ac2c1461035657600080fd5b806323b872dd146102c057806327b0bcea146102d35780632c0198cc146102f3578063313ce5671461030857600080fd5b80630902f1ac116101c35780630902f1ac1461025c578063095ea7b3146102705780630dfe16811461028357806318160ddd146102b757600080fd5b806301ffc9a7146101f557806303e7286a1461021e57806306fdde031461023e57806307f293f714610253575b600080fd5b610208610203366004612ee1565b61050f565b6040516102159190612f0c565b60405180910390f35b61023161022c366004612f91565b610561565b6040516102159190613038565b610246610a1a565b60405161021591906130a4565b610231600b5481565b600954600a546040516102159291906130b5565b61020861027e3660046130e1565b610aa8565b6102aa7f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff81565b6040516102159190613127565b61023160005481565b6102086102ce366004613135565b610abe565b6102e66102e1366004612f91565b610b9e565b60405161021591906131a9565b6103066103013660046131b7565b6111d5565b005b61032f7f000000000000000000000000000000000000000000000000000000000000001281565b604051610215919061323b565b61023161127a565b61023160095481565b610231600a5481565b61035e611299565b60405161021591906132a6565b6102316103793660046132b7565b60016020526000908152604090205481565b6102e6610399366004612f91565b611364565b6102316103ac3660046132b7565b60036020526000908152604090205481565b6103d16103cc3660046133d3565b6118e5565b604051610215919061345d565b610246611986565b6102316103f436600461346b565b611993565b6103d1611a45565b61020861040f3660046130e1565b611ad5565b61041c600181565b60405161021591906134bb565b6102aa7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b61030661045e3660046134dd565b611b4a565b61023161047136600461357c565b600260209081526000928352604080842090915290825290205481565b6102aa7f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a381565b6104c86104c3366004612f91565b611c3f565b6040516102159190613601565b6102aa7f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b81565b61023161050a36600461346b565b61204d565b60006001600160e01b031982166301ffc9a760e01b148061054057506001600160e01b0319821663d505accf60e01b145b8061055b57506001600160e01b03198216630b00663360e21b145b92915050565b600061056b6121d1565b61060260405180610200016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001606081525090565b61060e878901896132b7565b6001600160a01b03166020820152600954600a5460608301526040820152610634612203565b60a083018190526080830182905261064c919061236d565b610140820152604081015160808201516106669190613628565b60c0820152606081015160a082015161067f9190613628565b60e082015261068d86612458565b9550600081604001516000146106c3576106be82606001518360c001516106b4919061363f565b8360400151900490565b6106c6565b60005b60e08301519091508111801561073157610721887f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f612516565b62ffffff166101c0840152610788565b61077c887f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f7f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff612516565b62ffffff166101c08401525b6107b0836101c0015162ffffff168460c001518560e00151858760400151886060015161253b565b61012085015261010084018190526040840180516107cf90839061365e565b9052506101208301516060840180516107e990839061365e565b90525060408301516060840151610800919061236d565b610160840181905260009061081890829081906125c8565b6101808601819052909150600003610855576103e884610140015161083d9190613628565b6101a085015261085060006103e86127a1565b61088d565b610160840151610180850151610140860151610872908390613628565b61087c919061363f565b610886919061368c565b6101a08501525b836101a001516000036108b357604051633489be7560e21b815260040160405180910390fd5b6108c68460200151856101a001516127a1565b6001600160a01b0388161561097a576001600160a01b0389168452604080516020601f89018190048102820181019092528781529088908890819084018382808284376000920191909152505050506101e0850152604051630204997360e41b81526001600160a01b038916906320499730906109479087906004016137e7565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b505050505b61098c84608001518560a001516127fe565b801561099c57610140840151600b555b83602001516001600160a01b0316336001600160a01b03167fa8137fff86647d8a402117b9c5dbda627f721d3773338fb9678c83e54ed390808660c001518760e00151886101a001516040516109f4939291906137f8565b60405180910390a35050506101a001519050610a106001600855565b9695505050505050565b60048054610a2790613836565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5390613836565b8015610aa05780601f10610a7557610100808354040283529160200191610aa0565b820191906000526020600020905b815481529060010190602001808311610a8357829003601f168201915b505050505081565b6000610ab5338484612846565b50600192915050565b6001600160a01b03831660009081526002602090815260408083203384529091528120546000198114610b1a57610af58382613628565b6001600160a01b03861660009081526002602090815260408083203384529091529020555b6001600160a01b03851660009081526001602052604081208054859290610b42908490613628565b90915550506001600160a01b038085166000818152600160205260409081902080548701905551909187169060008051602061412c83398151915290610b89908790613038565b60405180910390a360019150505b9392505050565b6040805180820190915260008082526020820152610bba6121d1565b610c6660405180610200016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600060ff168152602001606081525090565b610c7287890189613862565b60ff166101c08401526001600160a01b039081166020840152166060820152610c99612203565b60a08301908152608083019182523060009081526001602052604081205460c085015291519051610ccb9190836125c8565b60e08401819052909150600003610ce157600080fd5b610d0282608001518360c00151610cf8919061363f565b8360e00151900490565b61010083015260a082015160c0830151610d1f91610cf89161363f565b61012083015260c0820151610d359030906128ae565b610d3e87612458565b96507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031682606001516001600160a01b031603610ecc57610dc8877f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f612516565b62ffffff166101a083018190526001600160a01b037f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff1660408401526101008301516080840151610e3c929190610e20908290613628565b8561012001518660a00151610e359190613628565b600161290d565b610180840152610160830181905261012083018051610e5c90839061365e565b91508181525050610e9d7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f8360200151846101200151856101c001516129c8565b6101208201516101408301819052600061010084015260a083018051610ec4908390613628565b90525061105d565b7f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff6001600160a01b031682606001516001600160a01b031614610f0e57600080fd5b610f59877f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f7f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff612516565b62ffffff166101a083018190526001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f1660408401526101208301516101008401516080850151610fd1939291610fb591613628565b8561012001518660a00151610fca9190613628565b600061290d565b610180840152610160830181905261010083018051610ff190839061365e565b915081815250506110327f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff8360200151846101000151856101c001516129c8565b61010082015161014083018190526000610120840152608083018051611059908390613628565b9052505b6001600160a01b03861615611111576001600160a01b0387168252604080516020601f87018190048102820181019092528581529086908690819084018382808284376000920191909152505050506101e0830152604051630eace54160e11b81526001600160a01b03871690631d59ca82906110de9085906004016139d5565b600060405180830381600087803b1580156110f857600080fd5b505af115801561110c573d6000803e3d6000fd5b505050505b61112382608001518360a001516127fe565b801561113f5761113b82608001518360a0015161236d565b600b555b604051806040016040528083606001516001600160a01b03168152602001836101400151815250925081602001516001600160a01b0316336001600160a01b03167fd175a80c109434bb89948928ab2475a6647c94244cb70002197896423c8833638461010001518561012001518660c001516040516111c1939291906137f8565b60405180910390a35050610a106001600855565b82804211156111f757604051630407b05b60e31b815260040160405180910390fd5b600061120588888888612ae0565b9050611248888286868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b9992505050565b61126557604051638baa579f60e01b815260040160405180910390fd5b611270888888612846565b5050505050505050565b600060065446146112925761128d612cc5565b905090565b5060075490565b60408051600280825260608083018452926020830190803683370190505090507f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff816000815181106112ed576112ed6139e6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81600181518110611341576113416139e6565b60200260200101906001600160a01b031690816001600160a01b03168152505090565b60408051808201909152600080825260208201526113806121d1565b61141e604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600060ff168152602001606081525090565b61142a87890189613862565b60ff166101808401526001600160a01b039081166020840152166040820152600954600a5460a08301526080820152611461612203565b60e083015260c082015261147486612458565b95507f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff6001600160a01b031681604001516001600160a01b0316036115fc576114fe867f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f612516565b62ffffff166101608201526001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f166060820152608081015160c082015161154c9190613628565b8161010001818152505061157b81610160015162ffffff1682610100015183608001518460a00151600161290d565b610140830152610120820181905260e08201805161159a908390613628565b90525060208101516101008201516101208301516040516001600160a01b039093169233927fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822926115ef926000918291613a14565b60405180910390a3611785565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031681604001516001600160a01b03161461163e57600080fd5b611689867f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f7f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff612516565b62ffffff166101608201526001600160a01b037f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff16606082015260a081015160e08201516116d79190613628565b8161010001818152505061170681610160015162ffffff1682610100015183608001518460a00151600061290d565b610140830152610120820181905260c082018051611725908390613628565b90525060208101516101008201516101208301516040516001600160a01b039093169233927fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229261177c9260009291908390613a49565b60405180910390a35b60c08101516001600160801b0310156117b157604051631a93c68960e11b815260040160405180910390fd5b60e08101516001600160801b0310156117dd57604051631a93c68960e11b815260040160405180910390fd5b6117fb816060015182602001518361012001518461018001516129c8565b6001600160a01b038516156118af576001600160a01b0386168152604080516020601f86018190048102820181019092528481529085908590819084018382808284376000920191909152505050506101a082015260405163608dbcbb60e01b81526001600160a01b0386169063608dbcbb9061187c908490600401613b9b565b600060405180830381600087803b15801561189657600080fd5b505af11580156118aa573d6000803e3d6000fd5b505050505b6118c18160c001518260e001516127fe565b60608101516001600160a01b0316825261012001516020820152610a106001600855565b604051634625a94d60e01b81526000906001600160a01b037f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a31690634625a94d9061193c9030908990899089908990600401613bac565b602060405180830381865afa158015611959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197d9190613c09565b95945050505050565b60058054610a2790613836565b600954600a54600091907f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff6001600160a01b039081169087161483816119f9577f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff611a1b565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f5b9050611a39611a2b87838b612516565b62ffffff1688868686612d4e565b98975050505050505050565b6040516302a64b8360e21b81526000906001600160a01b037f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a31690630a992e0c90611a94903090600401613127565b602060405180830381865afa158015611ab1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128d9190613c09565b33600090815260016020526040812080548391908390611af6908490613628565b90915550506001600160a01b0383166000818152600160205260409081902080548501905551339060008051602061412c83398151915290611b39908690613038565b60405180910390a350600192915050565b8380421115611b6c57604051630407b05b60e31b815260040160405180910390fd5b6000611b7a89898989612ae0565b9050600060018287878760405160008152602001604052604051611ba19493929190613c2a565b6020604051602081039080840390855afa158015611bc3573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b031614611c0157604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b038116611c2857604051638baa579f60e01b815260040160405180910390fd5b611c338a8a8a612846565b50505050505050505050565b6060611c496121d1565b611cb460405180610140016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001606081525090565b611cc087890189613c52565b60ff166101008301526001600160a01b03166020820152611cdf612203565b606083019081526040808401928352306000908152600160205290812054608085015291519051611d119190836125c8565b60a08401819052909150600003611d2757600080fd5b611d4882604001518360800151611d3e919061363f565b8360a00151900490565b60c083015260608201516080830151611d6491611d3e9161363f565b60e08301526080820151611d799030906128ae565b611db27f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff83602001518460c001518561010001516129c8565b611deb7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f83602001518460e001518561010001516129c8565b60c082015160408301805191909103905260e08201516060830180519190910390526001600160a01b03861615611ec957611e2587612458565b6001600160a01b03168252604080516020601f870181900481028201810190925285815290869086908190840183828082843760009201919091525050505061012083015260405163109ea27d60e31b81526001600160a01b038716906384f513e890611e96908590600401613d4e565b600060405180830381600087803b158015611eb057600080fd5b505af1158015611ec4573d6000803e3d6000fd5b505050505b611edb826040015183606001516127fe565b8015611ef757611ef38260400151836060015161236d565b600b555b6040805160028082526060820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081611f0d57905050925060405180604001604052807f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff6001600160a01b031681526020018360c0015181525083600081518110611f8b57611f8b6139e6565b602002602001018190525060405180604001604052807f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031681526020018360e0015181525083600181518110611feb57611feb6139e6565b602002602001018190525081602001516001600160a01b0316336001600160a01b03167fd175a80c109434bb89948928ab2475a6647c94244cb70002197896423c8833638460c001518560e0015186608001516040516111c1939291906137f8565b600954600a54600091907f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff6001600160a01b039081169087161483816120b3577f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff6120d5565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f5b90506120f36120e5878a84612516565b62ffffff168886868661290d565b5098975050505050505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b1790529051600091606091839182916001600160a01b0387169161214891613d81565b600060405180830381855afa9150503d8060008114612183576040519150601f19603f3d011682016040523d82523d6000602084013e612188565b606091505b509150915081156121b4576001818060200190518101906121a99190613de5565b935093505050915091565b600060405180602001604052806000815250935093505050915091565b6002600854036121fc5760405162461bcd60e51b81526004016121f390613e20565b60405180910390fd5b6002600855565b6000807f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b6001600160a01b031663f7888aec7f000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff306040518363ffffffff1660e01b8152600401612274929190613e5b565b602060405180830381865afa158015612291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b59190613e81565b604051633de222bb60e21b81529092506001600160a01b037f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b169063f7888aec90612326907f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f903090600401613e5b565b602060405180830381865afa158015612343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123679190613e81565b90509091565b60006001600160801b0383111561239757604051631a93c68960e11b815260040160405180910390fd5b6001600160801b038211156123bf57604051631a93c68960e11b815260040160405180910390fd5b610b976123cc838561363f565b70ffffffffffffffffffffffffffffffffff811160071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1781811c620100000160b5600192831c1b0260121c80830401811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b60006001600160a01b03821615612512576001600160a01b038216331461251257604051632af3bd5560e21b81526001600160a01b037f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a3169063abcef554906124c5903390600401613127565b602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125069190613eb5565b61251257506000919050565b5090565b6000612533848484604051806020016040528060008152506118e5565b949350505050565b60008083600003612551575060009050806125bd565b848610612589576125826125658688613628565b61256f908a61363f565b61257d620186a0600261363f565b900490565b90506125bd565b600083612596868961363f565b6125a0919061368c565b90506125b96125af828a613628565b61256f908b61363f565b9250505b965096945050505050565b600080600054905060007f000000000000000000000000608cb7c3168427091f5994a45baf12083964b4a36001600160a01b0316634ccb20c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612630573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126549190613ee1565b600b546001600160a01b038216151594509091508015612797578315612791578460000361268957612686878761236d565b94505b8085111561278c57600061269b611a45565b62ffffff1690506000816126af8489613628565b6126b9908761363f565b6126c3919061363f565b905060006126d1848461363f565b886126df85620186a0613628565b6126e9919061363f565b6126f3919061365e565b90506000612701828461368c565b905080156127875761271386826127a1565b604051631087d04360e31b81526001600160a01b0387169063843e82189061274690600190309086908a90600401613f17565b600060405180830381600087803b15801561276057600080fd5b505af1158015612774573d6000803e3d6000fd5b505050508087612784919061365e565b96505b505050505b612797565b6000600b555b5050935093915050565b806000808282546127b2919061365e565b90915550506001600160a01b0382166000818152600160205260408082208054850190555160008051602061412c833981519152906127f2908590613038565b60405180910390a35050565b600a81905560098290556040517fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a9061283a90849084906130b5565b60405180910390a15050565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906128a1908590613038565b60405180910390a3505050565b6001600160a01b038216600090815260016020526040812080548392906128d6908490613628565b90915550506000805482900381556040516001600160a01b0384169060008051602061412c833981519152906127f2908590613038565b6000808560000361292157600091506129be565b600061293088620186a0613628565b61293a908861363f565b9050612952612949898961363f565b620186a0900490565b9150831561298d5780612968620186a08861363f565b612972919061365e565b61297c868361363f565b612986919061368c565b92506129bc565b8061299b620186a08761363f565b6129a5919061365e565b6129af878361363f565b6129b9919061368c565b92505b505b9550959350505050565b8060ff16600003612a5a576040516317d5759960e31b81526001600160a01b037f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b169063beabacc890612a2390879087908790600401613f61565b600060405180830381600087803b158015612a3d57600080fd5b505af1158015612a51573d6000803e3d6000fd5b50505050612ada565b604051636cb568c160e01b81526001600160a01b037f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b1690636cb568c190612aac908790879087908790600401613f7c565b600060405180830381600087803b158015612ac657600080fd5b505af1158015611270573d6000803e3d6000fd5b50505050565b6000612aea61127a565b6001600160a01b038616600090815260036020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c992899289928992909190612b3883613fb1565b9190505587604051602001612b5296959493929190613fcb565b60405160208183030381529060405280519060200120604051602001612b7992919061401a565b604051602081830303815290604052805190602001209050949350505050565b600080612ba68484612e09565b9050846001600160a01b0316816001600160a01b031603612bda576001600160a01b03811615612bda576001915050610b97565b600080866001600160a01b0316631626ba7e60e01b8787604051602401612c0292919061404b565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612c409190613d81565b600060405180830381855afa9150503d8060008114612c7b576040519150601f19603f3d011682016040523d82523d6000602084013e612c80565b606091505b5091509150818015612c93575080516020145b8015612cba57508051630b135d3f60e11b90612cb89083016020908101908401613e81565b145b979650505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6004604051612cf791906140dd565b604051908190038120612d3392917fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc690469030906020016140e9565b60405160208183030381529060405280519060200120905090565b600084600003612d605750600061197d565b8115612dbb57612d7386620186a0613628565b612d7d8686613628565b612d87919061363f565b620186a0612d95878661363f565b612d9f919061363f565b612da9919061368c565b612db490600161365e565b905061197d565b612dc886620186a0613628565b612dd28685613628565b612ddc919061363f565b620186a0612dea878761363f565b612df4919061363f565b612dfe919061368c565b610a1090600161365e565b60008151604114612e1c5750600061055b565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612e62576000935050505061055b565b60018682858560405160008152602001604052604051612e859493929190613c2a565b6020604051602081039080840390855afa158015612ea7573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6001600160e01b031981165b8114612ed357600080fd5b50565b803561055b81612ebc565b600060208284031215612ef657612ef6600080fd5b60006125338484612ed6565b8015155b82525050565b6020810161055b8284612f02565b60008083601f840112612f2f57612f2f600080fd5b50813567ffffffffffffffff811115612f4a57612f4a600080fd5b602083019150836001820283011115612f6557612f65600080fd5b9250929050565b60006001600160a01b03821661055b565b612ec881612f6c565b803561055b81612f7d565b60008060008060008060808789031215612fad57612fad600080fd5b863567ffffffffffffffff811115612fc757612fc7600080fd5b612fd389828a01612f1a565b96509650506020612fe689828a01612f86565b9450506040612ff789828a01612f86565b935050606087013567ffffffffffffffff81111561301757613017600080fd5b61302389828a01612f1a565b92509250509295509295509295565b80612f06565b6020810161055b8284613032565b60005b83811015613061578181015183820152602001613049565b83811115612ada5750506000910152565b600061307c825190565b808452602084019350613093818560208601613046565b601f01601f19169290920192915050565b60208082528101610b978184613072565b604081016130c38285613032565b610b976020830184613032565b80612ec8565b803561055b816130d0565b600080604083850312156130f7576130f7600080fd5b60006131038585612f86565b9250506020613114858286016130d6565b9150509250929050565b612f0681612f6c565b6020810161055b828461311e565b60008060006060848603121561314d5761314d600080fd5b60006131598686612f86565b935050602061316a86828701612f86565b925050604061317b868287016130d6565b9150509250925092565b80516040830190613196848261311e565b506020820151612ada6020850182613032565b6040810161055b8284613185565b60008060008060008060a087890312156131d3576131d3600080fd5b60006131df8989612f86565b96505060206131f089828a01612f86565b955050604061320189828a016130d6565b945050606061321289828a016130d6565b935050608087013567ffffffffffffffff81111561301757613017600080fd5b60ff8116612f06565b6020810161055b8284613232565b6000613255838361311e565b505060200190565b6000613267825190565b80845260209384019383018060005b8381101561329b57815161328a8882613249565b975060208301925050600101613276565b509495945050505050565b60208082528101610b97818461325d565b6000602082840312156132cc576132cc600080fd5b60006125338484612f86565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715613314576133146132d8565b6040525050565b600061332660405190565b905061333282826132ee565b919050565b600067ffffffffffffffff821115613351576133516132d8565b601f19601f83011660200192915050565b82818337506000910152565b600061338161337c84613337565b61331b565b90508281526020810184848401111561339c5761339c600080fd5b6133a7848285613362565b509392505050565b600082601f8301126133c3576133c3600080fd5b813561253384826020860161336e565b600080600080608085870312156133ec576133ec600080fd5b60006133f88787612f86565b945050602061340987828801612f86565b935050604061341a87828801612f86565b925050606085013567ffffffffffffffff81111561343a5761343a600080fd5b613446878288016133af565b91505092959194509250565b62ffffff8116612f06565b6020810161055b8284613452565b60008060006060848603121561348357613483600080fd5b600061348f8686612f86565b93505060206134a0868287016130d6565b925050604061317b86828701612f86565b61ffff8116612f06565b6020810161055b82846134b1565b60ff8116612ec8565b803561055b816134c9565b600080600080600080600060e0888a0312156134fb576134fb600080fd5b60006135078a8a612f86565b97505060206135188a828b01612f86565b96505060406135298a828b016130d6565b955050606061353a8a828b016130d6565b945050608061354b8a828b016134d2565b93505060a061355c8a828b016130d6565b92505060c061356d8a828b016130d6565b91505092959891949750929550565b6000806040838503121561359257613592600080fd5b600061359e8585612f86565b925050602061311485828601612f86565b60006135bb8383613185565b505060400190565b60006135cd825190565b80845260209384019383018060005b8381101561329b5781516135f088826135af565b9750602083019250506001016135dc565b60208082528101610b9781846135c3565b634e487b7160e01b600052601160045260246000fd5b60008282101561363a5761363a613612565b500390565b600081600019048311821515161561365957613659613612565b500290565b6000821982111561367157613671613612565b500190565b634e487b7160e01b600052601260045260246000fd5b60008261369b5761369b613676565b500490565b80516000906102008401906136b5858261311e565b5060208301516136c8602086018261311e565b5060408301516136db6040860182613032565b5060608301516136ee6060860182613032565b5060808301516137016080860182613032565b5060a083015161371460a0860182613032565b5060c083015161372760c0860182613032565b5060e083015161373a60e0860182613032565b5061010083015161374f610100860182613032565b50610120830151613764610120860182613032565b50610140830151613779610140860182613032565b5061016083015161378e610160860182613032565b506101808301516137a3610180860182613032565b506101a08301516137b86101a0860182613032565b506101c08301516137cd6101c0860182613452565b506101e08301518482036101e086015261197d8282613072565b60208082528101610b9781846136a0565b606081016138068286613032565b6138136020830185613032565b6125336040830184613032565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061384a57607f821691505b60208210810361385c5761385c613820565b50919050565b60008060006060848603121561387a5761387a600080fd5b60006138868686612f86565b935050602061389786828701612f86565b925050604061317b868287016134d2565b80516000906102008401906138bd858261311e565b5060208301516138d0602086018261311e565b5060408301516138e3604086018261311e565b5060608301516138f6606086018261311e565b5060808301516139096080860182613032565b5060a083015161391c60a0860182613032565b5060c083015161392f60c0860182613032565b5060e083015161394260e0860182613032565b50610100830151613957610100860182613032565b5061012083015161396c610120860182613032565b50610140830151613981610140860182613032565b50610160830151613996610160860182613032565b506101808301516139ab610180860182613032565b506101a08301516139c06101a0860182613452565b506101c08301516137cd6101c0860182613232565b60208082528101610b9781846138a8565b634e487b7160e01b600052603260045260246000fd5b600061055b613a088381565b90565b612f06816139fc565b60808101613a228287613032565b613a2f6020830186613a0b565b613a3c6040830185613a0b565b61197d6060830184613032565b60808101613a578287613a0b565b613a646020830186613032565b613a716040830185613032565b61197d6060830184613a0b565b80516000906101c0840190613a93858261311e565b506020830151613aa6602086018261311e565b506040830151613ab9604086018261311e565b506060830151613acc606086018261311e565b506080830151613adf6080860182613032565b5060a0830151613af260a0860182613032565b5060c0830151613b0560c0860182613032565b5060e0830151613b1860e0860182613032565b50610100830151613b2d610100860182613032565b50610120830151613b42610120860182613032565b50610140830151613b57610140860182613032565b50610160830151613b6c610160860182613452565b50610180830151613b81610180860182613232565b506101a08301518482036101a086015261197d8282613072565b60208082528101610b978184613a7e565b60a08101613bba828861311e565b613bc7602083018761311e565b613bd4604083018661311e565b613be1606083018561311e565b8181036080830152612cba8184613072565b62ffffff8116612ec8565b805161055b81613bf3565b600060208284031215613c1e57613c1e600080fd5b60006125338484613bfe565b60808101613c388287613032565b613c456020830186613232565b613a3c6040830185613032565b60008060408385031215613c6857613c68600080fd5b6000613c748585612f86565b9250506020613114858286016134d2565b8051600090610140840190613c9a858261311e565b506020830151613cad602086018261311e565b506040830151613cc06040860182613032565b506060830151613cd36060860182613032565b506080830151613ce66080860182613032565b5060a0830151613cf960a0860182613032565b5060c0830151613d0c60c0860182613032565b5060e0830151613d1f60e0860182613032565b50610100830151613d34610100860182613232565b5061012083015184820361012086015261197d8282613072565b60208082528101610b978184613c85565b6000613d69825190565b613d77818560208601613046565b9290920192915050565b6000610b978284613d5f565b6000613d9b61337c84613337565b905082815260208101848484011115613db657613db6600080fd5b6133a7848285613046565b600082601f830112613dd557613dd5600080fd5b8151612533848260208601613d8d565b600060208284031215613dfa57613dfa600080fd5b815167ffffffffffffffff811115613e1457613e14600080fd5b61253384828501613dc1565b6020808252810161055b81601f81527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00602082015260400190565b60408101613e69828561311e565b610b97602083018461311e565b805161055b816130d0565b600060208284031215613e9657613e96600080fd5b60006125338484613e76565b801515612ec8565b805161055b81613ea2565b600060208284031215613eca57613eca600080fd5b60006125338484613eaa565b805161055b81612f7d565b600060208284031215613ef657613ef6600080fd5b60006125338484613ed6565b600061ffff821661055b565b612f0681613f02565b60a08101613f258287613f0e565b613f32602083018661311e565b613f3f6040830185613032565b613f4c6060830184613032565b81810360808301526000815260208101610a10565b60608101613f6f828661311e565b613813602083018561311e565b60808101613f8a828761311e565b613f97602083018661311e565b613fa46040830185613032565b61197d6060830184613232565b60006000198203613fc457613fc4613612565b5060010190565b60c08101613fd98289613032565b613fe6602083018861311e565b613ff3604083018761311e565b6140006060830186613032565b61400d6080830185613032565b612cba60a0830184613032565b61190160f01b815260020160006140318285613032565b6020820191506140418284613032565b5060200192915050565b604081016140598285613032565b81810360208301526125338184613072565b6000815461407881613836565b60018216801561408f57600181146140a4576140d4565b60ff19831686528115158202860193506140d4565b60008581526020902060005b838110156140cc578154888201526001909101906020016140b0565b838801955050505b50505092915050565b6000610b97828461406b565b60a081016140f78288613a0b565b6141046020830187613032565b6141116040830186613a0b565b61411e6060830185613032565b610a10608083018461311e56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209d4df6080488c965e85c8d46a748d3e9c678e134194f5c0fad6ef2903c78217b64736f6c634300080f0033" + }, + { + "address": "0xd40c7ecd85d863c011280ce2f0da3fafb165f5bc", + "nonce": 35, + "balance": "0x0000000000000000000000000000000000000000000000000040a418afdcbda8", + "code": "0x" + }, + { + "address": "0xc172b13a354edd55121c6a57f7c124542b2ed270", + "nonce": 31, + "balance": "0x000000000000000000000000000000000000000000000000007b00e30d7cc0df", + "code": "0x" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100435760003560e01c80635c60da1b1461005c578063715018a6146100875780638da5cb5b1461009e578063f2fde38b146100c957610052565b36610052576100506100f2565b005b61005a6100f2565b005b34801561006857600080fd5b5061007161010c565b60405161007e91906105dd565b60405180910390f35b34801561009357600080fd5b5061009c61011b565b005b3480156100aa57600080fd5b506100b36101a3565b6040516100c091906105dd565b60405180910390f35b3480156100d557600080fd5b506100f060048036038101906100eb9190610629565b6101cc565b005b6100fa6102fa565b61010a6101056102fc565b610353565b565b60006101166102fc565b905090565b610123610379565b73ffffffffffffffffffffffffffffffffffffffff166101416101a3565b73ffffffffffffffffffffffffffffffffffffffff1614610197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018e906106b3565b60405180910390fd5b6101a16000610381565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6101d4610379565b73ffffffffffffffffffffffffffffffffffffffff166101f26101a3565b73ffffffffffffffffffffffffffffffffffffffff1614610248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023f906106b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ae90610745565b60405180910390fd5b6102c081610381565b50565b6000819050919050565b60606102f283836040518060600160405280602781526020016108f760279139610445565b905092915050565b565b600061032a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6102c3565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3660008037600080366000845af43d6000803e8060008114610374573d6000f35b3d6000fd5b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606061045084610512565b61048f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610486906107d7565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516104b79190610868565b600060405180830381855af49150503d80600081146104f2576040519150601f19603f3d011682016040523d82523d6000602084013e6104f7565b606091505b5091509150610507828286610535565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060831561054557829050610595565b6000835111156105585782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058c91906108d4565b60405180910390fd5b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006105c78261059c565b9050919050565b6105d7816105bc565b82525050565b60006020820190506105f260008301846105ce565b92915050565b600080fd5b610606816105bc565b811461061157600080fd5b50565b600081359050610623816105fd565b92915050565b60006020828403121561063f5761063e6105f8565b5b600061064d84828501610614565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061069d602083610656565b91506106a882610667565b602082019050919050565b600060208201905081810360008301526106cc81610690565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061072f602683610656565b915061073a826106d3565b604082019050919050565b6000602082019050818103600083015261075e81610722565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006107c1602683610656565b91506107cc82610765565b604082019050919050565b600060208201905081810360008301526107f0816107b4565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561082b578082015181840152602081019050610810565b60008484015250505050565b6000610842826107f7565b61084c8185610802565b935061085c81856020860161080d565b80840191505092915050565b60006108748284610837565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b60006108a68261087f565b6108b08185610656565b93506108c081856020860161080d565b6108c98161088a565b840191505092915050565b600060208201905081810360008301526108ee818461089b565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220eca6ed940b574f539ab34e14dd807e9edb953f96fd56514abc3e7679e2eec61e64736f6c63430008120033" + }, + { + "address": "0x0c8d71a375552df0e20ef4c0bf482b4cbb1855bd", + "nonce": 4, + "balance": "0x0000000000000000000000000000000000000000000000000024806d3c2cae76", + "code": "0x" + }, + { + "address": "0x628e5081ba93b1c4f58e54e7175088b1ace58852", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80634e71e0c81161005b5780634e71e0c8146100db5780638198edbf146100e35780638456db1514610103578063f2fde38b1461010b57610088565b80630d0092971461008d57806316048bc4146100a257806325be0be1146100c057806339b96500146100d3575b600080fd5b6100a061009b3660046103b8565b61011e565b005b6100aa610187565b6040516100b791906103fe565b60405180910390f35b6100a06100ce3660046103b8565b610196565b6100aa6101e2565b6100a06101f1565b6100f66100f13660046103b8565b61027f565b6040516100b791906104a0565b6100aa610324565b6100a06101193660046103b8565b610333565b600154600160a01b900460ff16156101515760405162461bcd60e51b815260040161014890610453565b60405180910390fd5b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b031681565b6000546001600160a01b031633146101c05760405162461bcd60e51b81526004016101489061047d565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b6001546001600160a01b0316331461021b5760405162461bcd60e51b81526004016101489061042c565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6002546000906001600160a01b031661029a5750600061031f565b60025460405163848cc30360e01b81526001600160a01b039091169063848cc303906102cc9033908690600401610412565b60206040518083038186803b1580156102e457600080fd5b505afa1580156102f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031c91906103e6565b90505b919050565b6001546001600160a01b031681565b6000546001600160a01b0316331461035d5760405162461bcd60e51b81526004016101489061047d565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000602082840312156103c9578081fd5b81356001600160a01b03811681146103df578182fd5b9392505050565b6000602082840312156103f7578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b60208082526010908201526f1113d113d7d25392551250531256915160821b604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b9081526020019056fea26469706673582212207e5b90a16a921c43033bdf2ca706666f713cee3a0679f6d77421d04a92ee7f3264736f6c63430006090033" + }, + { + "address": "0x4d99727e1b3ed67036e5d8e7dd2df7156f4d847e", + "nonce": 0, + "balance": "0x0000000000000000000000000000000000000000000000000019396991e7c000", + "code": "0x" + }, + { + "address": "0x7d3baaade779879340349649994ab5a292f84cba", + "nonce": 10, + "balance": "0x00000000000000000000000000000000000000000000000000266a3ba1d37caa", + "code": "0x" + }, + { + "address": "0xc1b15d3b262beec0e3565c11c9e0f6134bdacb36", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c80636348d26911610081578063d633ad611161005b578063d633ad6114610184578063e965c1921461018c578063ea455df914610194576100c9565b80636348d269146101545780639bcd850f14610169578063b71e0f7114610171576100c9565b80632ff20449116100b25780632ff204491461010c57806347713b391461012c5780635711c2a814610134576100c9565b806305af5d35146100ce5780630f222e65146100ec575b600080fd5b6100d66101a7565b6040516100e3919061112f565b60405180910390f35b6100ff6100fa366004610c82565b6101b0565b6040516100e39190611100565b61011f61011a366004610df7565b6101c2565b6040516100e39190611070565b6100d66101dd565b610147610142366004610d7f565b6101eb565b6040516100e39190610fa7565b61015c6101fe565b6040516100e39190610f86565b6100d6610222565b61011f61017f366004610d02565b61022b565b6100d661044f565b61015c61045d565b6101476101a2366004610d7f565b610481565b60005460ff1681565b6101b8610a73565b9695505050505050565b6101ca610a92565b6101d584848461048c565b949350505050565b600054610100900460ff1681565b60606101f682610666565b90505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff1690565b610233610a92565b60008211610276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026d90611039565b60405180910390fd5b60208311801561029c5750848484604051610292929190610f76565b6040518091039020145b6102d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026d90610fdc565b60006102e16020828688611225565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208083015192935061036d915061032f908790818a611225565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925085915061048c9050565b92507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16836060015173ffffffffffffffffffffffffffffffffffffffff1614156103da576103d48360c00151610666565b60c08401525b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16836060015173ffffffffffffffffffffffffffffffffffffffff1614156104455761043f8360c0015161074b565b60c08401525b5050949350505050565b600054610100900460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606101f68261074b565b610494610a92565b835160006104a38560206107f5565b90508082101561051457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4c617965725a65726f5061636b65743a20696e76616c6964207061636b657400604482015290519081900360640190fd5b6008860151600a870151868801600c8101516020909101518486039392919061ffff83166105a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4c617965725a65726f5061636b65743a20696e76616c6964207061636b657400604482015290519081900360640190fd5b6105ab610ad0565b6105b5818c610872565b506105c58160008e602a8f6108ac565b506105ce610ad0565b86156105fc576105de8188610872565b506105fa60008e6105f08b60206107f5565b849291908b6108ac565b505b6040805160e08101825261ffff968716815294909516602085015267ffffffffffffffff9095169383019390935273ffffffffffffffffffffffffffffffffffffffff1660608201529051608082015260a08101879052905160c082015293505050509392505050565b6020810151606090600160ff82161415610744576000806000806000806000898060200190518101906106999190610e43565b97509750975097509750975097505060008151111561073c578151600090156106c3575060148201515b803b80610739576000826040516020016106dd9190610f46565b60408051601f1981840301815260208381018352600080855292519194509192610715928f928f928f928f928f928f928b920161113d565b60408051601f198184030181529190529c506101f99b505050505050505050505050565b50505b505050505050505b5090919050565b6060600080838060200190518101906107649190610db2565b915091506000808351111561077a575060148201515b73ffffffffffffffffffffffffffffffffffffffff81166107ec5760405161dead906000906107ad908390602001610f46565b604051602081830303815290604052905080846040516020016107d1929190610fba565b604051602081830303815290604052955050505050506101f9565b50929392505050565b60008282018381101561086957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b61087a610ad0565b602082061561088f5760208206602003820191505b506020828101829052604080518085526000815290920101905290565b6108b4610ad0565b856020015182860111156108de576108de866108d68860200151888601610968565b60020261097f565b6000808751805188602083010193508089870111156108fd5788860182525b5050508484015b602084106109235780518252601f199093019260209182019101610904565b5181517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208690036101000a01908116901991909116179052508495945050505050565b60008183111561097957508161086c565b50919050565b815161098b8383610872565b50610996838261099c565b50505050565b6109a4610ad0565b610869838460000151518485516109b9610ad0565b82518211156109c757600080fd5b846020015182850111156109e9576109e9856108d68760200151878601610968565b600080865180518760208301019350808887011115610a085787860182525b505050602084015b60208410610a2f5780518252601f199093019260209182019101610a10565b5181517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208690036101000a019081169019919091161790525083949350505050565b6040805160608082018352600080835260208301529181019190915290565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820181905260a082019290925260c081019190915290565b604051806040016040528060608152602001600081525090565b60008083601f840112610afb578081fd5b50813567ffffffffffffffff811115610b12578182fd5b6020830191508360208083028501011115610b2c57600080fd5b9250929050565b600082601f830112610b43578081fd5b8135610b56610b5182611203565b6111df565b818152846020838601011115610b6a578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112610b94578081fd5b8151610ba2610b5182611203565b818152846020838601011115610bb6578283fd5b6101d582602083016020870161124d565b600060408284031215610bd8578081fd5b6040516040810181811067ffffffffffffffff82111715610bf557fe5b604052825181526020928301519281019290925250919050565b600060c08284031215610c20578081fd5b60405160c0810181811067ffffffffffffffff82111715610c3d57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201525092915050565b60008060008060008060808789031215610c9a578182fd5b86359550602087013567ffffffffffffffff80821115610cb8578384fd5b610cc48a838b01610aea565b9097509550604089013594506060890135915080821115610ce3578384fd5b50610cf089828a01610aea565b979a9699509497509295939492505050565b60008060008060608587031215610d17578384fd5b84359350602085013567ffffffffffffffff80821115610d35578485fd5b818701915087601f830112610d48578485fd5b813581811115610d56578586fd5b886020828501011115610d67578586fd5b95986020929092019750949560400135945092505050565b600060208284031215610d90578081fd5b813567ffffffffffffffff811115610da6578182fd5b6101d584828501610b33565b60008060408385031215610dc4578182fd5b825167ffffffffffffffff811115610dda578283fd5b610de685828601610b84565b925050602083015190509250929050565b600080600060608486031215610e0b578283fd5b833567ffffffffffffffff811115610e21578384fd5b610e2d86828701610b33565b9660208601359650604090950135949350505050565b6000806000806000806000806101c0898b031215610e5f578182fd5b885160ff81168114610e6f578283fd5b80985050602089015196506040890151955060608901519450610e958a60808b01610bc7565b9350610ea48a60c08b01610c0f565b925061018089015167ffffffffffffffff80821115610ec1578384fd5b610ecd8c838d01610b84565b93506101a08b0151915080821115610ee3578283fd5b50610ef08b828c01610b84565b9150509295985092959890939650565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452610f3281602086016020860161124d565b601f01601f19169290920160200192915050565b60609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602082526108696020830184610f1a565b600060408252610fcd6040830185610f1a565b90508260208301529392505050565b60208082526023908201527f50726f6f664c69623a20696e76616c6964207472616e73616374696f6e20707260408201527f6f6f660000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f50726f6f664c69623a20696e76616c696420616464726573732073697a650000604082015260600190565b60006020825261ffff8084511660208401528060208501511660408401525067ffffffffffffffff604084015116606083015260608301516110b56080840182610f00565b50608083015160e060a08401526110d0610100840182610f1a565b905060a084015160c084015260c0840151601f198483030160e08501526110f78282610f1a565b95945050505050565b600060208252825160208301526020830151604083015260408301516060808401526101d56080840182610f1a565b60ff91909116815260200190565b60006101c060ff8b16835289602084015288604084015287606084015286516080840152602087015160a0840152855160c0840152602086015160e084015260408601516101008401526060860151610120840152608086015161014084015260a0860151610160840152806101808401526111bb81840186610f1a565b90508281036101a08401526111d08185610f1a565b9b9a5050505050505050505050565b60405181810167ffffffffffffffff811182821017156111fb57fe5b604052919050565b600067ffffffffffffffff82111561121757fe5b50601f01601f191660200190565b60008085851115611234578182fd5b83861115611240578182fd5b5050820193919092039150565b60005b83811015611268578181015183820152602001611250565b83811115610996575050600091015256fea26469706673582212200bc6632f15b3aab0b1a705a34639ab874b271ae5506d53b35dafc51882474b2b64736f6c63430007060033" + }, + { + "address": "0xeb09081242b1be54a98598540e788695a501b23f", + "nonce": 299, + "balance": "0x000000000000000000000000000000000000000000000000000514d0cb36db6f", + "code": "0x" + }, + { + "address": "0x924f60d3eb745ad7fdf81a505ec551aab21fd52c", + "nonce": 10, + "balance": "0x000000000000000000000000000000000000000000000000001b14b749becf00", + "code": "0x" + }, + { + "address": "0xf40442e1cb0bdfb496e8b7405d0c1c48a81bc897", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c8063ad24cc2411610076578063d7068fe11161005b578063d7068fe114610111578063fa461e33146100d8578063fa483e72146100d857600080fd5b8063ad24cc24146100d8578063d3e1c284146100fe57600080fd5b80632c8958f6116100a75780632c8958f6146100d8578063654b6487146100d8578063923b8a2a146100eb57600080fd5b806318780684146100c357806323a69e75146100d8575b600080fd5b6100d66100d13660046106b2565b61014a565b005b6100d66100e63660046106b2565b610175565b6100d66100f93660046106b2565b610181565b6100d661010c3660046106b2565b6102e7565b6101387f9932588c857b0691792b49bc2500676cf28f18fb0177f2f1fd3490fb07babb7281565b60405190815260200160405180910390f35b61016f61015685610301565b61015f85610301565b61016890610705565b84846103b7565b50505050565b61016f848484846103b7565b831580159061018f57508215155b6101fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e206f72204f757420416d6f756e74206973205a65726f000000000000000060448201526064015b60405180910390fd5b7f9932588c857b0691792b49bc2500676cf28f18fb0177f2f1fd3490fb07babb728054903373ffffffffffffffffffffffffffffffffffffffff8316146102c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616c6c6261636b48656c7065723a20696e76616c69642073656e646572206360448201527f616c6c6261636b0000000000000000000000000000000000000000000000000060648201526084016101f1565b60006102d18486018661078a565b90506102de8133896104ef565b50505050505050565b61016f6102f385610301565b6102fc90610705565b610168855b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156103b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e206160448201527f6e20696e7432353600000000000000000000000000000000000000000000000060648201526084016101f1565b5090565b831515806103c457508215155b6103cd57600080fd5b7f9932588c857b0691792b49bc2500676cf28f18fb0177f2f1fd3490fb07babb728054903373ffffffffffffffffffffffffffffffffffffffff831614610496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616c6c6261636b48656c7065723a20696e76616c69642073656e646572206360448201527f616c6c6261636b0000000000000000000000000000000000000000000000000060648201526084016101f1565b60006104a484860186610865565b9050600081600001518060200190518101906104c09190610954565b905060008089136104d157876104d3565b885b90506104e4826020015133836104ef565b505050505050505050565b806104f957505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052915160009283929087169161059091906109c6565b6000604051808303816000865af19150503d80600081146105cd576040519150601f19603f3d011682016040523d82523d6000602084013e6105d2565b606091505b50915091508180156105fc5750805115806105fc5750808060200190518101906105fc9190610a01565b610662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016101f1565b5050505050565b60008083601f84011261067b57600080fd5b50813567ffffffffffffffff81111561069357600080fd5b6020830191508360208285010111156106ab57600080fd5b9250929050565b600080600080606085870312156106c857600080fd5b8435935060208501359250604085013567ffffffffffffffff8111156106ed57600080fd5b6106f987828801610669565b95989497509550505050565b60007f800000000000000000000000000000000000000000000000000000000000000082141561075e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060000390565b73ffffffffffffffffffffffffffffffffffffffff8116811461078757600080fd5b50565b60006020828403121561079c57600080fd5b81356107a781610765565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610800576108006107ae565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561084d5761084d6107ae565b604052919050565b803561086081610765565b919050565b6000602080838503121561087857600080fd5b823567ffffffffffffffff8082111561089057600080fd5b90840190604082870312156108a457600080fd5b6108ac6107dd565b8235828111156108bb57600080fd5b8301601f810188136108cc57600080fd5b8035838111156108de576108de6107ae565b61090e867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610806565b9350808452888682840101111561092457600080fd5b8086830187860137600090840186015250818152610943838501610855565b848201528094505050505092915050565b60006060828403121561096657600080fd5b6040516060810181811067ffffffffffffffff82111715610989576109896107ae565b604052825161099781610765565b815260208301516109a781610765565b602082015260408301516109ba81610765565b60408201529392505050565b6000825160005b818110156109e757602081860181015185830152016109cd565b818111156109f6576000828501525b509190910192915050565b600060208284031215610a1357600080fd5b815180151581146107a757600080fdfea2646970667358221220323f27de3948ce52283b5b946a87dc99af5c1e6b5c48127e9f435e14ba7bb87864736f6c63430008090033" + }, + { + "address": "0x8286d601a0ed6cf75e067e0614f73a5b9f024151", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e8383604051806060016040528060278152602001610268602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b6060600080856001600160a01b0316856040516100e09190610218565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091506101318683838761013b565b9695505050505050565b606083156101ac5782516101a5576001600160a01b0385163b6101a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b50816101b6565b6101b683836101be565b949350505050565b8151156101ce5781518083602001fd5b8060405162461bcd60e51b815260040161019c9190610234565b60005b838110156102035781810151838201526020016101eb565b83811115610212576000848401525b50505050565b6000825161022a8184602087016101e8565b9190910192915050565b60208152600082518060208401526102538160408501602087016101e8565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ff8e6f2d761d58b3bd984933269e01a7ff1f70a460b808056daa4cff1ee8ab6964736f6c63430008090033" + }, + { + "address": "0xf851513a732996f22542226341748f3c9978438f", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033" + }, + { + "address": "0xf6cfd951c6c2bd1ac8f53ff314a0d01f0443f0ee", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523480156200001157600080fd5b50600436106200010c5760003560e01c8063877b9a6711620000a5578063c851cc32116200006f578063c851cc32146200028f578063f0d124ec14620002af578063f2fde38b14620002cf578063f887ea4014620002ef576200010c565b8063877b9a6714620001cb5780638da5cb5b1462000201578063c0fbc7481462000223578063c3c5a5471462000259576200010c565b806355cc4e5711620000e757806355cc4e571462000173578063715018a6146200019357806374a8f103146200019f5780638129fc1c14620001bf576200010c565b806328c0ddf5146200011157806345592640146200013157806347bc70931462000153575b600080fd5b6200012f600480360381019062000129919062001e92565b62000311565b005b6200013b62000858565b6040516200014a919062001f92565b60405180910390f35b6200017160048036038101906200016b919062001faf565b62000865565b005b6200019160048036038101906200018b919062001faf565b62000a07565b005b6200019d62000aa5565b005b620001bd6004803603810190620001b7919062001faf565b62000abd565b005b620001c962000f5b565b005b620001e96004803603810190620001e3919062001faf565b620010a7565b604051620001f8919062001ff2565b60405180910390f35b6200020b620010fd565b6040516200021a919062002020565b60405180910390f35b6200024160048036038101906200023b919062001faf565b62001127565b60405162000250919062002264565b60405180910390f35b62000277600480360381019062000271919062001faf565b620014e9565b60405162000286919062001ff2565b60405180910390f35b620002ad6004803603810190620002a7919062001faf565b62001584565b005b620002cd6004803603810190620002c79190620022f1565b62001639565b005b620002ed6004803603810190620002e7919062001faf565b620016f8565b005b620002f962001782565b60405162000308919062002463565b60405180910390f35b336200031d81620010a7565b62000354576040517f55b51ef100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16606660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200041d576040517fb11640c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200042886620017a8565b6200045f576040517fa3f8514f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008551036200049b576040517f40f13f8e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000845103620004d7576040517f379e340600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082510362000513576040517fc57edda100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200053f867f31c1afd500000000000000000000000000000000000000000000000000000000620017cb565b62000576576040517f2c1d4deb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff1663b2494df36040518163ffffffff1660e01b8152600401600060405180830381865afa158015620005c4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190620005ef91906200256d565b905060006040518060e001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001838152602001861515815260200188815260200187815260200185815250905080606660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020190805190602001906200074292919062001b53565b5060608201518160030160006101000a81548160ff02191690831515021790555060808201518160040190816200077a9190620027ea565b5060a0820151816005019081620007929190620027ea565b5060c0820151816006019081620007aa9190620027ea565b509050506068889080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2b7df910f1bbb7a5c5b32de79907b6445d28b219a71bcb754b46d8d225d27e8687878a604051620008469392919062002923565b60405180910390a15050505050505050565b6000606880549050905090565b6200086f620017f5565b6000606760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f10b5cc86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200095b91906200296e565b73ffffffffffffffffffffffffffffffffffffffff166382e2fbeb82336040518363ffffffff1660e01b815260040162000997929190620029a0565b600060405180830381600087803b158015620009b257600080fd5b505af1158015620009c7573d6000803e3d6000fd5b505050507faf66545c919a3be306ee446d8f42a9558b5b022620df880517bc9593ec0f2d5281604051620009fc919062002020565b60405180910390a150565b62000a11620017f5565b6001606760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f05e7c881d716bee8cb7ed92293133ba156704252439e5c502c277448f04e20c28160405162000a9a919062002020565b60405180910390a150565b62000aaf620017f5565b62000abb60006200187a565b565b62000ac7620017f5565b62000ad281620014e9565b62000b09576040517f082cec1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff81111562000b6c5762000b6b62001d0e565b5b60405190808252806020026020018201604052801562000b9b5781602001602082028036833780820191505090505b50815260200160001515815260200160405180602001604052806000815250815260200160405180602001604052806000815250815260200160405180602001604052806000815250815250606660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201908051906020019062000cd292919062001b53565b5060608201518160030160006101000a81548160ff021916908315150217905550608082015181600401908162000d0a9190620027ea565b5060a082015181600501908162000d229190620027ea565b5060c082015181600601908162000d3a9190620027ea565b50905050600080600090505b60688054905081101562000de0578273ffffffffffffffffffffffffffffffffffffffff166068828154811062000d825762000d81620029cd565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160362000dcd578091505b62000dd88162001940565b905062000d46565b50606880549050811062000e20576040517f082cec1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6068600160688054905062000e36919062002a2b565b8154811062000e4a5762000e49620029cd565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166068828154811062000e8c5762000e8b620029cd565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606880548062000ee95762000ee862002a66565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590557f3d6e85d7560af02579467bce30e02d3f08d3527a14d519ff42bee5774c70f95a8260405162000f4f919062002020565b60405180910390a15050565b60008060019054906101000a900460ff1615905080801562000f8d5750600160008054906101000a900460ff1660ff16105b8062000fbe575062000f9f306200194d565b15801562000fbd5750600160008054906101000a900460ff1660ff16145b5b62001000576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ff79062002b0b565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156200103e576001600060016101000a81548160ff0219169083151502179055505b6200104862001970565b8015620010a45760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516200109b919062002b7d565b60405180910390a15b50565b6000606760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200113162001be2565b6200113c82620014e9565b62001173576040517f082cec1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020018280548015620012f057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620012a5575b505050505081526020016003820160009054906101000a900460ff161515151581526020016004820180546200132690620025ed565b80601f01602080910402602001604051908101604052809291908181526020018280546200135490620025ed565b8015620013a55780601f106200137957610100808354040283529160200191620013a5565b820191906000526020600020905b8154815290600101906020018083116200138757829003601f168201915b50505050508152602001600582018054620013c090620025ed565b80601f0160208091040260200160405190810160405280929190818152602001828054620013ee90620025ed565b80156200143f5780601f1062001413576101008083540402835291602001916200143f565b820191906000526020600020905b8154815290600101906020018083116200142157829003601f168201915b505050505081526020016006820180546200145a90620025ed565b80601f01602080910402602001604051908101604052809291908181526020018280546200148890620025ed565b8015620014d95780601f10620014ad57610100808354040283529160200191620014d9565b820191906000526020600020905b815481529060010190602001808311620014bb57829003601f168201915b5050505050815250509050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200158e620017f5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620015f5576040517f4944068e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b336200164581620010a7565b6200167c576040517f55b51ef100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620016b19062001c4d565b620016bf9392919062002c44565b604051809103906000f080158015620016dc573d6000803e3d6000fd5b509050620016ee818787878762000311565b5050505050505050565b62001702620017f5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362001774576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200176b9062002cf0565b60405180910390fd5b6200177f816200187a565b50565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000620017d883620019ce565b8015620017ed5750620017ec838362001a20565b5b905092915050565b620017ff62001ae3565b73ffffffffffffffffffffffffffffffffffffffff166200181f620010fd565b73ffffffffffffffffffffffffffffffffffffffff161462001878576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200186f9062002d62565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600182019050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16620019c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620019b99062002dfa565b60405180910390fd5b620019cc62001aeb565b565b6000620019fc827f01ffc9a70000000000000000000000000000000000000000000000000000000062001a20565b801562001a19575062001a178263ffffffff60e01b62001a20565b155b9050919050565b6000806301ffc9a760e01b8360405160240162001a3e919062002e59565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806000602060008551602087018a617530fa92503d9150600051905082801562001aca575060208210155b801562001ad75750600081115b94505050505092915050565b600033905090565b600060019054906101000a900460ff1662001b3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001b349062002dfa565b60405180910390fd5b62001b5162001b4b62001ae3565b6200187a565b565b82805482825590600052602060002090810192821562001bcf579160200282015b8281111562001bce5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062001b74565b5b50905062001bde919062001c5b565b5090565b6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016000151581526020016060815260200160608152602001606081525090565b612c6d8062002e7783390190565b5b8082111562001c7657600081600090555060010162001c5c565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001cbb8262001c8e565b9050919050565b62001ccd8162001cae565b811462001cd957600080fd5b50565b60008135905062001ced8162001cc2565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62001d488262001cfd565b810181811067ffffffffffffffff8211171562001d6a5762001d6962001d0e565b5b80604052505050565b600062001d7f62001c7a565b905062001d8d828262001d3d565b919050565b600067ffffffffffffffff82111562001db05762001daf62001d0e565b5b62001dbb8262001cfd565b9050602081019050919050565b82818337600083830152505050565b600062001dee62001de88462001d92565b62001d73565b90508281526020810184848401111562001e0d5762001e0c62001cf8565b5b62001e1a84828562001dc8565b509392505050565b600082601f83011262001e3a5762001e3962001cf3565b5b813562001e4c84826020860162001dd7565b91505092915050565b60008115159050919050565b62001e6c8162001e55565b811462001e7857600080fd5b50565b60008135905062001e8c8162001e61565b92915050565b600080600080600060a0868803121562001eb15762001eb062001c84565b5b600062001ec18882890162001cdc565b955050602086013567ffffffffffffffff81111562001ee55762001ee462001c89565b5b62001ef38882890162001e22565b945050604086013567ffffffffffffffff81111562001f175762001f1662001c89565b5b62001f258882890162001e22565b935050606062001f388882890162001e7b565b925050608086013567ffffffffffffffff81111562001f5c5762001f5b62001c89565b5b62001f6a8882890162001e22565b9150509295509295909350565b6000819050919050565b62001f8c8162001f77565b82525050565b600060208201905062001fa9600083018462001f81565b92915050565b60006020828403121562001fc85762001fc762001c84565b5b600062001fd88482850162001cdc565b91505092915050565b62001fec8162001e55565b82525050565b600060208201905062002009600083018462001fe1565b92915050565b6200201a8162001cae565b82525050565b60006020820190506200203760008301846200200f565b92915050565b620020488162001cae565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006200208883836200203d565b60208301905092915050565b6000602082019050919050565b6000620020ae826200204e565b620020ba818562002059565b9350620020c7836200206a565b8060005b83811015620020fe578151620020e288826200207a565b9750620020ef8362002094565b925050600181019050620020cb565b5085935050505092915050565b620021168162001e55565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620021585780820151818401526020810190506200213b565b60008484015250505050565b600062002171826200211c565b6200217d818562002127565b93506200218f81856020860162002138565b6200219a8162001cfd565b840191505092915050565b600060e083016000830151620021bf60008601826200203d565b506020830151620021d460208601826200203d565b5060408301518482036040860152620021ee8282620020a1565b91505060608301516200220560608601826200210b565b50608083015184820360808601526200221f828262002164565b91505060a083015184820360a08601526200223b828262002164565b91505060c083015184820360c086015262002257828262002164565b9150508091505092915050565b60006020820190508181036000830152620022808184620021a5565b905092915050565b600080fd5b600080fd5b60008083601f840112620022ab57620022aa62001cf3565b5b8235905067ffffffffffffffff811115620022cb57620022ca62002288565b5b602083019150836020820283011115620022ea57620022e96200228d565b5b9250929050565b60008060008060008060a0878903121562002311576200231062001c84565b5b600087013567ffffffffffffffff81111562002332576200233162001c89565b5b6200234089828a0162002292565b9650965050602087013567ffffffffffffffff81111562002366576200236562001c89565b5b6200237489828a0162001e22565b945050604087013567ffffffffffffffff81111562002398576200239762001c89565b5b620023a689828a0162001e22565b9350506060620023b989828a0162001e7b565b925050608087013567ffffffffffffffff811115620023dd57620023dc62001c89565b5b620023eb89828a0162001e22565b9150509295509295509295565b6000819050919050565b6000620024236200241d620024178462001c8e565b620023f8565b62001c8e565b9050919050565b6000620024378262002402565b9050919050565b60006200244b826200242a565b9050919050565b6200245d816200243e565b82525050565b60006020820190506200247a600083018462002452565b92915050565b600067ffffffffffffffff8211156200249e576200249d62001d0e565b5b602082029050602081019050919050565b600081519050620024c08162001cc2565b92915050565b6000620024dd620024d78462002480565b62001d73565b905080838252602082019050602084028301858111156200250357620025026200228d565b5b835b818110156200253057806200251b8882620024af565b84526020840193505060208101905062002505565b5050509392505050565b600082601f83011262002552576200255162001cf3565b5b815162002564848260208601620024c6565b91505092915050565b60006020828403121562002586576200258562001c84565b5b600082015167ffffffffffffffff811115620025a757620025a662001c89565b5b620025b5848285016200253a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200260657607f821691505b6020821081036200261c576200261b620025be565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620026867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262002647565b62002692868362002647565b95508019841693508086168417925050509392505050565b6000620026cb620026c5620026bf8462001f77565b620023f8565b62001f77565b9050919050565b6000819050919050565b620026e783620026aa565b620026ff620026f682620026d2565b84845462002654565b825550505050565b600090565b6200271662002707565b62002723818484620026dc565b505050565b5b818110156200274b576200273f6000826200270c565b60018101905062002729565b5050565b601f8211156200279a57620027648162002622565b6200276f8462002637565b810160208510156200277f578190505b620027976200278e8562002637565b83018262002728565b50505b505050565b600082821c905092915050565b6000620027bf600019846008026200279f565b1980831691505092915050565b6000620027da8383620027ac565b9150826002028217905092915050565b620027f5826200211c565b67ffffffffffffffff81111562002811576200281062001d0e565b5b6200281d8254620025ed565b6200282a8282856200274f565b600060209050601f8311600181146200286257600084156200284d578287015190505b620028598582620027cc565b865550620028c9565b601f198416620028728662002622565b60005b828110156200289c5784890151825560018201915060208501945060208101905062002875565b86831015620028bc5784890151620028b8601f891682620027ac565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b6000620028ef826200211c565b620028fb8185620028d1565b93506200290d81856020860162002138565b620029188162001cfd565b840191505092915050565b600060608201905081810360008301526200293f8186620028e2565b90508181036020830152620029558185620028e2565b90506200296660408301846200200f565b949350505050565b60006020828403121562002987576200298662001c84565b5b60006200299784828501620024af565b91505092915050565b6000604082019050620029b760008301856200200f565b620029c660208301846200200f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062002a388262001f77565b915062002a458362001f77565b925082820390508181111562002a605762002a5f620029fc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600062002af3602e83620028d1565b915062002b008262002a95565b604082019050919050565b6000602082019050818103600083015262002b268162002ae4565b9050919050565b6000819050919050565b600060ff82169050919050565b600062002b6562002b5f62002b598462002b2d565b620023f8565b62002b37565b9050919050565b62002b778162002b44565b82525050565b600060208201905062002b94600083018462002b6c565b92915050565b600082825260208201905092915050565b6000819050919050565b600062002bc6602084018462001cdc565b905092915050565b6000602082019050919050565b600062002be9838562002b9a565b935062002bf68262002bab565b8060005b8581101562002c375762002c0f828462002bb5565b62002c1b88826200207a565b975062002c288362002bce565b92505060018101905062002bfa565b5085925050509392505050565b6000604082019050818103600083015262002c6181858762002bdb565b905062002c7260208301846200200f565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600062002cd8602683620028d1565b915062002ce58262002c7a565b604082019050919050565b6000602082019050818103600083015262002d0b8162002cc9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062002d4a602083620028d1565b915062002d578262002d12565b602082019050919050565b6000602082019050818103600083015262002d7d8162002d3b565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b600062002de2602b83620028d1565b915062002def8262002d84565b604082019050919050565b6000602082019050818103600083015262002e158162002dd3565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62002e538162002e1c565b82525050565b600060208201905062002e70600083018462002e48565b9291505056fe60806040523480156200001157600080fd5b5060405162002c6d38038062002c6d8339818101604052810190620000379190620005ae565b818181600190805190602001906200005192919062000312565b50806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bfa665856040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000124919062000614565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663edec79526040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f6919062000614565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7dac9766040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c8919062000614565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000646565b8280548282559060005260206000209081019282156200038e579160200282015b828111156200038d5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000333565b5b5090506200039d9190620003a1565b5090565b5b80821115620003bc576000816000905550600101620003a2565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200042482620003d9565b810181811067ffffffffffffffff82111715620004465762000445620003ea565b5b80604052505050565b60006200045b620003c0565b905062000469828262000419565b919050565b600067ffffffffffffffff8211156200048c576200048b620003ea565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004cf82620004a2565b9050919050565b620004e181620004c2565b8114620004ed57600080fd5b50565b6000815190506200050181620004d6565b92915050565b60006200051e62000518846200046e565b6200044f565b905080838252602082019050602084028301858111156200054457620005436200049d565b5b835b818110156200057157806200055c8882620004f0565b84526020840193505060208101905062000546565b5050509392505050565b600082601f830112620005935762000592620003d4565b5b8151620005a584826020860162000507565b91505092915050565b60008060408385031215620005c857620005c7620003ca565b5b600083015167ffffffffffffffff811115620005e957620005e8620003cf565b5b620005f7858286016200057b565b92505060206200060a85828601620004f0565b9150509250929050565b6000602082840312156200062d576200062c620003ca565b5b60006200063d84828501620004f0565b91505092915050565b61261780620006566000396000f3fe6080604052600436106100e85760003560e01c8063b2494df31161008a578063ecdbb4fd11610059578063ecdbb4fd146102d3578063ed6d73f9146102ef578063f3fef3a31461031a578063f887ea4014610343576100e8565b8063b2494df314610229578063b666493414610254578063b75c7dc61461027f578063b95459e4146102a8576100e8565b80634ada8076116100c65780634ada80761461016f578063523ba7ca1461019857806381b2248a146101c15780638388e226146101fe576100e8565b806301ffc9a7146100ed578063074321961461012a5780633cc30e2a14610146575b600080fd5b3480156100f957600080fd5b50610114600480360381019061010f9190610ed5565b61036e565b6040516101219190610f1d565b60405180910390f35b610144600480360381019061013f9190611294565b6104a8565b005b34801561015257600080fd5b5061016d60048036038101906101689190611591565b6105e8565b005b34801561017b57600080fd5b5061019660048036038101906101919190611638565b610722565b005b3480156101a457600080fd5b506101bf60048036038101906101ba9190611681565b6107bb565b005b3480156101cd57600080fd5b506101e860048036038101906101e3919061172f565b6108f1565b6040516101f5919061179d565b60405180910390f35b34801561020a57600080fd5b50610213610930565b604051610220919061179d565b60405180910390f35b34801561023557600080fd5b5061023e610938565b60405161024b9190611876565b60405180910390f35b34801561026057600080fd5b506102696109c6565b60405161027691906118f7565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a19190611912565b6109ec565b005b3480156102b457600080fd5b506102bd610a85565b6040516102ca9190611960565b60405180910390f35b6102ed60048036038101906102e8919061197b565b610aab565b005b3480156102fb57600080fd5b50610304610bef565b6040516103119190611a27565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190611a80565b610c15565b005b34801561034f57600080fd5b50610358610c19565b6040516103659190611ae1565b60405180910390f35b60007f204cf909000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061043957507f31c1afd5000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e253ca60018484346040518563ffffffff1660e01b815260040161050a9493929190611dc0565b600060405180830381600087803b15801561052457600080fd5b505af1158015610538573d6000803e3d6000fd5b5050505061054e82610548610930565b34610c3d565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362fa3d4583610595610930565b6040518363ffffffff1660e01b81526004016105b2929190611e1a565b600060405180830381600087803b1580156105cc57600080fd5b505af11580156105e0573d6000803e3d6000fd5b505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2baec4a600184846040518463ffffffff1660e01b8152600401610648939291906120be565b600060405180830381600087803b15801561066257600080fd5b505af1158015610676573d6000803e3d6000fd5b50505050610685838383610c42565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ec4d4cb84846106cd610930565b6040518463ffffffff1660e01b81526004016106eb939291906121b9565b600060405180830381600087803b15801561070557600080fd5b505af1158015610719573d6000803e3d6000fd5b50505050505050565b61072b81610c47565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ada8076826040518263ffffffff1660e01b815260040161078691906121fe565b600060405180830381600087803b1580156107a057600080fd5b505af11580156107b4573d6000803e3d6000fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2baec4a600184846040518463ffffffff1660e01b815260040161081b939291906120be565b600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b505050506108578282610d53565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8e2812d8361089e610930565b6040518363ffffffff1660e01b81526004016108bb929190612220565b600060405180830381600087803b1580156108d557600080fd5b505af11580156108e9573d6000803e3d6000fd5b505050505050565b6001818154811061090157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b606060018054806020026020016040519081016040528092919081815260200182805480156109bc57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610972575b5050505050905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109f581610d57565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b75c7dc6826040518263ffffffff1660e01b8152600401610a50919061225f565b600060405180830381600087803b158015610a6a57600080fd5b505af1158015610a7e573d6000803e3d6000fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e253ca60018484346040518563ffffffff1660e01b8152600401610b0d9493929190611dc0565b600060405180830381600087803b158015610b2757600080fd5b505af1158015610b3b573d6000803e3d6000fd5b50505050610b528383610b4c610930565b34610e63565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638ffa736b8484610b9a610930565b6040518463ffffffff1660e01b8152600401610bb89392919061227a565b600060405180830381600087803b158015610bd257600080fd5b505af1158015610be6573d6000803e3d6000fd5b50505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b505050565b505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0fbc748306040518263ffffffff1660e01b8152600401610ca2919061179d565b600060405180830381865afa158015610cbf573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610ce89190612598565b6020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f71f63e3100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0fbc748306040518263ffffffff1660e01b8152600401610db2919061179d565b600060405180830381865afa158015610dcf573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610df89190612598565b6020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e60576040517f71f63e3100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b50505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610eb281610e7d565b8114610ebd57600080fd5b50565b600081359050610ecf81610ea9565b92915050565b600060208284031215610eeb57610eea610e73565b5b6000610ef984828501610ec0565b91505092915050565b60008115159050919050565b610f1781610f02565b82525050565b6000602082019050610f326000830184610f0e565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610f8682610f3d565b810181811067ffffffffffffffff82111715610fa557610fa4610f4e565b5b80604052505050565b6000610fb8610e69565b9050610fc48282610f7d565b919050565b600080fd5b6000819050919050565b610fe181610fce565b8114610fec57600080fd5b50565b600081359050610ffe81610fd8565b92915050565b600067ffffffffffffffff82169050919050565b61102181611004565b811461102c57600080fd5b50565b60008135905061103e81611018565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff82111561106957611068610f4e565b5b61107282610f3d565b9050602081019050919050565b82818337600083830152505050565b60006110a161109c8461104e565b610fae565b9050828152602081018484840111156110bd576110bc611049565b5b6110c884828561107f565b509392505050565b600082601f8301126110e5576110e4611044565b5b81356110f584826020860161108e565b91505092915050565b60006080828403121561111457611113610f38565b5b61111e6080610fae565b9050600061112e84828501610fef565b60008301525060206111428482850161102f565b602083015250604082013567ffffffffffffffff81111561116657611165610fc9565b5b611172848285016110d0565b604083015250606082013567ffffffffffffffff81111561119657611195610fc9565b5b6111a2848285016110d0565b60608301525092915050565b600067ffffffffffffffff8211156111c9576111c8610f4e565b5b602082029050602081019050919050565b600080fd5b60006111f26111ed846111ae565b610fae565b90508083825260208201905060208402830185811115611215576112146111da565b5b835b8181101561125c57803567ffffffffffffffff81111561123a57611239611044565b5b80860161124789826110d0565b85526020850194505050602081019050611217565b5050509392505050565b600082601f83011261127b5761127a611044565b5b813561128b8482602086016111df565b91505092915050565b600080604083850312156112ab576112aa610e73565b5b600083013567ffffffffffffffff8111156112c9576112c8610e78565b5b6112d5858286016110fe565b925050602083013567ffffffffffffffff8111156112f6576112f5610e78565b5b61130285828601611266565b9150509250929050565b600067ffffffffffffffff82111561132757611326610f4e565b5b602082029050602081019050919050565b600061134b6113468461130c565b610fae565b9050808382526020820190506020840283018581111561136e5761136d6111da565b5b835b8181101561139757806113838882610fef565b845260208401935050602081019050611370565b5050509392505050565b600082601f8301126113b6576113b5611044565b5b81356113c6848260208601611338565b91505092915050565b600067ffffffffffffffff8211156113ea576113e9610f4e565b5b602082029050602081019050919050565b600061140e611409846113cf565b610fae565b90508083825260208201905060208402830185811115611431576114306111da565b5b835b8181101561147857803567ffffffffffffffff81111561145657611455611044565b5b80860161146389826110fe565b85526020850194505050602081019050611433565b5050509392505050565b600082601f83011261149757611496611044565b5b81356114a78482602086016113fb565b91505092915050565b600067ffffffffffffffff8211156114cb576114ca610f4e565b5b602082029050602081019050919050565b60006114ef6114ea846114b0565b610fae565b90508083825260208201905060208402830185811115611512576115116111da565b5b835b8181101561155957803567ffffffffffffffff81111561153757611536611044565b5b8086016115448982611266565b85526020850194505050602081019050611514565b5050509392505050565b600082601f83011261157857611577611044565b5b81356115888482602086016114dc565b91505092915050565b6000806000606084860312156115aa576115a9610e73565b5b600084013567ffffffffffffffff8111156115c8576115c7610e78565b5b6115d4868287016113a1565b935050602084013567ffffffffffffffff8111156115f5576115f4610e78565b5b61160186828701611482565b925050604084013567ffffffffffffffff81111561162257611621610e78565b5b61162e86828701611563565b9150509250925092565b60006020828403121561164e5761164d610e73565b5b600082013567ffffffffffffffff81111561166c5761166b610e78565b5b611678848285016113a1565b91505092915050565b6000806040838503121561169857611697610e73565b5b600083013567ffffffffffffffff8111156116b6576116b5610e78565b5b6116c285828601611482565b925050602083013567ffffffffffffffff8111156116e3576116e2610e78565b5b6116ef85828601611563565b9150509250929050565b6000819050919050565b61170c816116f9565b811461171757600080fd5b50565b60008135905061172981611703565b92915050565b60006020828403121561174557611744610e73565b5b60006117538482850161171a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117878261175c565b9050919050565b6117978161177c565b82525050565b60006020820190506117b2600083018461178e565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6117ed8161177c565b82525050565b60006117ff83836117e4565b60208301905092915050565b6000602082019050919050565b6000611823826117b8565b61182d81856117c3565b9350611838836117d4565b8060005b8381101561186957815161185088826117f3565b975061185b8361180b565b92505060018101905061183c565b5085935050505092915050565b600060208201905081810360008301526118908184611818565b905092915050565b6000819050919050565b60006118bd6118b86118b38461175c565b611898565b61175c565b9050919050565b60006118cf826118a2565b9050919050565b60006118e1826118c4565b9050919050565b6118f1816118d6565b82525050565b600060208201905061190c60008301846118e8565b92915050565b60006020828403121561192857611927610e73565b5b600061193684828501610fef565b91505092915050565b600061194a826118c4565b9050919050565b61195a8161193f565b82525050565b60006020820190506119756000830184611951565b92915050565b60008060006060848603121561199457611993610e73565b5b60006119a286828701610fef565b935050602084013567ffffffffffffffff8111156119c3576119c2610e78565b5b6119cf868287016110fe565b925050604084013567ffffffffffffffff8111156119f0576119ef610e78565b5b6119fc86828701611266565b9150509250925092565b6000611a11826118c4565b9050919050565b611a2181611a06565b82525050565b6000602082019050611a3c6000830184611a18565b92915050565b6000611a4d8261175c565b9050919050565b611a5d81611a42565b8114611a6857600080fd5b50565b600081359050611a7a81611a54565b92915050565b60008060408385031215611a9757611a96610e73565b5b6000611aa585828601611a6b565b9250506020611ab68582860161171a565b9150509250929050565b6000611acb826118c4565b9050919050565b611adb81611ac0565b82525050565b6000602082019050611af66000830184611ad2565b92915050565b600081549050919050565b60008190508160005260206000209050919050565b60008160001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b5c611b5783611b1c565b611b29565b9050919050565b6000611b6f8254611b49565b9050919050565b6000600182019050919050565b6000611b8e82611afc565b611b9881856117c3565b9350611ba383611b07565b8060005b83811015611bdb57611bb882611b63565b611bc288826117f3565b9750611bcd83611b76565b925050600181019050611ba7565b5085935050505092915050565b611bf181610fce565b82525050565b611c0081611004565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c40578082015181840152602081019050611c25565b60008484015250505050565b6000611c5782611c06565b611c618185611c11565b9350611c71818560208601611c22565b611c7a81610f3d565b840191505092915050565b6000608083016000830151611c9d6000860182611be8565b506020830151611cb06020860182611bf7565b5060408301518482036040860152611cc88282611c4c565b91505060608301518482036060860152611ce28282611c4c565b9150508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611d278383611c4c565b905092915050565b6000602082019050919050565b6000611d4782611cef565b611d518185611cfa565b935083602082028501611d6385611d0b565b8060005b85811015611d9f5784840389528151611d808582611d1b565b9450611d8b83611d2f565b925060208a01995050600181019050611d67565b50829750879550505050505092915050565b611dba816116f9565b82525050565b60006080820190508181036000830152611dda8187611b83565b90508181036020830152611dee8186611c85565b90508181036040830152611e028185611d3c565b9050611e116060830184611db1565b95945050505050565b60006040820190508181036000830152611e348185611c85565b9050611e43602083018461178e565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000608083016000830151611e8e6000860182611be8565b506020830151611ea16020860182611bf7565b5060408301518482036040860152611eb98282611c4c565b91505060608301518482036060860152611ed38282611c4c565b9150508091505092915050565b6000611eec8383611e76565b905092915050565b6000602082019050919050565b6000611f0c82611e4a565b611f168185611e55565b935083602082028501611f2885611e66565b8060005b85811015611f645784840389528151611f458582611ee0565b9450611f5083611ef4565b925060208a01995050600181019050611f2c565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000611fbe82611cef565b611fc88185611fa2565b935083602082028501611fda85611d0b565b8060005b858110156120165784840389528151611ff78582611d1b565b945061200283611d2f565b925060208a01995050600181019050611fde565b50829750879550505050505092915050565b60006120348383611fb3565b905092915050565b6000602082019050919050565b600061205482611f76565b61205e8185611f81565b93508360208202850161207085611f92565b8060005b858110156120ac578484038952815161208d8582612028565b94506120988361203c565b925060208a01995050600181019050612074565b50829750879550505050505092915050565b600060608201905081810360008301526120d88186611b83565b905081810360208301526120ec8185611f01565b905081810360408301526121008184612049565b9050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006121428383611be8565b60208301905092915050565b6000602082019050919050565b60006121668261210a565b6121708185612115565b935061217b83612126565b8060005b838110156121ac5781516121938882612136565b975061219e8361214e565b92505060018101905061217f565b5085935050505092915050565b600060608201905081810360008301526121d3818661215b565b905081810360208301526121e78185611f01565b90506121f6604083018461178e565b949350505050565b60006020820190508181036000830152612218818461215b565b905092915050565b6000604082019050818103600083015261223a8185611f01565b9050612249602083018461178e565b9392505050565b61225981610fce565b82525050565b60006020820190506122746000830184612250565b92915050565b600060608201905061228f6000830186612250565b81810360208301526122a18185611c85565b90506122b0604083018461178e565b949350505050565b6122c18161177c565b81146122cc57600080fd5b50565b6000815190506122de816122b8565b92915050565b600067ffffffffffffffff8211156122ff576122fe610f4e565b5b602082029050602081019050919050565b600061232361231e846122e4565b610fae565b90508083825260208201905060208402830185811115612346576123456111da565b5b835b8181101561236f578061235b88826122cf565b845260208401935050602081019050612348565b5050509392505050565b600082601f83011261238e5761238d611044565b5b815161239e848260208601612310565b91505092915050565b6123b081610f02565b81146123bb57600080fd5b50565b6000815190506123cd816123a7565b92915050565b600067ffffffffffffffff8211156123ee576123ed610f4e565b5b6123f782610f3d565b9050602081019050919050565b6000612417612412846123d3565b610fae565b90508281526020810184848401111561243357612432611049565b5b61243e848285611c22565b509392505050565b600082601f83011261245b5761245a611044565b5b815161246b848260208601612404565b91505092915050565b600060e0828403121561248a57612489610f38565b5b61249460e0610fae565b905060006124a4848285016122cf565b60008301525060206124b8848285016122cf565b602083015250604082015167ffffffffffffffff8111156124dc576124db610fc9565b5b6124e884828501612379565b60408301525060606124fc848285016123be565b606083015250608082015167ffffffffffffffff8111156125205761251f610fc9565b5b61252c84828501612446565b60808301525060a082015167ffffffffffffffff8111156125505761254f610fc9565b5b61255c84828501612446565b60a08301525060c082015167ffffffffffffffff8111156125805761257f610fc9565b5b61258c84828501612446565b60c08301525092915050565b6000602082840312156125ae576125ad610e73565b5b600082015167ffffffffffffffff8111156125cc576125cb610e78565b5b6125d884828501612474565b9150509291505056fea26469706673582212200568c57ce747219aa4ab9654d0f491eee5f75505562c8afdb74b5167140455c964736f6c63430008150033a2646970667358221220dbd6446ccb8cae587a72be26798037ec539a3c2f9c1b24070adf93b29e438a7364736f6c63430008150033" + }, + { + "address": "0x0f00893d3e3a5440687dce9b780b05d13f332a5c", + "nonce": 31, + "balance": "0x0000000000000000000000000000000000000000000000000057b186b20f7475", + "code": "0x" + }, + { + "address": "0x4fc0a5da8083493b41feb49c5193425090fe4d76", + "nonce": 10, + "balance": "0x00000000000000000000000000000000000000000000000000123abe58660e4f", + "code": "0x" + }, + { + "address": "0x5e809a85aa182a9921edd10a4163745bb3e36284", + "nonce": 167829, + "balance": "0x000000000000000000000000000000000000000000000001c1e7d665c5d91259", + "code": "0x" + }, + { + "address": "0x88867bf3bb3321d8c7da71a8eab70680037068e4", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101285760003560e01c80631621835f1461012d57806316dc165b146101c45780631aae2e55146101e4578063252c09d7146101fb57806333005cd514610235578063537c2d8e14610240578063588e59ae1461026057806358c51ce61461026957806359dd14361461027d57806362ccaafd146102a55780636d01843b146102f957806375c0e0d51461032b57806381794fba146103ae578063857f812f146103da5780638790aca3146103ed57806387e7d5fe146104bb57806398a0f72e14610534578063b7d19fc414610554578063c19d93fb14610567578063c45a01551461062b578063d3b168641461063e578063ddca3f4314610652578063e556289f14610668578063edcba3b214610673575b600080fd5b61018161013b3660046140ed565b600f60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b604080519687526001600160801b039586166020880152938516938601939093529083166060850152821660808401521660a082015260c0015b60405180910390f35b6002546101d7906001600160a01b031681565b6040516101bb9190614191565b6101ed60045481565b6040519081526020016101bb565b61020e6102093660046140ed565b610696565b6040805163ffffffff909416845260069290920b60208401521515908201526060016101bb565b6101ed620100105481565b60005461024d9060020b81565b60405160029190910b81526020016101bb565b6101ed60055481565b60035461024d90600160b81b900460020b81565b61029061028b366004614017565b6106ca565b604080519283526020830191909152016101bb565b6101816102b33660046140ed565b600e60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b60005461031390600160301b90046001600160801b031681565b6040516001600160801b0390911681526020016101bb565b610377610339366004614126565b600b6020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b929060ff1685565b604080516001600160801b039096168652600f9490940b60208601529284019190915260608301521515608082015260a0016101bb565b62010016546103c690600160a01b900462ffffff1681565b60405162ffffff90911681526020016101bb565b6102906103e8366004614017565b6111dc565b61045a6103fb366004614126565b600d6020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160801b0380871697600160801b978890048216978583169581900483169480841694919004909216918a565b604080516001600160801b039b8c168152998b1660208b01528901979097526060880195909552928716608087015290861660a0860152851660c085015290931660e0830152610100820192909252610120810191909152610140016101bb565b6105026104c93660046140ed565b600960205260009081526040902080546001820154600283015460038401546004909401546001600160801b0390931693919290919085565b604080516001600160801b0390961686526020860194909452928401919091526060830152608082015260a0016101bb565b6101ed610542366004614105565b600a6020526000908152604090205481565b6003546101d7906001600160a01b031681565b6007546008546105cc916001600160a01b03811691600160a01b820460020b9161ffff600160b81b8204811692600160c81b8304821692600160d81b81049092169160ff600160e81b90910416906001600160801b0380821691600160801b90041688565b604080516001600160a01b03909916895260029790970b602089015261ffff9586169688019690965292841660608701529216608085015290151560a08401526001600160801b0390811660c08401521660e0820152610100016101bb565b6001546101d7906001600160a01b031681565b60005461024d906301000000900460020b81565b6003546103c690600160a01b900462ffffff1681565b6101ed6201000f5481565b61024d610681366004614126565b600c6020526000908152604090205460020b81565b60108161ffff81106106a757600080fd5b015463ffffffff81169150600160201b810460060b90600160581b900460ff1683565b6000806000866001600160801b0316116106ff5760405162461bcd60e51b81526004016106f6906141a5565b60405180910390fd5b60005461071090869060020b611e2b565b60408051610100810182526007546001600160a01b0381168252600160a01b8104600290810b810b900b6020830152600160b81b810461ffff90811693830193909352600160c81b810483166060830152600160d81b81049092166080820152600160e81b90910460ff16151560a08201526008546001600160801b0380821660c0840152600160801b9091041660e0820152909550600092508291506107b5613fb9565b6004548152600554602080830191909152600060408301526006546001600160a01b03166060830152600354600160b81b9004600290810b810b900b608083018190529083015161080991600c9190611e4b565b600290810b810b60a08301526020830151810b900b60c0808301919091528201516001600160801b031660e082015263ffffffff42166101008201525b816020015160020b8760020b1315801561086257508060400151155b15610f745760008160a0015160021660020b1315610ae757602082810151600290810b900b6000908152600d90915260408120600381015484519192600160801b9091046001600160801b03169181906108be908d9085611e98565b915091508b6001600160801b0316816001600160801b0316106108e357600160408601525b60035460009061091b906001600160801b03851690600160a01b900462ffffff1661091181620f4240614601565b62ffffff16611f02565b9050806201000f60008282546109319190614312565b90915550506001600160801b03808316908e16111561095957610954828e61459e565b61095c565b60005b9c50610971816001600160801b038516614312565b61097b908a614312565b98506109906001600160801b03831689614312565b975061099c828561459e565b6003860180546001600160801b03908116600160801b8483160217909155600487018054929650859290916000916109d6918591166142ca565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826001600160801b0316856005016000828254610a179190614312565b90915550506001600160801b038416610ae1576004850180546001600160801b038082169291601091610a54918591600160801b909104166142ca565b82546101009290920a6001600160801b038181021990931691831602179091556004870180546001600160801b03191690556005870154600688015586541615159050610ae15760a086015160208801516080880151600190921691610abd91600c9184611f59565b8060020b60001415610adf5760208801516080880151610adf91600a91611fa0565b505b50505050505b806040015115610af657610f74565b600060018360200151610b099190614518565b905060008260a0015160011660020b1315610d285760c08301516001600160801b031615610c83576000610b4784856020015185606001518d612009565b8051151560408501526020810151600354919250600091610b7c9190600160a01b900462ffffff1661091181620f4240614601565b6201001654909150600090606490610ba090600160a01b900462ffffff16846144f9565b610baa9190614389565b9050806201000f6000828254610bc09190614312565b90915550610beb9050610bd3828461461d565b600160801b8860c001516001600160801b03166123ab565b8551610bf79190614312565b85526020830151610c09908390614312565b610c139089614312565b975082604001516001600160801b031687610c2e9190614312565b9650610c3e8c8460400151612458565b610c48908d61459e565b6060840151600290810b900b602088015260808401516001600160a01b0316875260a0909301516001600160801b031660e087015250909950505b8160400151610d2857602080840151600290810b900b6000908152600b8252604090208351918401519091610cba9183919061247b565b60c08401518154610cde9190610cd990600160801b9004600f0b61470a565b612496565b6001600160801b031660c08501526020840151610cfd90600190614518565b600290810b900b60208501819052610d14906124c7565b6001600160a01b0316845250600060e08401525b816040015180610d4157508760020b836020015160020b125b15610d4c5750610f74565b6000610d68828460800151600a6128d19092919063ffffffff16565b90508860020b8160020b1215610d7b5750875b6000610d97828560800151600c611e4b9092919063ffffffff16565b90508460c001516001600160801b031660001415610de257600282810b900b60208601819052610dc6906124c7565b6001600160a01b03168552600281810b900b60a0850152610f53565b6000610df4868487606001518f612009565b8051151560408701526020810151600354919250600091610e299190600160a01b900462ffffff1661091181620f4240614601565b6201001654909150600090606490610e4d90600160a01b900462ffffff16846144f9565b610e579190614389565b9050806201000f6000828254610e6d9190614312565b90915550506040830151610e8a906001600160801b03168a614312565b9850818360200151610e9c9190614312565b610ea6908b614312565b9950610eb68e8460400151612458565b610ec0908f61459e565b9d50610ee7610ecf828461461d565b600160801b8a60c001516001600160801b03166123ab565b8751610ef39190614312565b87526060830151600290810b810b60208a0181905260808501516001600160a01b03168a5260a08501516001600160801b031660e08b015286820b910b1415610f4757600284810b900b60a0880152610f4f565b600060a08801525b5050505b8960020b856020015160020b13610f6c57505050610f74565b505050610846565b816020015160020b8160c0015160020b14610fcc57610fba82604001518261010001518360c001518560600151866080015160106129bb9095949392919063ffffffff16565b61ffff90811660608501521660408301525b8051600455815160078054602085015160408601516060870151608088015160a08901511515600160e81b0260ff60e81b1961ffff928316600160d81b021662ffffff60d81b19938316600160c81b0261ffff60c81b1993909516600160b81b029290921663ffffffff60b81b1960029690960b62ffffff16600160a01b026001600160b81b03199097166001600160a01b039099169890981795909517939093169590951717939093169290921791909117905560c082015160e08301516001600160801b03908116600160801b02911617600855826110d45760405162461bcd60e51b8152602060048201526002602482015261282960f11b60448201526064016106f6565b6003546110eb906001600160a01b03168a85612b22565b600084116111205760405162461bcd60e51b8152602060048201526002602482015261050560f41b60448201526064016106f6565b600061112a612c23565b60405163061e01a160e21b8152909150339063187806849061115690889088908c908c906004016141c1565b600060405180830381600087803b15801561117057600080fd5b505af1158015611184573d6000803e3d6000fd5b5050505084816111949190614312565b61119c612c23565b10156111cf5760405162461bcd60e51b8152602060048201526002602482015261584560f01b60448201526064016106f6565b5050509550959350505050565b6000806000866001600160801b0316116112085760405162461bcd60e51b81526004016106f6906141a5565b60005461121990869060020b611e2b565b60408051610100810182526007546001600160a01b0381168252600160a01b8104600290810b810b900b6020830152600160b81b810461ffff90811693830193909352600160c81b810483166060830152600160d81b81049092166080820152600160e81b90910460ff16151560a08201526008546001600160801b0380821660c0840152600160801b9091041660e0820152909550600092508291506112be613fb9565b6004548152600554602080830191909152600060408301526006546001600160a01b03166060830152600354600160b81b9004600290810b810b900b608083018190529083015161131291600c9190611e4b565b600290810b810b60a08301526020830151810b900b60c0808301919091528201516001600160801b031660e082015263ffffffff42166101008201525b816020015160020b8760020b1315801561136b57508060400151155b15610f745760008160a0015160021660020b131561171c57600354600090620f4240906113a490600160a01b900462ffffff1682614601565b6113bc9062ffffff166001600160801b038c166144f9565b6113c69190614389565b90506001600160801b0381161561171257602083810151600290810b900b6000908152600d90915260408120600381015485519192600160801b9091046001600160801b031691819061141b90869085612d07565b91509150826001600160801b0316816001600160801b031610806114515750846001600160801b0316826001600160801b031610155b1561145e57600160408701525b6000856001600160801b0316836001600160801b03161061148a57611483838f61459e565b9050611540565b6003546114a690600160a01b900462ffffff16620f4240614601565b60035462ffffff918216916114cc91600160a01b9004166001600160801b0386166144f9565b6114d69190614389565b6003549091506000906114f890600160a01b900462ffffff16620f4240614601565b60035462ffffff9182169161151e91600160a01b9004166001600160801b0387166144f9565b61152891906146f6565b9050801561153e5761153b6001836142ca565b91505b505b806001600160801b03166201000f600082825461155d9190614312565b9091555061156d905081846142ca565b611577908f61459e565b9d50806001600160801b0316836001600160801b03168b6115989190614312565b6115a29190614312565b99506115b76001600160801b0383168a614312565b98506115c3828561459e565b6003860180546001600160801b03908116600160801b8483160217909155600487018054929650859290916000916115fd918591166142ca565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826001600160801b031685600501600082825461163e9190614312565b90915550506001600160801b038416611708576004850180546001600160801b03808216929160109161167b918591600160801b909104166142ca565b82546101009290920a6001600160801b03818102199093169183160217909155600587015460068801556004870180546001600160801b0319169055865416151590506117085760a0870151602089015160808901516001909216916116e491600c9184611f59565b8060020b60001415611706576020890151608089015161170691600a91611fa0565b505b505050505061171a565b600160408301525b505b80604001511561172b57610f74565b60006001836020015161173e9190614518565b905060008260a0015160011660020b1315611a9657600354600090620f42409061177490600160a01b900462ffffff1682614601565b61178c9062ffffff166001600160801b038d166144f9565b6117969190614389565b90506001600160801b03811615611a8c5760c08401516001600160801b0316156119e75760006117d0858660200151866060015185612db4565b80511515604086015260208101519091506000906001600160801b0380851691161061180c576020820151611805908d61459e565b90506118cc565b60035461182890600160a01b900462ffffff16620f4240614601565b600354602084015162ffffff9283169261185392600160a01b900416906001600160801b03166144f9565b61185d9190614389565b60035490915060009061187f90600160a01b900462ffffff16620f4240614601565b600354602085015162ffffff928316926118aa92600160a01b900416906001600160801b03166144f9565b6118b491906146f6565b905080156118ca576118c76001836142ca565b91505b505b62010016546000906064906118f690600160a01b900462ffffff166001600160801b0385166144f9565b6119009190614389565b9050806201000f60008282546119169190614312565b9091555061194a9050611932826001600160801b03851661461d565b600160801b8960c001516001600160801b03166123ab565b86516119569190614312565b865260208301516001600160801b038084169161197491168b614312565b61197e9190614312565b98508260400151886119909190614312565b97508183602001516119a291906142ca565b6119ac908e61459e565b6060840151600290810b900b602089015260808401516001600160a01b0316885260a0909301516001600160801b031660e088015250909a50505b8260400151611a8757602080850151600290810b900b6000908152600b8252604090208451918501519091611a1e9183919061247b565b60c08501518154611a3d9190610cd990600160801b9004600f0b61470a565b6001600160801b031660c08601526020850151611a5c90600190614518565b600290810b900b60208601819052611a73906124c7565b6001600160a01b0316855250600060e08501525b611a94565b600160408401525b505b816040015180611aaf57508760020b836020015160020b125b15611aba5750610f74565b6000611ad6828460800151600a6128d19092919063ffffffff16565b90508860020b8160020b1215611ae95750875b6000611b05828560800151600c611e4b9092919063ffffffff16565b90508460c001516001600160801b031660001415611b5057600282810b900b60208601819052611b34906124c7565b6001600160a01b03168552600281810b900b60a0850152611e0a565b600354600090620f424090611b7190600160a01b900462ffffff1682614601565b611b899062ffffff166001600160801b038f166144f9565b611b939190614389565b90506001600160801b03811615611dd5576000611bb68785886060015185612db4565b80511515604088015260208101519091506000906001600160801b03808516911610611bf2576020820151611beb908f61459e565b9050611cb2565b600354611c0e90600160a01b900462ffffff16620f4240614601565b600354602084015162ffffff92831692611c3992600160a01b900416906001600160801b03166144f9565b611c439190614389565b600354909150600090611c6590600160a01b900462ffffff16620f4240614601565b600354602085015162ffffff92831692611c9092600160a01b900416906001600160801b03166144f9565b611c9a91906146f6565b90508015611cb057611cad6001836142ca565b91505b505b6040820151611cc1908a614312565b9850806001600160801b031682602001516001600160801b03168b611ce69190614312565b611cf09190614312565b9950808260200151611d0291906142ca565b611d0c908f61459e565b6201001654909e50600090606490611d3990600160a01b900462ffffff166001600160801b0385166144f9565b611d439190614389565b9050806201000f6000828254611d599190614312565b90915550611d8d9050611d75826001600160801b03851661461d565b600160801b8b60c001516001600160801b03166123ab565b8851611d999190614312565b885250506060810151600290810b900b602088015260808101516001600160a01b0316875260a001516001600160801b031660e0870152611ddd565b600160408601525b8260020b866020015160020b1415611e0057600282810b900b60a0860152611e08565b600060a08601525b505b8960020b856020015160020b13611e2357505050610f74565b50505061134f565b60008160020b8360020b1315611e42575081611e45565b50805b92915050565b6000611e5782846146b3565b60020b15611e6757506000611e91565b836000611e74848661434f565b600290810b810b8252602082019290925260400160002054900b90505b9392505050565b6000836001600160801b038084169082161115611eb25750815b6000611ed5826001600160801b0316600160601b876001600160a01b0316611f02565b9050611ef7611ef282600160601b886001600160a01b0316611f02565b613125565b925050935093915050565b6000611f0f8484846123ab565b905060008280611f2f57634e487b7160e01b600052601260045260246000fd5b8486091115611e91576000198110611f4657600080fd5b80611f5081614698565b95945050505050565b80846000611f67858761434f565b60020b60020b815260200190815260200160002060006101000a81548162ffffff021916908360020b62ffffff16021790555050505050565b611faa81836146b3565b60020b15611fb757600080fd5b6000611fc3828461434f565b9050600281900b60081d6000611fdb610100846146b3565b600192830b830b60009081526020979097526040909620805460ff9097169290921b19909516905550505050565b6040805160c08082018352600080835260208301819052928201839052606082018390526080820183905260a08201929092529085015160e08601516001600160801b03918216911610808015612080575060008660e001516001600160801b031611806120805750856020015160020b8560020b145b1561212e5761209d8387600001518860c001518960e0015161316c565b6001600160801b0390811660a086018190529181166040860152602085019290925260c088015190911611806120e95750826001600160801b031682604001516001600160801b031610155b1561211857600182526020860151600290810b900b606083015285516001600160a01b031660808301526121c0565b6040820151612127908461459e565b92506121c0565b80156121ac5760208601516121449060016141fe565b600290810b900b6020870152600160601b612168816001600160a01b03871661461d565b875161217d91906001600160a01b03166144f9565b6121879190614389565b865161219c91906001600160a01b0316614312565b6001600160a01b031686526121c0565b60e08601516001600160801b031660a08301525b8151156121cd57506123a3565b856020015160020b8560020b121561237f5760006121ea866124c7565b9050600061225a6040518060c001604052808a60c001516001600160801b03168152602001846001600160a01b031681526020018960020b81526020018a600001516001600160a01b031681526020018a6020015160020b8152602001886001600160a01b031681525086613226565b90508060000151846020018181516122729190614312565b9052506020810151612284908661459e565b945080602001518460400181815161229c91906142ca565b6001600160801b03169052506040810151156122eb576001600160801b03808616158552600288810b900b60608601526001600160a01b038316608086015260c08901511660a0850152612378565b6000806123038784608001518c60c00151600061316c565b6001600160801b031660a0890152602088018051929450909250839161232a908390614312565b9052506040860180518291906123419083906142ca565b6001600160801b03169052505060018552506080808201516001600160a01b031690850152606080820151600290810b900b908501525b50506123a1565b6020860151600290810b900b606083015285516001600160a01b031660808301525b505b949350505050565b6000808060001985870985870292508281108382030391505080600014156123e557600084116123da57600080fd5b508290049050611e91565b8084116123f157600080fd5b6000848688096001861981018716968790046003810260029081188083028203028083028203028083028203028083028203028083028203029182029003026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000816001600160801b0316836001600160801b03161015611e42575081611e45565b60018301805460029094018054949093039055919091039055565b60008082600f0b12156124bd576124ac8261470a565b6124b6908461459e565b9050611e45565b611e9182846142ca565b60008060008360020b126124de578260020b6124eb565b8260020b6124eb9061474a565b90506124fa620d89e719614730565b60020b8111156125305760405162461bcd60e51b81526020600482015260016024820152601560fa1b60448201526064016106f6565b60006001821661254457600160801b612556565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561258b576080612586826ffff97272373d413259a46990580e213a6144f9565b901c90505b60048216156125b55760806125b0826ffff2e50f5f656932ef12357cf3c7fdcc6144f9565b901c90505b60088216156125df5760806125da826fffe5caca7e10e4e61c3624eaa0941cd06144f9565b901c90505b6010821615612609576080612604826fffcb9843d60f6159c9db58835c9266446144f9565b901c90505b602082161561263357608061262e826fff973b41fa98c081472e6896dfb254c06144f9565b901c90505b604082161561265d576080612658826fff2ea16466c96a3843ec78b326b528616144f9565b901c90505b6080821615612687576080612682826ffe5dee046a99a2a811c461f1969c30536144f9565b901c90505b6101008216156126b25760806126ad826ffcbe86c7900a88aedcffc83b479aa3a46144f9565b901c90505b6102008216156126dd5760806126d8826ff987a7253ac413176f2b074cf7815e546144f9565b901c90505b610400821615612708576080612703826ff3392b0822b70005940c7a398e4b70f36144f9565b901c90505b61080082161561273357608061272e826fe7159475a2c29b7443b29c7fa6e889d96144f9565b901c90505b61100082161561275e576080612759826fd097f3bdfd2022b8845ad8f792aa58256144f9565b901c90505b612000821615612789576080612784826fa9f746462d870fdf8a65dc1f90e061e56144f9565b901c90505b6140008216156127b45760806127af826f70d869a156d2a1b890bb3df62baf32f76144f9565b901c90505b6180008216156127df5760806127da826f31be135f97d08fd981231505542fcfa66144f9565b901c90505b6201000082161561280b576080612806826f09aa508b5b7a84e1c677de54f3e99bc96144f9565b901c90505b62020000821615612836576080612831826e5d6af8dedb81196699c329225ee6046144f9565b901c90505b6204000082161561286057608061285b826d2216e584f5fa1ea926041bedfe986144f9565b901c90505b62080000821615612888576080612883826b048a170391f7dc42444e8fa26144f9565b901c90505b60008460020b13156128a3576128a081600019614389565b90505b6128b1600160201b826146f6565b156128bd5760016128c0565b60005b6123a39060ff16602083901c614312565b6000806128de838561434f565b905060008460020b1280156128fe57506128f883856146b3565b60020b15155b15612911578061290d81614674565b9150505b600281900b60081d6000612927610100846146b3565b90506000600160ff831681901b9061293f908261461d565b6129499190614312565b600184810b900b600090815260208a9052604090205416905080612984578561297560ff841686614518565b61297f919061439d565b6129af565b8561298e8261355a565b6129989084614651565b6129a59060ff1686614518565b6129af919061439d565b98975050505050505050565b6000806000888861ffff1661ffff81106129e557634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b90920460ff161515938301939093529092509088161415612a405787859250925050612b17565b8461ffff168461ffff16118015612a685750612a5d6001866145c6565b61ffff168861ffff16145b15612a7557839150612a79565b8491505b81612a858960016142f5565b612a8f91906146d5565b9250612a9c818888613644565b898461ffff1661ffff8110612ac157634e487b7160e01b600052603260045260246000fd5b82519101805460208401516040909401511515600160581b0260ff60581b1960069590950b66ffffffffffffff16600160201b026001600160581b031990921663ffffffff909416939093171792909216179055505b965096945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612b7e9190614158565b6000604051808303816000865af19150503d8060008114612bbb576040519150601f19603f3d011682016040523d82523d6000602084013e612bc0565b606091505b5091509150818015612bea575080511580612bea575080806020019051810190612bea91906140cd565b612c1c5760405162461bcd60e51b8152602060048201526003602482015262544e5360e81b60448201526064016106f6565b5050505050565b600254604051600091829182916001600160a01b0316906370a0823160e01b90612c51903090602401614191565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612c8f9190614158565b600060405180830381855afa9150503d8060008114612cca576040519150601f19603f3d011682016040523d82523d6000602084013e612ccf565b606091505b5091509150818015612ce357506020815110155b612cec57600080fd5b80806020019051810190612d009190614140565b9250505090565b6000806000612d2d866001600160801b0316866001600160a01b0316600160601b6123ab565b9050612d4a611ef282876001600160a01b0316600160601b6123ab565b9150836001600160801b0316826001600160801b03161115612d6a578391505b612d8b826001600160801b0316600160601b876001600160a01b0316611f02565b90506000612da782600160601b886001600160a01b0316611f02565b9792965091945050505050565b6040805160c08082018352600080835260208301819052928201839052606082018390526080820183905260a08201929092529085015160e08601516001600160801b03918216911610808015612e2b575060008660e001516001600160801b03161180612e2b5750856020015160020b8560020b145b15612ed957612e488387600001518860c001518960e001516136c3565b6001600160801b0390811660a086018190526040860192909252918216602085015260c08801519091161180612e945750826001600160801b031682602001516001600160801b031610155b15612ec357600182526020860151600290810b900b606083015285516001600160a01b03166080830152612f6b565b6020820151612ed2908461459e565b9250612f6b565b8015612f57576020860151612eef9060016141fe565b600290810b900b6020870152600160601b612f13816001600160a01b03871661461d565b8751612f2891906001600160a01b03166144f9565b612f329190614389565b8651612f4791906001600160a01b0316614312565b6001600160a01b03168652612f6b565b60e08601516001600160801b031660a08301525b815115612f7857506123a3565b856020015160020b8560020b121561237f576000612f95866124c7565b905060006130056040518060c001604052808a60c001516001600160801b03168152602001846001600160a01b031681526020018960020b81526020018a600001516001600160a01b031681526020018a6020015160020b8152602001886001600160a01b03168152508661376f565b905080600001518460200181815161301d91906142ca565b6001600160801b03169052508051613035908661459e565b945080602001518460400181815161304d9190614312565b905250604081015115613093576001600160801b03808616158552600288810b900b60608601526001600160a01b038316608086015260c08901511660a0850152612378565b6000806130ab8784608001518c60c0015160006136c3565b6001600160801b031660a089015260208801805192945090925083916130d29083906142ca565b6001600160801b03169052506040860180518291906130f2908390614312565b9052505060018552506080818101516001600160a01b031690850152606090810151600290810b900b90840152506123a1565b806001600160801b03811681146131675760405162461bcd60e51b81526004016106f6906020808252600490820152630866264760e31b604082015260600190565b919050565b600080808061317b858761459e565b6001600160801b0316905060006131a9896001600160801b0316600160601b8a6001600160a01b0316613ac2565b905060006131b78284613b06565b90506131da816001600160801b0316600160601b8b6001600160a01b0316613ac2565b955060006131ff826001600160801b03168b6001600160a01b0316600160601b6123ab565b905061320a81613125565b955061321682896142ca565b9450505050509450945094915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915260006132718460000151856020015186606001518760a001516000613b17565b9050826001600160801b031681116132c6576001600160801b0381166020830152835160408501516080860151606087015160a08801516132b794939291906001613b9e565b82525060016040820152611e45565b600084600001516001600160801b0316600160601b8660a001516001600160a01b03166132f3919061461d565b613306906001600160801b0387166144f9565b6133109190614389565b85606001516001600160a01b0316613328919061461d565b905061333381613c6a565b61333e9060016141fe565b600290810b900b60608401819052608086015161335b9190613fa2565b600290810b900b606084018190526040860151613383919061337e9060016141fe565b611e2b565b600290810b810b60608501819052600060408601526080870151820b910b14156133ec576000808452602084015260608301516133c290600190614518565b600290810b900b606084018190526133d9906124c7565b6001600160a01b03166080840152613552565b600061340a846060015187608001516134059190614518565b6124c7565b9050600061343787606001516001600160a01b0316600160601b8960a001516001600160a01b0316613ac2565b875190915061347e906001600160801b0316613460600160601b6001600160a01b03861661461d565b838a6060015161347091906145e1565b6001600160a01b0316613ac2565b8552606085015161349190600190614518565b600290810b900b606086018190526134a8906124c7565b6001600160a01b03908116608087015260a0880151600091600160601b916134d29183911661461d565b87608001516001600160a01b03166134ea91906144f9565b6134f49190614389565b86608001516001600160a01b031661350c9190614312565b9050600061352a8960000151838b606001518c60a001516000613b17565b905061353f81896001600160801b0316613b06565b6001600160801b03166020880152505050505b505092915050565b600080821161356857600080fd5b600160801b821061358657608091821c91613583908261432a565b90505b600160401b82106135a457604091821c916135a1908261432a565b90505b600160201b82106135c257602091821c916135bf908261432a565b90505b6201000082106135df57601091821c916135dc908261432a565b90505b61010082106135fb57600891821c916135f8908261432a565b90505b6010821061361657600491821c91613613908261432a565b90505b6004821061363157600291821c9161362e908261432a565b90505b6002821061316757611e4560018261432a565b604080516060810182526000808252602082018190529181019190915283516000906136709085614634565b63ffffffff16905060405180606001604052808563ffffffff168152602001828560020b61369e91906144a9565b87602001516136ad9190614285565b60060b8152600160209091015295945050505050565b60008080806136d2858761459e565b6001600160801b031690506000613700896001600160801b0316896001600160a01b0316600160601b6123ab565b9050600061370e8284613b06565b9050613731816001600160801b0316600160601b8b6001600160a01b0316613ac2565b9550613754816001600160801b03168a6001600160a01b0316600160601b6123ab565b945061376081886142ca565b93505050509450945094915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915260006137c584606001516001600160a01b0316600160601b8660a001516001600160a01b0316613ac2565b905060006137e0856040015186608001516134059190614518565b855190915060009061381c906001600160801b031661380c600160601b6001600160a01b03861661461d565b85896060015161347091906145e1565b9050846001600160801b0316811161386a576001600160801b038116845285516020870151606088015160a0890151613859939291906000613b17565b602085015260016040850152613ab9565b6000600160601b87600001516001600160801b0316856001600160a01b031689606001516001600160a01b03166138a1919061461d565b6138b4906001600160801b038a166144f9565b6138be9190614389565b6138c89190614312565b905060006138d582613c6a565b90508088608001516138e79190614518565b600290810b900b6060870181905260808901516139049190613fa2565b600290810b900b606087018190526040890151613927919061337e9060016141fe565b600290810b810b606088018190526000604089015260808a0151820b910b14156139905760008087526020870152606086015161396690600190614518565b600290810b900b6060870181905261397d906124c7565b6001600160a01b03166080870152613ab6565b60006139a987606001518a608001516134059190614518565b89519091506000906139e5906001600160801b03166139d5600160601b6001600160a01b03861661461d565b898d6060015161347091906145e1565b90506139fa818a6001600160801b0316613b06565b6001600160801b031688526060880151613a1690600190614518565b600290810b900b60608901819052613a2d906124c7565b6001600160a01b0390811660808a015260a08b0151600091600160601b91613a579183911661461d565b8a608001516001600160a01b0316613a6f91906144f9565b613a799190614389565b89608001516001600160a01b0316613a919190614312565b9050613aad8b60000151828d606001518e60a001516000613b17565b60208a01525050505b50505b50505092915050565b600080613acf84866144f9565b9050613adb83826146f6565b613af157613ae98382614389565b915050611e91565b613afb8382614389565b611f50906001614312565b600081831015611e42575081611e45565b600080613b2486866145e1565b90506000613b36600160601b866145e1565b905083613b6a57613b63886001600160801b0316836001600160a01b0316836001600160a01b03166123ab565b9250613b93565b613b90886001600160801b0316836001600160a01b0316836001600160a01b0316611f02565b92505b505095945050505050565b600080613bae6134058888614518565b90506000846001600160a01b0316600160601b876001600160a01b0316613bd591906144f9565b613bdf9190614389565b90506000613bf1600160601b846145e1565b90506000613bff83896145e1565b905085613c3357613c2c8b6001600160801b0316836001600160a01b0316836001600160a01b03166123ab565b9450613c5c565b613c598b6001600160801b0316836001600160a01b0316836001600160a01b0316611f02565b94505b505050509695505050505050565b60006401000276a36001600160a01b03831610801590613ca6575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613cd65760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064016106f6565b600160201b600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110613d6f57613d65607f8261461d565b83901c9150613d80565b613d7a81607f61461d565b83901b91505b60006040613d8f60808461455f565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b8217915050600081693627a301d71055774c85613f129190614426565b905060006080613f326f028f6481ab7f045a5af012a19d003aaa8461455f565b901d905060006080613f54846fdb2df09e81959a81455e260799a0632f614244565b901d90508060020b8260020b14613f9357886001600160a01b0316613f78826124c7565b6001600160a01b03161115613f8d5781613f95565b80613f95565b815b9998505050505050505050565b60008160020b8360020b1215611e42575081611e45565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b8035600281900b811461316757600080fd5b60008060008060006080868803121561402e578081fd5b85356001600160a01b0381168114614044578182fd5b945060208601356001600160801b038116811461405f578182fd5b935061406d60408701614005565b925060608601356001600160401b0380821115614088578283fd5b818801915088601f83011261409b578283fd5b8135818111156140a9578384fd5b8960208285010111156140ba578384fd5b9699959850939650602001949392505050565b6000602082840312156140de578081fd5b81518015158114611e91578182fd5b6000602082840312156140fe578081fd5b5035919050565b600060208284031215614116578081fd5b81358060010b8114611e91578182fd5b600060208284031215614137578081fd5b611e9182614005565b600060208284031215614151578081fd5b5051919050565b60008251815b81811015614178576020818601810151858301520161415e565b818111156141865782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b602080825260029082015261041560f41b604082015260600190565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b60008160020b8360020b82821282627fffff0382138115161561422357614223614764565b82627fffff1903821281161561423b5761423b614764565b50019392505050565b600080821280156001600160ff1b038490038513161561426657614266614764565b600160ff1b839003841281161561427f5761427f614764565b50500190565b60008160060b8360060b82821282667fffffffffffff038213811516156142ae576142ae614764565b82667fffffffffffff1903821281161561423b5761423b614764565b60006001600160801b038281168482168083038211156142ec576142ec614764565b01949350505050565b600061ffff8083168185168083038211156142ec576142ec614764565b6000821982111561432557614325614764565b500190565b600060ff821660ff84168060ff0382111561434757614347614764565b019392505050565b60008160020b8360020b806143665761436661477a565b627fffff1982146000198214161561438057614380614764565b90059392505050565b6000826143985761439861477a565b500490565b60008160020b8360020b627fffff838213848413838304851182821616156143c7576143c7614764565b627fffff19868512828116878305871216156143e5576143e5614764565b87871292508582058712848416161561440057614400614764565b8585058712818416161561441657614416614764565b5050509290910295945050505050565b60006001600160ff1b038184138284138082168684048611161561444c5761444c614764565b600160ff1b8487128281168783058912161561446a5761446a614764565b85871292508782058712848416161561448557614485614764565b8785058712818416161561449b5761449b614764565b505050929093029392505050565b60008160060b8360060b667fffffffffffff838213848413838304851182821616156144d7576144d7614764565b667fffffffffffff19868512828116878305871216156143e5576143e5614764565b600081600019048311821515161561451357614513614764565b500290565b60008160020b8360020b82811281627fffff190183128115161561453e5761453e614764565b81627fffff01831381161561455557614555614764565b5090039392505050565b60008083128015600160ff1b85018412161561457d5761457d614764565b6001600160ff1b038401831381161561459857614598614764565b50500390565b60006001600160801b03838116908316818110156145be576145be614764565b039392505050565b600061ffff838116908316818110156145be576145be614764565b60006001600160a01b03838116908316818110156145be576145be614764565b600062ffffff838116908316818110156145be576145be614764565b60008282101561462f5761462f614764565b500390565b600063ffffffff838116908316818110156145be576145be614764565b600060ff821660ff84168082101561466b5761466b614764565b90039392505050565b60008160020b627fffff1981141561468e5761468e614764565b6000190192915050565b60006000198214156146ac576146ac614764565b5060010190565b60008260020b806146c6576146c661477a565b808360020b0791505092915050565b600061ffff808416806146ea576146ea61477a565b92169190910692915050565b6000826147055761470561477a565b500690565b6000600f82900b60016001607f1b031981141561472957614729614764565b9003919050565b60008160020b627fffff1981141561472957614729614764565b6000600160ff1b82141561476057614760614764565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea2646970667358221220313f0f4c8814ec33013b337cbc1357359565fe4314d017b5410dc1be7cd5ea1564736f6c63430008040033" + }, + { + "address": "0x485b284beba95a812e29fe5501d7eedde43153c1", + "nonce": 34, + "balance": "0x000000000000000000000000000000000000000000000000001e26730f1c97d9", + "code": "0x" + }, + { + "address": "0xc2ecd3065b4d0d7c21b35bced2f17b2ea5ddd697", + "nonce": 18, + "balance": "0x00000000000000000000000000000000000000000000000000265572ae757394", + "code": "0x" + }, + { + "address": "0x73fa525c642baaaecb304614fa38614845649ef8", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x610160604052600436101561001357600080fd5b60003560e01c63ec3788081461002857600080fd5b34610a90576080366003190112610a905760043573ffffffffffffffffffffffffffffffffffffffff811603610a9057602435806101405267ffffffffffffffff90818111610a905736602382011215610a9057806004013590828211610a9057602490369260051b010111610a9057604435818111610a905736602382011215610a90578060040135906100cb6100bf83610d77565b6040518060c052610d55565b8160c051526024602060c051019260051b82010190368211610a9057602401915b818310610d115760643584808211610a905736602383011215610a90578160040135908111610a905736910160240111610a90576040517f38706d1f000000000000000000000000000000000000000000000000000000008152600081600481335afa908115610a8457600091610cf6575b506040517f412330bc000000000000000000000000000000000000000000000000000000008152600081600481335afa908115610a8457600091610cdb575b506101ae6101405160040135610e40565b604051927ff032cb2a000000000000000000000000000000000000000000000000000000008452600084600481335afa938415610a8457600094610cb6575b506040517f48313a81000000000000000000000000000000000000000000000000000000008152602081600481335afa8015610a845763ffffffff91600091610c97575b501680633b9aca00810204633b9aca00148115171561040357633b9aca00810260e052604051639c77ac5160e01b8152602081600481335afa908115610a8457600091610c78575b5063ffffffff164214610c05575b50633b9aca0060a05261029a8151610e40565b6101005260019360005b61014051806004013582101561036257818160246102c793600401359101610ed8565b356020840151146000146102fd578060016102f8920160051b60008187015260c05101516020610100510152610ec9565b6102a4565b939091945b6103188561014051602481600401359101610ed8565b356103238288610f0b565b51146103375761033290610ec9565b610302565b949190936102f8906001810160051b878187015260c05101516001880160051b610100510152610ec9565b505090506103708151610e40565b60019060005b8351831015610419576103898387610f0b565b51600181018111610403576103fd9160016103f792016103a9868a610f0b565b526103c56103c06103ba878b610f0b565b51610fc6565b611b4f565b6103cf8686610f0b565b526103f16103dd8686610f0b565b516103eb6103ba888a610f0b565b90611cad565b90610f1f565b92610ec9565b91610376565b634e487b7160e01b600052601160045260246000fd5b6104329193925061042c6103ba84610efe565b906110a6565b60805260006101205260009260006f7fffffffffffffffffffffffffffffff61045d61010051610efe565b51600f0b03610b4a575060009060015b83518110156105345786846f7fffffffffffffffffffffffffffffff6104968461010051610f0b565b51600f0b14610512576104fb83926103eb6104ea6103c06104e56104cd886104c76103ba61050d9c6105049b610f0b565b96610f0b565b516104db8961010051610f0b565b51600f0b90610f1f565b610fc6565b6104f4868c610f0b565b519061107c565b61012051610f1f565b61012052610ec9565b61046d565b610520915091809492610f0b565b5181018091116104035761050d9092610ec9565b50939061054083610efe565b51808281031161040357610561916105589103610fc6565b610120516110a6565b610120526105716103ba83610efe565b600081126000828103128116906000838103139015161761040357600003925b61059d61012051611292565b956001945b84518610156106de576f7fffffffffffffffffffffffffffffff6105c98761010051610f0b565b51600f0b036105f2576105e66105ec916103f16103ba8989610f0b565b95610ec9565b946105a2565b94926106956105ec916103f18a6103eb61068b6103c0888b8d6106296104e561061b8486610f0b565b516104db8561010051610f0b565b966106396103ba84600096610f0b565b9061065c6000610120511392836000146106d757670de0b6b3a764000090611cad565b91156106c55761066d905b896110a6565b9080821361069b575b5050610685916103ba91610f0b565b9461107c565b6104f48a8a610f0b565b93610ec9565b6103ba92945061068593916106b66106bb9260e0519261107c565b611cad565b9391819350610676565b5061066d670de0b6b3a7640000610667565b8290611cad565b84926106f488926106ef8b97611095565b6110a6565b9160005b855181101561092b576f7fffffffffffffffffffffffffffffff61071f8261010051610f0b565b51600f0b0361092257801561087d5761074261073b8285610f0b565b5185610f1f565b620186a0808083011260008312908015821691151617610403576107669101611292565b906107746103ba8288610f0b565b61079660006101205113918260001461087657670de0b6b3a764000090611cad565b9015610865576107a7895b846110a6565b8181136107fd575b5050670de0b6b3a76400006107d46107f8936107ce6103ba858b610f0b565b9061107c565b056107e481600f0b918214610f3b565b6107f18261010051610f0b565b525b610ec9565b6106f8565b9092610809848361107c565b60e051926000841291670de0b6b3a7640000928386810312811690848781031390151617610403576107f8966108586107d4956103f16107ce94670de0b6b3a76400009961085e9803906110a6565b9261107c565b93506107af565b6107a7670de0b6b3a76400006107a1565b8a90611cad565b670de0b6b3a76400006108a861089d61089860805188610f1f565b611292565b6107ce608051611292565b05906108b88280600f0b14610f3b565b7fffffffffffffffffffffffffffffffff8000000000000000000000000000000082600f0b14610403576107f8916108f38261010051610f0b565b90600f0b600003600f0b905260008512156107f357633b9aca0061091961089887611095565b0560a052610ec9565b6107f890610ec9565b50633b9aca0060a051116109b5575b60005b610140516004013581101561097757806001610972920160051b6001818501510160051b6101005101519060c0510152610ec9565b61093d565b6109a161098a6101405160040135610e40565b6109b1604051928392604084526040840190610d8f565b828103602084015260c051610d8f565b0390f35b604051639c77ac5160e01b8152602081600481335afa908115610a8457600091610b1b575b5063ffffffff164203610ac45760405163e5a70ef760e01b8152602081600481335afa908115610a8457600091610a95575b50633b9aca00610a316fffffffffffffffffffffffffffffffff80931660a051610e8e565b0490610a3f81831115610f3b565b333b15610a9057604051916307e3413760e21b835216600482015260008160248183335af18015610a8457610a75575b5061093a565b610a7e90610d2b565b81610a6f565b6040513d6000823e3d90fd5b600080fd5b610ab7915060203d602011610abd575b610aaf8183610d55565b810190610ea1565b82610a0c565b503d610aa5565b6fffffffffffffffffffffffffffffffff610ae38160a0511115610f3b565b333b15610a9057604051906307e3413760e21b825260a05116600482015260008160248183335af18015610a8457610a75575061093a565b610b3d915060203d602011610b43575b610b358183610d55565b810190610e72565b826109da565b503d610b2b565b92610b5a61010095929551610efe565b51600f0b15610591579050610bb3610b8e610b76608051611292565b6107ce610b8561010051610efe565b51600f0b610fc6565b670de0b6b3a76400009081811215610bfe57505b610bae60805191611b4f565b61107c565b806101205260008112610be3575b50610bdd610bd161012051611095565b6103eb6103ba85610efe565b90610591565b610bf4610898633b9aca0092611095565b0560a05285610bc1565b9050610ba2565b60405163e5a70ef760e01b8152602081600481335afa918215610a8457633b9aca006fffffffffffffffffffffffffffffffff8194610c4f94600091610c59575b50169102610e8e565b0460e05284610287565b610c72915060203d602011610abd57610aaf8183610d55565b8a610c46565b610c91915060203d602011610b4357610b358183610d55565b86610279565b610cb0915060203d602011610b4357610b358183610d55565b86610231565b610cd49194503d806000833e610ccc8183610d55565b810190610dc6565b92846101ed565b610cf091503d806000833e610ccc8183610d55565b8261019d565b610d0b91503d806000833e610ccc8183610d55565b8161015e565b823580600f0b8103610a90578152602092830192016100ec565b67ffffffffffffffff8111610d3f57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610d3f57604052565b67ffffffffffffffff8111610d3f5760051b60200190565b90815180825260208080930193019160005b828110610daf575050505090565b8351600f0b85529381019392810192600101610da1565b6020908181840312610a905780519067ffffffffffffffff8211610a9057019180601f84011215610a90578251610dfc81610d77565b93610e0a6040519586610d55565b818552838086019260051b820101928311610a90578301905b828210610e31575050505090565b81518152908301908301610e23565b90610e4a82610d77565b610e576040519182610d55565b8281528092610e68601f1991610d77565b0190602036910137565b90816020910312610a90575163ffffffff81168103610a905790565b8181029291811591840414171561040357565b90816020910312610a9057516fffffffffffffffffffffffffffffffff81168103610a905790565b60001981146104035760010190565b9190811015610ee85760051b0190565b634e487b7160e01b600052603260045260246000fd5b805115610ee85760200190565b8051821015610ee85760209160051b010190565b9190916000838201938412911290801582169115161761040357565b15610f4257565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152fd5b7ffffffffffffffff6c6d11716de2a2f8c500cdd19dbc6030cd280cbb9b6b8f070811261104b577809392ee8e921d5d073aff322e62439fcf32d7f344649470f90811361101a57670de0b6b3a76400000290565b602490604051907f9d5810910000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907f99474eeb0000000000000000000000000000000000000000000000000000000082526004820152fd5b8181039291600013801582851316918412161761040357565b600160ff1b81146104035760000390565b90600160ff1b80831490811561118e575b5061116457600082121561115b576110e0826000035b6000831215611154578260000390611198565b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161111e576000916000199118131561111a575090565b0390565b604491604051917fd49c26b300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b8290611198565b6110e0826110cd565b60046040517f9fe2b450000000000000000000000000000000000000000000000000000000008152fd5b90508114386110b7565b670de0b6b3a7640000916000198383099280830292838086109503948086039514611254578285101561121857908291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b82606492604051927f63a05778000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b505080925015611262570490565b634e487b7160e01b600052601260045260246000fd5b8015611262576ec097ce7bc90715b34b9f10000000000590565b60008112156112ca5768033dd1780914b971141981126112c4576112b890600003611292565b6112c190611278565b90565b50600090565b680a688906bd8affffff8113611b1e57670de0b6b3a764000080604092831b05907780000000000000000000000000000000000000000000000067ff000000000000008316611a01575b66ff00000000000083166118f9575b65ff000000000083166117f9575b64ff000000008316611701575b63ff0000008316611611575b62ff00008316611529575b61ff008316611449575b60ff8316611372575b02911c60bf031c90565b60808316611437575b838316611425575b60208316611413575b60108316611401575b600883166113ef575b600483166113dd575b600283166113cb575b6001831615611368576801000000000000000102831c611368565b6801000000000000000102831c6113b0565b6801000000000000000302831c6113a7565b6801000000000000000602831c61139e565b6801000000000000000b02831c611395565b6801000000000000001602831c61138c565b6801000000000000002c02831c611383565b6801000000000000005902831c61137b565b6180008316611517575b6140008316611505575b61200083166114f3575b61100083166114e1575b61080083166114cf575b61040083166114bd575b61020083166114ab575b61010083161561135f57680100000000000000b102831c61135f565b6801000000000000016302831c61148f565b680100000000000002c602831c611485565b6801000000000000058c02831c61147b565b68010000000000000b1702831c611471565b6801000000000000162e02831c611467565b68010000000000002c5d02831c61145d565b680100000000000058b902831c611453565b6280000083166115ff575b6240000083166115ed575b6220000083166115db575b6210000083166115c9575b6208000083166115b7575b6204000083166115a5575b620200008316611593575b62010000831615611355576801000000000000b17202831c611355565b680100000000000162e402831c611576565b6801000000000002c5c802831c61156b565b68010000000000058b9102831c611560565b680100000000000b172102831c611555565b68010000000000162e4302831c61154a565b680100000000002c5c8602831c61153f565b6801000000000058b90c02831c611534565b638000000083166116ef575b634000000083166116dd575b632000000083166116cb575b631000000083166116b9575b630800000083166116a7575b63040000008316611695575b63020000008316611683575b630100000083161561134a5768010000000000b1721802831c61134a565b6801000000000162e43002831c611665565b68010000000002c5c86002831c611659565b680100000000058b90c002831c61164d565b6801000000000b17217f02831c611641565b680100000000162e42ff02831c611635565b6801000000002c5c85fe02831c611629565b68010000000058b90bfc02831c61161d565b64800000000083166117e7575b64400000000083166117d5575b64200000000083166117c3575b64100000000083166117b1575b640800000000831661179f575b640400000000831661178d575b640200000000831661177b575b64010000000083161561133e57680100000000b17217f802831c61133e565b68010000000162e42ff102831c61175c565b680100000002c5c85fe302831c61174f565b6801000000058b90bfce02831c611742565b68010000000b17217fbb02831c611735565b6801000000162e42fff002831c611728565b68010000002c5c8601cc02831c61171b565b680100000058b90c0b4902831c61170e565b6580000000000083166118e7575b6540000000000083166118d5575b6520000000000083166118c3575b6510000000000083166118b1575b65080000000000831661189f575b65040000000000831661188d575b65020000000000831661187b575b65010000000000831615611331576801000000b17218355102831c611331565b680100000162e430e5a202831c61185b565b6801000002c5c863b73f02831c61184d565b68010000058b90cf1e6e02831c61183f565b680100000b1721bcfc9a02831c611831565b68010000162e43f4f83102831c611823565b680100002c5c89d5ec6d02831c611815565b6801000058b91b5bc9ae02831c611807565b668000000000000083166119ef575b664000000000000083166119dd575b662000000000000083166119cb575b661000000000000083166119b9575b660800000000000083166119a7575b66040000000000008316611995575b66020000000000008316611983575b66010000000000008316156113235768010000b17255775c0402831c611323565b6801000162e525ee054702831c611962565b68010002c5cc37da949202831c611953565b680100058ba01fb9f96d02831c611944565b6801000b175effdc76ba02831c611935565b680100162f3904051fa102831c611926565b6801002c605e2e8cec5002831c611917565b68010058c86da1c09ea202831c611908565b6780000000000000008316611aff575b6740000000000000008316611aed575b6720000000000000008316611adb575b6710000000000000008316611ac9575b6708000000000000008316611ab7575b6704000000000000008316611aa5575b6702000000000000008316611a93575b67010000000000000083161561131457680100b1afa5abcbed6102831c611314565b68010163da9fb33356d802831c611a71565b680102c9a3e778060ee702831c611a61565b6801059b0d31585743ae02831c611a51565b68010b5586cf9890f62a02831c611a41565b6801172b83c7d517adce02831c611a31565b6801306fe0a31b7152df02831c611a21565b5077b504f333f9de648480000000000000000000000000000000611a11565b602490604051907f0360d0280000000000000000000000000000000000000000000000000000000082526004820152fd5b80600080831315611c7c57670de0b6b3a764000092838112611c4557506001925b808305906fffffffffffffffffffffffffffffffff821160071b91821c9167ffffffffffffffff831160061b92831c63ffffffff811160051b90811c61ffff811160041b90811c60ff811160031b90811c91600f831160021b92831c936001978860038711811b96871c11961717171717171781810294811d90828214611c3957506706f05b59d3b20000905b848213611c0d5750505050500290565b808391020590671bc16d674ec80000821215611c2c575b831d90611bfd565b8091950194831d90611c24565b93505093925050020290565b6000199392508015611c68576ec097ce7bc90715b34b9f10000000000591611b70565b602482634e487b7160e01b81526012600452fd5b602483604051907f059b101b0000000000000000000000000000000000000000000000000000000082526004820152fd5b90600160ff1b808314908115611d91575b50611d67576000821215611d5e57611ce7826000035b6000831215611d57578260000390611d9b565b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311611d21576000916000199118131561111a575090565b604491604051917f120b5b4300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b8290611d9b565b611ce782611cd4565b60046040517fa6070c25000000000000000000000000000000000000000000000000000000008152fd5b9050811438611cbe565b90919060001983820983820291828083109203918083039214611e3957670de0b6b3a76400009081831015611e0257947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a76400009004915056" + }, + { + "address": "0xc0583e2f5930ede5fab9d57bac4169878730b010", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d85780639dc29fac1161008c578063d505accf11610066578063d505accf14610333578063dd62ed3e14610346578063e78cea921461038c57600080fd5b80639dc29fac146102fa578063a457c2d71461030d578063a9059cbb1461032057600080fd5b80637ecebe00116100bd5780637ecebe00146102c457806384b0196e146102d757806395d89b41146102f257600080fd5b806370a082311461027b5780637baa82b3146102b157600080fd5b8063313ce5671161012f5780633644e515116101145780633644e5151461024d578063395093511461025557806340c10f191461026857600080fd5b8063313ce567146101f757806332424aa31461022857600080fd5b80631624f6c6116101605780631624f6c6146101bd57806318160ddd146101d257806323b872dd146101e457600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b6101846103d1565b6040516101919190611ce7565b60405180910390f35b6101ad6101a8366004611d2a565b610463565b6040519015158152602001610191565b6101d06101cb366004611e3f565b61047d565b005b6035545b604051908152602001610191565b6101ad6101f2366004611eb3565b61068a565b60cc5474010000000000000000000000000000000000000000900460ff165b60405160ff9091168152602001610191565b60cc546102169074010000000000000000000000000000000000000000900460ff1681565b6101d66106ae565b6101ad610263366004611d2a565b6106bd565b6101d0610276366004611d2a565b610709565b6101d6610289366004611eef565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b6101d06102bf366004611f0a565b610784565b6101d66102d2366004611eef565b610944565b6102df61096f565b6040516101919796959493929190611f8f565b610184610a4b565b6101d0610308366004611d2a565b610a5a565b6101ad61031b366004611d2a565b610adc565b6101ad61032e366004611d2a565b610bad565b6101d061034136600461204e565b610bbb565b6101d66103543660046120b8565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b60cc546103ac9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6060603680546103e0906120eb565b80601f016020809104026020016040519081016040528092919081815260200182805461040c906120eb565b80156104595780601f1061042e57610100808354040283529160200191610459565b820191906000526020600020905b81548152906001019060200180831161043c57829003601f168201915b5050505050905090565b600033610471818585610d7a565b60019150505b92915050565b600054610100900460ff161580801561049d5750600054600160ff909116105b806104b75750303b1580156104b7575060005460ff166001145b610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b08484610f2e565b6105b984610fcf565b60cc80547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff851602179055801561068457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6000336106988582856110a8565b6106a3858585611179565b506001949350505050565b60006106b86113ef565b905090565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104719082908690610704908790612138565b610d7a565b60cc5473ffffffffffffffffffffffffffffffffffffffff1633146107765760cc546040517fd8ee8db000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161053f565b61078082826113f9565b5050565b600054600290610100900460ff161580156107a6575060005460ff8083169116105b610832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161053f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff83161761010017905561086d8585610f2e565b61087685610fcf565b60cc805460ff851674010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff851617179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061093590839060ff91909116815260200190565b60405180910390a15050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260996020526040812054610477565b6000606080600080600060606065546000801b14801561098f5750606654155b6109f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a65640000000000000000000000604482015260640161053f565b6109fd6114ee565b610a056114fd565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b6060603780546103e0906120eb565b60cc5473ffffffffffffffffffffffffffffffffffffffff163314610ac75760cc546040517fd8ee8db000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161053f565b610ad28233836110a8565b610780828261150c565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161053f565b6106a38286868403610d7a565b600033610471818585611179565b83421115610c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161053f565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610c548c6116cf565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610cbc82611704565b90506000610ccc8287878761174c565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161053f565b610d6e8a8a8a610d7a565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161053f565b73ffffffffffffffffffffffffffffffffffffffff8216610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161053f565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600054610100900460ff16610fc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161053f565b6107808282611774565b600054610100900460ff16611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161053f565b6110a5816040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250611824565b50565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610684578181101561116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161053f565b6106848484848403610d7a565b73ffffffffffffffffffffffffffffffffffffffff831661121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161053f565b73ffffffffffffffffffffffffffffffffffffffff82166112bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161053f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161053f565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113e29086815260200190565b60405180910390a3610684565b60006106b86118e3565b73ffffffffffffffffffffffffffffffffffffffff8216611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161053f565b80603560008282546114889190612138565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060606780546103e0906120eb565b6060606880546103e0906120eb565b73ffffffffffffffffffffffffffffffffffffffff82166115af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161053f565b73ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604090205481811015611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161053f565b73ffffffffffffffffffffffffffffffffffffffff831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610f21565b505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526099602052604090208054600181018255905b50919050565b60006104776117116113ef565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600061175d87878787611957565b9150915061176a81611a46565b5095945050505050565b600054610100900460ff1661180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161053f565b603661181783826121c0565b5060376116ca82826121c0565b600054610100900460ff166118bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161053f565b60676118c783826121c0565b5060686118d482826121c0565b50506000606581905560665550565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61190e611bf9565b611916611c52565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561198e5750600090506003611a3d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156119e2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611a3657600060019250925050611a3d565b9150600090505b94509492505050565b6000816004811115611a5a57611a5a6122da565b03611a625750565b6001816004811115611a7657611a766122da565b03611add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161053f565b6002816004811115611af157611af16122da565b03611b58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161053f565b6003816004811115611b6c57611b6c6122da565b036110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161053f565b600080611c046114ee565b805190915015611c1b578051602090910120919050565b6065548015611c2a5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080611c5d6114fd565b805190915015611c74578051602090910120919050565b6066548015611c2a5792915050565b6000815180845260005b81811015611ca957602081850181015186830182015201611c8d565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000611cfa6020830184611c83565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611d2557600080fd5b919050565b60008060408385031215611d3d57600080fd5b611d4683611d01565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112611d9457600080fd5b813567ffffffffffffffff80821115611daf57611daf611d54565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611df557611df5611d54565b81604052838152866020858801011115611e0e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff81168114611d2557600080fd5b600080600060608486031215611e5457600080fd5b833567ffffffffffffffff80821115611e6c57600080fd5b611e7887838801611d83565b94506020860135915080821115611e8e57600080fd5b50611e9b86828701611d83565b925050611eaa60408501611e2e565b90509250925092565b600080600060608486031215611ec857600080fd5b611ed184611d01565b9250611edf60208501611d01565b9150604084013590509250925092565b600060208284031215611f0157600080fd5b611cfa82611d01565b60008060008060808587031215611f2057600080fd5b843567ffffffffffffffff80821115611f3857600080fd5b611f4488838901611d83565b95506020870135915080821115611f5a57600080fd5b50611f6787828801611d83565b935050611f7660408601611e2e565b9150611f8460608601611d01565b905092959194509250565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611fcb60e084018a611c83565b8381036040850152611fdd818a611c83565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b8181101561203c57835183529284019291840191600101612020565b50909c9b505050505050505050505050565b600080600080600080600060e0888a03121561206957600080fd5b61207288611d01565b965061208060208901611d01565b9550604088013594506060880135935061209c60808901611e2e565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156120cb57600080fd5b6120d483611d01565b91506120e260208401611d01565b90509250929050565b600181811c908216806120ff57607f821691505b6020821081036116fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b80820180821115610477577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b601f8211156116ca57600081815260208120601f850160051c810160208610156121995750805b601f850160051c820191505b818110156121b8578281556001016121a5565b505050505050565b815167ffffffffffffffff8111156121da576121da611d54565b6121ee816121e884546120eb565b84612172565b602080601f831160018114612241576000841561220b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556121b8565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561228e5788860151825594840194600190910190840161226f565b50858210156122ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea26469706673582212206f59d679d9c5f053ecbf6cfaf70b31fb64a5cee0fc2c5ef78b37d4e8f697f71d64736f6c63430008130033" + }, + { + "address": "0x93a69b20f7670207f34d4e1e28f54afeffeb6789", + "nonce": 24, + "balance": "0x0000000000000000000000000000000000000000000000000029fbc1cda1ae1e", + "code": "0x" + }, + { + "address": "0x00ddaee0b6fa39bca72767c8a4ab6a9a078fbf48", + "nonce": 15, + "balance": "0x00000000000000000000000000000000000000000000000000178d97d0c080fa", + "code": "0x" + }, + { + "address": "0xaf54be5b6eec24d6bfacf1cce4eaf680a8239398", + "nonce": 2, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523480156200001157600080fd5b5060043610620000ac5760003560e01c8063be5a3c00116200006f578063be5a3c001462000124578063c63f57aa146200012e578063efde4e641462000145578063f2fde38b146200015e578063f887ea40146200017557620000ac565b8063068bcd8d14620000b157806341d1de9714620000e0578063715018a614620000f75780637af935a114620001035780638da5cb5b146200011a575b600080fd5b620000c8620000c2366004620006c3565b6200017f565b604051620000d79190620007d2565b60405180910390f35b620000c8620000f1366004620006c3565b6200019a565b62000101620001c5565b005b620000c862000114366004620006dc565b62000240565b620000c8620003be565b620000c8620003cd565b620001016200013f3660046200069f565b620003dc565b6200014f620004a0565b604051620000d7919062000893565b620001016200016f3660046200069f565b620004a6565b620000c8620005c1565b6001602052600090815260409020546001600160a01b031681565b60028181548110620001ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b620001cf620005e5565b6001600160a01b0316620001e2620003be565b6001600160a01b0316146200023e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b6000336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75901614620002965760405162461bcd60e51b81526004016200028d906200085e565b60405180910390fd5b6000878152600160205260409020546001600160a01b031615620002ce5760405162461bcd60e51b81526004016200028d9062000827565b6000877f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e7590888888600360009054906101000a90046001600160a01b031689896040516200031b90620005e9565b6200032e9897969594939291906200089c565b604051809103906000f0801580156200034b573d6000803e3d6000fd5b5060009889526001602081905260408a2080546001600160a01b0384166001600160a01b03199182168117909255600280549384018155909b527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018054909a161790985550959695505050505050565b6000546001600160a01b031690565b6003546001600160a01b031681565b620003e6620005e5565b6001600160a01b0316620003f9620003be565b6001600160a01b03161462000455576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166200047e5760405162461bcd60e51b81526004016200028d90620007e6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60025490565b620004b0620005e5565b6001600160a01b0316620004c3620003be565b6001600160a01b0316146200051f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005665760405162461bcd60e51b8152600401808060200182810382526026815260200180620054126026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759081565b3390565b614b02806200091083390190565b80356001600160a01b03811681146200060f57600080fd5b919050565b600082601f83011262000625578081fd5b813567ffffffffffffffff808211156200063b57fe5b604051601f8301601f1916810160200182811182821017156200065a57fe5b60405282815284830160200186101562000672578384fd5b82602086016020830137918201602001929092529392505050565b803560ff811681146200060f57600080fd5b600060208284031215620006b1578081fd5b620006bc82620005f7565b9392505050565b600060208284031215620006d5578081fd5b5035919050565b60008060008060008060c08789031215620006f5578182fd5b863595506200070760208801620005f7565b945062000717604088016200068d565b935062000727606088016200068d565b9250608087013567ffffffffffffffff8082111562000744578384fd5b620007528a838b0162000614565b935060a089013591508082111562000768578283fd5b506200077789828a0162000614565b9150509295509295509295565b60008151808452815b81811015620007ab576020818501810151868301820152016200078d565b81811115620007bd5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526021908201527f53746172676174653a20666565206c6962726172792063616e742062652030786040820152600360fc1b606082015260800190565b6020808252601e908201527f53746172676174653a20506f6f6c20616c726561647920637265617465640000604082015260600190565b6020808252818101527f53746172676174653a2063616c6c6572206d75737420626520526f757465722e604082015260600190565b90815260200190565b8881526001600160a01b038881166020830152878116604083015260ff878116606084015286166080830152841660a082015261010060c08201819052600090620008ea8382018662000784565b905082810360e084015262000900818562000784565b9b9a505050505050505050505056fe6101006040523480156200001257600080fd5b5060405162004b0238038062004b02833981016040819052620000359162000435565b8151829082906200004e906000906020850190620002d1565b50805162000064906001906020840190620002d1565b5060004690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040518082805460018160011615610100020316600290048015620000ec5780601f10620000c9576101008083540402835291820191620000ec565b820191906000526020600020905b815481529060010190602001808311620000d7575b50506040805191829003822082820182526001808452603160f81b602094850152825180850197909752868301919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606087015260808601969096523060a0808701919091528151808703909101815260c090950190528351930192909220600255505060085550506001600160a01b038616620001aa5760405162461bcd60e51b8152600401620001a190620004f2565b60405180910390fd5b6001600160a01b038716620001d35760405162461bcd60e51b8152600401620001a19062000529565b6080889052606087811b6001600160601b031990811660e0529087901b1660c052600b85905560ff8516600355600c8490556200021d848662000273602090811b620027f617901c565b600a0a60a05250506000600f55601480546001600160a01b039092166001600160a01b031990921691909117905550506016805462ff00001961ffff199091166101001716620100001790555062000560915050565b600082821115620002cb576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000309576000855562000354565b82601f106200032457805160ff191683800117855562000354565b8280016001018555821562000354579182015b828111156200035457825182559160200191906001019062000337565b506200036292915062000366565b5090565b5b8082111562000362576000815560010162000367565b80516001600160a01b03811681146200039557600080fd5b919050565b600082601f830112620003ab578081fd5b81516001600160401b0380821115620003c057fe5b6040516020601f8401601f1916820181018381118382101715620003e057fe5b6040528382528584018101871015620003f7578485fd5b8492505b838310156200041a5785830181015182840182015291820191620003fb565b838311156200042b57848185840101525b5095945050505050565b600080600080600080600080610100898b03121562000452578384fd5b885197506200046460208a016200037d565b96506200047460408a016200037d565b955060608901519450608089015193506200049260a08a016200037d565b60c08a01519093506001600160401b0380821115620004af578384fd5b620004bd8c838d016200039a565b935060e08b0151915080821115620004d3578283fd5b50620004e28b828c016200039a565b9150509295985092959890939650565b6020808252601e908201527f53746172676174653a205f746f6b656e2063616e6e6f74206265203078300000604082015260600190565b6020808252601f908201527f53746172676174653a205f726f757465722063616e6e6f742062652030783000604082015260600190565b60805160a05160c05160601c60e05160601c6144da62000628600039806108895280610a075280610c7a5280610fd3528061146752806114c85280611595528061167c528061177852806118a9528061190052806119d55280611cab5280611d775280611e4a52806120035280612160528061226e528061255052806126975280612786525080610ab152806115265280611ae8528061209252806122cc52806127b05250806127d45280612b8b5280612cfb525080610d5152806113ed52506144da6000f3fe608060405234801561001057600080fd5b50600436106103ae5760003560e01c80637ecebe00116101f4578063b0fab0bc1161011a578063e065608b116100ad578063f887ea401161007c578063f887ea401461076e578063faa24f0714610776578063fc0c546a1461077e578063feb56b1514610786576103ae565b8063e065608b1461071f578063e46e705814610732578063ea89e2aa1461073a578063f6cd35ee1461075b576103ae565b8063be310294116100e9578063be310294146106de578063cdfed0ab146106f1578063d505accf146106f9578063dd62ed3e1461070c576103ae565b8063b0fab0bc1461069d578063b30daeac146106b0578063b633b364146106c3578063b6addec7146106cb576103ae565b806399a22d6811610192578063a9059cbb11610161578063a9059cbb1461065c578063a985565f1461066f578063abe685cd14610682578063ac2cc36b1461068a576103ae565b806399a22d68146106125780639bb811191461061a578063a138ed6b14610622578063a457c2d714610649576103ae565b80638bd86d0a116101ce5780638bd86d0a146105dc578063902b8ab7146105ef57806395d89b411461060257806396c82e571461060a576103ae565b80637ecebe00146105ae5780637fb65265146105c1578063857749b0146105d4576103ae565b806328f079c2116102d957806340c10f191161027757806365152f2b1161024657806365152f2b1461056d57806369fe0e2d1461057557806370a08231146105885780637298a5dc1461059b576103ae565b806340c10f1914610521578063476efe40146105345780634b5cacbc1461054757806364c5f02d1461055a576103ae565b806336448777116102b357806336448777146104f65780633644e515146104fe57806339509351146105065780633e0dc34e14610519576103ae565b806328f079c2146104de57806330adf81f146104e6578063313ce567146104ee576103ae565b8063159f6add116103515780631e8e51da116103205780631e8e51da146104a657806320d6bc75146104ae57806323b872dd146104c357806327f92376146104d6576103ae565b8063159f6add14610456578063163ef4901461047657806318160ddd1461047e5780631b7319b614610486576103ae565b8063095ea7b31161038d578063095ea7b3146104065780630986b61a146104265780630a22d68c1461044657806315770f921461044e576103ae565b80621edfab146103b357806306fdde03146103d157806308e9d8c2146103e6575b600080fd5b6103bb61078e565b6040516103c89190613b9e565b60405180910390f35b6103d961079d565b6040516103c89190613d14565b6103f96103f43660046138d4565b61082b565b6040516103c89190614295565b6104196104143660046136c6565b610998565b6040516103c89190613c9b565b6104396104343660046136ef565b6109af565b6040516103c89190613d0b565b610439610b23565b610439610b29565b6104696104643660046138d4565b610b2f565b6040516103c89190614236565b610439610c10565b610439610c16565b610499610494366004613a31565b610c1c565b6040516103c891906142ac565b610439610fc2565b6104c16104bc366004613b38565b610fc8565b005b6104196104d136600461361a565b6112ce565b610419611362565b61041961136b565b61043961137a565b61043961139e565b6104396113a4565b6104396113aa565b6104196105143660046136c6565b6113b0565b6104396113eb565b61043961052f3660046136c6565b61140f565b6104c16105423660046135ce565b6114bd565b6104c16105553660046135ce565b61158a565b6104396105683660046138d4565b61164e565b61043961166b565b6104c1610583366004613b6a565b611671565b6104396105963660046135ce565b611710565b6104c16105a93660046139a1565b611722565b6104396105bc3660046135ce565b61188c565b6104c16105cf3660046137cb565b61189e565b6104396118ef565b6104c16105ea3660046138d4565b6118f5565b6104396105fd3660046138ef565b61197d565b6103d9611b72565b610439611bcc565b610419611bd2565b610439611be0565b610635610630366004613b6a565b611be6565b6040516103c8989796959493929190613ca6565b6104196106573660046136c6565b611c44565b61041961066a3660046136c6565b611c93565b6104c161067d366004613b06565b611ca0565b610439611d66565b6104c16106983660046137cb565b611d6c565b6104396106ab36600461372a565b611df2565b6104c16106be3660046139e4565b611fad565b610419612101565b6104c16106d9366004613a93565b61210a565b6104c16106ec3660046135ce565b612263565b610439612323565b6104c1610707366004613655565b612329565b61043961071a3660046135e8565b612528565b6104c161072d366004613803565b612545565b610439612638565b61074d610748366004613b38565b61263e565b6040516103c89291906143c2565b610439610769366004613b6a565b61276e565b6103bb612784565b6104396127a8565b6103bb6127ae565b6104396127d2565b6014546001600160a01b031681565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108235780601f106107f857610100808354040283529160200191610823565b820191906000526020600020905b81548152906001019060200180831161080657829003601f168201915b505050505081565b61083361350a565b60026008541415610879576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108cf5760405162461bcd60e51b81526004016108c6906140c6565b60405180910390fd5b60006108db8484612853565b805490915060ff1615156001146109045760405162461bcd60e51b81526004016108c690613fc1565b60058101546004820154610917916128f0565b6004820155600f546002820154600e5461093c9291610936919061294a565b906129a3565b6020830181905260058201805480855260009091556040517f6939f93e3f21cf1362eb17155b740277de5687dae9a83a85909fd71da95944e7926109849288928892906143a1565b60405180910390a150600160085592915050565b60006109a5338484612a0a565b5060015b92915050565b6000600260085414156109f7576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a445760405162461bcd60e51b81526004016108c6906140c6565b6001600160a01b038416610a6a5760405162461bcd60e51b81526004016108c690613f8a565b6015546000610a7882612a6c565b905080851115610a86578094505b610a908686612aaa565b9250610a9c82846127f6565b6015556000610aaa84612b83565b9050610ad77f00000000000000000000000000000000000000000000000000000000000000008683612baf565b7f2125a70154569bd1686edd3cf981bb23dea7c1fa1637909dbb3c9a967cb0c2f287878688604051610b0c9493929190613bec565b60405180910390a150506001600855509392505050565b60115481565b600e5481565b610b37613524565b61ffff83166000908152600a60209081526040808320858452909152812054600980549091908110610b6557fe5b60009182526020918290206040805161010080820183526007909402909201805460ff81161515845261ffff94900484169483018590526001810154918301919091526002810154606083015260038101546080830152600481015460a0830152600581015460c08301526006015460e082015292508516148015610bed5750828160400151145b610c095760405162461bcd60e51b81526004016108c690613d97565b9392505050565b60095490565b60045481565b610c2461356f565b60026008541415610c6a576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cb75760405162461bcd60e51b81526004016108c6906140c6565b600d5460ff1615610cda5760405162461bcd60e51b81526004016108c6906141ff565b6000610ce68888612853565b805490915060ff161515600114610d0f5760405162461bcd60e51b81526004016108c690613fc1565b6000610d1a86612cf3565b90506000610d2786612cf3565b90506000601460009054906101000a90046001600160a01b03166001600160a01b0316631ab624307f00000000000000000000000000000000000000000000000000000000000000008c8e8d886040518663ffffffff1660e01b8152600401610d949594939291906143d0565b60c060405180830381600087803b158015610dae57600080fd5b505af1158015610dc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de69190613861565b9050610e0181604001516013546127f690919063ffffffff16565b601355606081015160808201516020830151610e2b9291610e2591829088906127f6565b906127f6565b80825260408201518391610e3e916128f0565b1015610e5c5760405162461bcd60e51b81526004016108c690614182565b610e818160400151610e7b8360600151866127f690919063ffffffff16565b906128f0565b60a0820181905260038501541015610eab5760405162461bcd60e51b81526004016108c69061414b565b60a08101516003850154610ebe916127f6565b60038501558515610eee57610ee68160400151610e7b856015546128f090919063ffffffff16565b601555610f0d565b604081015115610f0d576040810151601554610f09916128f0565b6015555b60165460ff161580610f3d5750610f37612710610936601754600e5461294a90919063ffffffff16565b60155410155b15610f5657601654610f5690610100900460ff16612d1f565b7f34660fc8af304464529f48a778e03d03e4d34bcd5f9b6f0cfbf3cd238c642f7f8b8b8b84600001518560400151866020015187608001518860600151604051610fa7989796959493929190614322565b60405180910390a160016008559a9950505050505050505050565b60155481565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110105760405162461bcd60e51b81526004016108c6906140c6565b60005b6009548110156110de5760006009828154811061102c57fe5b600091825260208083206040805161010080820183526007909502909201805460ff81161515845261ffff95900485169383018490526001810154918301919091526002810154606083015260038101546080830152600481015460a0830152600581015460c08301526006015460e082015293509087161480156110b45750848260400151145b905080156110d45760405162461bcd60e51b81526004016108c69061405c565b5050600101611013565b50600f546110ec90826128f0565b600f556009805461ffff8581166000818152600a602090815260408083208984528252808320869055805161010080820183528482529281019485528082018a8152606082018a81526080830186815260a0840187815260c0850188815260e0860189815260018d018e559c90985293517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af6007909b029a8b018054995160ff19909a169115159190911762ffff001916989099169095029690961790965594517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b087015592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b1860155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b285015591517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b384015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b483015591517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b590910155517f8fb3b21a941c2361df46475f9ae2f7b5dac5de7bd085fa22415ec0bb30c77e22906112c190859085908590614385565b60405180910390a1505050565b6001600160a01b03831660009081526006602090815260408083203384529091528120546000191461134d576001600160a01b038416600090815260066020908152604080832033845290915290205461132890836127f6565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b611358848484613111565b5060019392505050565b60165460ff1681565b60165462010000900460ff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60035481565b60185481565b60025481565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916109a59185906113e690866128f0565b612a0a565b7f000000000000000000000000000000000000000000000000000000000000000081565b600060026008541415611457576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114a45760405162461bcd60e51b81526004016108c6906140c6565b6114b183836001806131bf565b60016008559392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115055760405162461bcd60e51b81526004016108c6906140c6565b6012541561158757600061151a601254612b83565b6000601255905061154c7f00000000000000000000000000000000000000000000000000000000000000008383612baf565b7f87b3b2749102aa96f2d08396e34cd47673e57148af9cfff965d99bc0378a87dc828260405161157d929190613bb2565b60405180910390a1505b50565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115d25760405162461bcd60e51b81526004016108c6906140c6565b6001600160a01b0381166115f85760405162461bcd60e51b81526004016108c690613f49565b601480546001600160a01b0319166001600160a01b0383161790556040517f5138b884a20454b6db937b9e11c8534e02e708750e0c465df6cd9701622952ce90611643908390613b9e565b60405180910390a150565b600a60209081526000928352604080842090915290825290205481565b60125481565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116b95760405162461bcd60e51b81526004016108c6906140c6565b6127108111156116db5760405162461bcd60e51b81526004016108c690613edb565b60108190556040517f9fe6eeb0f0541c644a56c67efeb872dbadd803a60b909d7dde1b35a3fe230b0e90611643908390613d0b565b60056020526000908152604090205481565b60026008541415611768576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117b55760405162461bcd60e51b81526004016108c6906140c6565b6001600160a01b0382166117db5760405162461bcd60e51b81526004016108c690613f8a565b60006117e78383612aaa565b60165490915060ff1615806118195750611814612710610936601854600e5461294a90919063ffffffff16565b601554115b15611833576016546118339062010000900460ff16612d1f565b600061183e82612b83565b90507fa33f5c0b76f00f6737b1780a8a7f18e19c3fe8fe9ee01a6c1b8ce1eae5ed54f986868686856040516118779594939291906142f0565b60405180910390a15050600160085550505050565b60076020526000908152604090205481565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118e65760405162461bcd60e51b81526004016108c6906140c6565b61158781612d1f565b600b5481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461193d5760405162461bcd60e51b81526004016108c6906140c6565b60006119498383612853565b805490915060ff161561196e5760405162461bcd60e51b81526004016108c690613e28565b805460ff191660011790555050565b6000600260085414156119c5576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a125760405162461bcd60e51b81526004016108c6906140c6565b6060820151600e54611a23916128f0565b600e556020820151601354611a37916128f0565b6013556080820151601154611a4b916128f0565b60115561ffff85166000908152600a6020908152604080832087845290915290205460a083015160098054611aa692919084908110611a8657fe5b9060005260206000209060070201600401546127f690919063ffffffff16565b60098281548110611ab357fe5b600091825260209091206004600790920201015560408301518351611ae191611adc91906128f0565b612b83565b9150611b0e7f00000000000000000000000000000000000000000000000000000000000000008584612baf565b604083015183517ffb2b592367452f1c437675bed47f5e1e6c25188c17d7ba01a12eb030bc41ccef918691611b42916128f0565b85608001518660200151604051611b5c9493929190613c75565b60405180910390a1506001600855949350505050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108235780601f106107f857610100808354040283529160200191610823565b600f5481565b601654610100900460ff1681565b60135481565b60098181548110611bf657600080fd5b6000918252602090912060079091020180546001820154600283015460038401546004850154600586015460069096015460ff8616975061010090950461ffff169593949293919290919088565b60006109a533846113e685604051806060016040528060258152602001614480602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190613319565b60006109a5338484613111565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ce85760405162461bcd60e51b81526004016108c6906140c6565b6000611cf48484612853565b9050611d178261ffff16610e7b8360020154600f546127f690919063ffffffff16565b600f5561ffff821660028201556040517f8fb3b21a941c2361df46475f9ae2f7b5dac5de7bd085fa22415ec0bb30c77e2290611d5890869086908690614367565b60405180910390a150505050565b61271081565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611db45760405162461bcd60e51b81526004016108c6906140c6565b600d805460ff19168215151790556040517f59a9350977452c5240699f57f18b5915cd0440a56f08820a38b9f2432a82ba3e90611643908390613c9b565b600060026008541415611e3a576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e875760405162461bcd60e51b81526004016108c6906140c6565b6001600160a01b038716611ead5760405162461bcd60e51b81526004016108c690613f8a565b61ffff85166000908152600a60209081526040808320878452909152902054600980549091908110611edb57fe5b600091825260209091206007909102015460ff161515600114611f105760405162461bcd60e51b81526004016108c690613fc1565b611f1a8787612aaa565b60165490915060ff161580611f4c5750611f47612710610936601854600e5461294a90919063ffffffff16565b601554115b15611f5b57611f5b6000612d1f565b7f53c03ee0722b52efeb42444f48d90173854501b3de3c590fcb445743377115c287878388888888604051611f969796959493929190613c17565b60405180910390a160016008559695505050505050565b60026008541415611ff3576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146120405760405162461bcd60e51b81526004016108c6906140c6565b801561205d5761205b8361205383612b83565b6000806131bf565b505b60006120698686612853565b600481015490915061207b90846127f6565b6004820155600061208b84612b83565b90506120b87f00000000000000000000000000000000000000000000000000000000000000008683612baf565b7fa97166013ecf5305dd9a58d6d867f05e646d4275f52d2bd52a5c7f00a690ad1b8585856040516120eb93929190613bcb565b60405180910390a1505060016008555050505050565b600d5460ff1681565b60026008541415612150576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461219d5760405162461bcd60e51b81526004016108c6906140c6565b61ffff83166000908152600a602090815260408083208584529091528120546009805490919081106121cb57fe5b906000526020600020906007020190506121f6826000015182600301546128f090919063ffffffff16565b6003820155602082015160068201541461221557602082015160068201555b815160208301516040517fdbdd25248751feb2f3b66721dfdd11662a68bc155af3771e661aabec92fba81492612250928892889291906143a1565b60405180910390a1505060016008555050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146122ab5760405162461bcd60e51b81526004016108c6906140c6565b601154156115875760006122c0601154612b83565b600060115590506122f27f00000000000000000000000000000000000000000000000000000000000000008383612baf565b7f70dc5a44816033bea80f836440f4b1fe1b3bb06b568c8dc2301901f03bf237c7828260405161157d929190613bb2565b60175481565b42841015612370576040805162461bcd60e51b815260206004820152600f60248201526e109c9a5919d94e8811561412549151608a1b604482015290519081900360640190fd5b6002546001600160a01b0380891660008181526007602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa15801561248b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906124c15750886001600160a01b0316816001600160a01b0316145b612512576040805162461bcd60e51b815260206004820152601960248201527f4272696467653a20494e56414c49445f5349474e415455524500000000000000604482015290519081900360640190fd5b61251d898989612a0a565b505050505050505050565b600660209081526000928352604080842090915290825290205481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461258d5760405162461bcd60e51b81526004016108c6906140c6565b61271084111580156125a157506127108311155b6125bd5760405162461bcd60e51b81526004016108c690613f12565b601680546017869055601885905560ff19168615151761ff001916610100841515021762ff0000191662010000831515021790556040517f7cc11124872dc29ed41dd447ee7ab07d9eee5d8ebb55f65dd92bce19bb20224a906126299087908790879087908790613ce2565b60405180910390a15050505050565b600c5481565b60008060026008541415612687576040805162461bcd60e51b815260206004820152601f602482015260008051602061443f833981519152604482015290519081900360640190fd5b6002600855336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146126d45760405162461bcd60e51b81526004016108c6906140c6565b60006126e08686612853565b9050806003015484111561270557600381018054600090915592508284039150612721565b600381015461271490856127f6565b6003820155839250600091505b7f44d3575fd94f9e0a41d7ebbc7e952f9b615c3f8d1faf924e1e9e98c0edf0d3808686858560405161275694939291906143a1565b60405180910390a15060016008559094909350915050565b600061277c611adc836133b0565b90505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60105481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008282111561284d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6009546000906128755760405162461bcd60e51b81526004016108c690613ea4565b61ffff83166000908152600a602090815260408083208584529091528120546009805490919081106128a357fe5b60009182526020909120600790910201805490915061ffff85811661010090920416148015610bed575082816001015414610c095760405162461bcd60e51b81526004016108c690613d97565b600082820183811015610c09576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612959575060006109a9565b8282028284828161296657fe5b0414610c095760405162461bcd60e51b815260040180806020018281038252602181526020018061445f6021913960400191505060405180910390fd5b60008082116129f9576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a0257fe5b049392505050565b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600080600e5411612a8f5760405162461bcd60e51b81526004016108c690613d47565b61277c600e546109366004548561294a90919063ffffffff16565b60008060045411612acd5760405162461bcd60e51b81526004016108c690613ddf565b6001600160a01b03831660009081526005602052604090205482811015612b065760405162461bcd60e51b81526004016108c6906141b9565b6000612b23600454610936600e548761294a90919063ffffffff16565b600e54909150612b3390826127f6565b600e55612b4085856133ee565b7f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a858583604051612b7393929190613bcb565b60405180910390a1949350505050565b600061277c827f000000000000000000000000000000000000000000000000000000000000000061294a565b604080518082018252601981527f7472616e7366657228616464726573732c75696e7432353629000000000000006020909101525160009081906001600160a01b038616907fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b90612c269087908790602401613bb2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612c649190613b82565b6000604051808303816000865af19150503d8060008114612ca1576040519150601f19603f3d011682016040523d82523d6000602084013e612ca6565b606091505b5091509150818015612cd0575080511580612cd0575080806020019051810190612cd091906137e7565b612cec5760405162461bcd60e51b81526004016108c690613e6d565b5050505050565b600061277c827f00000000000000000000000000000000000000000000000000000000000000006129a3565b6000601554118015612d3357506000600f54115b156115875760095460008167ffffffffffffffff81118015612d5457600080fd5b50604051908082528060200260200182016040528015612d7e578160200160208202803683370190505b5090506000805b83811015612e4857600060098281548110612d9c57fe5b906000526020600020906007020190506000612dcd600f546109368460020154600e5461294a90919063ffffffff16565b90506000612dec836005015484600401546128f090919063ffffffff16565b905080821115612e3a57808203868581518110612e0557fe5b602002602001018181525050612e37868581518110612e2057fe5b6020026020010151866128f090919063ffffffff16565b94505b505050806001019050612d85565b50600081612ee657848015612e5f57506000601554115b15612ee15760005b84811015612edf57600060098281548110612e7e57fe5b906000526020600020906007020190506000612eaf600f54610936846002015460155461294a90919063ffffffff16565b9050612ebb84826128f0565b6005830154909450612ecd90826128f0565b60059092019190915550600101612e67565b505b6130fa565b6015548211613053578415612fbd5760155482900360005b85811015612fb6576000858281518110612f1457fe5b60200260200101511115612fae57600060098281548110612f3157fe5b906000526020600020906007020190506000612f85612f63600f5461093685600201548861294a90919063ffffffff16565b888581518110612f6f57fe5b60200260200101516128f090919063ffffffff16565b9050612f9185826128f0565b6005830154909550612fa390826128f0565b826005018190555050505b600101612efe565b5050612ee1565b60005b84811015612edf576000848281518110612fd657fe5b6020026020010151111561304b57600060098281548110612ff357fe5b90600052602060002090600702019050600085838151811061301157fe5b6020026020010151905061302e81856128f090919063ffffffff16565b600583015490945061304090826128f0565b826005018190555050505b600101612fc0565b60005b848110156130f857600084828151811061306c57fe5b602002602001015111156130f05760006009828154811061308957fe5b9060005260206000209060070201905060006130c7856109366015548987815181106130b157fe5b602002602001015161294a90919063ffffffff16565b90506130d384826128f0565b60058301549094506130e590826128f0565b826005018190555050505b600101613056565b505b60155461310790826127f6565b6015555050505050565b6001600160a01b03831660009081526005602052604090205461313490826127f6565b6001600160a01b03808516600090815260056020526040808220939093559084168152205461316390826128f0565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600f54116131e25760405162461bcd60e51b81526004016108c690614114565b6131eb84612cf3565b905060008315613230576132106127106109366010548561294a90919063ffffffff16565b905061321c82826127f6565b60125490925061322c90826128f0565b6012555b82156132475760155461324390836128f0565b6015555b60045482901561326f5761326c600e546109366004548661294a90919063ffffffff16565b90505b600e5461327c90846128f0565b600e55613289878261347f565b7fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb878285856040516132be9493929190613c75565b60405180910390a160165460ff1615806132f557506132f0612710610936601854600e5461294a90919063ffffffff16565b601554115b1561330f5760165461330f9062010000900460ff16612d1f565b5050949350505050565b600081848411156133a85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561336d578181015183820152602001613355565b50505050905090810190601f16801561339a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600454116133d35760405162461bcd60e51b81526004016108c690614009565b61277c600454610936600e548561294a90919063ffffffff16565b6001600160a01b03821660009081526005602052604090205461341190826127f6565b6001600160a01b03831660009081526005602052604090205560045461343790826127f6565b6004556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60045461348c90826128f0565b6004556001600160a01b0382166000908152600560205260409020546134b290826128f0565b6001600160a01b03831660008181526005602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b604051806040016040528060008152602001600081525090565b604051806101000160405280600015158152602001600061ffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b038116811461277f57600080fd5b803561ffff8116811461277f57600080fd5b6000602082840312156135df578081fd5b610c09826135a5565b600080604083850312156135fa578081fd5b613603836135a5565b9150613611602084016135a5565b90509250929050565b60008060006060848603121561362e578081fd5b613637846135a5565b9250613645602085016135a5565b9150604084013590509250925092565b600080600080600080600060e0888a03121561366f578283fd5b613678886135a5565b9650613686602089016135a5565b95506040880135945060608801359350608088013560ff811681146136a9578384fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156136d8578182fd5b6136e1836135a5565b946020939093013593505050565b600080600060608486031215613703578283fd5b61370c846135a5565b925060208401359150613721604085016135a5565b90509250925092565b60008060008060008060a08789031215613742578182fd5b61374b876135a5565b955060208701359450613760604088016135bc565b935060608701359250608087013567ffffffffffffffff80821115613783578384fd5b818901915089601f830112613796578384fd5b8135818111156137a4578485fd5b8a60208285010111156137b5578485fd5b6020830194508093505050509295509295509295565b6000602082840312156137dc578081fd5b8135610c0981614430565b6000602082840312156137f8578081fd5b8151610c0981614430565b600080600080600060a0868803121561381a578283fd5b853561382581614430565b94506020860135935060408601359250606086013561384381614430565b9150608086013561385381614430565b809150509295509295909350565b600060c08284031215613872578081fd5b60405160c0810181811067ffffffffffffffff8211171561388f57fe5b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b600080604083850312156138e6578182fd5b6136e1836135bc565b600080600080848603610120811215613906578283fd5b61390f866135bc565b945060208601359350613924604087016135a5565b925060c0605f1982011215613937578182fd5b5060405160c0810181811067ffffffffffffffff8211171561395557fe5b8060405250606086013581526080860135602082015260a0860135604082015260c0860135606082015260e0860135608082015261010086013560a08201528091505092959194509250565b600080600080608085870312156139b6578182fd5b6139bf856135bc565b9350602085013592506139d4604086016135a5565b9396929550929360600135925050565b600080600080600060a086880312156139fb578283fd5b613a04866135bc565b945060208601359350613a19604087016135a5565b94979396509394606081013594506080013592915050565b60008060008060008060c08789031215613a49578384fd5b613a52876135bc565b955060208701359450613a67604088016135a5565b9350606087013592506080870135915060a0870135613a8581614430565b809150509295509295509295565b60008060008385036080811215613aa8578182fd5b613ab1856135bc565b9350602085013592506040603f1982011215613acb578182fd5b506040516040810181811067ffffffffffffffff82111715613ae957fe5b604090815285013581526060909401356020850152509093909250565b600080600060608486031215613b1a578081fd5b613b23846135bc565b925060208401359150613721604085016135bc565b600080600060608486031215613b4c578081fd5b613b55846135bc565b95602085013595506040909401359392505050565b600060208284031215613b7b578081fd5b5035919050565b60008251613b94818460208701614400565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03948516815260208101939093526040830191909152909116606082015260800190565b600060018060a01b038916825287602083015286604083015261ffff8616606083015284608083015260c060a08301528260c0830152828460e084013781830160e090810191909152601f909201601f191601019695505050505050565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b901515815260200190565b971515885261ffff96909616602088015260408701949094526060860192909252608085015260a084015260c083015260e08201526101000190565b941515855260208501939093526040840191909152151560608301521515608082015260a00190565b90815260200190565b6000602082528251806020840152613d33816040850160208701614400565b601f01601f19169190910160400192915050565b60208082526030908201527f53746172676174653a2063616e7420636f6e76657274205344746f4c5020776860408201526f0656e20746f74616c4c6971203d3d20360841b606082015260800190565b60208082526028908201527f53746172676174653a206c6f63616c20636861696e5061746820646f6573206e6040820152671bdd08195e1a5cdd60c21b606082015260800190565b60208082526029908201527f53746172676174653a2063616e74206275726e207768656e20746f74616c5375604082015268070706c79203d3d20360bc1b606082015260800190565b60208082526025908201527f53746172676174653a20636861696e5061746820697320616c72656164792061604082015264637469766560d81b606082015260800190565b60208082526019908201527f53746172676174653a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601d908201527f53746172676174653a206e6f20636861696e7061746873206578697374000000604082015260600190565b60208082526017908201527f4272696467653a2063756d2066656573203e2031303025000000000000000000604082015260600190565b6020808252601b908201527f53746172676174653a2077726f6e672044656c746120706172616d0000000000604082015260600190565b60208082526021908201527f53746172676174653a20666565206c6962726172792063616e742062652030786040820152600360fc1b606082015260800190565b6020808252601d908201527f53746172676174653a205f66726f6d2063616e6e6f7420626520307830000000604082015260600190565b60208082526028908201527f53746172676174653a20636f756e74657220636861696e50617468206973206e6040820152676f7420726561647960c01b606082015260800190565b60208082526033908201527f53746172676174653a2063616e7420636f6e76657274204c50746f53442077686040820152720656e20746f74616c537570706c79203d3d203606c1b606082015260800190565b60208082526044908201527f53746172676174653a2063616e7420637265617465436861696e50617468206f60408201527f66206578697374696e6720647374436861696e496420616e64205f647374506f6060820152631bdb125960e21b608082015260a00190565b6020808252602e908201527f53746172676174653a206f6e6c792074686520726f757465722063616e20636160408201526d1b1b081d1a1a5cc81b595d1a1bd960921b606082015260800190565b6020808252601d908201527f53746172676174653a204e6f20436861696e5061746873206578697374000000604082015260600190565b6020808252601d908201527f53746172676174653a206473742062616c616e636520746f6f206c6f77000000604082015260600190565b6020808252601b908201527f53746172676174653a20736c69707061676520746f6f20686967680000000000604082015260600190565b60208082526026908201527f53746172676174653a206e6f7420656e6f756768204c5020746f6b656e7320746040820152653790313ab93760d11b606082015260800190565b6020808252601b908201527f53746172676174653a20737761702066756e632073746f707065640000000000604082015260600190565b60006101008201905082511515825261ffff602084015116602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b815181526020918201519181019190915260400190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b61ffff95909516855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b61ffff98909816885260208801969096526001600160a01b039490941660408701526060860192909252608085015260a084015260c083015260e08201526101000190565b61ffff93841681526020810192909252909116604082015260600190565b61ffff9390931683526020830191909152604082015260600190565b61ffff94909416845260208401929092526040830152606082015260800190565b918252602082015260400190565b948552602085019390935261ffff9190911660408401526001600160a01b03166060830152608082015260a00190565b60005b8381101561441b578181015183820152602001614403565b8381111561442a576000848401525b50505050565b801515811461158757600080fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207aaedc0ccd2d34f140152446b43279f2d93751be1b5b4321d4ba3041dfdc231164736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a264697066735822122073e31c0626accb4d4c1029d08f9cfcdcf83c4601b0ab50ac410976e7496d2aa464736f6c63430007060033" + }, + { + "address": "0x4449eb076ae97e78b495e0aa7b8164707aceb900", + "nonce": 13, + "balance": "0x000000000000000000000000000000000000000000000000000d1e604b65d9c2", + "code": "0x" + }, + { + "address": "0x13b19cfb68cc7f71dd48e27f57811dd6a853f658", + "nonce": 6267, + "balance": "0x0000000000000000000000000000000000000000000000000cb6f68c92dcbc21", + "code": "0x" + }, + { + "address": "0xaf3c37bd85c24ca6e477941569577bb4a41470b9", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061011f5760003560e01c80638bc32d49116100a0578063bcb3962111610064578063bcb396211461030b578063d547741f14610320578063ec1b0a7814610340578063f5d709a114610360578063fb6c767b1461039b57600080fd5b80638bc32d491461026c578063913f60dd146102a157806391d14854146102b6578063a217fddf146102d6578063ab872a8f146102eb57600080fd5b80634f1ef286116100e75780634f1ef286146101f957806352d1902d1461020c57806354fd4d50146102215780638129fc1c146102375780638371b1c51461024c57600080fd5b806301ffc9a714610124578063248a9ca3146101595780632f2ff15d1461019757806336568abe146101b95780633659cfe6146101d9575b600080fd5b34801561013057600080fd5b5061014461013f36600461181a565b6103bb565b60405190151581526020015b60405180910390f35b34801561016557600080fd5b50610189610174366004611844565b60009081526065602052604090206001015490565b604051908152602001610150565b3480156101a357600080fd5b506101b76101b2366004611879565b6103f2565b005b3480156101c557600080fd5b506101b76101d4366004611879565b61041c565b3480156101e557600080fd5b506101b76101f43660046118a5565b61049f565b6101b7610207366004611907565b61057e565b34801561021857600080fd5b5061018961064a565b34801561022d57600080fd5b5061018960fc5481565b34801561024357600080fd5b506101b76106fd565b34801561025857600080fd5b50610189610267366004611844565b610825565b34801561027857600080fd5b5061028c610287366004611844565b61090b565b60408051928352602083019190915201610150565b3480156102ad57600080fd5b50610189610ae2565b3480156102c257600080fd5b506101446102d1366004611879565b610c62565b3480156102e257600080fd5b50610189600081565b3480156102f757600080fd5b506101b7610306366004611a09565b610c8d565b34801561031757600080fd5b50610189610d28565b34801561032c57600080fd5b506101b761033b366004611879565b610d58565b34801561034c57600080fd5b5061028c61035b366004611844565b610d7d565b34801561036c57600080fd5b5061038061037b366004611844565b610e87565b60408051938452602084019290925290820152606001610150565b3480156103a757600080fd5b506101b76103b6366004611a2d565b610eba565b60006001600160e01b03198216637965db0b60e01b14806103ec57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526065602052604090206001015461040d816110dc565b61041783836110e6565b505050565b6001600160a01b03811633146104915760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61049b828261116c565b5050565b6001600160a01b037f000000000000000000000000af3c37bd85c24ca6e477941569577bb4a41470b91630036104e75760405162461bcd60e51b815260040161048890611a49565b7f000000000000000000000000af3c37bd85c24ca6e477941569577bb4a41470b96001600160a01b0316610530600080516020611cdc833981519152546001600160a01b031690565b6001600160a01b0316146105565760405162461bcd60e51b815260040161048890611a95565b61055f816111d3565b6040805160008082526020820190925261057b918391906111f7565b50565b6001600160a01b037f000000000000000000000000af3c37bd85c24ca6e477941569577bb4a41470b91630036105c65760405162461bcd60e51b815260040161048890611a49565b7f000000000000000000000000af3c37bd85c24ca6e477941569577bb4a41470b96001600160a01b031661060f600080516020611cdc833981519152546001600160a01b031690565b6001600160a01b0316146106355760405162461bcd60e51b815260040161048890611a95565b61063e826111d3565b61049b828260016111f7565b6000306001600160a01b037f000000000000000000000000af3c37bd85c24ca6e477941569577bb4a41470b916146106ea5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610488565b50600080516020611cdc83398151915290565b600054610100900460ff161580801561071d5750600054600160ff909116105b806107375750303b158015610737575060005460ff166001145b61079a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610488565b6000805460ff1916600117905580156107bd576000805461ff0019166101001790555b6107c5611362565b6107cd611362565b6107d86000336110e6565b600160fc55801561057b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60fb546000906108475760405162461bcd60e51b815260040161048890611ae1565b60fb5460009061085990600190611b20565b90505b6000811261090257600060fb828154811061087957610879611b33565b906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820154815250509050806000015184106108ef576040810151602082015182516108d39087611b20565b6108dd9190611b49565b6108e79190611b6b565b949350505050565b50806108fa81611b7e565b91505061085c565b50600092915050565b60fb54600090819061092f5760405162461bcd60e51b815260040161048890611ae1565b60fb5460009061094190600190611b20565b90505b60fb818154811061095757610957611b33565b9060005260206000209060030201600001548410610ac45760fb818154811061098257610982611b33565b90600052602060002090600302016001015460fb82815481106109a7576109a7611b33565b90600052602060002090600302016000015460fb83815481106109cc576109cc611b33565b90600052602060002090600302016001015460fb84815481106109f1576109f1611b33565b906000526020600020906003020160010154600160fb8681548110610a1857610a18611b33565b90600052602060002090600302016001015460fb8781548110610a3d57610a3d611b33565b9060005260206000209060030201600001548a610a5a9190611b20565b610a649190611b6b565b610a6e9190611b20565b610a789190611b49565b610a829190611b9b565b610a8c9190611b6b565b610a969190611b20565b925060fb8181548110610aab57610aab611b33565b9060005260206000209060030201600101549150610adc565b8015610adc5780610ad481611bb2565b915050610944565b50915091565b60fb54600090610b045760405162461bcd60e51b815260040161048890611ae1565b60fb54600090610b1690600190611b20565b90505b60fb8181548110610b2c57610b2c611b33565b9060005260206000209060030201600001544210610c425760fb8181548110610b5757610b57611b33565b90600052602060002090600302016000015460fb8281548110610b7c57610b7c611b33565b90600052602060002090600302016001015460fb8381548110610ba157610ba1611b33565b906000526020600020906003020160010154600160fb8581548110610bc857610bc8611b33565b90600052602060002090600302016001015460fb8681548110610bed57610bed611b33565b90600052602060002090600302016000015442610c0a9190611b20565b610c149190611b6b565b610c1e9190611b20565b610c289190611b49565b610c329190611b9b565b610c3c9190611b6b565b91505090565b8015610c5a5780610c5281611bb2565b915050610b19565b506000905090565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610c98816110dc565b60fb548310610ce05760405162461bcd60e51b81526020600482015260146024820152730d2dcecc2d8d2c840e6cac2e6dedc40d2dcc8caf60631b6044820152606401610488565b8160fb8481548110610cf457610cf4611b33565b9060005260206000209060030201600082015181600001556020820151816001015560408201518160020155905050505050565b60fb54600090610d4a5760405162461bcd60e51b815260040161048890611ae1565b610d5342610825565b905090565b600082815260656020526040902060010154610d73816110dc565b610417838361116c565b60fb546000908190610da15760405162461bcd60e51b815260040161048890611ae1565b60fb54600090610db390600190611b20565b90505b60fb8181548110610dc957610dc9611b33565b9060005260206000209060030201600201548410610e6f5760fb8181548110610df457610df4611b33565b90600052602060002090600302016000015460fb8281548110610e1957610e19611b33565b90600052602060002090600302016001015460fb8381548110610e3e57610e3e611b33565b90600052602060002090600302016002015486610e5b9190611b20565b610e659190611b9b565b610a969190611b6b565b8015610adc5780610e7f81611bb2565b915050610db6565b60fb8181548110610e9757600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b6000610ec5816110dc565b60fb54600003610f64575060016040820181815260fb8054928301815560005282517f3e7257b7272bb46d49cd6019b04ddee20da7c0cb13f7c1ec3391291b2ccebabc6003909302928301556020909201517f3e7257b7272bb46d49cd6019b04ddee20da7c0cb13f7c1ec3391291b2ccebabd82015590517f3e7257b7272bb46d49cd6019b04ddee20da7c0cb13f7c1ec3391291b2ccebabe90910155565b60fb805460009190610f7890600190611b20565b81548110610f8857610f88611b33565b90600052602060002090600302016040518060600160405290816000820154815260200160018201548152602001600282015481525050905080602001518160000151610fd59190611b6b565b835110156110255760405162461bcd60e51b815260206004820152601a60248201527f696e76616c6964206e657720736561736f6e2073657474696e670000000000006044820152606401610488565b82516110379061026790600190611b20565b611042906001611b6b565b6040840190815260fb8054600181018255600091909152845160039091027f3e7257b7272bb46d49cd6019b04ddee20da7c0cb13f7c1ec3391291b2ccebabc81019190915560208501517f3e7257b7272bb46d49cd6019b04ddee20da7c0cb13f7c1ec3391291b2ccebabd82015590517f3e7257b7272bb46d49cd6019b04ddee20da7c0cb13f7c1ec3391291b2ccebabe90910155505050565b61057b81336113cf565b6110f08282610c62565b61049b5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556111283390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6111768282610c62565b1561049b5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006111de816110dc565b60fc80549060006111ee83611bc1565b91905055505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561122a5761041783611428565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611284575060408051601f3d908101601f1916820190925261128191810190611bda565b60015b6112e75760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610488565b600080516020611cdc83398151915281146113565760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610488565b506104178383836114c4565b600054610100900460ff166113cd5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610488565b565b6113d98282610c62565b61049b576113e6816114ef565b6113f1836020611501565b604051602001611402929190611c17565b60408051601f198184030181529082905262461bcd60e51b825261048891600401611c8c565b6001600160a01b0381163b6114955760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610488565b600080516020611cdc83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6114cd836116a4565b6000825111806114da5750805b15610417576114e983836116e4565b50505050565b60606103ec6001600160a01b03831660145b60606000611510836002611b9b565b61151b906002611b6b565b67ffffffffffffffff811115611533576115336118c0565b6040519080825280601f01601f19166020018201604052801561155d576020820181803683370190505b509050600360fc1b8160008151811061157857611578611b33565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106115a7576115a7611b33565b60200101906001600160f81b031916908160001a90535060006115cb846002611b9b565b6115d6906001611b6b565b90505b600181111561164e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061160a5761160a611b33565b1a60f81b82828151811061162057611620611b33565b60200101906001600160f81b031916908160001a90535060049490941c9361164781611bb2565b90506115d9565b50831561169d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610488565b9392505050565b6116ad81611428565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061169d8383604051806060016040528060278152602001611cfc602791396060600080856001600160a01b0316856040516117219190611cbf565b600060405180830381855af49150503d806000811461175c576040519150601f19603f3d011682016040523d82523d6000602084013e611761565b606091505b50915091506117728683838761177c565b9695505050505050565b606083156117eb5782516000036117e4576001600160a01b0385163b6117e45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610488565b50816108e7565b6108e783838151156118005781518083602001fd5b8060405162461bcd60e51b81526004016104889190611c8c565b60006020828403121561182c57600080fd5b81356001600160e01b03198116811461169d57600080fd5b60006020828403121561185657600080fd5b5035919050565b80356001600160a01b038116811461187457600080fd5b919050565b6000806040838503121561188c57600080fd5b8235915061189c6020840161185d565b90509250929050565b6000602082840312156118b757600080fd5b61169d8261185d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156118ff576118ff6118c0565b604052919050565b6000806040838503121561191a57600080fd5b6119238361185d565b915060208084013567ffffffffffffffff8082111561194157600080fd5b818601915086601f83011261195557600080fd5b813581811115611967576119676118c0565b611979601f8201601f191685016118d6565b9150808252878482850101111561198f57600080fd5b80848401858401376000848284010152508093505050509250929050565b6000606082840312156119bf57600080fd5b6040516060810181811067ffffffffffffffff821117156119e2576119e26118c0565b80604052508091508235815260208301356020820152604083013560408201525092915050565b60008060808385031215611a1c57600080fd5b8235915061189c84602085016119ad565b600060608284031215611a3f57600080fd5b61169d83836119ad565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252600f908201526e1b9bc81cd9585cdbdb88195e1a5cdd608a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156103ec576103ec611b0a565b634e487b7160e01b600052603260045260246000fd5b600082611b6657634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156103ec576103ec611b0a565b6000600160ff1b8201611b9357611b93611b0a565b506000190190565b80820281158282048414176103ec576103ec611b0a565b600081611b9357611b93611b0a565b600060018201611bd357611bd3611b0a565b5060010190565b600060208284031215611bec57600080fd5b5051919050565b60005b83811015611c0e578181015183820152602001611bf6565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611c4f816017850160208801611bf3565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611c80816028840160208801611bf3565b01602801949350505050565b6020815260008251806020840152611cab816040850160208701611bf3565b601f01601f19169190910160400192915050565b60008251611cd1818460208701611bf3565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c862891995829df04ecd17b6f4294ff72922038e940336283decb6e864aa348564736f6c63430008140033" + }, + { + "address": "0xfed660b4d956cf43671c989d84184e950697f0fd", + "nonce": 1, + "balance": "0x00000000000000000000000000000000000000000000000000341e9aa7c5ef38", + "code": "0x" + }, + { + "address": "0x146d1e888ca460c2b4e1f6478075dbad5f46446b", + "nonce": 59, + "balance": "0x0000000000000000000000000000000000000000000000000020af8a62f76526", + "code": "0x" + }, + { + "address": "0x10156134106a632ec43f03173ba6a27cfb24a70b", + "nonce": 20, + "balance": "0x000000000000000000000000000000000000000000000000001dc36871ed4800", + "code": "0x" + }, + { + "address": "0x9544621e3446bd504005f99a0909ed15aaf698ff", + "nonce": 22, + "balance": "0x00000000000000000000000000000000000000000000000000b339c07880d5aa", + "code": "0x" + }, + { + "address": "0x6e5509d54c72f994f00d5a48b04822785c74970b", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436101561001257600080fd5b60003560e01c8063099a04e514610072578063715018a61461006d5780638da5cb5b14610068578063abcef55414610063578063b2118a8d1461005e5763f2fde38b0361007757610206565b6101ed565b610197565b610141565b610129565b6100fc565b600080fd5b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b73ffffffffffffffffffffffffffffffffffffffff81165b0361007757565b905035906100c482610098565b565b806100b0565b905035906100c4826100c6565b9190604083820312610077578060206100f561009593866100b7565b94016100cc565b346100775761011561010f3660046100d9565b906102ad565b604051005b0390f35b600091031261007757565b346100775761013936600461011e565b6101156102ef565b346100775761015136600461011e565b61011a61015c61030a565b6040519182918273ffffffffffffffffffffffffffffffffffffffff909116815260200190565b9060208282031261007757610095916100b7565b346100775761011a6101b26101ad366004610183565b610314565b60405191829182901515815260200190565b9091606082840312610077576100956101dd84846100b7565b9360406100f582602087016100b7565b34610077576101156102003660046101c4565b91610623565b3461007757610115610219366004610183565b6106fd565b906100c49161022b610770565b610272565b6100956100956100959290565b61007c6100956100959273ffffffffffffffffffffffffffffffffffffffff1690565b6100959061023d565b61009590610260565b906100c4916102816000610230565b8214610296575b61029190610269565b61080f565b90506102916102a430610269565b31919050610288565b906100c49161021e565b6102bf610770565b6100c46102dd565b61007c6100956100959290565b610095906102c7565b6100c46102ea60006102d4565b6108c5565b6100c46102b7565b6100959061007c565b61009590546102f7565b6100956000610300565b6103477380e38291e06339d10aab483c65695d004dbd5c695b9173ffffffffffffffffffffffffffffffffffffffff1690565b1490565b906100c49291610359610770565b6104cf565b1561036557565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f496e76616c696420746f000000000000000000000000000000000000000000006044820152606490fd5b0390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810190811067ffffffffffffffff82111761043757604052565b6103c8565b905051906100c4826100c6565b90602082820312610077576100959161043c565b6040513d6000823e3d90fd5b1561047057565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f457863656564732062616c616e636500000000000000000000000000000000006044820152606490fd5b906105809161050c6104e461007c60006102d4565b73ffffffffffffffffffffffffffffffffffffffff8416908114159081610602575b5061035e565b602061051f61051a83610269565b610269565b61052830610269565b9061053260405190565b958692839182917f70a082310000000000000000000000000000000000000000000000000000000083526004830173ffffffffffffffffffffffffffffffffffffffff909116815260200190565b03915afa9283156105fd576000936105cc575b5061059e6000610230565b849081036105b157506100c493506109a8565b6105c7906105c06100c4969590565b1015610469565b6109a8565b6105ef91935060203d6020116105f6575b6105e781836103f7565b810190610449565b9138610593565b503d6105dd565b61045d565b905073ffffffffffffffffffffffffffffffffffffffff8316141538610506565b906100c4929161034b565b6100c49061063a610770565b6106cb565b1561064657565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608490fd5b6100c4906102ea6106df61007c60006102d4565b73ffffffffffffffffffffffffffffffffffffffff8316141561063f565b6100c49061062e565b1561070d57565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152806103c4600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6100c461077b61030a565b6107843361032d565b14610706565b906100c461079760405190565b92836103f7565b67ffffffffffffffff811161043757602090601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b906107eb6107e68361079e565b61078a565b918252565b3d1561080a576107ff3d6107d9565b903d6000602084013e565b606090565b600080916108349361082060405190565b90818003925af161082f6107f0565b501590565b61083a57565b6040517fb12d13eb000000000000000000000000000000000000000000000000000000008152600490fd5b9073ffffffffffffffffffffffffffffffffffffffff6108a37fffffffffffffffffffffffff00000000000000000000000000000000000000009290565b1691161790565b906108ba6100956108c192610269565b8254610865565b9055565b6108e66108e06108d56000610300565b61051a8460006108aa565b91610269565b907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e061091160405190565b600090a3565b61092a6109246100959290565b60e01b90565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b9160206100c492949361097b81604081019773ffffffffffffffffffffffffffffffffffffffff169052565b0152565b8015156100b0565b905051906100c48261097f565b906020828203126100775761009591610987565b60009291838093610a0b6109bf63a9059cbb610917565b936109df6109cc60405190565b938492602084019788526024840161094f565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103f7565b51925af1610a1f610a1a6107f0565b911590565b908115610a59575b50610a2e57565b6040517f90b8ec18000000000000000000000000000000000000000000000000000000008152600490fd5b9050610a63815190565b610a74610a706000610230565b9190565b14159081610a84575b5038610a27565b610aa6915080602080610a98610aa2945190565b8301019101610994565b1590565b38610a7d56fea26469706673582212208ab7f73c8dbc5e2c8fbc8ccf697fc5d52a559c3f71f3f855f5e1623b8d8efe8664736f6c63430008170033" + }, + { + "address": "0xb87ac009f61fa214f196e232fd14a6f8ae422fa1", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x73b87ac009f61fa214f196e232fd14a6f8ae422fa1301460806040526004361061018c5760003560e01c8063ab3d8544116100e2578063e4a9a0da11610096578063e9252d4611610070578063e9252d46146106c3578063f3de036214610711578063f967a81f146107195761018c565b8063e4a9a0da146105ea578063e7a4db811461064b578063e8c47a541461068a5761018c565b8063c9b64dcb116100c7578063c9b64dcb146105c5578063d011f918146105e2578063d4b0de2f146105a05761018c565b8063ab3d8544146105a0578063b0a14cfc146105a85761018c565b80635e58579c116101445780637d0481601161011e5780637d048160146104fb578063968e55941461051e578063a5397b22146105575761018c565b80635e58579c1461037157806371906c2c1461040557806373fd6b3e146104225761018c565b806340370edf1161017557806340370edf146101c957806341b91c26146102825780634b23603c1461033b5761018c565b80630296ab501461019157806339698415146101af575b600080fd5b610199610758565b6040805160ff9092168252519081900360200190f35b6101b761075d565b60408051918252519081900360200190f35b8180156101d557600080fd5b506101b7600480360360608110156101ec57600080fd5b8135919081019060408101602082013564010000000081111561020e57600080fd5b82018360208201111561022057600080fd5b8035906020019184602083028401116401000000008311171561024257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610764915050565b81801561028e57600080fd5b506101b7600480360360608110156102a557600080fd5b813591908101906040810160208201356401000000008111156102c757600080fd5b8201836020820111156102d957600080fd5b803590602001918460208302840111640100000000831117156102fb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061112d915050565b6101b76004803603608081101561035157600080fd5b5080359060ff6020820135811691604081013590911690606001356119b0565b6101b76004803603608081101561038757600080fd5b81359173ffffffffffffffffffffffffffffffffffffffff602082013516918101906060810160408201356401000000008111156103c457600080fd5b8201836020820111156103d657600080fd5b803590602001918460208302840111640100000000831117156103f857600080fd5b91935091503515156119c8565b6101b76004803603602081101561041b57600080fd5b5035611c65565b81801561042e57600080fd5b506104ab6004803603606081101561044557600080fd5b81359160208101359181019060608101604082013564010000000081111561046c57600080fd5b82018360208201111561047e57600080fd5b803590602001918460208302840111640100000000831117156104a057600080fd5b509092509050611de3565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104e75781810151838201526020016104cf565b505050509050019250505060405180910390f35b6101b76004803603604081101561051157600080fd5b5080359060200135612264565b6101b76004803603604081101561053457600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661230e565b81801561056357600080fd5b506101b7600480360360a081101561057a57600080fd5b5080359060ff6020820135811691604081013590911690606081013590608001356123dc565b6101b761279e565b6101b7600480360360208110156105be57600080fd5b50356127a6565b6101b7600480360360208110156105db57600080fd5b50356127b1565b6101b76127bc565b6106326004803603608081101561060057600080fd5b50803590602081013573ffffffffffffffffffffffffffffffffffffffff16906040810135906060013560ff166127c1565b6040805192835260208301919091528051918290030190f35b81801561065757600080fd5b506101b76004803603608081101561066e57600080fd5b5080359060208101359060ff604082013516906060013561284b565b6101b7600480360360408110156106a057600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16612c48565b8180156106cf57600080fd5b5061070f600480360360608110156106e657600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff6020820135169060400135612c74565b005b6101b7612c84565b6104ab6004803603606081101561072f57600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff6020820135169060400135612c8d565b601281565b620f424081565b60088301548251600091146107da57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e7473206d757374206d6174636820706f6f6c656420746f6b656e73604482015290519081900360640190fd5b600884015460609067ffffffffffffffff811180156107f857600080fd5b50604051908082528060200260200182016040528015610822578160200160208202803683370190505b50905061082d6145e7565b60405180608001604052806000815260200160008152602001600081526020016000815250905060008660070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108c057600080fd5b505afa1580156108d4573d6000803e3d6000fd5b505050506040513d60208110156108ea57600080fd5b505190508015610900576108fd87612c9a565b82525b606087600a0180548060200260200160405190810160405280929190818152602001828054801561095057602002820191906000526020600020905b81548152602001906001019080831161093c575b5050505050905060005b6008890154811015610c4b57821515806109875750600088828151811061097d57fe5b6020026020010151115b6109f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d75737420737570706c7920616c6c20746f6b656e7320696e20706f6f6c0000604482015290519081900360640190fd5b8781815181106109fe57fe5b6020026020010151600014610bed576000896008018281548110610a1e57fe5b60009182526020918290200154604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216926370a0823192602480840193829003018186803b158015610a9357600080fd5b505afa158015610aa7573d6000803e3d6000fd5b505050506040513d6020811015610abd57600080fd5b50518951909150610b1990339030908c9086908110610ad857fe5b60200260200101518d6008018681548110610aef57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16929190612cb1565b610bd3818b6008018481548110610b2c57fe5b60009182526020918290200154604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216926370a0823192602480840193829003018186803b158015610ba157600080fd5b505afa158015610bb5573d6000803e3d6000fd5b505050506040513d6020811015610bcb57600080fd5b505190612d4c565b898381518110610bdf57fe5b602002602001018181525050505b610c2c888281518110610bfc57fe5b60200260200101518a600a018381548110610c1357fe5b9060005260206000200154612dc390919063ffffffff16565b828281518110610c3857fe5b602090810291909101015260010161095a565b50610c5588612e37565b6060840152610c71610c678983612ecc565b8460600151612f2a565b60208401819052835110610ce657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f442073686f756c6420696e637265617365000000000000000000000000000000604482015290519081900360640190fd5b602083015160408401528115610ef2576000610d018961312b565b905060005b60088a0154811015610ecf576000610d528660000151610d4c8d600a018581548110610d2e57fe5b9060005260206000200154896020015161315890919063ffffffff16565b906131cb565b9050610dff6402540be400610d4c83735440625752aa1b8a83a43200bfbcdedfbc17497163a95cb7f79091898881518110610d8957fe5b60200260200101516040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015610dcc57600080fd5b505af4158015610de0573d6000803e3d6000fd5b505050506040513d6020811015610df657600080fd5b50518690613158565b878381518110610e0b57fe5b602002602001018181525050610e6f610e4d6402540be400610d4c8e600501548b8781518110610e3757fe5b602002602001015161315890919063ffffffff16565b858481518110610e5957fe5b6020026020010151612d4c90919063ffffffff16565b8b600a018381548110610e7e57fe5b9060005260206000200181905550610eaf878381518110610e9b57fe5b6020026020010151858481518110610e5957fe5b848381518110610ebb57fe5b602090810291909101015250600101610d06565b50610ee7610edd8a84612ecc565b8560600151612f2a565b604085015250610f09565b8051610f0790600a8a0190602084019061460f565b505b600082610f1b57506020830151610f40565b83516040850151610f3d9190610d4c908690610f379084612d4c565b90613158565b90505b86811015610faf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f436f756c646e2774206d696e74206d696e207265717565737465640000000000604482015290519081900360640190fd5b6007890154604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101849052905173ffffffffffffffffffffffffffffffffffffffff909216916340c10f199160448082019260009290919082900301818387803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b50505060208501513391507f189c623b666b1b45b83d7178f39b8c087cb09774317ca2f53c2d3c3726f222a2908a9088906110798887612dc3565b604051808060200180602001858152602001848152602001838103835287818151815260200191508051906020019060200280838360005b838110156110c95781810151838201526020016110b1565b50505050905001838103825286818151815260200191508051906020019060200280838360005b838110156111085781810151838201526020016110f0565b50505050905001965050505050505060405180910390a29450505050505b9392505050565b60088301548251600091146111a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74732073686f756c64206d6174636820706f6f6c20746f6b656e73604482015290519081900360640190fd5b6007840154604080517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561121657600080fd5b505afa15801561122a573d6000803e3d6000fd5b505050506040513d602081101561124057600080fd5b5051821180159061125057508115155b6112bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f3e4c502e62616c616e63654f6600000000000000000000000000000000000000604482015290519081900360640190fd5b6112c36145e7565b60405180608001604052806000815260200160008152602001600081526020016000815250905060008560070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561135657600080fd5b505afa15801561136a573d6000803e3d6000fd5b505050506040513d602081101561138057600080fd5b50519050600061138f8761312b565b9050606087600a018054806020026020016040519081016040528092919081815260200182805480156113e157602002820191906000526020600020905b8154815260200190600101908083116113cd575b505050505090506113f188612e37565b6060850152611402610edd8961324c565b845260005b60088901548110156114855761146688828151811061142257fe5b60200260200101516040518060600160405280602381526020016146ea6023913984848151811061144f57fe5b60200260200101516132fa9092919063ffffffff16565b82828151811061147257fe5b6020908102919091010152600101611407565b50611493610edd8983612ecc565b6020850152600888015460609067ffffffffffffffff811180156114b657600080fd5b506040519080825280602002602001820160405280156114e0578160200160208202803683370190505b50905060005b60088a015481101561168257600061152c8760000151610d4c8d600a01858154811061150e57fe5b90600052602060002001548a6020015161315890919063ffffffff16565b9050600081735440625752aa1b8a83a43200bfbcdedfbc17497163a95cb7f7909187868151811061155957fe5b60200260200101516040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561159c57600080fd5b505af41580156115b0573d6000803e3d6000fd5b505050506040513d60208110156115c657600080fd5b505190506115dd6402540be400610d4c8884613158565b8484815181106115e957fe5b6020026020010181815250506116216116156402540be400610d4c8f60050154888881518110610e3757fe5b868581518110610e5957fe5b8c600a01848154811061163057fe5b906000526020600020018190555061166184848151811061164d57fe5b6020026020010151868581518110610e5957fe5b85848151811061166d57fe5b602090810291909101015250506001016114e6565b5061169a6116908a84612ecc565b8660600151612f2a565b6040860181905285516000916116bc9190610d4c908890610f37908490612d4c565b90508061172a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4275726e7420616d6f756e742063616e6e6f74206265207a65726f0000000000604482015290519081900360640190fd5b61175a61174661173a8c3361230e565b6402540be40090612d4c565b610d4c6402540be400610f37856001612dc3565b9050878111156117cb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746f6b656e416d6f756e74203e206d61784275726e416d6f756e740000000000604482015290519081900360640190fd5b60078a0154604080517f79cc679000000000000000000000000000000000000000000000000000000000815233600482015260248101849052905173ffffffffffffffffffffffffffffffffffffffff909216916379cc67909160448082019260009290919082900301818387803b15801561184657600080fd5b505af115801561185a573d6000803e3d6000fd5b5050505060005b60088b01548110156118c5576118bd338b838151811061187d57fe5b60200260200101518d600801848154811061189457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1691906133ab565b600101611861565b50602086015133907f3631c28b1f9dd213e0319fb167b554d76b6c283a41143eb400a0d1adb1af1755908b9085906118fd8a87612d4c565b604051808060200180602001858152602001848152602001838103835287818151815260200191508051906020019060200280838360005b8381101561194d578181015183820152602001611935565b50505050905001838103825286818151815260200191508051906020019060200280838360005b8381101561198c578181015183820152602001611974565b50505050905001965050505050505060405180910390a29998505050505050505050565b60006119be85858585613438565b5095945050505050565b6008850154600090816119da88612e37565b90506000611a43611a3d8a8b600a01805480602002602001604051908101604052809291908181526020018280548015611a3357602002820191906000526020600020905b815481526020019060010190808311611a1f575b5050505050612ecc565b83612f2a565b9050606089600a01805480602002602001604051908101604052809291908181526020018280548015611a9557602002820191906000526020600020905b815481526020019060010190808311611a81575b5050505050905060005b84811015611b5e578615611b0257611ae5898983818110611abc57fe5b90506020020135838381518110611acf57fe5b6020026020010151612dc390919063ffffffff16565b828281518110611af157fe5b602002602001018181525050611b56565b611b3d898983818110611b1157fe5b905060200201356040518060600160405280602381526020016146ea6023913984848151811061144f57fe5b828281518110611b4957fe5b6020026020010181815250505b600101611a9f565b506000611b74611b6e8c84612ecc565b85612f2a565b905060008b60070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611be257600080fd5b505afa158015611bf6573d6000803e3d6000fd5b505050506040513d6020811015611c0c57600080fd5b505190508715611c3557611c2884610d4c83610f378684612d4c565b9650505050505050611c5c565b611c28611c4561173a8e8e61230e565b610d4c6402540be400610f3788838783838b612d4c565b95945050505050565b600080611c82611c748461324c565b611c7d85612e37565b612f2a565b905060008360070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611cf057600080fd5b505afa158015611d04573d6000803e3d6000fd5b505050506040513d6020811015611d1a57600080fd5b505190508015611dd757611dce81610d4c8660070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9557600080fd5b505afa158015611da9573d6000803e3d6000fd5b505050506040513d6020811015611dbf57600080fd5b5051859060ff16600a0a613158565b92505050611dde565b6000925050505b919050565b6007840154604080517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152905160609273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015611e5657600080fd5b505afa158015611e6a573d6000803e3d6000fd5b505050506040513d6020811015611e8057600080fd5b5051841115611ef057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f3e4c502e62616c616e63654f6600000000000000000000000000000000000000604482015290519081900360640190fd5b60088501548214611f6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f6d696e416d6f756e7473206d757374206d6174636820706f6f6c546f6b656e73604482015290519081900360640190fd5b6060611f6f86338761359c565b905060005b815181101561209c57848482818110611f8957fe5b90506020020135828281518110611f9c57fe5b6020026020010151101561201157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f616d6f756e74735b695d203c206d696e416d6f756e74735b695d000000000000604482015290519081900360640190fd5b61205082828151811061202057fe5b602002602001015188600a01838154811061203757fe5b9060005260206000200154612d4c90919063ffffffff16565b87600a01828154811061205f57fe5b90600052602060002001819055506120943383838151811061207d57fe5b602002602001015189600801848154811061189457fe5b600101611f74565b506007860154604080517f79cc679000000000000000000000000000000000000000000000000000000000815233600482015260248101889052905173ffffffffffffffffffffffffffffffffffffffff909216916379cc67909160448082019260009290919082900301818387803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f88d38ed598fdd809c2bf01ee49cd24b7fdabf379a83d29567952b60324d58cef828860070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121d357600080fd5b505afa1580156121e7573d6000803e3d6000fd5b505050506040513d60208110156121fd57600080fd5b50516040805160208181018490528282528451928201929092528351909182916060830191868101910280838360005b8381101561224557818101518382015260200161222d565b50505050905001935050505060405180910390a290505b949350505050565b600882015460009082106122d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f546f6b656e20696e646578206f7574206f662072616e67650000000000000000604482015290519081900360640190fd5b61230583600a0183815481106122eb57fe5b9060005260206000200154846008018481548110610b2c57fe5b90505b92915050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b830160205260408120548190612345906224ea00612dc3565b9050428111156123d257600061235b8242612d4c565b90506123c96402540be400610d4c6224ea00610d4c85610f378b600c0160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548c6006015461315890919063ffffffff16565b92505050612308565b5060009392505050565b6000856008018560ff16815481106123f057fe5b60009182526020918290200154604080517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff909216926370a0823192602480840193829003018186803b15801561246557600080fd5b505afa158015612479573d6000803e3d6000fd5b505050506040513d602081101561248f57600080fd5b50518311156124ff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43616e6e6f742073776170206d6f7265207468616e20796f75206f776e000000604482015290519081900360640190fd5b6000866008018660ff168154811061251357fe5b60009182526020918290200154604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216926370a0823192602480840193829003018186803b15801561258857600080fd5b505afa15801561259c573d6000803e3d6000fd5b505050506040513d60208110156125b257600080fd5b50516008880180549192506125d5913391309188919060ff8c16908110610aef57fe5b60006125ed82896008018960ff1681548110610b2c57fe5b90506000806125fe8a8a8a86613438565b915091508582101561267157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53776170206469646e277420726573756c7420696e206d696e20746f6b656e73604482015290519081900360640190fd5b60006126b38b6009018a60ff168154811061268857fe5b9060005260206000200154610d4c6402540be400610d4c8f600501548761315890919063ffffffff16565b90506126cb848c600a018c60ff1681548110610c1357fe5b8b600a018b60ff16815481106126dd57fe5b906000526020600020018190555061270b81612705858e600a018d60ff168154811061203757fe5b90612d4c565b8b600a018a60ff168154811061271d57fe5b906000526020600020018190555061274233848d6008018c60ff168154811061189457fe5b604080518581526020810185905260ff808d16828401528b166060820152905133917fc6c1e0630dbe9130cc068028486c0d118ddcea348550819defd5cb8c257f8a38919081900360800190a250909998505050505050505050565b6305f5e10081565b600061230882613780565b600061230882612e37565b606481565b6000806000806127d2888688613790565b8092508193505050600061281b836127058b6009018960ff16815481106127f557fe5b9060005260206000200154610d4c8661280d8f61324c565b8c60ff1681518110610e5957fe5b905061283d6402540be400610d4c61283661173a8d8d61230e565b8690613158565b999098509650505050505050565b6000808560070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128b857600080fd5b505afa1580156128cc573d6000803e3d6000fd5b505050506040513d60208110156128e257600080fd5b505160088701546007880154604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051939450919273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561296057600080fd5b505afa158015612974573d6000803e3d6000fd5b505050506040513d602081101561298a57600080fd5b50518611156129fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f3e4c502e62616c616e63654f6600000000000000000000000000000000000000604482015290519081900360640190fd5b808560ff1610612a6b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f546f6b656e206e6f7420666f756e640000000000000000000000000000000000604482015290519081900360640190fd5b600080612a7a89338a8a6127c1565b9250905085811015612aed57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f6479203c206d696e416d6f756e74000000000000000000000000000000000000604482015290519081900360640190fd5b612b2c612b1a612b136402540be400610d4c8d600501548761315890919063ffffffff16565b8390612dc3565b8a600a018960ff168154811061203757fe5b89600a018860ff1681548110612b3e57fe5b600091825260208220019190915560078a0154604080517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018c9052905173ffffffffffffffffffffffffffffffffffffffff909216926379cc67909260448084019382900301818387803b158015612bc157600080fd5b505af1158015612bd5573d6000803e3d6000fd5b50505050612bf033828b6008018a60ff168154811061189457fe5b604080518981526020810186905260ff89168183015260608101839052905133917f43fb02998f4e03da2e0e6fff53fdbf0c40a9f45f145dc377fc30615d7d7a8a64919081900360800190a298975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff166000908152600b91909101602052604090205490565b612c7f838383613b3b565b505050565b6402540be40081565b606061225c84848461359c565b6000612308612ca88361324c565b611c7d84612e37565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612d46908590613ceb565b50505050565b600082821115612dbd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008282018381101561230557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600381015460018201546000919042821115612ec3576002840154845480831115612e9557612e8a612e83612e6c8685612d4c565b610d4c612e794287612d4c565b610f378887612d4c565b8290612dc3565b945050505050611dde565b612e8a612ebc612ea58685612d4c565b610d4c612eb24287612d4c565b610f378689612d4c565b8290612d4c565b9150611dde9050565b60606123058284600901805480602002602001604051908101604052809291908181526020018280548015612f2057602002820191906000526020600020905b815481526020019060010190808311612f0c575b5050505050613dc3565b815160009081805b82811015612f6a57612f60868281518110612f4957fe5b602002602001015183612dc390919063ffffffff16565b9150600101612f32565b5080612f7b57600092505050612308565b60008181612f898786613158565b905060005b6101008110156130c3578260005b87811015612fcb57612fc1612fb7898d8481518110610e3757fe5b610d4c8488613158565b9150600101612f9c565b50929350839261301f612fff612fe683610f378b6001612dc3565b612ff96064610d4c89610f378a84612d4c565b90612dc3565b610d4c86610f37613010868d613158565b612ff96064610d4c8b8f613158565b935083735440625752aa1b8a83a43200bfbcdedfbc1749716313a1ec759091876040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561307a57600080fd5b505af415801561308e573d6000803e3d6000fd5b505050506040513d60208110156130a457600080fd5b5051156130ba5783975050505050505050612308565b50600101612f8e565b50604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4420646f6573206e6f7420636f6e766572676500000000000000000000000000604482015290519081900360640190fd5b60088101546000906123089061314990600490610f37906001612d4c565b60088401546004850154610d4c915b60008261316757506000612308565b8282028284828161317457fe5b0414612305576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061469f6021913960400191505060405180910390fd5b600080821161323b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161324457fe5b049392505050565b606061230882600a0180548060200260200160405190810160405280929190818152602001828054801561329f57602002820191906000526020600020905b81548152602001906001019080831161328b575b505050505083600901805480602002602001604051908101604052809291908181526020018280548015612f205760200282019190600052602060002090815481526020019060010190808311612f0c575050505050613dc3565b600081848411156133a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613368578181015183820152602001613350565b50505050905090810190601f1680156133955780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612c7f908490613ceb565b60008060606134468761324c565b905080518660ff1610801561345e575080518560ff16105b6134c957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f546f6b656e20696e646578206f7574206f662072616e67650000000000000000604482015290519081900360640190fd5b6000613514828860ff16815181106134dd57fe5b6020026020010151612ff98a6009018a60ff16815481106134fa57fe5b90600052602060002001548861315890919063ffffffff16565b905060006135258989898587613ed4565b905061353f600161270583868b60ff1681518110610e5957fe5b94506135616402540be400610d4c8b600401548861315890919063ffffffff16565b935061358e896009018860ff168154811061357857fe5b600091825260209091200154610d4c8787612d4c565b945050505094509492505050565b606060008460070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561360a57600080fd5b505afa15801561361e573d6000803e3d6000fd5b505050506040513d602081101561363457600080fd5b50519050808311156136a757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f43616e6e6f742065786365656420746f74616c20737570706c79000000000000604482015290519081900360640190fd5b60006136c96402540be400610d4c6136c261173a8a8a61230e565b8790613158565b600887015490915060609067ffffffffffffffff811180156136ea57600080fd5b50604051908082528060200260200182016040528015613714578160200160208202803683370190505b50905060005b60088801548110156137755761375684610d4c858b600a01858154811061373d57fe5b906000526020600020015461315890919063ffffffff16565b82828151811061376257fe5b602090810291909101015260010161371a565b509695505050505050565b60006123086064610d4c84612e37565b6008830154600090819060ff85161061380a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f546f6b656e20696e646578206f7574206f662072616e67650000000000000000604482015290519081900360640190fd5b60606138158661324c565b905061381f61465a565b6040518060a00160405280600081526020016000815260200160008152602001600081526020016000815250905061385687612e37565b60808201819052613868908390612f2a565b81526007870154604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051613920926139189273ffffffffffffffffffffffffffffffffffffffff909116916318160ddd91600480820192602092909190829003018186803b1580156138df57600080fd5b505afa1580156138f3573d6000803e3d6000fd5b505050506040513d602081101561390957600080fd5b50518351610d4c908990613158565b825190612d4c565b60208201528151829060ff881690811061393657fe5b60200260200101518511156139ac57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5769746864726177206578636565647320617661696c61626c65000000000000604482015290519081900360640190fd5b6139c08160800151878484602001516141f4565b6040820152815160609067ffffffffffffffff811180156139e057600080fd5b50604051908082528060200260200182016040528015613a0a578160200160208202803683370190505b509050613a168861312b565b606083015260005b6008890154811015613acd576000848281518110613a3857fe5b60200260200101519050613aad612ebc6402540be400610d4c87606001518d60ff168714613a8657885160208a0151613a8191613a7a91610d4c908a90613158565b8790612d4c565b610f37565b610f3789604001516127058b60000151610d4c8d602001518b61315890919063ffffffff16565b838381518110613ab957fe5b602090810291909101015250600101613a1e565b506000613af6613ae784608001518a8587602001516141f4565b838a60ff1681518110610e5957fe5b9050613b24896009018960ff1681548110613b0d57fe5b600091825260209091200154610d4c836001612d4c565b604090930151929550919350505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff8216613b5b57612c7f565b6006830154613b985773ffffffffffffffffffffffffffffffffffffffff82166000908152600c8401602052604090206402540be4009055613cbd565b6000613ba4848461230e565b6007850154604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152915193945060009391909216916370a08231916024808301926020929190829003018186803b158015613c1f57600080fd5b505afa158015613c33573d6000803e3d6000fd5b505050506040513d6020811015613c4957600080fd5b50516006860154909150613c9290613c6590610f378685612dc3565b610d4c6402540be400610f37613c888a600601548961315890919063ffffffff16565b612ff98789613158565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600c8701602052604090205550505b5073ffffffffffffffffffffffffffffffffffffffff166000908152600b9190910160205260409020429055565b6060613d4d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143f69092919063ffffffff16565b805190915015612c7f57808060200190516020811015613d6c57600080fd5b5051612c7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806146c0602a913960400191505060405180910390fd5b81518151606091908114613e3857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f42616c616e636573206d757374206d61746368206d756c7469706c6965727300604482015290519081900360640190fd5b60608167ffffffffffffffff81118015613e5157600080fd5b50604051908082528060200260200182016040528015613e7b578160200160208202803683370190505b50905060005b82811015613ecb57613eac858281518110613e9857fe5b6020026020010151878381518110610e3757fe5b828281518110613eb857fe5b6020908102919091010152600101613e81565b50949350505050565b600885015460009060ff8681169086161415613f5157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43616e277420636f6d7061726520746f6b656e20746f20697473656c66000000604482015290519081900360640190fd5b808660ff16108015613f655750808560ff16105b613fd057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f546f6b656e73206d75737420626520696e20706f6f6c00000000000000000000604482015290519081900360640190fd5b6000613fdb88612e37565b90506000613fe98583612f2a565b905080600080613ff98686613158565b90506000805b87811015614072578c60ff1681141561401a578a9150614044565b8b60ff16811461403f5789818151811061403057fe5b60200260200101519150614044565b61406a565b61404e8483612dc3565b935061406761405d838a613158565b610d4c8789613158565b94505b600101613fff565b5061408f6140808389613158565b610d4c6064610f37888a613158565b935060006140ac6140a584610d4c896064613158565b8590612dc3565b9050600086815b61010081101561418c5790915081906140e66140d88a61270587612ff9876002613158565b610d4c8a612ff98680613158565b915081735440625752aa1b8a83a43200bfbcdedfbc1749716313a1ec759091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561414157600080fd5b505af4158015614155573d6000803e3d6000fd5b505050506040513d602081101561416b57600080fd5b50511561418457509950611c5c98505050505050505050565b6001016140b3565b50604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e76657267650000604482015290519081900360640190fd5b815160009060ff8516811161426a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f546f6b656e206e6f7420666f756e640000000000000000000000000000000000604482015290519081900360640190fd5b826000806142788985613158565b905060005b848110156142df578860ff1681146142d7576142b588828151811061429e57fe5b602002602001015184612dc390919063ffffffff16565b92506142d46142ca868a8481518110610e3757fe5b610d4c868a613158565b93505b60010161427d565b506142fc6142ed8286613158565b610d4c6064610f37878b613158565b9250600061431961431283610d4c8a6064613158565b8490612dc3565b9050600087815b61010081101561418c5790915081906143536143458b61270587612ff9876002613158565b610d4c89612ff98680613158565b915081735440625752aa1b8a83a43200bfbcdedfbc1749716313a1ec759091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156143ae57600080fd5b505af41580156143c2573d6000803e3d6000fd5b505050506040513d60208110156143d857600080fd5b5051156143ee5750965061225c95505050505050565b600101614320565b606061225c84846000858561440a85614561565b61447557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106144df57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016144a2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614541576040519150601f19603f3d011682016040523d82523d6000602084013e614546565b606091505b5091509150614556828286614567565b979650505050505050565b3b151590565b60608315614576575081611126565b8251156145865782518084602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152845160248401528451859391928392604401919085019080838360008315613368578181015183820152602001613350565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b82805482825590600052602060002090810192821561464a579160200282015b8281111561464a57825182559160200191906001019061462f565b50614656929150614689565b5090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b5b80821115614656576000815560010161468a56fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656443616e6e6f74207769746864726177206d6f7265207468616e20617661696c61626c65a2646970667358221220dfbef8ce5f3788d20488a6121296a680da0268481b80eeb2305e7fc7214ce90164736f6c634300060c0033" + }, + { + "address": "0x6d357be7d0a6c3ebbf07c0da865acdcfe179c36d", + "nonce": 33, + "balance": "0x000000000000000000000000000000000000000000000000005575d8468c2b80", + "code": "0x" + }, + { + "address": "0xbdb018e21ad1e5756853fe008793a474d329991b", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000531efa842a33c000", + "code": "0x6080604052600436106101f85760003560e01c806391d148541161010d578063ba772d8b116100a0578063d547741f1161006f578063d547741f14610615578063e985e9c514610635578063f242432a1461067e578063f5b541a61461069e578063ffa1ad74146106c057600080fd5b8063ba772d8b14610586578063bd85b039146105a6578063c87b56dd146105d3578063d5391393146105f357600080fd5b8063a217fddf116100dc578063a217fddf146104e0578063a22cb465146104f5578063a3f4df7e14610515578063b93c37701461055657600080fd5b806391d148541461047657806395d89b411461049657806398d5fdca146104ab5780639b3e5573146104c057600080fd5b806336568abe1161019057806355f804b31161015f57806355f804b3146103c55780636834e3a8146103e55780637c2ccc451461041b57806384b0196e1461042e57806391b7f5ed1461045657600080fd5b806336568abe146103345780633ccfd60b146103545780634e1273f4146103695780634f558e791461039657600080fd5b8063162094c4116101cc578063162094c4146102a2578063248a9ca3146102c45780632eb2c2d6146102f45780632f2ff15d1461031457600080fd5b8062fdd58e146101fd57806301ffc9a71461023057806306fdde03146102605780630e89341c14610282575b600080fd5b34801561020957600080fd5b5061021d61021836600461281e565b6106f1565b6040519081526020015b60405180910390f35b34801561023c57600080fd5b5061025061024b36600461285e565b61078a565b6040519015158152602001610227565b34801561026c57600080fd5b50610275610795565b60405161022791906128cb565b34801561028e57600080fd5b5061027561029d3660046128de565b610823565b3480156102ae57600080fd5b506102c26102bd3660046129d1565b61082e565b005b3480156102d057600080fd5b5061021d6102df3660046128de565b60009081526005602052604090206001015490565b34801561030057600080fd5b506102c261030f366004612aab565b610895565b34801561032057600080fd5b506102c261032f366004612b54565b6108e1565b34801561034057600080fd5b506102c261034f366004612b54565b61090b565b34801561036057600080fd5b506102c2610989565b34801561037557600080fd5b50610389610384366004612b80565b610aa9565b6040516102279190612c7b565b3480156103a257600080fd5b506102506103b13660046128de565b600090815260066020526040902054151590565b3480156103d157600080fd5b506102c26103e0366004612c8e565b610bd2565b3480156103f157600080fd5b5061021d610400366004612cca565b6001600160a01b03166000908152600e602052604090205490565b6102c2610429366004612d26565b610c35565b34801561043a57600080fd5b50610443610ee4565b6040516102279796959493929190612ddb565b34801561046257600080fd5b506102c26104713660046128de565b610f6d565b34801561048257600080fd5b50610250610491366004612b54565b610fc1565b3480156104a257600080fd5b50610275610fec565b3480156104b757600080fd5b50600a5461021d565b3480156104cc57600080fd5b506102c26104db366004612e5b565b610ff9565b3480156104ec57600080fd5b5061021d600081565b34801561050157600080fd5b506102c2610510366004612e7e565b61105e565b34801561052157600080fd5b5061027560405180604001604052806015815260200174149d589e5cd8dbdc9957d058da1a595d995b595b9d605a1b81525081565b34801561056257600080fd5b506102506105713660046128de565b6000908152600d602052604090205460ff1690565b34801561059257600080fd5b506102c26105a1366004612eec565b611069565b3480156105b257600080fd5b5061021d6105c13660046128de565b60009081526006602052604090205490565b3480156105df57600080fd5b506102756105ee3660046128de565b611160565b3480156105ff57600080fd5b5061021d60008051602061371583398151915281565b34801561062157600080fd5b506102c2610630366004612b54565b61116b565b34801561064157600080fd5b50610250610650366004612f57565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561068a57600080fd5b506102c2610699366004612f81565b611190565b3480156106aa57600080fd5b5061021d6000805160206136f583398151915281565b3480156106cc57600080fd5b5061027560405180604001604052806005815260200164302e302e3160d81b81525081565b60006001600160a01b0383166107615760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b6000610784826111d5565b600b80546107a290612fe5565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce90612fe5565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b505050505081565b6060610784826111fa565b600080516020613715833981519152610846816112da565b61085083836112e7565b8160405161085e919061301f565b6040519081900381209084907fda84ca2183491f179a603e877b2cb058e42195041c2b9c53d746427e519a34df90600090a3505050565b6001600160a01b0385163314806108b157506108b18533610650565b6108cd5760405162461bcd60e51b81526004016107589061303b565b6108da8585858585611344565b5050505050565b6000828152600560205260409020600101546108fc816112da565b61090683836114e6565b505050565b6001600160a01b038116331461097b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610758565b610985828261156c565b5050565b6000610994816112da565b47806109e25760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e7420746f2077697468647261770000000000000000006044820152606401610758565b604051600090339083908381818185875af1925050503d8060008114610a24576040519150601f19603f3d011682016040523d82523d6000602084013e610a29565b606091505b5050905080610a715760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610758565b6040518281527f11e9d9f7a772129e26cb0560945658c96b41c42ac6712d233e20c894bfcd00fd9060200160405180910390a1505050565b60608151835114610b0e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610758565b600083516001600160401b03811115610b2957610b296128f7565b604051908082528060200260200182016040528015610b52578160200160208202803683370190505b50905060005b8451811015610bca57610b9d858281518110610b7657610b76613089565b6020026020010151858381518110610b9057610b90613089565b60200260200101516106f1565b828281518110610baf57610baf613089565b6020908102919091010152610bc3816130b5565b9050610b58565b509392505050565b6000805160206136f5833981519152610bea816112da565b610bf3826115d3565b81604051610c01919061301f565b604051908190038120907ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f690600090a25050565b610c3d6115df565b60018360400151511015610c855760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204e46542069647360881b6044820152606401610758565b600a543414610ccd5760405162461bcd60e51b815260206004820152601460248201527315dc9bdb99c81c185e5b595b9d08185b5bdd5b9d60621b6044820152606401610758565b6000610d927f66fe4d8b6c8e0542c70e2a244bf04681bb936b001f1be0f079a80e77158a847433600e6000336001600160a01b03166001600160a01b03168152602001908152602001600020548760400151604051602001610d2f91906130ce565b60405160208183030381529060405280519060200120604051602001610d7794939291909384526001600160a01b039290921660208401526040830152606082015260800190565b60405160208183030381529060405280519060200120611638565b9050610deb600080516020613715833981519152610de68386868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061166592505050565b611681565b83516001600160a01b03166000908152600e60205260408120805460019290610e15908490613104565b909155505060408401515160011015610e4f57610e4a84600001518560400151604051806020016040528060008152506116da565b610e8b565b610e8b84600001518560400151600081518110610e6e57610e6e613089565b6020026020010151604051806020016040528060008152506117ad565b836020015184600001516001600160a01b03167fff0a1dc048ef1a5e9e2845c6bb6cafd8b8531f3cb15368f4a708dec7d7bc789f8660400151604051610ed19190612c7b565b60405180910390a3506109066001600955565b600060608082808083610f187f5275627973636f72655f416368696576656d656e74000000000000000000001560036117e1565b610f437f302e302e3100000000000000000000000000000000000000000000000000000560046117e1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000805160206136f5833981519152610f85816112da565b600a8290556040518281527f66cbca4f3c64fecf1dcb9ce094abcf7f68c3450a1d4e3a8e917dd621edb4ebe09060200160405180910390a15050565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600c80546107a290612fe5565b6000805160206136f5833981519152611011816112da565b6000838152600d6020526040808220805460ff19168515159081179091559051909185917f784afb92b74f2c9ccd3cb1b9697580a90fadab59d6640bbb915d1637bfbbf0089190a3505050565b61098533838361188c565b600080516020613715833981519152611081816112da565b8382146110c15760405162461bcd60e51b815260206004820152600e60248201526d496e76616c696420706172616d7360901b6044820152606401610758565b60005b84811015611158576111468686838181106110e1576110e1613089565b905060200201358585848181106110fa576110fa613089565b905060200281019061110c9190613117565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061082e92505050565b80611150816130b5565b9150506110c4565b505050505050565b606061078482610823565b600082815260056020526040902060010154611186816112da565b610906838361156c565b6001600160a01b0385163314806111ac57506111ac8533610650565b6111c85760405162461bcd60e51b81526004016107589061303b565b6108da858585858561196c565b60006001600160e01b03198216637965db0b60e01b1480610784575061078482611aa4565b60008181526008602052604081208054606092919061121890612fe5565b80601f016020809104026020016040519081016040528092919081815260200182805461124490612fe5565b80156112915780601f1061126657610100808354040283529160200191611291565b820191906000526020600020905b81548152906001019060200180831161127457829003601f168201915b5050505050905060008151116112af576112aa83611af4565b6112d3565b6007816040516020016112c392919061315d565b6040516020818303038152906040525b9392505050565b6112e48133611681565b50565b60008281526008602052604090206112ff828261322a565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b61132b84610823565b60405161133891906128cb565b60405180910390a25050565b81518351146113655760405162461bcd60e51b8152600401610758906132e9565b6001600160a01b03841661138b5760405162461bcd60e51b815260040161075890613331565b3361139a818787878787611b88565b60005b84518110156114805760008582815181106113ba576113ba613089565b6020026020010151905060008583815181106113d8576113d8613089565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156114285760405162461bcd60e51b815260040161075890613376565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611465908490613104565b9250508190555050505080611479906130b5565b905061139d565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114d09291906133c0565b60405180910390a4611158818787878787611c4b565b6114f08282610fc1565b6109855760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556115283390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6115768282610fc1565b156109855760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6007610985828261322a565b6002600954036116315760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610758565b6002600955565b6000610784611645611daf565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006116748585611ee2565b91509150610bca81611f27565b61168b8282610fc1565b6109855761169881612071565b6116a3836020612083565b6040516020016116b49291906133ee565b60408051601f198184030181529082905262461bcd60e51b8252610758916004016128cb565b600082516001600160401b038111156116f5576116f56128f7565b60405190808252806020026020018201604052801561171e578160200160208202803683370190505b50905060005b83518160ff16101561179a5761174985858360ff1681518110610b9057610b90613089565b156117665760405162461bcd60e51b815260040161075890613463565b6001828260ff168151811061177d5761177d613089565b602090810291909101015280611792816134a4565b915050611724565b506117a78484838561221e565b50505050565b6117b783836106f1565b156117d45760405162461bcd60e51b815260040161075890613463565b6109068383600184612378565b606060ff83146117fb576117f483612458565b9050610784565b81805461180790612fe5565b80601f016020809104026020016040519081016040528092919081815260200182805461183390612fe5565b80156118805780601f1061185557610100808354040283529160200191611880565b820191906000526020600020905b81548152906001019060200180831161186357829003601f168201915b50505050509050610784565b816001600160a01b0316836001600160a01b0316036118ff5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610758565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166119925760405162461bcd60e51b815260040161075890613331565b33600061199e85612497565b905060006119ab85612497565b90506119bb838989858589611b88565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156119fc5760405162461bcd60e51b815260040161075890613376565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611a39908490613104565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611a99848a8a8a8a8a6124e2565b505050505050505050565b60006001600160e01b03198216636cdb3d1360e11b1480611ad557506001600160e01b031982166303a24d0760e21b145b8061078457506301ffc9a760e01b6001600160e01b0319831614610784565b606060028054611b0390612fe5565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2f90612fe5565b8015611b7c5780601f10611b5157610100808354040283529160200191611b7c565b820191906000526020600020905b815481529060010190602001808311611b5f57829003601f168201915b50505050509050919050565b60005b8351811015611c3c57600d6000858381518110611baa57611baa613089565b60209081029190910181015182528101919091526040016000205460ff16158015611bdd57506001600160a01b03861615155b15611c2a5760405162461bcd60e51b815260206004820152601760248201527f5468697320746f6b656e206f6e6c7920666f7220796f750000000000000000006044820152606401610758565b80611c34816130b5565b915050611b8b565b5061115886868686868661259d565b6001600160a01b0384163b156111585760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611c8f90899089908890889088906004016134c3565b6020604051808303816000875af1925050508015611cca575060408051601f3d908101601f19168201909252611cc791810190613521565b60015b611d7657611cd661353e565b806308c379a003611d0f5750611cea613559565b80611cf55750611d11565b8060405162461bcd60e51b815260040161075891906128cb565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610758565b6001600160e01b0319811663bc197c8160e01b14611da65760405162461bcd60e51b8152600401610758906135e2565b50505050505050565b6000306001600160a01b037f000000000000000000000000bdb018e21ad1e5756853fe008793a474d329991b16148015611e0857507f000000000000000000000000000000000000000000000000000000000000e70846145b15611e3257507fd740667e104bbcb8a353bc3a3271ce1a611775a125f3a74e83a4372941872e3590565b611eda604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f2d2ade98d6bb8fe401ca155fda7789f3500abdfa8c04ae14de3ff34b1cd8bb25918101919091527fae209a0b48f21c054280f2455d32cf309387644879d9acbd8ffc19916381188560608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b90565b6000808251604103611f185760208301516040840151606085015160001a611f0c87828585612716565b94509450505050611f20565b506000905060025b9250929050565b6000816004811115611f3b57611f3b61362a565b03611f435750565b6001816004811115611f5757611f5761362a565b03611fa45760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610758565b6002816004811115611fb857611fb861362a565b036120055760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610758565b60038160048111156120195761201961362a565b036112e45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610758565b60606107846001600160a01b03831660145b60606000612092836002613640565b61209d906002613104565b6001600160401b038111156120b4576120b46128f7565b6040519080825280601f01601f1916602001820160405280156120de576020820181803683370190505b509050600360fc1b816000815181106120f9576120f9613089565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061212857612128613089565b60200101906001600160f81b031916908160001a905350600061214c846002613640565b612157906001613104565b90505b60018111156121cf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061218b5761218b613089565b1a60f81b8282815181106121a1576121a1613089565b60200101906001600160f81b031916908160001a90535060049490941c936121c881613657565b905061215a565b5083156112d35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610758565b6001600160a01b0384166122445760405162461bcd60e51b81526004016107589061366e565b81518351146122655760405162461bcd60e51b8152600401610758906132e9565b3361227581600087878787611b88565b60005b84518110156123105783818151811061229357612293613089565b60200260200101516000808784815181106122b0576122b0613089565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546122f89190613104565b90915550819050612308816130b5565b915050612278565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516123619291906133c0565b60405180910390a46108da81600087878787611c4b565b6001600160a01b03841661239e5760405162461bcd60e51b81526004016107589061366e565b3360006123aa85612497565b905060006123b785612497565b90506123c883600089858589611b88565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906123f8908490613104565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611da6836000898989896124e2565b60606000612465836127da565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106124d1576124d1613089565b602090810291909101015292915050565b6001600160a01b0384163b156111585760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061252690899089908890889088906004016136af565b6020604051808303816000875af1925050508015612561575060408051601f3d908101601f1916820190925261255e91810190613521565b60015b61256d57611cd661353e565b6001600160e01b0319811663f23a6e6160e01b14611da65760405162461bcd60e51b8152600401610758906135e2565b6001600160a01b0385166126245760005b8351811015612622578281815181106125c9576125c9613089565b6020026020010151600660008684815181106125e7576125e7613089565b60200260200101518152602001908152602001600020600082825461260c9190613104565b9091555061261b9050816130b5565b90506125ae565b505b6001600160a01b0384166111585760005b8351811015611da657600084828151811061265257612652613089565b60200260200101519050600084838151811061267057612670613089565b60200260200101519050600060066000848152602001908152602001600020549050818110156126f35760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b6064820152608401610758565b6000928352600660205260409092209103905561270f816130b5565b9050612635565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561274d57506000905060036127d1565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156127a1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127ca576000600192509250506127d1565b9150600090505b94509492505050565b600060ff8216601f81111561078457604051632cd44ac360e21b815260040160405180910390fd5b80356001600160a01b038116811461281957600080fd5b919050565b6000806040838503121561283157600080fd5b61283a83612802565b946020939093013593505050565b6001600160e01b0319811681146112e457600080fd5b60006020828403121561287057600080fd5b81356112d381612848565b60005b8381101561289657818101518382015260200161287e565b50506000910152565b600081518084526128b781602086016020860161287b565b601f01601f19169290920160200192915050565b6020815260006112d3602083018461289f565b6000602082840312156128f057600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b606081018181106001600160401b038211171561292c5761292c6128f7565b60405250565b601f8201601f191681016001600160401b0381118282101715612957576129576128f7565b6040525050565b600082601f83011261296f57600080fd5b81356001600160401b03811115612988576129886128f7565b60405161299f601f8301601f191660200182612932565b8181528460208386010111156129b457600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156129e457600080fd5b8235915060208301356001600160401b03811115612a0157600080fd5b612a0d8582860161295e565b9150509250929050565b60006001600160401b03821115612a3057612a306128f7565b5060051b60200190565b600082601f830112612a4b57600080fd5b81356020612a5882612a17565b604051612a658282612932565b83815260059390931b8501820192828101915086841115612a8557600080fd5b8286015b84811015612aa05780358352918301918301612a89565b509695505050505050565b600080600080600060a08688031215612ac357600080fd5b612acc86612802565b9450612ada60208701612802565b935060408601356001600160401b0380821115612af657600080fd5b612b0289838a01612a3a565b94506060880135915080821115612b1857600080fd5b612b2489838a01612a3a565b93506080880135915080821115612b3a57600080fd5b50612b478882890161295e565b9150509295509295909350565b60008060408385031215612b6757600080fd5b82359150612b7760208401612802565b90509250929050565b60008060408385031215612b9357600080fd5b82356001600160401b0380821115612baa57600080fd5b818501915085601f830112612bbe57600080fd5b81356020612bcb82612a17565b604051612bd88282612932565b83815260059390931b8501820192828101915089841115612bf857600080fd5b948201945b83861015612c1d57612c0e86612802565b82529482019490820190612bfd565b96505086013592505080821115612c3357600080fd5b50612a0d85828601612a3a565b600081518084526020808501945080840160005b83811015612c7057815187529582019590820190600101612c54565b509495945050505050565b6020815260006112d36020830184612c40565b600060208284031215612ca057600080fd5b81356001600160401b03811115612cb657600080fd5b612cc28482850161295e565b949350505050565b600060208284031215612cdc57600080fd5b6112d382612802565b60008083601f840112612cf757600080fd5b5081356001600160401b03811115612d0e57600080fd5b602083019150836020828501011115611f2057600080fd5b600080600060408486031215612d3b57600080fd5b83356001600160401b0380821115612d5257600080fd5b9085019060608288031215612d6657600080fd5b604051612d728161290d565b612d7b83612802565b815260208301356020820152604083013582811115612d9957600080fd5b612da589828601612a3a565b60408301525094506020860135915080821115612dc157600080fd5b50612dce86828701612ce5565b9497909650939450505050565b60ff60f81b8816815260e060208201526000612dfa60e083018961289f565b8281036040840152612e0c818961289f565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501529050612e3d8185612c40565b9a9950505050505050505050565b8035801515811461281957600080fd5b60008060408385031215612e6e57600080fd5b82359150612b7760208401612e4b565b60008060408385031215612e9157600080fd5b612e9a83612802565b9150612b7760208401612e4b565b60008083601f840112612eba57600080fd5b5081356001600160401b03811115612ed157600080fd5b6020830191508360208260051b8501011115611f2057600080fd5b60008060008060408587031215612f0257600080fd5b84356001600160401b0380821115612f1957600080fd5b612f2588838901612ea8565b90965094506020870135915080821115612f3e57600080fd5b50612f4b87828801612ea8565b95989497509550505050565b60008060408385031215612f6a57600080fd5b612f7383612802565b9150612b7760208401612802565b600080600080600060a08688031215612f9957600080fd5b612fa286612802565b9450612fb060208701612802565b9350604086013592506060860135915060808601356001600160401b03811115612fd957600080fd5b612b478882890161295e565b600181811c90821680612ff957607f821691505b60208210810361301957634e487b7160e01b600052602260045260246000fd5b50919050565b6000825161303181846020870161287b565b9190910192915050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016130c7576130c761309f565b5060010190565b815160009082906020808601845b838110156130f8578151855293820193908201906001016130dc565b50929695505050505050565b808201808211156107845761078461309f565b6000808335601e1984360301811261312e57600080fd5b8301803591506001600160401b0382111561314857600080fd5b602001915036819003821315611f2057600080fd5b600080845461316b81612fe5565b600182811680156131835760018114613198576131c7565b60ff19841687528215158302870194506131c7565b8860005260208060002060005b858110156131be5781548a8201529084019082016131a5565b50505082870194505b5050505083516131db81836020880161287b565b01949350505050565b601f82111561090657600081815260208120601f850160051c8101602086101561320b5750805b601f850160051c820191505b8181101561115857828155600101613217565b81516001600160401b03811115613243576132436128f7565b613257816132518454612fe5565b846131e4565b602080601f83116001811461328c57600084156132745750858301515b600019600386901b1c1916600185901b178555611158565b600085815260208120601f198616915b828110156132bb5788860151825594840194600190910190840161329c565b50858210156132d95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006133d36040830185612c40565b82810360208401526133e58185612c40565b95945050505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161342681601785016020880161287b565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161345781602884016020880161287b565b01602801949350505050565b60208082526021908201527f596f7520616c72656164792068617665207468697320616368696576656d656e6040820152601d60fa1b606082015260800190565b600060ff821660ff81036134ba576134ba61309f565b60010192915050565b6001600160a01b0386811682528516602082015260a0604082018190526000906134ef90830186612c40565b82810360608401526135018186612c40565b90508281036080840152613515818561289f565b98975050505050505050565b60006020828403121561353357600080fd5b81516112d381612848565b600060033d1115611edf5760046000803e5060005160e01c90565b600060443d10156135675790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561359657505050505090565b82850191508151818111156135ae5750505050505090565b843d87010160208285010111156135c85750505050505090565b6135d760208286010187612932565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b80820281158282048414176107845761078461309f565b6000816136665761366661309f565b506000190190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906136e99083018461289f565b97965050505050505056fe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9299f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220ec68dbbbdba273db2b01545b5e76e94bf83437445341aea81c9e91838dcf43f764736f6c63430008130033" + }, + { + "address": "0x47d9237e68ffda57720f28557236a292afec6839", + "nonce": 31, + "balance": "0x0000000000000000000000000000000000000000000000000010b9d786aea285", + "code": "0x" + }, + { + "address": "0x2996158f2439966cea731d6d3c77d4a8696b8f1a", + "nonce": 16, + "balance": "0x000000000000000000000000000000000000000000000000002a5a8bf5e429bd", + "code": "0x" + }, + { + "address": "0x45f1a95a4d3f3836523f5c83673c797f4d4d263b", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106101345760003560e01c80638c7ae0fc116100ab578063c213dc2b1161006f578063c213dc2b14610326578063cbed8b9c14610346578063d7d3c3b914610366578063f2fde38b14610386578063f887ea40146103a6578063fc869108146103bb57610134565b80638c7ae0fc1461029c5780638da5cb5b146102be5780638e3b5d6a146102d357806396aae4af14610300578063be9d40ac1461031357610134565b806310ddb137116100fd57806310ddb137146102015780633cef94b91461022157806342d65a8d1461023457806343b180091461025457806351156e7314610274578063715018a61461028757610134565b80621d356714610139578063024220541461015b57806307968db11461019157806307e0db17146101b35780630a512369146101d3575b600080fd5b34801561014557600080fd5b50610159610154366004611e98565b6103db565b005b34801561016757600080fd5b5061017b61017636600461218e565b61097d565b6040516101889190612be6565b60405180910390f35b34801561019d57600080fd5b506101a661099a565b6040516101889190612705565b3480156101bf57600080fd5b506101596101ce366004611d99565b6109be565b3480156101df57600080fd5b506101f36101ee3660046121c4565b610a9a565b604051610188929190612bef565b34801561020d57600080fd5b5061015961021c366004611d99565b610cc0565b61015961022f3660046120d6565b610d6e565b34801561024057600080fd5b5061015961024f366004611e48565b610e01565b34801561026057600080fd5b5061015961026f366004611e48565b610eea565b610159610282366004611fe2565b610fb4565b34801561029357600080fd5b50610159611051565b3480156102a857600080fd5b506102b16110b5565b6040516101889190612732565b3480156102ca57600080fd5b506101a66110be565b3480156102df57600080fd5b506102f36102ee366004611d99565b6110cd565b604051610188919061273d565b61015961030e366004611db3565b611167565b610159610321366004611f89565b611222565b34801561033257600080fd5b50610159610341366004611d61565b6112de565b34801561035257600080fd5b50610159610361366004611f1d565b611353565b34801561037257600080fd5b50610159610381366004611d21565b611442565b34801561039257600080fd5b506101596103a1366004611d05565b611524565b3480156103b257600080fd5b506101a6611626565b3480156103c757600080fd5b506101596103d6366004612276565b61164a565b336001600160a01b037f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7161461042c5760405162461bcd60e51b815260040161042390612787565b60405180910390fd5b600160008561ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900490508351148015610499575061ffff8416600090815260016020526040908190209051610487919061263a565b60405180910390208380519060200120145b6104b55760405162461bcd60e51b815260040161042390612812565b602081015160ff81166001141561061c576000806000806000806000888060200190518101906104e5919061241e565b9750975097509750975097509750506000601483015190507f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75906001600160a01b031663a18fa8048e8a8a896040518563ffffffff1660e01b815260040161054f9493929190612bc0565b600060405180830381600087803b15801561056957600080fd5b505af115801561057d573d6000803e3d6000fd5b505050507f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75906001600160a01b0316632f9255558e8e8e8c8c8c888c8b6040518a63ffffffff1660e01b81526004016105dd999897969594939291906129cb565b600060405180830381600087803b1580156105f757600080fd5b505af115801561060b573d6000803e3d6000fd5b505050505050505050505050610976565b60ff8116600214156106d45760008060008480602001905181019061064191906122e2565b935093509350507f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75906001600160a01b031663a18fa804898585856040518563ffffffff1660e01b815260040161069a9493929190612bc0565b600060405180830381600087803b1580156106b457600080fd5b505af11580156106c8573d6000803e3d6000fd5b50505050505050610976565b60ff81166003141561082f57600080600080600080878060200190518101906106fd91906123a6565b965096509650965096509650506000601482015190507f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75906001600160a01b031663a18fa8048d8989896040518563ffffffff1660e01b81526004016107659493929190612bc0565b600060405180830381600087803b15801561077f57600080fd5b505af1158015610793573d6000803e3d6000fd5b5050604051630fee425360e31b81526001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e7590169250637f72129891506107f1908f908f908f908d908d9089908d908d90600401612968565b600060405180830381600087803b15801561080b57600080fd5b505af115801561081f573d6000803e3d6000fd5b5050505050505050505050610976565b60ff81166004141561097657600080600080600086806020019051810190610857919061232b565b95509550955095509550507f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75906001600160a01b031663a18fa8048b8787876040518563ffffffff1660e01b81526004016108b49493929190612bc0565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b5050604051630403bce560e01b81526001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e7590169250630403bce5915061093e908d908d908d908b908b908a908a90600401612a4e565b600060405180830381600087803b15801561095857600080fd5b505af115801561096c573d6000803e3d6000fd5b5050505050505050505b5050505050565b600260209081526000928352604080842090915290825290205481565b7f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd781565b6109c6611705565b6001600160a01b03166109d76110be565b6001600160a01b031614610a20576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6040516307e0db1760e01b81526001600160a01b037f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd716906307e0db1790610a6c9084906004016128c1565b600060405180830381600087803b158015610a8657600080fd5b505af1158015610976573d6000803e3d6000fd5b60408051602080820183526000808352835180850190945260018085529184018290529283929160ff8b161415610b3f5760006040518060c001604052806001815260200160018152602001600181526020016001815260200160018152602001600181525090506001600080600085858f8f8f8f604051602001610b289a99989796959493929190612bfd565b604051602081830303815290604052925050610bec565b60ff8a1660021415610b7a57600260008083604051602001610b649493929190612c78565b6040516020818303038152906040529150610bec565b60ff8a1660031415610ba8576003600080836000808e8e604051602001610b64989796959493929190612ce4565b60ff8a1660041415610bd45760046000808360008d8d604051602001610b649796959493929190612c9f565b60405162461bcd60e51b815260040161042390612849565b6000610bf98c8c88611709565b90507f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd76001600160a01b03166340a7bb108d3086600360009054906101000a900460ff16866040518663ffffffff1660e01b8152600401610c5e9594939291906128ed565b604080518083038186803b158015610c7557600080fd5b505afa158015610c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cad91906122a3565b9450945050505097509795505050505050565b610cc8611705565b6001600160a01b0316610cd96110be565b6001600160a01b031614610d22576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6040516310ddb13760e01b81526001600160a01b037f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd716906310ddb13790610a6c9084906004016128c1565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75901614610db65760405162461bcd60e51b81526004016104239061288c565b60006004898988888888604051602001610dd69796959493929190612d67565b6040516020818303038152906040529050610df58a600489858561179a565b50505050505050505050565b610e09611705565b6001600160a01b0316610e1a6110be565b6001600160a01b031614610e63576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd716906342d65a8d90610eb390869086908690600401612941565b600060405180830381600087803b158015610ecd57600080fd5b505af1158015610ee1573d6000803e3d6000fd5b50505050505050565b610ef2611705565b6001600160a01b0316610f036110be565b6001600160a01b031614610f4c576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b61ffff83166000908152600160208190526040909120546002918116156101000260001901160415610f905760405162461bcd60e51b815260040161042390612750565b61ffff83166000908152600160205260409020610fae9083836119f4565b50505050565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e75901614610ffc5760405162461bcd60e51b81526004016104239061288c565b8451604051600091611024916001918e918e91908d908d908c908c908c908c90602001612de5565b60405160208183030381529060405290506110438c60018b898561179a565b505050505050505050505050565b611059611705565b6001600160a01b031661106a6110be565b6001600160a01b0316146110b3576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b565b60035460ff1681565b6000546001600160a01b031690565b60016020818152600092835260409283902080548451600294821615610100026000190190911693909304601f810183900483028401830190945283835291929083018282801561115f5780601f106111345761010080835404028352916020019161115f565b820191906000526020600020905b81548152906001019060200180831161114257829003601f168201915b505050505081565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759016146111af5760405162461bcd60e51b81526004016104239061288c565b60606000806000806000868060200190518101906111cd9190612533565b9550955095509550955050600384868b8686866040516020016111f69796959493929190612da3565b6040516020818303038152906040529550505050505061121a86600387868561179a565b505050505050565b336001600160a01b037f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e7590161461126a5760405162461bcd60e51b81526004016104239061288c565b600060028585846040516020016112849493929190612d42565b604051602081830303815290604052905060006040518060600160405280600081526020016000815260200160405180604001604052806002815260200161060f60f31b8152508152509050610ee187600286848661179a565b6112e6611705565b6001600160a01b03166112f76110be565b6001600160a01b031614611340576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6003805460ff1916911515919091179055565b61135b611705565b6001600160a01b031661136c6110be565b6001600160a01b0316146113b5576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6040516332fb62e760e21b81526001600160a01b037f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7169063cbed8b9c906114099088908890889088908890600401612b87565b600060405180830381600087803b15801561142357600080fd5b505af1158015611437573d6000803e3d6000fd5b505050505050505050565b61144a611705565b6001600160a01b031661145b6110be565b6001600160a01b0316146114a4576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b3906114d29085908590600401612719565b602060405180830381600087803b1580156114ec57600080fd5b505af1158015611500573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fae9190611d7d565b61152c611705565b6001600160a01b031661153d6110be565b6001600160a01b031614611586576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6001600160a01b0381166115cb5760405162461bcd60e51b8152600401808060200182810382526026815260200180612ef26026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f0000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e759081565b611652611705565b6001600160a01b03166116636110be565b6001600160a01b0316146116ac576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b60018260ff16101580156116c4575060048260ff1611155b6116e05760405162461bcd60e51b8152600401610423906127db565b61ffff909216600090815260026020908152604080832060ff90941683529290522055565b3390565b60408082015160140151825161ffff861660009081526002602090815284822060ff8816835290529283205460609384939290916117469161192c565b90506000856020015111801561176457506001600160a01b03821615155b156117835761177c818660200151876040015161198d565b925061178f565b61178c816119c3565b92505b509095945050505050565b60006117a7868685611709565b905060007f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd76001600160a01b0316637a14574888306040518363ffffffff1660e01b81526004016117f99291906128d0565b60206040518083038186803b15801561181157600080fd5b505afa158015611825573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184991906122c6565b61ffff8816600090815260016020819052604091829020915162c5803160e81b8152920192506001600160a01b037f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7169163c58031009134916118b8918c9189908c9030908b90600401612aac565b6000604051808303818588803b1580156118d157600080fd5b505af11580156118e5573d6000803e3d6000fd5b50505050507f8d3ee0df6a4b7e82a7f20a763f1c6826e6176323e655af64f32318827d2112d4868260405161191b929190612e0f565b60405180910390a150505050505050565b600082820183811015611986576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6040516060906002906119aa9082908790879087906020016126c7565b6040516020818303038152906040529150509392505050565b6040516060906001906119dc90829085906020016126aa565b6040516020818303038152906040529150505b919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611a2a5760008555611a70565b82601f10611a435782800160ff19823516178555611a70565b82800160010185558215611a70579182015b82811115611a70578235825591602001919060010190611a55565b50611a7c929150611a80565b5090565b5b80821115611a7c5760008155600101611a81565b80356119ef81612ea7565b60008083601f840112611ab1578182fd5b5081356001600160401b03811115611ac7578182fd5b602083019150836020828501011115611adf57600080fd5b9250929050565b600082601f830112611af6578081fd5b8135611b09611b0482612e4e565b612e2b565b818152846020838601011115611b1d578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112611b47578081fd5b8151611b55611b0482612e4e565b818152846020838601011115611b69578283fd5b611b7a826020830160208701612e7b565b949350505050565b600060408284031215611b93578081fd5b604051604081018181106001600160401b0382111715611baf57fe5b604052823581526020928301359281019290925250919050565b600060408284031215611bda578081fd5b604051604081018181106001600160401b0382111715611bf657fe5b604052825181526020928301519281019290925250919050565b600060c08284031215611c21578081fd5b60405160c081018181106001600160401b0382111715611c3d57fe5b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b600060608284031215611c93578081fd5b604051606081016001600160401b038282108183111715611cb057fe5b8160405282935084358352602085013560208401526040850135915080821115611cd957600080fd5b50611ce685828601611ae6565b6040830152505092915050565b803561ffff811681146119ef57600080fd5b600060208284031215611d16578081fd5b813561198681612ea7565b600080600060608486031215611d35578182fd5b8335611d4081612ea7565b92506020840135611d5081612ea7565b929592945050506040919091013590565b600060208284031215611d72578081fd5b813561198681612ebf565b600060208284031215611d8e578081fd5b815161198681612ebf565b600060208284031215611daa578081fd5b61198682611cf3565b600080600080600060c08688031215611dca578283fd5b611dd386611cf3565b94506020860135611de381612ea7565b9350611df28760408801611b82565b925060808601356001600160401b0380821115611e0d578283fd5b611e1989838a01611c82565b935060a0880135915080821115611e2e578283fd5b50611e3b88828901611ae6565b9150509295509295909350565b600080600060408486031215611e5c578081fd5b611e6584611cf3565b925060208401356001600160401b03811115611e7f578182fd5b611e8b86828701611aa0565b9497909650939450505050565b60008060008060808587031215611ead578182fd5b611eb685611cf3565b935060208501356001600160401b0380821115611ed1578384fd5b611edd88838901611ae6565b945060408701359150611eef82612ecd565b90925060608601359080821115611f04578283fd5b50611f1187828801611ae6565b91505092959194509250565b600080600080600060808688031215611f34578283fd5b611f3d86611cf3565b9450611f4b60208701611cf3565b93506040860135925060608601356001600160401b03811115611f6c578182fd5b611f7888828901611aa0565b969995985093965092949392505050565b600080600080600060c08688031215611fa0578283fd5b611fa986611cf3565b945060208601359350604086013592506060860135611fc781612ea7565b9150611fd68760808801611b82565b90509295509295909350565b60008060008060008060008060008060006101e08c8e031215612003578889fd5b61200c8c611cf3565b9a5060208c0135995060408c0135985061202860608d01611a95565b97506120378d60808e01611b82565b96506120468d60c08e01611c10565b95506001600160401b03806101808e01351115612061578586fd5b6120728e6101808f01358f01611c82565b9550806101a08e01351115612085578485fd5b6120968e6101a08f01358f01611aa0565b90955093506101c08d01358110156120ac578283fd5b506120be8d6101c08e01358e01611aa0565b81935080925050509295989b509295989b9093969950565b60008060008060008060008060006101208a8c0312156120f4578283fd5b6120fd8a611cf3565b985060208a0135975060408a0135965060608a013561211b81612ea7565b955061212a8b60808c01611b82565b945060c08a0135935060e08a01356001600160401b038082111561214c578485fd5b6121588d838e01611aa0565b90955093506101008c0135915080821115612171578283fd5b5061217e8c828d01611c82565b9150509295985092959850929598565b600080604083850312156121a0578182fd5b6121a983611cf3565b915060208301356121b981612ee2565b809150509250929050565b600080600080600080600060a0888a0312156121de578081fd5b6121e788611cf3565b965060208801356121f781612ee2565b955060408801356001600160401b0380821115612212578283fd5b61221e8b838c01611aa0565b909750955060608a0135915080821115612236578283fd5b6122428b838c01611aa0565b909550935060808a013591508082111561225a578283fd5b506122678a828b01611c82565b91505092959891949750929550565b60008060006060848603121561228a578081fd5b61229384611cf3565b92506020840135611d5081612ee2565b600080604083850312156122b5578182fd5b505080516020909101519092909150565b6000602082840312156122d7578081fd5b815161198681612ecd565b60008060008060a085870312156122f7578182fd5b845161230281612ee2565b60208601516040870151919550935091506123208660608701611bc9565b905092959194509250565b60008060008060008060e08789031215612343578384fd5b865161234e81612ee2565b602088015160408901519197509550935061236c8860608901611bc9565b925060a0870151915060c08701516001600160401b0381111561238d578182fd5b61239989828a01611b37565b9150509295509295509295565b6000806000806000806000610100888a0312156123c1578081fd5b87516123cc81612ee2565b602089015160408a0151919850965094506123ea8960608a01611bc9565b935060a0880151925060c0880151915060e08801516001600160401b03811115612412578182fd5b6122678a828b01611b37565b600080600080600080600080888a036101c081121561243b578283fd5b895161244681612ee2565b8099505060208a0151975060408a0151965060608a0151955061246c8b60808c01611bc9565b945060c060bf198201121561247f578283fd5b5060405160c081016001600160401b03828210818311171561249d57fe5b604082815260c08d0151845260e08d015160208501526101008d0151908401526101208c015160608401526101408c015160808401526101608c015160a08401526101808c0151929550808311156124f3578485fd5b6124ff8d848e01611b37565b94506101a08c0151925080831115612515578384fd5b50506125238b828c01611b37565b9150509295985092959890939650565b60008060008060008060c0878903121561254b578384fd5b865161255681612ee2565b809650506020870151945060408701519350606087015192506080870151915060a08701516001600160401b0381111561238d578182fd5b6001600160a01b03169052565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526125dd816020860160208601612e7b565b601f01601f19169290920160200192915050565b80518252602090810151910152565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b600080835460018082166000811461265957600181146126705761269f565b60ff198316865260028304607f168601935061269f565b600283048786526020808720875b838110156126975781548a82015290850190820161267e565b505050860193505b509195945050505050565b60f09290921b6001600160f01b0319168252600282015260220190565b600061ffff60f01b8660f01b16825284600283015283602283015282516126f5816042850160208701612e7b565b9190910160420195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b60006020825261198660208301846125c5565b6020808252601d908201527f53746172676174653a2042726964676520616c72656164792073657421000000604082015260600190565b60208082526034908201527f53746172676174653a206f6e6c79204c617965725a65726f20656e64706f696e604082015273742063616e2063616c6c206c7a5265636569766560601b606082015260800190565b6020808252601f908201527f53746172676174653a20696e76616c6964205f66756e6374696f6e5479706500604082015260600190565b6020808252601f908201527f53746172676174653a2062726964676520646f6573206e6f74206d6174636800604082015260600190565b60208082526023908201527f53746172676174653a20756e737570706f727465642066756e6374696f6e207460408201526279706560e81b606082015260800190565b6020808252818101527f53746172676174653a2063616c6c6572206d75737420626520526f757465722e604082015260600190565b61ffff91909116815260200190565b61ffff9290921682526001600160a01b0316602082015260400190565b61ffff861681526001600160a01b038516602082015260a06040820181905260009061291b908301866125c5565b8415156060840152828103608084015261293581856125c5565b98975050505050505050565b600061ffff851682526040602083015261295f60408301848661259b565b95945050505050565b600061010061ffff8b1683528060208401526129868184018b6125c5565b6001600160401b039990991660408401525050606081019590955260808501939093526001600160a01b039190911660a084015260c083015260e09091015292915050565b60006101c061ffff8c1683528060208401526129e98184018c6125c5565b6001600160401b038b166040850152606084018a90526080840189905260a084018890526001600160a01b03871660c08501529050612a2b60e0840186612600565b8281036101a0840152612a3e81856125c5565b9c9b505050505050505050505050565b600061ffff8916825260e06020830152612a6b60e08301896125c5565b6001600160401b03881660408401528660608401528560808401528460a084015282810360c0840152612a9e81856125c5565b9a9950505050505050505050565b600060c0820161ffff89168352602060c081850152828954600180821660008114612ade5760018114612afd57612b35565b60028304607f16865260ff19831660e089015261010088019350612b35565b60028304808752612b0d8e612e6f565b885b82811015612b2b5781548b820160e00152908401908701612b0f565b8a0160e001955050505b5050508481036040860152612b4a818a6125c5565b92505050612b5b606084018761258e565b612b68608084018661258e565b82810360a0840152612b7a81856125c5565b9998505050505050505050565b600061ffff808816835280871660208401525084604083015260806060830152612bb560808301848661259b565b979650505050505050565b61ffff85168152602081018490526040810183905260a0810161295f60608301846125f1565b90815260200190565b918252602082015260400190565b60006101c060ff8d16835260ff8c16602084015260ff8b16604084015260ff8a166060840152612c30608084018a6125f1565b612c3d60c0840189612600565b80610180840152612c51818401878961259b565b90508281036101a0840152612c6781858761259b565b9d9c50505050505050505050505050565b60ff858116825284811660208301528316604082015260a0810161295f60608301846125f1565b600060ff8916825260ff8816602083015260ff87166040830152612cc660608301876125f1565b60ff851660a083015260e060c0830152612b7a60e08301848661259b565b600061010060ff8b16835260ff8a16602084015260ff89166040840152612d0e60608401896125f1565b60ff871660a084015260ff861660c08401528060e0840152612d33818401858761259b565b9b9a5050505050505050505050565b60ff85168152602081018490526040810183905260a0810161295f60608301846125f1565b600060ff89168252876020830152866040830152612d8860608301876125f1565b8460a083015260e060c0830152612b7a60e08301848661259b565b600061010060ff8a168352886020840152876040840152612dc760608401886125f1565b8560a08401528460c08401528060e0840152612a9e818401856125c5565b60006101c060ff8d1683528b60208401528a6040840152896060840152612c30608084018a6125f1565b60ff9290921682526001600160401b0316602082015260400190565b6040518181016001600160401b0381118282101715612e4657fe5b604052919050565b60006001600160401b03821115612e6157fe5b50601f01601f191660200190565b60009081526020902090565b60005b83811015612e96578181015183820152602001612e7e565b83811115610fae5750506000910152565b6001600160a01b0381168114612ebc57600080fd5b50565b8015158114612ebc57600080fd5b6001600160401b0381168114612ebc57600080fd5b60ff81168114612ebc57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122081b208ef3a70f60d81a49658fbff4dc345614ee3bbed460c07a0badc17d37f1264736f6c63430007060033" + }, + { + "address": "0x09c8b20f01aeb2bae2f3d1c62dfe1a0f61d91348", + "nonce": 21, + "balance": "0x000000000000000000000000000000000000000000000000003c4e044609de8b", + "code": "0x" + }, + { + "address": "0x5c391df9aa515a475ef687a94f48c99b694eaf0a", + "nonce": 3, + "balance": "0x000000000000000000000000000000000000000000000000001293c9ab5d6ae7", + "code": "0x" + }, + { + "address": "0xfa6bbc8899ad07b738f27ad83fffce2a7c01f108", + "nonce": 8, + "balance": "0x000000000000000000000000000000000000000000000000001146577df66215", + "code": "0x" + }, + { + "address": "0x12af3ec993ec5d5bd789b3e989c9e95a2f6c586d", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c806353561915116100975780638da5cb5b116100665780638da5cb5b14610242578063d4de871c14610253578063e74b981b14610278578063f2fde38b1461028b57600080fd5b80635356191514610201578063546a3c9e146102145780635f137b3f14610227578063715018a61461023a57600080fd5b80634190a660116100d35780634190a660146101a85780634625a94d146101bd57806346904840146101d05780634ccb20c0146101f057600080fd5b80630a992e0c1461010557806313809b831461012e5780632fa5752014610153578063389feeab14610178575b600080fd5b610118610113366004610816565b61029e565b604051610125919061084c565b60405180910390f35b61011861013c366004610816565b60046020526000908152604090205462ffffff1681565b61011861016136600461086f565b60016020526000908152604090205462ffffff1681565b610118610186366004610890565b600260209081526000928352604080842090915290825290205462ffffff1681565b6101bb6101b63660046108e3565b610365565b005b6101186101cb366004610968565b6103fe565b6005546101e3906001600160a01b031681565b6040516101259190610a07565b6005546001600160a01b03166101e3565b6101bb61020f366004610a15565b6104dc565b6101bb610222366004610a37565b610574565b6101bb6102353660046108e3565b610628565b6101bb6106ab565b6000546001600160a01b03166101e3565b61011861026136600461086f565b60036020526000908152604090205462ffffff1681565b6101bb610286366004610816565b6106bf565b6101bb610299366004610816565b610723565b6001600160a01b03811660009081526004602052604081205462ffffff169081900361034a5760036000836001600160a01b031663b1dd61b66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032a9190610a92565b61ffff16815260208101919091526040016000205462ffffff1692915050565b62ffffff8181161461035c578061035f565b60005b92915050565b61036d61075d565b620186a062ffffff8216111561039e5760405162461bcd60e51b815260040161039590610ad8565b60405180910390fd5b61ffff821660008181526003602052604090819020805462ffffff191662ffffff8516179055517f61872494e8d71fce11c9bbe3dccd1397924c2286652fd1df919466e097a91c29906103f290849061084c565b60405180910390a25050565b6001600160a01b03808516600090815260026020908152604080832093871683529290529081205462ffffff16908190036104ba5760016000886001600160a01b031663b1dd61b66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104999190610a92565b61ffff16815260208101919091526040016000205462ffffff1690506104d2565b62ffffff818116146104cc57806104cf565b60005b90505b9695505050505050565b6104e461075d565b62ffffff81811614806104ff5750620186a062ffffff821611155b61051b5760405162461bcd60e51b815260040161039590610ad8565b6001600160a01b03821660008181526004602052604090819020805462ffffff191662ffffff8516179055517fbe5efbf26461d15e902f8139b0c620e154419b084f850bfd44a5f47de8b4e936906103f290849061084c565b61057c61075d565b62ffffff8181161480610596575061271062ffffff821611155b6105b25760405162461bcd60e51b815260040161039590610ad8565b6001600160a01b0383811660008181526002602090815260408083209487168084529490915290819020805462ffffff191662ffffff8616179055517faea7118d3afc16a09b2f7431f1541737392de863febea6ad2a5688da86fb91f09061061b90859061084c565b60405180910390a3505050565b61063061075d565b61271062ffffff821611156106575760405162461bcd60e51b815260040161039590610ad8565b61ffff821660008181526001602052604090819020805462ffffff191662ffffff8516179055517f3720b8426e46454f51262d464ce706a163ff74ddb8fe1cc7793e246be2cfdd97906103f290849061084c565b6106b361075d565b6106bd6000610796565b565b6106c761075d565b6005546040516001600160a01b038084169216907fd9d6b85b6d670cd443496fc6d03390f739bbff47f96a8e33fb0cdd52ad26f5c290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b61072b61075d565b6001600160a01b0381166107515760405162461bcd60e51b815260040161039590610ae8565b61075a81610796565b50565b336107706000546001600160a01b031690565b6001600160a01b0316146106bd5760405162461bcd60e51b815260040161039590610b64565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b03821661035f565b610800816107e6565b811461075a57600080fd5b803561035f816107f7565b60006020828403121561082b5761082b600080fd5b6000610837848461080b565b949350505050565b62ffffff81165b82525050565b6020810161035f828461083f565b61ffff8116610800565b803561035f8161085a565b60006020828403121561088457610884600080fd5b60006108378484610864565b600080604083850312156108a6576108a6600080fd5b60006108b2858561080b565b92505060206108c38582860161080b565b9150509250929050565b62ffffff8116610800565b803561035f816108cd565b600080604083850312156108f9576108f9600080fd5b60006109058585610864565b92505060206108c3858286016108d8565b60008083601f84011261092b5761092b600080fd5b50813567ffffffffffffffff81111561094657610946600080fd5b60208301915083600182028301111561096157610961600080fd5b9250929050565b60008060008060008060a0878903121561098457610984600080fd5b6000610990898961080b565b96505060206109a189828a0161080b565b95505060406109b289828a0161080b565b94505060606109c389828a0161080b565b935050608087013567ffffffffffffffff8111156109e3576109e3600080fd5b6109ef89828a01610916565b92509250509295509295509295565b610846816107e6565b6020810161035f82846109fe565b60008060408385031215610a2b57610a2b600080fd5b6000610905858561080b565b600080600060608486031215610a4f57610a4f600080fd5b6000610a5b868661080b565b9350506020610a6c8682870161080b565b9250506040610a7d868287016108d8565b9150509250925092565b805161035f8161085a565b600060208284031215610aa757610aa7600080fd5b60006108378484610a87565b600b81526000602082016a496e76616c69642066656560a81b815291505b5060200190565b6020808252810161035f81610ab3565b6020808252810161035f81602681527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160208201526564647265737360d01b604082015260600190565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000610ad1565b6020808252810161035f81610b3256fea26469706673582212204dfa76eed177d716368dce4f9889aedb52e399635145a171bb445d14b732c80864736f6c634300080f0033" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106102045760003560e01c806309beabc1146102095780630e1552f0146102395780631621835f1461026c57806316dc165b146102fe57806317fdacb9146103115780631aae2e5514610326578063252c09d71461033d5780632c4812521461037757806333005cd51461039f5780633c8a7d8d146103aa578063490e6cbc146103bd5780634cd70e91146103d0578063537c2d8e14610402578063544e705714610422578063588e59ae1461044d57806358c51ce61461045657806359dd14361461046a57806362c944ca1461047d57806362ccaafd146104905780636ad1718f146104e45780636d01843b146104f75780636f73f0061461051157806375c0e0d51461053157806381794fba146105b4578063857f812f146105e0578063872d1f15146105f35780638790aca314610606578063883bdbfd146106d457806398a0f72e146106f4578063a34123a714610714578063b0f5925714610727578063b14184e6146107a0578063b74d60a9146107c0578063b7d19fc4146107c8578063c19d93fb146107db578063c45a01551461089f578063d38a85ad146108b2578063d3b16864146108c5578063ddca3f43146108d9578063e556289f146108ef578063edcba3b2146108fa578063f0163ef41461091d578063f094685a14610930578063ff12504e14610943575b600080fd5b60065461021c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61024c61024736600461366c565b610956565b604080516001600160801b03938416815292909116602083015201610230565b6102c061027a366004613866565b600f60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b604080519687526001600160801b039586166020880152938516938601939093529083166060850152821660808401521660a082015260c001610230565b60025461021c906001600160a01b031681565b61032461031f366004613b2c565b610af4565b005b61032f60045481565b604051908152602001610230565b61035061034b366004613866565b610b9c565b6040805163ffffffff909416845260069290920b6020840152151590820152606001610230565b61038a610385366004613751565b610bd0565b60408051928352602083019190915201610230565b61032f620100105481565b61038a6103b836600461358f565b610d53565b6103246103cb366004613791565b610f08565b6103e36103de366004613931565b6110ae565b604080516001600160801b039093168352602083019190915201610230565b60005461040f9060020b81565b60405160029190910b8152602001610230565b610435610430366004613967565b611230565b6040516001600160801b039091168152602001610230565b61032f60055481565b60035461040f90600160b81b900460020b81565b61038a610478366004613751565b61136e565b6103e361048b366004613931565b6114e4565b6102c061049e366004613866565b600e60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b61024c6104f23660046136e3565b611636565b60005461043590600160301b90046001600160801b031681565b61052461051f3660046138b9565b6117df565b6040516102309190613d8c565b61057d61053f36600461389f565b600b6020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b929060ff1685565b604080516001600160801b039096168652600f9490940b60208601529284019190915260608301521515608082015260a001610230565b62010016546105cc90600160a01b900462ffffff1681565b60405162ffffff9091168152602001610230565b61038a6105ee366004613751565b611a6f565b61038a610601366004613616565b611b2e565b61067361061436600461389f565b600d6020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160801b0380871697600160801b978890048216978583169581900483169480841694919004909216918a565b604080516001600160801b039b8c168152998b1660208b01528901979097526060880195909552928716608087015290861660a0860152851660c085015290931660e083015261010082019290925261012081019190915261014001610230565b6106e76106e23660046137db565b611cb9565b6040516102309190613d51565b61032f61070236600461387e565b600a6020526000908152604090205481565b61038a6107223660046138eb565b611d40565b61076e610735366004613866565b600960205260009081526040902080546001820154600283015460038401546004909401546001600160801b0390931693919290919085565b604080516001600160801b0390961686526020860194909452928401919091526060830152608082015260a001610230565b6107b36107ae3660046138b9565b611eef565b6040516102309190613d0a565b6103246120f5565b60035461021c906001600160a01b031681565b600754600854610840916001600160a01b03811691600160a01b820460020b9161ffff600160b81b8204811692600160c81b8304821692600160d81b81049092169160ff600160e81b90910416906001600160801b0380821691600160801b90041688565b604080516001600160a01b03909916895260029790970b602089015261ffff9586169688019690965292841660608701529216608085015290151560a08401526001600160801b0390811660c08401521660e082015261010001610230565b60015461021c906001600160a01b031681565b6103246108c0366004613b4e565b612264565b60005461040f906301000000900460020b81565b6003546105cc90600160a01b900462ffffff1681565b61032f6201000f5481565b61040f61090836600461389f565b600c6020526000908152604090205460020b81565b61043561092b366004613967565b6123ec565b61038a61093e366004613751565b6124a5565b61024c61095136600461366c565b612564565b620100115460009081906001600160a01b0316301461097457600080fd5b600754600160e81b900460ff16156109a75760405162461bcd60e51b815260040161099e90613f3a565b60405180910390fd5b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906109e9908b908b908b908b908b90602401613c60565b60408051601f198184030181529181526020820180516001600160e01b031662e1552f60e41b17905251610a1d9190613bf2565b600060405180830381855af49150503d8060008114610a58576040519150601f19603f3d011682016040523d82523d6000602084013e610a5d565b606091505b50915091508115610ad05760008082806020019051810190610a7f9190613a96565b6040519399509197509350915060028b900b906001600160a01b038d169060008051602061445583398151915290610ac1908a908a9088908890600090613f81565b60405180910390a35050610ad9565b610ad981612b20565b50506007805460ff60e81b1916905590969095509350505050565b62010011546001600160a01b03163014610b0d57600080fd5b600754600160e81b900460ff1615610b375760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179081905561ffff600160d81b9091048116908216811015610b8b57610b6f60108284612bb3565b506007805461ffff60d81b1916600160d81b61ffff8516021790555b50506007805460ff60e81b19169055565b60108161ffff8110610bad57600080fd5b015463ffffffff81169150600160201b810460060b90600160581b900460ff1683565b620100115460009081906001600160a01b03163014610bee57600080fd5b600754600160e81b900460ff1615610c185760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100135460405160009182916001600160a01b0390911690610c5a908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b0316631624092960e11b17905251610c8f9190613bf2565b600060405180830381855af49150503d8060008114610cca576040519150601f19603f3d011682016040523d82523d6000602084013e610ccf565b606091505b50915091508115610ad05780806020019051810190610cee9190613b71565b60035460028054600754604051959950939750600160a01b80840462ffffff16956001600160a01b0394851695949092169360008051602061443583398151915293610d46936000938d938d93919004900b90613e16565b60405180910390a4610ad9565b620100115460009081906001600160a01b03163014610d7157600080fd5b600754600160e81b900460ff1615610d9b5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100145460405160009182916001600160a01b0390911690610ddf908c908c908c908c908c908c90602401613c0e565b60408051601f198184030181529181526020820180516001600160e01b0316633c8a7d8d60e01b17905251610e149190613bf2565b600060405180830381855af49150503d8060008114610e4f576040519150601f19603f3d011682016040523d82523d6000602084013e610e54565b606091505b50915091508115610ee35780806020019051810190610e739190613b71565b604080513381526001600160801b038b166020820152908101839052606081018290529195509350600289810b91908b900b906001600160a01b038d16907f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde9060800160405180910390a4610eec565b610eec81612b20565b50506007805460ff60e81b191690559097909650945050505050565b62010011546001600160a01b03163014610f2157600080fd5b600754600160e81b900460ff1615610f4b5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100165460405160009182916001600160a01b0390911690610f8d9089908990899089908990602401613cdc565b60408051601f198184030181529181526020820180516001600160e01b03166312439b2f60e21b17905251610fc29190613bf2565b600060405180830381855af49150503d8060008114610ffd576040519150601f19603f3d011682016040523d82523d6000602084013e611002565b606091505b5091509150811561108f57600080600080848060200190518101906110279190613b94565b604080518581526020810185905290810183905260608101829052939750919550935091506001600160a01b038c169033907fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6339060800160405180910390a350505050611098565b61109881612b20565b50506007805460ff60e81b191690555050505050565b620100115460009081906001600160a01b031630146110cc57600080fd5b600754600160e81b900460ff16156110f65760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906111329088908890602401613e36565b60408051601f198184030181529181526020820180516001600160e01b0316634cd70e9160e01b179052516111679190613bf2565b600060405180830381855af49150503d80600081146111a2576040519150601f19603f3d011682016040523d82523d6000602084013e6111a7565b606091505b5091509150811561120f57600080828060200190518101906111c99190613af4565b60405193995091975093509150600289900b90339060008051602061441583398151915290611200908a9087908790600190613f57565b60405180910390a35050611218565b61121881612b20565b50506007805460ff60e81b1916905590939092509050565b62010011546000906001600160a01b0316301461124c57600080fd5b600754600160e81b900460ff16156112765760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906112b490889088908890602401613e52565b60408051601f198184030181529181526020820180516001600160e01b031663544e705760e01b179052516112e99190613bf2565b600060405180830381855af49150503d8060008114611324576040519150601f19603f3d011682016040523d82523d6000602084013e611329565b606091505b5091509150811561134f57808060200190518101906113489190613a4c565b9250611358565b61135881612b20565b50506007805460ff60e81b191690559392505050565b620100115460009081906001600160a01b0316301461138c57600080fd5b600754600160e81b900460ff16156113b65760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100125460405160009182916001600160a01b03909116906113f8908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b0316632cee8a1b60e11b1790525161142d9190613bf2565b600060405180830381855af49150503d8060008114611468576040519150601f19603f3d011682016040523d82523d6000602084013e61146d565b606091505b50915091508115610ad0578080602001905181019061148c9190613b71565b60035460028054600754604051959950939750600160a01b80840462ffffff16956001600160a01b0394851695949092169360008051602061443583398151915293610d46936001938d938d93919004900b90613e16565b620100115460009081906001600160a01b0316301461150257600080fd5b600754600160e81b900460ff161561152c5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906115689088908890602401613e36565b60408051601f198184030181529181526020820180516001600160e01b0316633164a26560e11b1790525161159d9190613bf2565b600060405180830381855af49150503d80600081146115d8576040519150601f19603f3d011682016040523d82523d6000602084013e6115dd565b606091505b5091509150811561120f57600080828060200190518101906115ff9190613af4565b60405193995091975093509150600289900b90339060008051602061441583398151915290611200908a9087908790600090613f57565b620100115460009081906001600160a01b0316301461165457600080fd5b600754600160e81b900460ff161561167e5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905562010015546040516001600160a01b038981166024830152600289900b60448301526001600160801b0388811660648401528716608483015285151560a4830152600092839291169060c40160408051601f198184030181529181526020820180516001600160e01b0316636ad1718f60e01b179052516117129190613bf2565b600060405180830381855af49150503d806000811461174d576040519150601f19603f3d011682016040523d82523d6000602084013e611752565b606091505b50915091508115610ad057808060200190518101906117719190613a68565b604080516001600160a01b038d1681526001600160801b0384811660208301528316818301528815156060820152905192965090945060028a900b9133917f7d3d0e34c86e56b4dcd993c09bbbf1b04527ab27b4365dffca10e0ded914e071919081900360800190a3610ad9565b60608160020b8360020b126118065760405162461bcd60e51b815260040161099e90613ec8565b600054600290810b810b9084900b12156118325760405162461bcd60e51b815260040161099e90613f02565b60005463010000009004600290810b810b9083900b13156118655760405162461bcd60e51b815260040161099e90613f1e565b60035461187c90600160b81b900460020b84614305565b60020b1561189c5760405162461bcd60e51b815260040161099e90613ee5565b6003546118b390600160b81b900460020b83614305565b60020b156118d35760405162461bcd60e51b815260040161099e90613eab565b600354600090600160b81b900460020b6118ed85856141d0565b6118f7919061409d565b60020b9050806001600160401b0381111561192257634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561198257816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a082015282526000199092019101816119405790505b5091506000845b8460020b8160020b1215611a66576040805160c081018252600283810b900b6000818152600d602081815285832080546001600160801b038082168852600160801b91829004811684890152600183015498880198909852600382015404871660608701526004810154909616608086015292909152905260059091015460a08201528451859084908110611a2e57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508180611a44906142ea565b600354909350611a5f9150600160b81b900460020b82613fb4565b9050611989565b50505092915050565b620100115460009081906001600160a01b03163014611a8d57600080fd5b600754600160e81b900460ff1615611ab75760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100125460405160009182916001600160a01b0390911690611af9908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b031663857f812f60e01b1790525161142d9190613bf2565b620100115460009081906001600160a01b03163014611b4c57600080fd5b600754600160e81b900460ff1615611b765760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905562010014546040516001600160a01b038981166024830152600289810b604484015288900b60648301526084820187905260a48201869052600092839291169060c40160408051601f198184030181529181526020820180516001600160e01b031663872d1f1560e01b17905251611c019190613bf2565b600060405180830381855af49150503d8060008114611c3c576040519150601f19603f3d011682016040523d82523d6000602084013e611c41565b606091505b50915091508115610ad05780806020019051810190611c609190613b71565b604080516001600160a01b038d168152602081018490529081018290529195509350600288810b91908a900b9033907ff69135213cd78fa4cffb855edf80272133f69bd8a6fb3236340a69b4d6e248e390606001610d46565b62010011546060906001600160a01b03163014611cd557600080fd5b611d394284848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600754601094939250600160a01b810460020b915061ffff600160b81b8204811691600160c81b900416612c71565b9392505050565b620100115460009081906001600160a01b03163014611d5e57600080fd5b600754600160e81b900460ff1615611d885760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b1790556201001454604051600287810b602483015286900b60448201526001600160801b038516606482015260009182916001600160a01b039091169060840160408051601f198184030181529181526020820180516001600160e01b031663a34123a760e01b17905251611e0d9190613bf2565b600060405180830381855af49150503d8060008114611e48576040519150601f19603f3d011682016040523d82523d6000602084013e611e4d565b606091505b50915091508115611ecd5780806020019051810190611e6c9190613b71565b604080516001600160801b0389168152602081018490529081018290529195509350600287810b919089900b9033907f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c9060600160405180910390a4611ed6565b611ed681612b20565b50506007805460ff60e81b191690559094909350915050565b60608160020b8360020b12611f165760405162461bcd60e51b815260040161099e90613ec8565b600054600290810b810b9084900b1215611f425760405162461bcd60e51b815260040161099e90613f02565b60005463010000009004600290810b810b9083900b1315611f755760405162461bcd60e51b815260040161099e90613f1e565b600354611f8c90600160b81b900460020b84614305565b60020b15611fac5760405162461bcd60e51b815260040161099e90613ee5565b600354611fc390600160b81b900460020b83614305565b60020b15611fe35760405162461bcd60e51b815260040161099e90613eab565b600354600090600160b81b900460020b611ffd85856141d0565b612007919061409d565b60020b9050806001600160401b0381111561203257634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561205b578160200160208202803683370190505b5091506000845b8460020b8160020b1215611a6657600281810b900b6000908152600b60205260409020548451600160801b909104600f0b908590849081106120b457634e487b7160e01b600052603260045260246000fd5b6020026020010190600f0b9081600f0b8152505081806120d3906142ea565b6003549093506120ee9150600160b81b900460020b82613fb4565b9050612062565b62010011546001600160a01b0316301461210e57600080fd5b600754600160e81b900460ff16156121385760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905560015460408051636c66a87160e11b815290516001600160a01b039092169163d8cd50e291600480820192602092909190829003018186803b15801561219057600080fd5b505afa1580156121a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c89190613573565b6001600160a01b0316336001600160a01b03161461220d5760405162461bcd60e51b8152602060048201526002602482015261272960f11b604482015260640161099e565b6002546201000f5461222a916001600160a01b0316903390612d91565b6003546201001054612247916001600160a01b0316903390612d91565b60006201000f81905562010010556007805460ff60e81b19169055565b62010011546001600160a01b0316301461227d57600080fd5b600754600160e81b900460ff16156122a75760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905560015460408051638da5cb5b60e01b815290516001600160a01b0390921691638da5cb5b91600480820192602092909190829003018186803b1580156122ff57600080fd5b505afa158015612313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123379190613573565b6001600160a01b0316336001600160a01b03161461237d5760405162461bcd60e51b81526020600482015260036024820152622727a760e91b604482015260640161099e565b60648162ffffff1611156123b95760405162461bcd60e51b815260206004820152600360248201526204650360ec1b604482015260640161099e565b62010016805462ffffff909216600160a01b0262ffffff60a01b199092169190911790556007805460ff60e81b19169055565b62010011546000906001600160a01b0316301461240857600080fd5b600754600160e81b900460ff16156124325760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b039091169061247090889088908890602401613e52565b60408051601f198184030181529181526020820180516001600160e01b0316633c058fbd60e21b179052516112e99190613bf2565b620100115460009081906001600160a01b031630146124c357600080fd5b600754600160e81b900460ff16156124ed5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100135460405160009182916001600160a01b039091169061252f908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b031663784a342d60e11b17905251610c8f9190613bf2565b620100115460009081906001600160a01b0316301461258257600080fd5b600754600160e81b900460ff16156125ac5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906125ee908b908b908b908b908b90602401613c60565b60408051601f198184030181529181526020820180516001600160e01b031660016276d7d960e11b0319179052516126269190613bf2565b600060405180830381855af49150503d8060008114612661576040519150601f19603f3d011682016040523d82523d6000602084013e612666565b606091505b50915091508115610ad057600080828060200190518101906126889190613a96565b6040519399509197509350915060028b900b906001600160a01b038d169060008051602061445583398151915290610ac1908a908a9088908890600190613f81565b60008060008360020b126126e1578260020b6126ee565b8260020b6126ee9061437d565b90506126fd620d89e71961435c565b60020b8111156127335760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640161099e565b60006001821661274757600160801b612759565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561278e576080612789826ffff97272373d413259a46990580e213a6141b1565b901c90505b60048216156127b85760806127b3826ffff2e50f5f656932ef12357cf3c7fdcc6141b1565b901c90505b60088216156127e25760806127dd826fffe5caca7e10e4e61c3624eaa0941cd06141b1565b901c90505b601082161561280c576080612807826fffcb9843d60f6159c9db58835c9266446141b1565b901c90505b6020821615612836576080612831826fff973b41fa98c081472e6896dfb254c06141b1565b901c90505b604082161561286057608061285b826fff2ea16466c96a3843ec78b326b528616141b1565b901c90505b608082161561288a576080612885826ffe5dee046a99a2a811c461f1969c30536141b1565b901c90505b6101008216156128b55760806128b0826ffcbe86c7900a88aedcffc83b479aa3a46141b1565b901c90505b6102008216156128e05760806128db826ff987a7253ac413176f2b074cf7815e546141b1565b901c90505b61040082161561290b576080612906826ff3392b0822b70005940c7a398e4b70f36141b1565b901c90505b610800821615612936576080612931826fe7159475a2c29b7443b29c7fa6e889d96141b1565b901c90505b61100082161561296157608061295c826fd097f3bdfd2022b8845ad8f792aa58256141b1565b901c90505b61200082161561298c576080612987826fa9f746462d870fdf8a65dc1f90e061e56141b1565b901c90505b6140008216156129b75760806129b2826f70d869a156d2a1b890bb3df62baf32f76141b1565b901c90505b6180008216156129e25760806129dd826f31be135f97d08fd981231505542fcfa66141b1565b901c90505b62010000821615612a0e576080612a09826f09aa508b5b7a84e1c677de54f3e99bc96141b1565b901c90505b62020000821615612a39576080612a34826e5d6af8dedb81196699c329225ee6046141b1565b901c90505b62040000821615612a63576080612a5e826d2216e584f5fa1ea926041bedfe986141b1565b901c90505b62080000821615612a8b576080612a86826b048a170391f7dc42444e8fa26141b1565b901c90505b60008460020b1315612aa657612aa38160001961410c565b90505b612ab4600160201b82614348565b15612ac0576001612ac3565b60005b612ad49060ff16602083901c614065565b949350505050565b6040805160608101825263ffffffff83168082526000602083015260019190920181905283546001600160601b031916909117600160581b178355805b9250929050565b8051604014612b9357604481511015612b605760405162461bcd60e51b8152602060048201526002602482015261646360f01b604482015260640161099e565b60048101905080806020019051810190612b7a91906139a4565b60405162461bcd60e51b815260040161099e9190613e78565b602081019050805160405181815260208301519150816020820152604081fd5b6000808361ffff1611612bee5760405162461bcd60e51b81526020600482015260036024820152622622a760e91b604482015260640161099e565b8261ffff168261ffff1611612c04575081611d39565b825b8261ffff168161ffff161015612c68576001858261ffff1661ffff8110612c3d57634e487b7160e01b600052603260045260246000fd5b01805463ffffffff191663ffffffff9290921691909117905580612c60816142c8565b915050612c06565b50909392505050565b606060008261ffff1611612cab5760405162461bcd60e51b81526020600482015260016024820152604960f81b604482015260640161099e565b84516001600160401b03811115612cd257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612cfb578160200160208202803683370190505b50905060005b8551811015612d8657612d3f8888888481518110612d2f57634e487b7160e01b600052603260045260246000fd5b6020026020010151888888612e92565b828281518110612d5f57634e487b7160e01b600052603260045260246000fd5b602002602001019060060b908160060b815250508080612d7e906142ea565b915050612d01565b509695505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612ded9190613bf2565b6000604051808303816000865af19150503d8060008114612e2a576040519150601f19603f3d011682016040523d82523d6000602084013e612e2f565b606091505b5091509150818015612e59575080511580612e59575080806020019051810190612e59919061384a565b612e8b5760405162461bcd60e51b8152602060048201526003602482015262544e5360e81b604482015260640161099e565b5050505050565b600063ffffffff8516612f2d576000878461ffff1661ffff8110612ec657634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b90920460ff1615159383019390935290925090881614612f2257612f1f818887613013565b90505b602001519050613009565b6000612f398688614273565b9050600080612f4c8a8a858a8a8a61307d565b91509150816000015163ffffffff168363ffffffff161415612f7657506020015191506130099050565b805163ffffffff84811691161415612f9657602001519250613009915050565b81518151600091612fa691614273565b63ffffffff1690506000836000015185612fc09190614273565b63ffffffff169050808285602001518560200151612fde9190614217565b612fe891906140d7565b612ff29190614120565b84602001516130019190613ffa565b955050505050505b9695505050505050565b61301b6134fd565b835160009061302a9085614273565b63ffffffff16905060405180606001604052808563ffffffff168152602001828560020b6130589190614120565b87602001516130679190613ffa565b60060b8152600160209091015295945050505050565b6130856134fd565b61308d6134fd565b878461ffff1661ffff81106130b257634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b90910460ff16151592820192909252925061310290889088613258565b1561313b578563ffffffff16826000015163ffffffff16141561312657508061324d565b81613132838888613013565b9150915061324d565b878361314886600161403f565b6131529190614327565b61ffff1661ffff811061317557634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff16151591810182905292506131fa5760408051606081018252895463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff1615159181019190915291505b61320987836000015188613258565b61323b5760405162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015260640161099e565b6132488888888787613327565b915091505b965096945050505050565b60008363ffffffff168363ffffffff161115801561328257508363ffffffff168263ffffffff1611155b1561329e578163ffffffff168363ffffffff1611159050611d39565b60008463ffffffff168463ffffffff16116132cc576132c763ffffffff8516600160201b61407d565b6132d4565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff161161330b5761330663ffffffff8516600160201b61407d565b613313565b8363ffffffff165b64ffffffffff169091111595945050505050565b61332f6134fd565b6133376134fd565b60008361334586600161403f565b61334f9190614327565b61ffff169050600060018561ffff16836133699190614065565b613373919061425c565b905060005b60026133848385614065565b61338e919061410c565b90508961339f61ffff881683614348565b61ffff81106133be57634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff16151591810182905295506134155761340e816001614065565b9250613378565b8961ffff8716613426836001614065565b6134309190614348565b61ffff811061344f57634e487b7160e01b600052603260045260246000fd5b60408051606081018252929091015463ffffffff81168352600160201b8104600690810b810b900b602084015260ff600160581b9091041615159082015285519094506000906134a1908b908b613258565b90508080156134ba57506134ba8a8a8760000151613258565b156134c557506134f0565b806134dc576134d560018361425c565b92506134ea565b6134e7826001614065565b93505b50613378565b5050509550959350505050565b604080516060810182526000808252602082018190529181019190915290565b60008083601f84011261352e578182fd5b5081356001600160401b03811115613544578182fd5b602083019150836020828501011115612b1957600080fd5b8035600281900b811461356e57600080fd5b919050565b600060208284031215613584578081fd5b8151611d39816143d9565b60008060008060008060a087890312156135a7578182fd5b86356135b2816143d9565b95506135c06020880161355c565b94506135ce6040880161355c565b935060608701356135de816143ff565b925060808701356001600160401b038111156135f8578283fd5b61360489828a0161351d565b979a9699509497509295939492505050565b600080600080600060a0868803121561362d578081fd5b8535613638816143d9565b94506136466020870161355c565b93506136546040870161355c565b94979396509394606081013594506080013592915050565b600080600080600060808688031215613683578081fd5b853561368e816143d9565b945061369c6020870161355c565b935060408601356136ac816143ff565b925060608601356001600160401b038111156136c6578182fd5b6136d28882890161351d565b969995985093965092949392505050565b600080600080600060a086880312156136fa578081fd5b8535613705816143d9565b94506137136020870161355c565b93506040860135613723816143ff565b92506060860135613733816143ff565b91506080860135613743816143f1565b809150509295509295909350565b600080600080600060808688031215613768578081fd5b8535613773816143d9565b94506020860135613783816143ff565b93506136ac6040870161355c565b6000806000806000608086880312156137a8578283fd5b85356137b3816143d9565b9450602086013593506040860135925060608601356001600160401b038111156136c6578182fd5b600080602083850312156137ed578182fd5b82356001600160401b0380821115613803578384fd5b818501915085601f830112613816578384fd5b813581811115613824578485fd5b8660208260051b8501011115613838578485fd5b60209290920196919550909350505050565b60006020828403121561385b578081fd5b8151611d39816143f1565b600060208284031215613877578081fd5b5035919050565b60006020828403121561388f578081fd5b81358060010b8114611d39578182fd5b6000602082840312156138b0578081fd5b611d398261355c565b600080604083850312156138cb578182fd5b6138d48361355c565b91506138e26020840161355c565b90509250929050565b6000806000606084860312156138ff578081fd5b6139088461355c565b92506139166020850161355c565b91506040840135613926816143ff565b809150509250925092565b60008060408385031215613943578182fd5b61394c8361355c565b9150602083013561395c816143ff565b809150509250929050565b60008060006060848603121561397b578081fd5b6139848461355c565b92506020840135613994816143ff565b91506040840135613926816143f1565b6000602082840312156139b5578081fd5b81516001600160401b03808211156139cb578283fd5b818401915084601f8301126139de578283fd5b8151818111156139f0576139f06143c3565b604051601f8201601f19908116603f01168101908382118183101715613a1857613a186143c3565b81604052828152876020848701011115613a30578586fd5b613a41836020830160208801614298565b979650505050505050565b600060208284031215613a5d578081fd5b8151611d39816143ff565b60008060408385031215613a7a578182fd5b8251613a85816143ff565b602084015190925061395c816143ff565b60008060008060808587031215613aab578182fd5b8451613ab6816143ff565b6020860151909450613ac7816143ff565b6040860151909350613ad8816143ff565b6060860151909250613ae9816143ff565b939692955090935050565b60008060008060808587031215613b09578182fd5b8451613b14816143ff565b602086015160408701519195509350613ad8816143ff565b600060208284031215613b3d578081fd5b813561ffff81168114611d39578182fd5b600060208284031215613b5f578081fd5b813562ffffff81168114611d39578182fd5b60008060408385031215613b83578182fd5b505080516020909101519092909150565b60008060008060808587031215613ba9578182fd5b505082516020840151604085015160609095015191969095509092509050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008251613c04818460208701614298565b9190910192915050565b6001600160a01b0387168152600286810b602083015285900b60408201526001600160801b038416606082015260a060808201819052600090613c549083018486613bc9565b98975050505050505050565b6001600160a01b0386168152600285900b60208201526001600160801b0384166040820152608060608201819052600090613a419083018486613bc9565b6001600160a01b03861681526001600160801b0385166020820152600284900b6040820152608060608201819052600090613a419083018486613bc9565b60018060a01b0386168152846020820152836040820152608060608201526000613a41608083018486613bc9565b6020808252825182820181905260009190848201906040850190845b81811015613d45578351600f0b83529284019291840191600101613d26565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613d4557835160060b83529284019291840191600101613d6d565b602080825282518282018190526000919060409081850190868401855b82811015613e0957815180516001600160801b0390811686528782015181168887015286820151878701526060808301518216908701526080808301519091169086015260a0908101519085015260c09093019290850190600101613da9565b5091979650505050505050565b93151584526020840192909252604083015260020b606082015260800190565b60029290920b82526001600160801b0316602082015260400190565b60029390930b83526001600160801b039190911660208301521515604082015260600190565b6020815260008251806020840152613e97816040850160208701614298565b601f01601f19169190910160400192915050565b60208082526003908201526205244360ec1b604082015260600190565b602080825260039082015262261e2960e91b604082015260600190565b60208082526003908201526204c44360ec1b604082015260600190565b6020808252600290820152614c4f60f01b604082015260600190565b602080825260029082015261524f60f01b604082015260600190565b6020808252600390820152621312d160ea1b604082015260600190565b6001600160801b039485168152928416602084015292166040820152901515606082015260800190565b6001600160801b039586168152938516602085015291841660408401529092166060820152901515608082015260a00190565b60008160020b8360020b82821282627fffff03821381151615613fd957613fd9614397565b82627fffff19038212811615613ff157613ff1614397565b50019392505050565b60008160060b8360060b82821282667fffffffffffff0382138115161561402357614023614397565b82667fffffffffffff19038212811615613ff157613ff1614397565b600061ffff80831681851680830382111561405c5761405c614397565b01949350505050565b6000821982111561407857614078614397565b500190565b600064ffffffffff80831681851680830382111561405c5761405c614397565b60008160020b8360020b806140b4576140b46143ad565b627fffff198214600019821416156140ce576140ce614397565b90059392505050565b60008160060b8360060b806140ee576140ee6143ad565b667fffffffffffff198214600019821416156140ce576140ce614397565b60008261411b5761411b6143ad565b500490565b60008160060b8360060b667fffffffffffff8382138484138383048511828216161561414e5761414e614397565b667fffffffffffff198685128281168783058712161561417057614170614397565b87871292508582058712848416161561418b5761418b614397565b858505871281841616156141a1576141a1614397565b5050509290910295945050505050565b60008160001904831182151516156141cb576141cb614397565b500290565b60008160020b8360020b82811281627fffff19018312811516156141f6576141f6614397565b81627fffff01831381161561420d5761420d614397565b5090039392505050565b60008160060b8360060b82811281667fffffffffffff190183128115161561424157614241614397565b81667fffffffffffff01831381161561420d5761420d614397565b60008282101561426e5761426e614397565b500390565b600063ffffffff8381169083168181101561429057614290614397565b039392505050565b60005b838110156142b357818101518382015260200161429b565b838111156142c2576000848401525b50505050565b600061ffff808316818114156142e0576142e0614397565b6001019392505050565b60006000198214156142fe576142fe614397565b5060010190565b60008260020b80614318576143186143ad565b808360020b0791505092915050565b600061ffff8084168061433c5761433c6143ad565b92169190910692915050565b600082614357576143576143ad565b500690565b60008160020b627fffff1981141561437657614376614397565b9003919050565b6000600160ff1b82141561439357614393614397565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146143ee57600080fd5b50565b80151581146143ee57600080fd5b6001600160801b03811681146143ee57600080fdfe3736ba81d13006f6ea2012ba3e287f087169b55d90a9defb5966fe9eb830d7ea0fe977d619f8172f7fdbe8bb8928ef80952817d96936509f67d66346bc4cd10f4f4658280ee6d0e8f09b5e436dacaca69ec5dd7c2ba05fb010d5145a3567cdada2646970667358221220336d80b132feef86c529f37d3371b115ca9f1c5a659c38276dc7fea0925be6ab64736f6c63430008040033" + }, + { + "address": "0x4f5f443fec450fd64dce57ccace8f5ad10b4028f", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063858b033d1161008c578063aced166111610066578063aced16611461019e578063b95ed06f146101a6578063f2fde38b146101b9578063fc57d4df146101cc576100cf565b8063858b033d1461016157806387ef019a146101765780638da5cb5b14610189576100cf565b806348a1371b146100d45780635c8ed2f3146100fd578063715018a61461011e578063748747e614610128578063782661bc1461013b5780637de920161461014e575b600080fd5b6100e76100e2366004610ca2565b6101df565b6040516100f49190610e1c565b60405180910390f35b61011061010b366004610c32565b6102e2565b6040516100f49291906110b3565b6101266102fb565b005b610126610136366004610c32565b61038d565b610126610149366004610cd5565b610422565b6100e761015c366004610ca2565b610527565b6101696105b6565b6040516100f491906110aa565b610126610184366004610c6a565b610746565b6101916107c1565b6040516100f49190610e08565b6101916107d0565b6101696101b4366004610c32565b6107df565b6101266101c7366004610c32565b61088e565b6101696101da366004610c32565b61094e565b606080825167ffffffffffffffff811180156101fa57600080fd5b50604051908082528060200260200182016040528015610224578160200160208202803683370190505b50905060005b83518110156102d9576102ba84828151811061024257fe5b60200260200101516001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561028257600080fd5b505afa158015610296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b49190610c4e565b8282815181106102c657fe5b602090810291909101015260010161022a565b5090505b919050565b6002602052600090815260409020805460019091015482565b610303610992565b6001600160a01b03166103146107c1565b6001600160a01b0316146103435760405162461bcd60e51b815260040161033a90611030565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001546001600160a01b03163314806103be57506103a96107c1565b6001600160a01b0316336001600160a01b0316145b6103da5760405162461bcd60e51b815260040161033a90610e60565b6001600160a01b0381166104005760405162461bcd60e51b815260040161033a90610ef8565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331480610453575061043e6107c1565b6001600160a01b0316336001600160a01b0316145b61046f5760405162461bcd60e51b815260040161033a90610e60565b42811115801561048a575061012c6104874283610996565b11155b6104a65760405162461bcd60e51b815260040161033a90610fad565b60005b83518110156105215760405180604001604052808483815181106104c957fe5b6020026020010151815260200142815250600260008684815181106104ea57fe5b6020908102919091018101516001600160a01b031682528181019290925260400160002082518155910151600191820155016104a9565b50505050565b606080825167ffffffffffffffff8111801561054257600080fd5b5060405190808252806020026020018201604052801561056c578160200160208202803683370190505b50905060005b83518110156102d95761059784828151811061058a57fe5b60200260200101516107df565b8282815181106105a357fe5b6020908102919091010152600101610572565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff546001600160a01b0316156106bc57600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5460408051633fabe5a360e21b815290516001600160a01b039092169163feaf968c9160048082019260a092909190829003018186803b15801561065e57600080fd5b505afa158015610672573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106969190610d96565b5050509150506106b46402540be400826109be90919063ffffffff16565b915050610743565b6106c94262015180610996565b6000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077c54111561072b57506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b54610743565b60405162461bcd60e51b815260040161033a90611065565b90565b6001546001600160a01b031633148061077757506107626107c1565b6001600160a01b0316336001600160a01b0316145b6107935760405162461bcd60e51b815260040161033a90610e60565b6001600160a01b03918216600090815260036020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b031690565b6001546001600160a01b031681565b60006001600160a01b0382166107fe576107f76105b6565b90506102dd565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561083957600080fd5b505afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190610de7565b60ff169050600a81900a6108868482846109ff565b949350505050565b610896610992565b6001600160a01b03166108a76107c1565b6001600160a01b0316146108cd5760405162461bcd60e51b815260040161033a90611030565b6001600160a01b0381166108f35760405162461bcd60e51b815260040161033a90610eb2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061098c826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561028257600080fd5b92915050565b3390565b6000828211156109b85760405162461bcd60e51b815260040161033a90610f3f565b50900390565b6000826109cd5750600061098c565b828202828482816109da57fe5b04146109f85760405162461bcd60e51b815260040161033a90610fef565b9392505050565b6000806001600160a01b03851615610a1a5782600a0a610a24565b670de0b6b3a76400005b6001600160a01b038681166000908152600360205260409020549192501615610b0c576001600160a01b03808616600090815260036020526040808220548151633fabe5a360e21b815291519293169163feaf968c9160048082019260a092909190829003018186803b158015610a9a57600080fd5b505afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190610d96565b505050915050610b0482610afe87610af86402540be400866109be90919063ffffffff16565b906109be565b90610b6f565b925050610b67565b610b194262015180610996565b6001600160a01b038616600090815260026020526040902060010154111561072b576001600160a01b038516600090815260026020526040902054610b64908290610afe90876109be565b91505b509392505050565b6000808211610b905760405162461bcd60e51b815260040161033a90610f76565b818381610b9957fe5b049392505050565b600082601f830112610bb1578081fd5b8135610bc4610bbf826110e8565b6110c1565b818152915060208083019084810181840286018201871015610be557600080fd5b60005b84811015610c0d578135610bfb81611108565b84529282019290820190600101610be8565b505050505092915050565b805169ffffffffffffffffffff8116811461098c57600080fd5b600060208284031215610c43578081fd5b81356109f881611108565b600060208284031215610c5f578081fd5b81516109f881611108565b60008060408385031215610c7c578081fd5b8235610c8781611108565b91506020830135610c9781611108565b809150509250929050565b600060208284031215610cb3578081fd5b813567ffffffffffffffff811115610cc9578182fd5b61088684828501610ba1565b600080600060608486031215610ce9578081fd5b833567ffffffffffffffff80821115610d00578283fd5b610d0c87838801610ba1565b9450602091508186013581811115610d22578384fd5b86019050601f81018713610d34578283fd5b8035610d42610bbf826110e8565b81815283810190838501858402850186018b1015610d5e578687fd5b8694505b83851015610d80578035835260019490940193918501918501610d62565b5096999698505050506040949094013593505050565b600080600080600060a08688031215610dad578081fd5b610db78787610c18565b9450602086015193506040860151925060608601519150610ddb8760808801610c18565b90509295509295909350565b600060208284031215610df8578081fd5b815160ff811681146109f8578182fd5b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015610e5457835183529284019291840191600101610e38565b50909695505050505050565b60208082526032908201527f507269636543616c63756c61746f723a2063616c6c6572206973206e6f74207460408201527134329037bbb732b91037b91035b2b2b832b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526027908201527f507269636543616c63756c61746f723a20696e76616c6964206b6565706572206040820152666164647265737360c81b606082015260800190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b60208082526022908201527f507269636543616c63756c61746f723a20696e76616c69642074696d6573746160408201526106d760f41b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f507269636543616c63756c61746f723a20696e76616c6964206f7261636c652060408201526476616c756560d81b606082015260800190565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156110e057600080fd5b604052919050565b600067ffffffffffffffff8211156110fe578081fd5b5060209081020190565b6001600160a01b038116811461111d57600080fd5b5056fea26469706673582212200a6c6f5460636408140f2631c7289bd48f976697e8eee0924c12098441d1f2ce64736f6c634300060c0033" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000005d392416e8000", + "code": "0x6080604052600436106101945760003560e01c806301ffc9a71461019957806306fdde03146101ce578063081812fc146101f0578063095ea7b31461021d57806318160ddd1461023f578063183ff0851461025e57806318b20071146102735780631fe70d6f1461029357806323b872dd146102b25780632f745c59146102d25780633ccfd60b146102f257806342842e0e146103075780634a7c01ec146103275780634f6ccce71461033d5780635c975abb1461035d5780636352211e1461037257806369ddd67d1461039257806370a08231146103c2578063715018a6146103e257806373749fbd146103f75780638ab1d681146104175780638da5cb5b1461043757806395527a121461044c57806395d89b41146104665780639d1b464a1461047b578063a22cb46514610491578063a8c5132c146104b1578063b88d4fde146104d1578063c3b754dc146104f1578063c87b56dd14610511578063d85d3d2714610531578063da7df2a214610544578063e43252d714610564578063e985e9c514610584578063f2fde38b146105a4575b600080fd5b3480156101a557600080fd5b506101b96101b4366004611cfb565b6105c4565b60405190151581526020015b60405180910390f35b3480156101da57600080fd5b506101e36105d5565b6040516101c59190611d68565b3480156101fc57600080fd5b5061021061020b366004611d7b565b610667565b6040516101c59190611d94565b34801561022957600080fd5b5061023d610238366004611dc4565b61068e565b005b34801561024b57600080fd5b506009545b6040519081526020016101c5565b34801561026a57600080fd5b5061023d6107a8565b34801561027f57600080fd5b5061023d61028e366004611d7b565b6107e1565b34801561029f57600080fd5b50600f546101b990610100900460ff1681565b3480156102be57600080fd5b5061023d6102cd366004611dee565b6107ee565b3480156102de57600080fd5b506102506102ed366004611dc4565b61081f565b3480156102fe57600080fd5b5061023d6108b5565b34801561031357600080fd5b5061023d610322366004611dee565b6108ec565b34801561033357600080fd5b50610250600e5481565b34801561034957600080fd5b50610250610358366004611d7b565b610907565b34801561036957600080fd5b506101b961099a565b34801561037e57600080fd5b5061021061038d366004611d7b565b6109aa565b34801561039e57600080fd5b506101b96103ad366004611e2a565b60106020526000908152604090205460ff1681565b3480156103ce57600080fd5b506102506103dd366004611e2a565b6109de565b3480156103ee57600080fd5b5061023d610a64565b34801561040357600080fd5b5061023d610412366004611e55565b610a78565b34801561042357600080fd5b5061023d610432366004611e2a565b610a93565b34801561044357600080fd5b50610210610abc565b34801561045857600080fd5b50600f546101b99060ff1681565b34801561047257600080fd5b506101e3610acb565b34801561048757600080fd5b50610250600d5481565b34801561049d57600080fd5b5061023d6104ac366004611e70565b610ada565b3480156104bd57600080fd5b5061023d6104cc366004611d7b565b610ae9565b3480156104dd57600080fd5b5061023d6104ec366004611f2e565b610af6565b3480156104fd57600080fd5b5061023d61050c366004611e55565b610b2e565b34801561051d57600080fd5b506101e361052c366004611d7b565b610b50565b61023d61053f366004611fa9565b610b5b565b34801561055057600080fd5b5061023d61055f366004611ff1565b610d19565b34801561057057600080fd5b5061023d61057f366004611e2a565b610d93565b34801561059057600080fd5b506101b961059f366004612065565b610dbf565b3480156105b057600080fd5b5061023d6105bf366004611e2a565b610ded565b60006105cf82610e63565b92915050565b6060600080546105e49061208f565b80601f01602080910402602001604051908101604052809291908181526020018280546106109061208f565b801561065d5780601f106106325761010080835404028352916020019161065d565b820191906000526020600020905b81548152906001019060200180831161064057829003601f168201915b5050505050905090565b600061067282610e88565b506000908152600460205260409020546001600160a01b031690565b6000610699826109aa565b9050806001600160a01b0316836001600160a01b03160361070b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061072757506107278133610dbf565b6107995760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610702565b6107a38383610ead565b505050565b7f591c0e1d11c1207ddcaf435e99150cb7d9c849a2c6d5eae9547cd518cef6a8cd336040516107d79190611d94565b60405180910390a1565b6107e9610f1b565b600d55565b6107f83382610f7a565b6108145760405162461bcd60e51b8152600401610702906120c9565b6107a3838383610fd9565b600061082a836109de565b821061088c5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610702565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6108bd610f1b565b60405133904780156108fc02916000818181858888f193505050501580156108e9573d6000803e3d6000fd5b50565b6107a383838360405180602001604052806000815250610af6565b600061091260095490565b82106109755760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610702565b6009828154811061098857610988612116565b90600052602060002001549050919050565b600654600160a01b900460ff1690565b6000806109b683611138565b90506001600160a01b0381166105cf5760405162461bcd60e51b81526004016107029061212c565b60006001600160a01b038216610a485760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610702565b506001600160a01b031660009081526003602052604090205490565b610a6c610f1b565b610a766000611153565b565b610a80610f1b565b600f805460ff1916911515919091179055565b610a9b610f1b565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6006546001600160a01b031690565b6060600180546105e49061208f565b610ae53383836111a5565b5050565b610af1610f1b565b600e55565b610b003383610f7a565b610b1c5760405162461bcd60e51b8152600401610702906120c9565b610b288484848461126f565b50505050565b610b36610f1b565b600f80549115156101000261ff0019909216919091179055565b60606105cf826112a2565b610b636113aa565b6000610b6e336109de565b600f54909150610100900460ff161580610b9757503360009081526010602052604090205460ff165b610c005760405162461bcd60e51b815260206004820152603460248201527f57686974656c6973742069732061637469766520616e6420616464726573732060448201527336bab9ba103132903bb434ba32b634b9ba32b21760611b6064820152608401610702565b600f5460ff16610c645760405162461bcd60e51b815260206004820152602960248201527f5075626c6963206d696e74206d7573742062652061637469766520746f206d696044820152686e7420746f6b656e7360b81b6064820152608401610702565b600e54811115610cb65760405162461bcd60e51b815260206004820152601e60248201527f4578636565647320757365722077616c6c6574206d696e74206c696d697400006044820152606401610702565b34600d541115610d045760405162461bcd60e51b815260206004820152601960248201527815985b1d59481cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b6044820152606401610702565b610d0e3383611403565b506108e96001600c55565b610d21610f1b565b60005b818110156107a357600160106000858585818110610d4457610d44612116565b9050602002016020810190610d599190611e2a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d8b81612174565b915050610d24565b610d9b610f1b565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610df5610f1b565b6001600160a01b038116610e5a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610702565b6108e981611153565b60006001600160e01b03198216632483248360e11b14806105cf57506105cf82611432565b610e9181611457565b6108e95760405162461bcd60e51b81526004016107029061212c565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610ee2826109aa565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b33610f24610abc565b6001600160a01b031614610a765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610702565b600080610f86836109aa565b9050806001600160a01b0316846001600160a01b03161480610fad5750610fad8185610dbf565b80610fd15750836001600160a01b0316610fc684610667565b6001600160a01b0316145b949350505050565b826001600160a01b0316610fec826109aa565b6001600160a01b0316146110125760405162461bcd60e51b81526004016107029061218d565b6001600160a01b0382166110745760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610702565b6110818383836001611474565b826001600160a01b0316611094826109aa565b6001600160a01b0316146110ba5760405162461bcd60e51b81526004016107029061218d565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652600385528386208054600019019055908716808652838620805460010190558686526002909452828520805490921684179091559051849360008051602061241a83398151915291a4505050565b6000908152600260205260409020546001600160a01b031690565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036112025760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610702565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61127a848484610fd9565b611286848484846114e2565b610b285760405162461bcd60e51b8152600401610702906121d2565b60606112ad82610e88565b6000828152600b6020526040812080546112c69061208f565b80601f01602080910402602001604051908101604052809291908181526020018280546112f29061208f565b801561133f5780601f106113145761010080835404028352916020019161133f565b820191906000526020600020905b81548152906001019060200180831161132257829003601f168201915b50505050509050600061135d60408051602081019091526000815290565b9050805160000361136f575092915050565b8151156113a1578082604051602001611389929190612224565b60405160208183030381529060405292505050919050565b610fd1846115e3565b6002600c54036113fc5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610702565b6002600c55565b600061140e60115490565b905061141e601180546001019055565b6114288382611657565b6107a38183611671565b60006001600160e01b0319821663780e9d6360e01b14806105cf57506105cf8261172d565b60008061146383611138565b6001600160a01b0316141592915050565b6001600160a01b038416158015611490575061148e61099a565b155b6114d65760405162461bcd60e51b8152602060048201526017602482015276151c985b9cd9995c881a5cc81b9bdd08185b1b1bddd959604a1b6044820152606401610702565b610b288484848461177d565b60006001600160a01b0384163b156115d857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611526903390899088908890600401612253565b6020604051808303816000875af1925050508015611561575060408051601f3d908101601f1916820190925261155e91810190612290565b60015b6115be573d80801561158f576040519150601f19603f3d011682016040523d82523d6000602084013e611594565b606091505b5080516000036115b65760405162461bcd60e51b8152600401610702906121d2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610fd1565b506001949350505050565b60606115ee82610e88565b600061160560408051602081019091526000815290565b905060008151116116255760405180602001604052806000815250611650565b8061162f846118b1565b604051602001611640929190612224565b6040516020818303038152906040525b9392505050565b610ae5828260405180602001604052806000815250611943565b61167a82611457565b6116dd5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610702565b6000828152600b602052604090206116f582826122fb565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b60006001600160e01b031982166380ac58cd60e01b148061175e57506001600160e01b03198216635b5e139f60e01b145b806105cf57506301ffc9a760e01b6001600160e01b03198316146105cf565b60018111156117ec5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610702565b816001600160a01b0385166118485761184381600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b61186b565b836001600160a01b0316856001600160a01b03161461186b5761186b8582611976565b6001600160a01b0384166118875761188281611a13565b6118aa565b846001600160a01b0316846001600160a01b0316146118aa576118aa8482611ac2565b5050505050565b606060006118be83611b06565b60010190506000816001600160401b038111156118dd576118dd611ea3565b6040519080825280601f01601f191660200182016040528015611907576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461191157509392505050565b61194d8383611bdc565b61195a60008484846114e2565b6107a35760405162461bcd60e51b8152600401610702906121d2565b60006001611983846109de565b61198d91906123ba565b6000838152600860205260409020549091508082146119e0576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b600954600090611a25906001906123ba565b6000838152600a602052604081205460098054939450909284908110611a4d57611a4d612116565b906000526020600020015490508060098381548110611a6e57611a6e612116565b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480611aa657611aa66123cd565b6001900381819060005260206000200160009055905550505050565b6000611acd836109de565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611b455772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310611b6f576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310611b8d57662386f26fc10000830492506010015b6305f5e1008310611ba5576305f5e100830492506008015b6127108310611bb957612710830492506004015b60648310611bcb576064830492506002015b600a83106105cf5760010192915050565b6001600160a01b038216611c325760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610702565b611c3b81611457565b15611c585760405162461bcd60e51b8152600401610702906123e3565b611c66600083836001611474565b611c6f81611457565b15611c8c5760405162461bcd60e51b8152600401610702906123e3565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b03191684179055518392919060008051602061241a833981519152908290a45050565b6001600160e01b0319811681146108e957600080fd5b600060208284031215611d0d57600080fd5b813561165081611ce5565b60005b83811015611d33578181015183820152602001611d1b565b50506000910152565b60008151808452611d54816020860160208601611d18565b601f01601f19169290920160200192915050565b6020815260006116506020830184611d3c565b600060208284031215611d8d57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b80356001600160a01b0381168114611dbf57600080fd5b919050565b60008060408385031215611dd757600080fd5b611de083611da8565b946020939093013593505050565b600080600060608486031215611e0357600080fd5b611e0c84611da8565b9250611e1a60208501611da8565b9150604084013590509250925092565b600060208284031215611e3c57600080fd5b61165082611da8565b80358015158114611dbf57600080fd5b600060208284031215611e6757600080fd5b61165082611e45565b60008060408385031215611e8357600080fd5b611e8c83611da8565b9150611e9a60208401611e45565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115611ed357611ed3611ea3565b604051601f8501601f19908116603f01168101908282118183101715611efb57611efb611ea3565b81604052809350858152868686011115611f1457600080fd5b858560208301376000602087830101525050509392505050565b60008060008060808587031215611f4457600080fd5b611f4d85611da8565b9350611f5b60208601611da8565b92506040850135915060608501356001600160401b03811115611f7d57600080fd5b8501601f81018713611f8e57600080fd5b611f9d87823560208401611eb9565b91505092959194509250565b600060208284031215611fbb57600080fd5b81356001600160401b03811115611fd157600080fd5b8201601f81018413611fe257600080fd5b610fd184823560208401611eb9565b6000806020838503121561200457600080fd5b82356001600160401b038082111561201b57600080fd5b818501915085601f83011261202f57600080fd5b81358181111561203e57600080fd5b8660208260051b850101111561205357600080fd5b60209290920196919550909350505050565b6000806040838503121561207857600080fd5b61208183611da8565b9150611e9a60208401611da8565b600181811c908216806120a357607f821691505b6020821081036120c357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600182016121865761218661215e565b5060010190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008351612236818460208801611d18565b83519083019061224a818360208801611d18565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061228690830184611d3c565b9695505050505050565b6000602082840312156122a257600080fd5b815161165081611ce5565b601f8211156107a357600081815260208120601f850160051c810160208610156122d45750805b601f850160051c820191505b818110156122f3578281556001016122e0565b505050505050565b81516001600160401b0381111561231457612314611ea3565b61232881612322845461208f565b846122ad565b602080601f83116001811461235d57600084156123455750858301515b600019600386901b1c1916600185901b1785556122f3565b600085815260208120601f198616915b8281101561238c5788860151825594840194600190910190840161236d565b50858210156123aa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b818103818111156105cf576105cf61215e565b634e487b7160e01b600052603160045260246000fd5b6020808252601c908201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b60408201526060019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a0bd75f41f469e07f4e0a4cf64639af8463ed4b3a501572a9e7a1ab056de630864736f6c63430008140033" + }, + { + "address": "0x5cae65285dac285031bafb1027cbceab4802042e", + "nonce": 12, + "balance": "0x000000000000000000000000000000000000000000000000001dfd38a56d2b00", + "code": "0x" + }, + { + "address": "0x59fe0a0940e93ad43eabeeaa722bd06c1fb70eb5", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061014b5760003560e01c80637ff7e616116100b6578063bfa0b1331161006f578063bfa0b13314610462578063d4c581131461048d578063f2fde38b146104a9578063f3c13387146104d2578063f7260d3e146104fb578063fdf99f35146105265761014b565b80637ff7e616146103755780638425abff1461039e5780638da5cb5b146103c9578063a4405f42146103f4578063abeb97dc1461041d578063b7a6ec9f146104395761014b565b806351cff8d91161010857806351cff8d9146102695780635e0cc9c6146102925780636038d0cf146102bb57806363a846f8146102f8578063715018a614610335578063718da7ee1461034c5761014b565b806306fdde0314610150578063097eb7591461017b5780630aee30dc146101a45780632e334452146101cd5780634b0bddd2146101f85780634ed3faf214610221575b600080fd5b34801561015c57600080fd5b5061016561054f565b6040516101729190614da9565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190614256565b6105dd565b005b3480156101b057600080fd5b506101cb60048036038101906101c6919061439b565b61069d565b005b3480156101d957600080fd5b506101e261098c565b6040516101ef9190614c61565b60405180910390f35b34801561020457600080fd5b5061021f600480360381019061021a919061427f565b610a32565b005b34801561022d57600080fd5b506102486004803603810190610243919061439b565b610b09565b6040516102609c9b9a99989796959493929190614dcb565b60405180910390f35b34801561027557600080fd5b50610290600480360381019061028b9190614256565b610c95565b005b34801561029e57600080fd5b506102b960048036038101906102b4919061439b565b610d5b565b005b3480156102c757600080fd5b506102e260048036038101906102dd91906142bb565b610e2e565b6040516102ef919061526e565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190614256565b610e53565b60405161032c9190614d13565b60405180910390f35b34801561034157600080fd5b5061034a610e73565b005b34801561035857600080fd5b50610373600480360381019061036e9190614256565b610efb565b005b34801561038157600080fd5b5061039c60048036038101906103979190614320565b611008565b005b3480156103aa57600080fd5b506103b3611140565b6040516103c09190614d73565b60405180910390f35b3480156103d557600080fd5b506103de611166565b6040516103eb9190614c61565b60405180910390f35b34801561040057600080fd5b5061041b60048036038101906104169190614454565b611190565b005b610437600480360381019061043291906144a8565b611bd8565b005b34801561044557600080fd5b50610460600480360381019061045b91906143c4565b611c2b565b005b34801561046e57600080fd5b506104776120ee565b604051610484919061526e565b60405180910390f35b6104a760048036038101906104a29190614400565b6120f4565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190614256565b612104565b005b3480156104de57600080fd5b506104f960048036038101906104f491906142f7565b6121fc565b005b34801561050757600080fd5b50610510612309565b60405161051d9190614c61565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190614454565b61232f565b005b6068805461055c90615659565b80601f016020809104026020016040519081016040528092919081815260200182805461058890615659565b80156105d55780601f106105aa576101008083540402835291602001916105d5565b820191906000526020600020905b8154815290600101906020018083116105b857829003601f168201915b505050505081565b6105e5612aab565b73ffffffffffffffffffffffffffffffffffffffff16610603611166565b73ffffffffffffffffffffffffffffffffffffffff1614610659576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610650906150cc565b60405180910390fd5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061072757503373ffffffffffffffffffffffffffffffffffffffff1661070f611166565b73ffffffffffffffffffffffffffffffffffffffff16145b610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d906150ec565b60405180910390fd5b6000606c600083815260200190815260200160002060010160139054906101000a900460ff169050600060038111156107c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115610801577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b148061087d575060016003811115610842577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600381111561087b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b145b6108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b39061516c565b60405180910390fd5b6002606c600084815260200190815260200160002060010160136101000a81548160ff0219169083600381111561091c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055506000600381111561095b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b827f64f64eff629c768d377b3873f28d7b34aa300f731260933c98646acb81114e2e60405160405180910390a35050565b6000610996612aab565b73ffffffffffffffffffffffffffffffffffffffff166109b4611166565b73ffffffffffffffffffffffffffffffffffffffff1614610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a01906150cc565b60405180910390fd5b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a3a612aab565b73ffffffffffffffffffffffffffffffffffffffff16610a58611166565b73ffffffffffffffffffffffffffffffffffffffff1614610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa5906150cc565b60405180910390fd5b80606a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b606c602052806000526040600020600091509050806000018054610b2c90615659565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5890615659565b8015610ba55780601f10610b7a57610100808354040283529160200191610ba5565b820191906000526020600020905b815481529060010190602001808311610b8857829003601f168201915b5050505050908060010160009054906101000a900463ffffffff16908060010160049054906101000a900463ffffffff16908060010160089054906101000a900460ff16908060010160099054906101000a900460ff169080600101600a9054906101000a900463ffffffff169080600101600e9054906101000a900463ffffffff16908060010160129054906101000a900460ff16908060010160139054906101000a900460ff16908060010160149054906101000a900463ffffffff16908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508c565b610c9d612aab565b73ffffffffffffffffffffffffffffffffffffffff16610cbb611166565b73ffffffffffffffffffffffffffffffffffffffff1614610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d08906150cc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d57573d6000803e3d6000fd5b5050565b606a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610de557503373ffffffffffffffffffffffffffffffffffffffff16610dcd611166565b73ffffffffffffffffffffffffffffffffffffffff16145b610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b906150ec565b60405180910390fd5b8060698190555050565b606b602052816000526040600020602052806000526040600020600091509150505481565b606a6020528060005260406000206000915054906101000a900460ff1681565b610e7b612aab565b73ffffffffffffffffffffffffffffffffffffffff16610e99611166565b73ffffffffffffffffffffffffffffffffffffffff1614610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906150cc565b60405180910390fd5b610ef96000612ab3565b565b606a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610f8557503373ffffffffffffffffffffffffffffffffffffffff16610f6d611166565b73ffffffffffffffffffffffffffffffffffffffff16145b610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb906150ec565b60405180910390fd5b80606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006110146001612b79565b90508015611038576001600060016101000a81548160ff0219169083151502179055505b846068908051906020019061104e929190613e45565b5083606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816069819055506110e0612c69565b80156111395760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516111309190614d8e565b60405180910390a15b5050505050565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061121a57503373ffffffffffffffffffffffffffffffffffffffff16611202611166565b73ffffffffffffffffffffffffffffffffffffffff16145b611259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611250906150ec565b60405180910390fd5b6000606c6000848152602001908152602001600020600001805461127c90615659565b9050116112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590614f4c565b60405180910390fd5b600081600001515111611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90614fcc565b60405180910390fd5b806020015163ffffffff16816040015163ffffffff16118015611332575042816040015163ffffffff16115b611371576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611368906151ec565b60405180910390fd5b600060038111156113ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b606c600084815260200190815260200160002060010160139054906101000a900460ff166003811115611407577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14806114a6575060016003811115611448577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b606c600084815260200190815260200160002060010160139054906101000a900460ff1660038111156114a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b145b6114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90614fec565b60405180910390fd5b8060a0015163ffffffff168160c0015163ffffffff16101561153c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115339061520c565b60405180910390fd5b6000606c60008481526020019081526020016000206040518061018001604052908160008201805461156d90615659565b80601f016020809104026020016040519081016040528092919081815260200182805461159990615659565b80156115e65780601f106115bb576101008083540402835291602001916115e6565b820191906000526020600020905b8154815290600101906020018083116115c957829003601f168201915b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160089054906101000a900460ff1660ff1660ff1681526020016001820160099054906101000a900460ff1660ff1660ff16815260200160018201600a9054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201600e9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160129054906101000a900460ff1660ff1660ff1681526020016001820160139054906101000a900460ff166003811115611729577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811115611761577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050816000015181600001819052508160200151816020019063ffffffff16908163ffffffff16815250508160400151816040019063ffffffff16908163ffffffff16815250508160600151816060019060ff16908160ff16815250508160800151816080019060ff16908160ff16815250508160a001518160a0019063ffffffff16908163ffffffff16815250508160c001518160c0019063ffffffff16908163ffffffff16815250508160e001518160e0019060ff16908160ff16815250506118cb662386f26fc10000836101200151612cc290919063ffffffff16565b816101400181815250508161010001518161010001906003811115611919577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90816003811115611953577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152505081610140015181610160019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080606c600085815260200190815260200160002060008201518160000190805190602001906119c5929190613e45565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060408201518160010160046101000a81548163ffffffff021916908363ffffffff16021790555060608201518160010160086101000a81548160ff021916908360ff16021790555060808201518160010160096101000a81548160ff021916908360ff16021790555060a082015181600101600a6101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101600e6101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160010160126101000a81548160ff021916908360ff1602179055506101008201518160010160136101000a81548160ff02191690836003811115611b17577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055506101208201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555061014082015181600201556101608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f2164356e29e1ad7d94fe886348d642d41f5feb996fccbadc846bba2a010f00a28382604051611bcb929190615289565b60405180910390a1505050565b60008211611c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c129061502c565b60405180910390fd5b611c26838383612d2f565b505050565b606a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611cb557503373ffffffffffffffffffffffffffffffffffffffff16611c9d611166565b73ffffffffffffffffffffffffffffffffffffffff16145b611cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ceb906150ec565b60405180910390fd5b6000606c600084815260200190815260200160002060010160139054906101000a900460ff16905060006003811115611d56577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611d8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1480611e0b575060016003811115611dd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611e09577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b145b611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4190614ecc565b60405180910390fd5b60006003811115611e84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611ebd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b148015611ec8575081155b15611f9a576001606c600085815260200190815260200160002060010160136101000a81548160ff02191690836003811115611f2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060006003811115611f6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b837f64f64eff629c768d377b3873f28d7b34aa300f731260933c98646acb81114e2e60405160405180910390a35b60016003811115611fd4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600381111561200d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1480156120175750815b156120e9576000606c600085815260200190815260200160002060010160136101000a81548160ff0219169083600381111561207c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550600060038111156120bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b837f64f64eff629c768d377b3873f28d7b34aa300f731260933c98646acb81114e2e60405160405180910390a35b505050565b60695481565b61210082600183612d2f565b5050565b61210c612aab565b73ffffffffffffffffffffffffffffffffffffffff1661212a611166565b73ffffffffffffffffffffffffffffffffffffffff1614612180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612177906150cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790614f0c565b60405180910390fd5b6121f981612ab3565b50565b606a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061228657503373ffffffffffffffffffffffffffffffffffffffff1661226e611166565b73ffffffffffffffffffffffffffffffffffffffff16145b6122c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bc906150ec565b60405180910390fd5b80606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123b957503373ffffffffffffffffffffffffffffffffffffffff166123a1611166565b73ffffffffffffffffffffffffffffffffffffffff16145b6123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ef906150ec565b60405180910390fd5b600081600001515111612440576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124379061506c565b60405180910390fd5b6000606c6000848152602001908152602001600020600001805461246390615659565b9050146124a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249c906150ac565b60405180910390fd5b806020015163ffffffff16816040015163ffffffff161180156124d1575042816040015163ffffffff16115b612510576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612507906151ac565b60405180910390fd5b8060a0015163ffffffff168160c0015163ffffffff161015612567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255e9061522c565b60405180910390fd5b600060038111156125a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81610100015160038111156125df577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1480612660575060016003811115612620577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816101000151600381111561265e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b145b61269f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126969061510c565b60405180910390fd5b6126a7613ecb565b816000015181600001819052508160200151816020019063ffffffff16908163ffffffff16815250508160400151816040019063ffffffff16908163ffffffff16815250508160600151816060019060ff16908160ff16815250508160800151816080019060ff16908160ff16815250508160a001518160a0019063ffffffff16908163ffffffff16815250508160c001518160c0019063ffffffff16908163ffffffff16815250508160e001518160e0019060ff16908160ff168152505081610100015181610100019060038111156127aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b908160038111156127e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81525050600081610120019063ffffffff16908163ffffffff1681525050612821662386f26fc10000836101200151612cc290919063ffffffff16565b8161014001818152505081610140015181610160019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080606c60008581526020019081526020016000206000820151816000019080519060200190612899929190613e45565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060408201518160010160046101000a81548163ffffffff021916908363ffffffff16021790555060608201518160010160086101000a81548160ff021916908360ff16021790555060808201518160010160096101000a81548160ff021916908360ff16021790555060a082015181600101600a6101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101600e6101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160010160126101000a81548160ff021916908360ff1602179055506101008201518160010160136101000a81548160ff021916908360038111156129eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055506101208201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555061014082015181600201556101608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050827f1d3a8c2b84cc4558b799c93b54e8e9c685fb9a8bf971af47a5f116e12ee0817a82604051612a9e919061524c565b60405180910390a2505050565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060019054906101000a900460ff1615612bf05760018260ff16148015612ba85750612ba6306138b4565b155b612be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bde9061504c565b60405180910390fd5b60009050612c64565b8160ff1660008054906101000a900460ff1660ff1610612c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3c9061504c565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b600060019054906101000a900460ff16612cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612caf9061512c565b60405180910390fd5b612cc06138d7565b565b600080821480612cea575082828385612cdb9190615465565b925082612ce89190615434565b145b612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2090614f2c565b60405180910390fd5b92915050565b60003384606954604051602001612d4893929190614c24565b604051602081830303815290604052805190602001209050612d6a8183613938565b612da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da09061508c565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0e90614fac565b60405180910390fd5b6000606c600086815260200190815260200160002060405180610180016040529081600082018054612e4890615659565b80601f0160208091040260200160405190810160405280929190818152602001828054612e7490615659565b8015612ec15780601f10612e9657610100808354040283529160200191612ec1565b820191906000526020600020905b815481529060010190602001808311612ea457829003601f168201915b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160089054906101000a900460ff1660ff1660ff1681526020016001820160099054906101000a900460ff1660ff1660ff16815260200160018201600a9054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201600e9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160129054906101000a900460ff1660ff1660ff1681526020016001820160139054906101000a900460ff166003811115613004577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381111561303c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050806020015163ffffffff16421015613115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310c90614eac565b60405180910390fd5b806040015163ffffffff16421115613162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613159906151cc565b60405180910390fd5b6000600381111561319c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81610100015160038111156131da577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1461321a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132119061514c565b60405180910390fd5b8061012001518160a0015161322f91906153c3565b63ffffffff168160c0015163ffffffff161015613281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132789061500c565b60405180910390fd5b60008160e0015160ff16148061330057506132f584606b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088815260200190815260200160002054613a9290919063ffffffff16565b8160e0015160ff1610155b61333f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333690614f6c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1681610160015173ffffffffffffffffffffffffffffffffffffffff161461342a5780610160015173ffffffffffffffffffffffffffffffffffffffff166323b872dd33606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133d588866101400151612cc290919063ffffffff16565b6040518463ffffffff1660e01b81526004016133f393929190614c7c565b600060405180830381600087803b15801561340d57600080fd5b505af1158015613421573d6000803e3d6000fd5b505050506134ed565b3461344385836101400151612cc290919063ffffffff16565b14613483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347a90614eec565b60405180910390fd5b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156134eb573d6000803e3d6000fd5b505b600080826101200151905060005b868110156136f65761351b846060015160ff16856080015160ff16613aeb565b925060005b61353a84866060015160ff16613b3e90919063ffffffff16565b8110156136e2578460c0015163ffffffff16838660a0015161355c91906153c3565b63ffffffff1611156135d2576003606c60008b815260200190815260200160002060010160136101000a81548160ff021916908360038111156135c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055506136e2565b6000838660a001516135e491906153c3565b63ffffffff169050606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d6a574533836040518363ffffffff1660e01b8152600401613649929190614cb3565b600060405180830381600087803b15801561366357600080fd5b505af1158015613677573d6000803e3d6000fd5b50505050838061368690615705565b945050808a3373ffffffffffffffffffffffffffffffffffffffff167fe6f4f4ab5e0ec99c47aab0c845ffe199f2d1a9fbed7fde661edd58a100286b7e60405160405180910390a45080806136da906156bc565b915050613520565b5080806136ee906156bc565b9150506134fb565b5080606c600089815260200190815260200160002060010160146101000a81548163ffffffff021916908363ffffffff1602179055508260c0015163ffffffff16818460a0015161374791906153c3565b63ffffffff1611156137b9576003606c600089815260200190815260200160002060010160136101000a81548160ff021916908360038111156137b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055505b61381c86606b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a815260200190815260200160002054613a9290919063ffffffff16565b606b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000898152602001908152602001600020819055507f5b29bef75cf9b5a21a69e0de1a679b68cfd3f3a6bada96e11d68cbe4b9d4d09f3388886040516138a393929190614cdc565b60405180910390a150505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16613926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391d9061512c565b60405180910390fd5b613936613931612aab565b612ab3565b565b600080600061395261394d8560006020613be8565b613d42565b9050600061396a61396586602080613be8565b613d42565b9050600061397b8660406001613be8565b6000815181106139b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b90506000601b8260f81c6139d391906153fd565b90506000600189838787604051600081526020016040526040516139fa9493929190614d2e565b6020604051602081039080840390855afa158015613a1c573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613a8357600195505b85965050505050505092915050565b6000828284613aa1919061536d565b9150811015613ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613adc90614f8c565b60405180910390fd5b92915050565b60008060005b84811015613b335783613b046064613d50565b10613b2057613b1d600183613a9290919063ffffffff16565b91505b8080613b2b906156bc565b915050613af1565b508091505092915050565b600081831015613b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7a9061518c565b60405180910390fd5b828284613b9091906154bf565b9150811115613bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bcb90614e8c565b60405180910390fd5b8183613be091906154bf565b905092915050565b606060008267ffffffffffffffff811115613c2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613c5e5781602001600182028036833780820191505090505b50905060005b83811015613d3657858582613c79919061536d565b81518110613cb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b828281518110613cf4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613d2e906156bc565b915050613c64565b50809150509392505050565b600060208201519050919050565b6000613d96824144454342604051602001613d6f959493929190614bc5565b6040516020818303038152906040528051906020012060001c613d9d90919063ffffffff16565b9050919050565b6000613ddf83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250613de7565b905092915050565b6000808314158290613e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e269190614da9565b60405180910390fd5b508284613e3c9190615772565b90509392505050565b828054613e5190615659565b90600052602060002090601f016020900481019282613e735760008555613eba565b82601f10613e8c57805160ff1916838001178555613eba565b82800160010185558215613eba579182015b82811115613eb9578251825591602001919060010190613e9e565b5b509050613ec79190613fa1565b5090565b60405180610180016040528060608152602001600063ffffffff168152602001600063ffffffff168152602001600060ff168152602001600060ff168152602001600063ffffffff168152602001600063ffffffff168152602001600060ff16815260200160006003811115613f6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001600063ffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b5b80821115613fba576000816000905550600101613fa2565b5090565b6000613fd1613fcc846152de565b6152b9565b905082815260208101848484011115613fe957600080fd5b613ff4848285615617565b509392505050565b600061400f61400a8461530f565b6152b9565b90508281526020810184848401111561402757600080fd5b614032848285615617565b509392505050565b60008135905061404981615ee4565b92915050565b60008135905061405e81615efb565b92915050565b600082601f83011261407557600080fd5b8135614085848260208601613fbe565b91505092915050565b60008135905061409d81615f12565b92915050565b6000813590506140b281615f29565b92915050565b6000813590506140c781615f40565b92915050565b600082601f8301126140de57600080fd5b81356140ee848260208601613ffc565b91505092915050565b6000610160828403121561410a57600080fd5b6141156101606152b9565b9050600082013567ffffffffffffffff81111561413157600080fd5b61413d848285016140cd565b60008301525060206141518482850161422c565b60208301525060406141658482850161422c565b604083015250606061417984828501614241565b606083015250608061418d84828501614241565b60808301525060a06141a18482850161422c565b60a08301525060c06141b58482850161422c565b60c08301525060e06141c984828501614241565b60e0830152506101006141de848285016140b8565b610100830152506101206141f484828501614217565b6101208301525061014061420a8482850161408e565b6101408301525092915050565b60008135905061422681615f50565b92915050565b60008135905061423b81615f67565b92915050565b60008135905061425081615f7e565b92915050565b60006020828403121561426857600080fd5b60006142768482850161403a565b91505092915050565b6000806040838503121561429257600080fd5b60006142a08582860161403a565b92505060206142b18582860161404f565b9150509250929050565b600080604083850312156142ce57600080fd5b60006142dc8582860161403a565b92505060206142ed85828601614217565b9150509250929050565b60006020828403121561430957600080fd5b6000614317848285016140a3565b91505092915050565b6000806000806080858703121561433657600080fd5b600085013567ffffffffffffffff81111561435057600080fd5b61435c878288016140cd565b945050602061436d878288016140a3565b935050604061437e8782880161403a565b925050606061438f87828801614217565b91505092959194509250565b6000602082840312156143ad57600080fd5b60006143bb84828501614217565b91505092915050565b600080604083850312156143d757600080fd5b60006143e585828601614217565b92505060206143f68582860161404f565b9150509250929050565b6000806040838503121561441357600080fd5b600061442185828601614217565b925050602083013567ffffffffffffffff81111561443e57600080fd5b61444a85828601614064565b9150509250929050565b6000806040838503121561446757600080fd5b600061447585828601614217565b925050602083013567ffffffffffffffff81111561449257600080fd5b61449e858286016140f7565b9150509250929050565b6000806000606084860312156144bd57600080fd5b60006144cb86828701614217565b93505060206144dc86828701614217565b925050604084013567ffffffffffffffff8111156144f957600080fd5b61450586828701614064565b9150509250925092565b61452061451b82615505565b615744565b82525050565b61452f816154f3565b82525050565b614546614541826154f3565b615732565b82525050565b61455581615517565b82525050565b61456481615523565b82525050565b614573816155ab565b82525050565b614582816155ab565b82525050565b614591816155cf565b82525050565b6145a0816155f3565b82525050565b6145af816155f3565b82525050565b6145be81615605565b82525050565b60006145cf82615340565b6145d9818561534b565b93506145e9818560208601615626565b6145f28161588e565b840191505092915050565b600061460882615340565b614612818561535c565b9350614622818560208601615626565b61462b8161588e565b840191505092915050565b600061464360158361535c565b915061464e826158ac565b602082019050919050565b600061466660138361535c565b9150614671826158d5565b602082019050919050565b6000614689601a8361535c565b9150614694826158fe565b602082019050919050565b60006146ac60168361535c565b91506146b782615927565b602082019050919050565b60006146cf60268361535c565b91506146da82615950565b604082019050919050565b60006146f260148361535c565b91506146fd8261599f565b602082019050919050565b6000614715601b8361535c565b9150614720826159c8565b602082019050919050565b600061473860278361535c565b9150614743826159f1565b604082019050919050565b600061475b60148361535c565b915061476682615a40565b602082019050919050565b600061477e60168361535c565b915061478982615a69565b602082019050919050565b60006147a1601f8361535c565b91506147ac82615a92565b602082019050919050565b60006147c460268361535c565b91506147cf82615abb565b604082019050919050565b60006147e7601b8361535c565b91506147f282615b0a565b602082019050919050565b600061480a60348361535c565b915061481582615b33565b604082019050919050565b600061482d602e8361535c565b915061483882615b82565b604082019050919050565b6000614850601f8361535c565b915061485b82615bd1565b602082019050919050565b6000614873601d8361535c565b915061487e82615bfa565b602082019050919050565b6000614896601b8361535c565b91506148a182615c23565b602082019050919050565b60006148b960208361535c565b91506148c482615c4c565b602082019050919050565b60006148dc601e8361535c565b91506148e782615c75565b602082019050919050565b60006148ff60198361535c565b915061490a82615c9e565b602082019050919050565b6000614922602b8361535c565b915061492d82615cc7565b604082019050919050565b600061494560178361535c565b915061495082615d16565b602082019050919050565b6000614968602f8361535c565b915061497382615d3f565b604082019050919050565b600061498b60178361535c565b915061499682615d8e565b602082019050919050565b60006149ae60158361535c565b91506149b982615db7565b602082019050919050565b60006149d1600d8361535c565b91506149dc82615de0565b602082019050919050565b60006149f460158361535c565b91506149ff82615e09565b602082019050919050565b6000614a1760248361535c565b9150614a2282615e32565b604082019050919050565b6000614a3a60248361535c565b9150614a4582615e81565b604082019050919050565b6000610180830160008301518482036000860152614a6e82826145c4565b9150506020830151614a836020860182614b89565b506040830151614a966040860182614b89565b506060830151614aa96060860182614ba7565b506080830151614abc6080860182614ba7565b5060a0830151614acf60a0860182614b89565b5060c0830151614ae260c0860182614b89565b5060e0830151614af560e0860182614ba7565b50610100830151614b0a610100860182614597565b50610120830151614b1f610120860182614b89565b50610140830151614b34610140860182614b54565b50610160830151614b4961016086018261456a565b508091505092915050565b614b5d81615584565b82525050565b614b6c81615584565b82525050565b614b83614b7e82615584565b615768565b82525050565b614b928161558e565b82525050565b614ba18161558e565b82525050565b614bb08161559e565b82525050565b614bbf8161559e565b82525050565b6000614bd1828861450f565b601482019150614be18287614b72565b602082019150614bf18286614b72565b602082019150614c018285614b72565b602082019150614c118284614b72565b6020820191508190509695505050505050565b6000614c308286614535565b601482019150614c408285614b72565b602082019150614c508284614b72565b602082019150819050949350505050565b6000602082019050614c766000830184614526565b92915050565b6000606082019050614c916000830186614526565b614c9e6020830185614526565b614cab6040830184614b63565b949350505050565b6000604082019050614cc86000830185614526565b614cd56020830184614b63565b9392505050565b6000606082019050614cf16000830186614526565b614cfe6020830185614b63565b614d0b6040830184614b63565b949350505050565b6000602082019050614d28600083018461454c565b92915050565b6000608082019050614d43600083018761455b565b614d506020830186614bb6565b614d5d604083018561455b565b614d6a606083018461455b565b95945050505050565b6000602082019050614d886000830184614588565b92915050565b6000602082019050614da360008301846145b5565b92915050565b60006020820190508181036000830152614dc381846145fd565b905092915050565b6000610180820190508181036000830152614de6818f6145fd565b9050614df5602083018e614b98565b614e02604083018d614b98565b614e0f606083018c614bb6565b614e1c608083018b614bb6565b614e2960a083018a614b98565b614e3660c0830189614b98565b614e4360e0830188614bb6565b614e516101008301876145a6565b614e5f610120830186614b98565b614e6d610140830185614b63565b614e7b610160830184614579565b9d9c50505050505050505050505050565b60006020820190508181036000830152614ea581614636565b9050919050565b60006020820190508181036000830152614ec581614659565b9050919050565b60006020820190508181036000830152614ee58161467c565b9050919050565b60006020820190508181036000830152614f058161469f565b9050919050565b60006020820190508181036000830152614f25816146c2565b9050919050565b60006020820190508181036000830152614f45816146e5565b9050919050565b60006020820190508181036000830152614f6581614708565b9050919050565b60006020820190508181036000830152614f858161472b565b9050919050565b60006020820190508181036000830152614fa58161474e565b9050919050565b60006020820190508181036000830152614fc581614771565b9050919050565b60006020820190508181036000830152614fe581614794565b9050919050565b60006020820190508181036000830152615005816147b7565b9050919050565b60006020820190508181036000830152615025816147da565b9050919050565b60006020820190508181036000830152615045816147fd565b9050919050565b6000602082019050818103600083015261506581614820565b9050919050565b6000602082019050818103600083015261508581614843565b9050919050565b600060208201905081810360008301526150a581614866565b9050919050565b600060208201905081810360008301526150c581614889565b9050919050565b600060208201905081810360008301526150e5816148ac565b9050919050565b60006020820190508181036000830152615105816148cf565b9050919050565b60006020820190508181036000830152615125816148f2565b9050919050565b6000602082019050818103600083015261514581614915565b9050919050565b6000602082019050818103600083015261516581614938565b9050919050565b600060208201905081810360008301526151858161495b565b9050919050565b600060208201905081810360008301526151a58161497e565b9050919050565b600060208201905081810360008301526151c5816149a1565b9050919050565b600060208201905081810360008301526151e5816149c4565b9050919050565b60006020820190508181036000830152615205816149e7565b9050919050565b6000602082019050818103600083015261522581614a0a565b9050919050565b6000602082019050818103600083015261524581614a2d565b9050919050565b600060208201905081810360008301526152668184614a50565b905092915050565b60006020820190506152836000830184614b63565b92915050565b600060408201905061529e6000830185614b63565b81810360208301526152b08184614a50565b90509392505050565b60006152c36152d4565b90506152cf828261568b565b919050565b6000604051905090565b600067ffffffffffffffff8211156152f9576152f861585f565b5b6153028261588e565b9050602081019050919050565b600067ffffffffffffffff82111561532a5761532961585f565b5b6153338261588e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061537882615584565b915061538383615584565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153b8576153b76157a3565b5b828201905092915050565b60006153ce8261558e565b91506153d98361558e565b92508263ffffffff038211156153f2576153f16157a3565b5b828201905092915050565b60006154088261559e565b91506154138361559e565b92508260ff03821115615429576154286157a3565b5b828201905092915050565b600061543f82615584565b915061544a83615584565b92508261545a576154596157d2565b5b828204905092915050565b600061547082615584565b915061547b83615584565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154b4576154b36157a3565b5b828202905092915050565b60006154ca82615584565b91506154d583615584565b9250828210156154e8576154e76157a3565b5b828203905092915050565b60006154fe82615564565b9050919050565b600061551082615564565b9050919050565b60008115159050919050565b6000819050919050565b6000615538826154f3565b9050919050565b600061554a826154f3565b9050919050565b600081905061555f82615ed0565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006155b6826155bd565b9050919050565b60006155c882615564565b9050919050565b60006155da826155e1565b9050919050565b60006155ec82615564565b9050919050565b60006155fe82615551565b9050919050565b60006156108261559e565b9050919050565b82818337600083830152505050565b60005b83811015615644578082015181840152602081019050615629565b83811115615653576000848401525b50505050565b6000600282049050600182168061567157607f821691505b6020821081141561568557615684615830565b5b50919050565b6156948261588e565b810181811067ffffffffffffffff821117156156b3576156b261585f565b5b80604052505050565b60006156c782615584565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156fa576156f96157a3565b5b600182019050919050565b60006157108261558e565b915063ffffffff821415615727576157266157a3565b5b600182019050919050565b600061573d82615756565b9050919050565b600061574f82615756565b9050919050565b60006157618261589f565b9050919050565b6000819050919050565b600061577d82615584565b915061578883615584565b925082615798576157976157d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000600082015250565b7f427579426f783a206e6f74207374617274656400000000000000000000000000600082015250565b7f546f67676c6520426f783a20696e76616c696420737461747573000000000000600082015250565b7f427579426f783a20696e76616c696420616d6f756e7400000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000600082015250565b7f557064617465426f783a20626f78206964206e6f7420666f756e640000000000600082015250565b7f427579426f783a207075726368617365206c696d697420686173206265656e2060008201527f7265616368656400000000000000000000000000000000000000000000000000602082015250565b7f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000600082015250565b7f427579426f783a20696e76616c69642063616c6c657200000000000000000000600082015250565b7f557064617465426f783a206e616d652063616e6e6f7420626520656d70747900600082015250565b7f557064617465426f783a20656e64656420616e642063616e6e6f74206265206360008201527f68616e6765640000000000000000000000000000000000000000000000000000602082015250565b7f427579426f783a20696e73756666696369656e7420737570706c790000000000600082015250565b7f427579426f783a20746865206e756d626572206f662062757920626f78206d7560008201527f73742062652067726561746572207468616e2030000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f437265617465426f783a206e616d652063616e6e6f7420626520656d70747900600082015250565b7f427579426f783a2061757468656e7469636174696f6e206661696c6564000000600082015250565b7f437265617465426f783a206475706c696361746520626f782069640000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f41646d696e3a2063616c6c6572206973206e6f74207468652061646d696e0000600082015250565b7f437265617465426f783a20696e76616c69642073746174757300000000000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f427579426f783a206e6f7420696e2070726f6772657373000000000000000000600082015250565b7f44656c657465426f783a207374617465206368616e676573206172652063757260008201527f72656e746c792064697361626c65640000000000000000000000000000000000602082015250565b7f536166654d6174683a2073756220756e646572666c6f77000000000000000000600082015250565b7f437265617465426f783a2074696d65206572726f720000000000000000000000600082015250565b7f427579426f783a20656e64656400000000000000000000000000000000000000600082015250565b7f557064617465426f783a2074696d65206572726f720000000000000000000000600082015250565b7f557064617465426f783a20696e73756666696369656e74206e6674207175616e60008201527f7469747900000000000000000000000000000000000000000000000000000000602082015250565b7f437265617465426f783a20696e73756666696369656e74206e6674207175616e60008201527f7469747900000000000000000000000000000000000000000000000000000000602082015250565b60048110615ee157615ee0615801565b5b50565b615eed816154f3565b8114615ef857600080fd5b50565b615f0481615517565b8114615f0f57600080fd5b50565b615f1b8161552d565b8114615f2657600080fd5b50565b615f328161553f565b8114615f3d57600080fd5b50565b60048110615f4d57600080fd5b50565b615f5981615584565b8114615f6457600080fd5b50565b615f708161558e565b8114615f7b57600080fd5b50565b615f878161559e565b8114615f9257600080fd5b5056fea2646970667358221220a303ea7544d91cc950664bff7af9ffcd325f8dc1113a8d4b5cbcc7eb54fd967564736f6c63430008040033" + }, + { + "address": "0x27b1b071ec734d3c91d3cfc6e02520f3bde4a5b1", + "nonce": 13, + "balance": "0x0000000000000000000000000000000000000000000000000020ea731b20c856", + "code": "0x" + }, + { + "address": "0x281a95769916555d1c97036e0331b232b16edabc", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000000110d9316ec000", + "code": "0x6080604052600436106100fe5760003560e01c80636817c76c11610095578063a9fcfb3311610064578063a9fcfb3314610294578063cab13915146102c4578063d547741f146102d7578063f160619b146102f7578063f4a0a5281461030a57600080fd5b80636817c76c1461024157806383197ef01461025757806391d148541461025f578063a217fddf1461027f57600080fd5b80632f2ff15d116100d15780632f2ff15d146101cc57806336568abe146101ec5780633660a0841461020c5780633ccfd60b1461022c57600080fd5b806301ffc9a7146101035780630384ebe41461013857806318cf28341461015a578063248a9ca31461019c575b600080fd5b34801561010f57600080fd5b5061012361011e366004611476565b61032a565b60405190151581526020015b60405180910390f35b34801561014457600080fd5b506101586101533660046114b5565b610361565b005b34801561016657600080fd5b5061018e7fa8a7bc421f721cb936ea99efdad79237e6ee0b871a2a08cf648691f9584cdc7781565b60405190815260200161012f565b3480156101a857600080fd5b5061018e6101b73660046114e1565b60009081526020819052604090206001015490565b3480156101d857600080fd5b506101586101e73660046114fa565b610509565b3480156101f857600080fd5b506101586102073660046114fa565b610533565b34801561021857600080fd5b5061015861022736600461152a565b6105b1565b34801561023857600080fd5b506101586105df565b34801561024d57600080fd5b5061018e60055481565b610158610619565b34801561026b57600080fd5b5061012361027a3660046114fa565b610633565b34801561028b57600080fd5b5061018e600081565b3480156102a057600080fd5b506101236102af3660046114e1565b60076020526000908152604090205460ff1681565b6101586102d23660046114e1565b61065c565b3480156102e357600080fd5b506101586102f23660046114fa565b6108de565b61015861030536600461158e565b610903565b34801561031657600080fd5b506101586103253660046114e1565b610e09565b60006001600160e01b03198216637965db0b60e01b148061035b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b7fa8a7bc421f721cb936ea99efdad79237e6ee0b871a2a08cf648691f9584cdc7761038b81610e1a565b600480546040516370a0823160e01b81526001600160a01b0386811693820193909352600092909116906370a082319060240160206040518083038186803b1580156103d657600080fd5b505afa1580156103ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040e9190611634565b90508281106104385760405162461bcd60e51b815260040161042f9061164d565b60405180910390fd5b60048054604051639859387b60e01b81526001600160a01b038781169382019390935260009283921690639859387b906024016040805180830381600087803b15801561048457600080fd5b505af1158015610498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bc919061169c565b91509150806001600160a01b031682876001600160a01b03167f0eaa91b9d05ba24d077176868a6095c7b079b759e8bde7355e3f53a1779672a860405160405180910390a4505050505050565b60008281526020819052604090206001015461052481610e1a565b61052e8383610e24565b505050565b6001600160a01b03811633146105a35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161042f565b6105ad8282610ea8565b5050565b60006105bc81610e1a565b50600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006105ea81610e1a565b6040514790339082156108fc029083906000818181858888f1935050505015801561052e573d6000803e3d6000fd5b600061062481610e1a565b6003546001600160a01b031680ff5b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610664610f0d565b33803b9081156106b05760405162461bcd60e51b815260206004820152601760248201527610dbdb9d1c9858dd081a5cc81b9bdd08185b1b1bddd959604a1b604482015260640161042f565b3332146106ff5760405162461bcd60e51b815260206004820152601d60248201527f50726f787920636f6e7472616374206973206e6f7420616c6c6f776564000000604482015260640161042f565b600061070a81610e1a565b60048054604080516370a0823160e01b81523393810184905290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561075757600080fd5b505afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190611634565b90508581106107b05760405162461bcd60e51b815260040161042f9061164d565b3460055411156108025760405162461bcd60e51b815260206004820181905260248201527f546f776e53746f72793a204e6f7420656e6f7567682076616c75652073656e74604482015260640161042f565b60048054604051639859387b60e01b81526001600160a01b038581169382019390935260009283921690639859387b906024016040805180830381600087803b15801561084e57600080fd5b505af1158015610862573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610886919061169c565b91509150806001600160a01b031682856001600160a01b03167f0eaa91b9d05ba24d077176868a6095c7b079b759e8bde7355e3f53a1779672a860405160405180910390a4505050505050506108db60018055565b50565b6000828152602081905260409020600101546108f981610e1a565b61052e8383610ea8565b61090b610f0d565b33803b9081156109575760405162461bcd60e51b815260206004820152601760248201527610dbdb9d1c9858dd081a5cc81b9bdd08185b1b1bddd959604a1b604482015260640161042f565b3332146109a65760405162461bcd60e51b815260206004820152601d60248201527f50726f787920636f6e7472616374206973206e6f7420616c6c6f776564000000604482015260640161042f565b428310156109f65760405162461bcd60e51b815260206004820152601a60248201527f546f776e53746f72793a20446561646c696e6520506173736564000000000000604482015260640161042f565b6000339050600033604080516001600160a01b03909216602083015281018790526060810186905260800160408051601f1981840301815291815281516020928301206000818152600790935291205490915060ff1615610a925760405162461bcd60e51b8152602060048201526016602482015275151bdddb94dd1bdc9e4e88151e08115e1958dd5d195960521b604482015260640161042f565b610a9c8188610f67565b610ae85760405162461bcd60e51b815260206004820152601760248201527f546f776e53746f72793a20556e617574686f7269736564000000000000000000604482015260640161042f565b6000818152600760205260409020805460ff19166001179055600554341015610b535760405162461bcd60e51b815260206004820181905260248201527f546f776e53746f72793a204e6f7420656e6f7567682076616c75652073656e74604482015260640161042f565b60048054604051639859387b60e01b81526001600160a01b038581169382019390935260009283921690639859387b906024016040805180830381600087803b158015610b9f57600080fd5b505af1158015610bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd7919061169c565b60048054604051639b0e309560e01b81529182018490529294509092506000916001600160a01b031690639b0e30959060240160806040518083038186803b158015610c2257600080fd5b505afa158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5a91906116c1565b60408101519091506001600160a01b03163314610cc85760405162461bcd60e51b815260206004820152602660248201527f546f776e53746f72793a20596f7520646f206e6f74206f776e2074686973206160448201526518d8dbdd5b9d60d21b606482015260840161042f565b8815610db857604080516001808252818301909252600091602080830190803683370190505090508381600081518110610d0457610d04611736565b60209081029190910101526040805160018082528183019092526000918160200160208202803683370190505090508a81600081518110610d4757610d47611736565b60209081029190910101526004805460405163423caec560e11b81526001600160a01b03909116916384795d8a91610d83918691869101611787565b600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050505050505b816001600160a01b031683866001600160a01b03167f0eaa91b9d05ba24d077176868a6095c7b079b759e8bde7355e3f53a1779672a860405160405180910390a45050505050505061052e60018055565b6000610e1481610e1a565b50600555565b6108db8133610fec565b610e2e8282610633565b6105ad576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610e643390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610eb28282610633565b156105ad576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60026001541415610f605760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161042f565b6002600155565b600080610fc1846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6002549091506001600160a01b0316610fda8285611045565b6001600160a01b031614949350505050565b610ff68282610633565b6105ad5761100381611069565b61100e83602061107b565b60405160200161101f9291906117e5565b60408051601f198184030181529082905262461bcd60e51b825261042f9160040161185a565b6000806000611054858561121e565b9150915061106181611264565b509392505050565b606061035b6001600160a01b03831660145b6060600061108a8360026118a3565b6110959060026118c2565b67ffffffffffffffff8111156110ad576110ad611547565b6040519080825280601f01601f1916602001820160405280156110d7576020820181803683370190505b509050600360fc1b816000815181106110f2576110f2611736565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061112157611121611736565b60200101906001600160f81b031916908160001a90535060006111458460026118a3565b6111509060016118c2565b90505b60018111156111c8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061118457611184611736565b1a60f81b82828151811061119a5761119a611736565b60200101906001600160f81b031916908160001a90535060049490941c936111c1816118da565b9050611153565b5083156112175760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161042f565b9392505050565b6000808251604114156112555760208301516040840151606085015160001a611249878285856113b2565b9450945050505061125d565b506000905060025b9250929050565b6000816004811115611278576112786118f1565b14156112815750565b6001816004811115611295576112956118f1565b14156112e35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161042f565b60028160048111156112f7576112f76118f1565b14156113455760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161042f565b6003816004811115611359576113596118f1565b14156108db5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161042f565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156113e9575060009050600361146d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561143d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114665760006001925092505061146d565b9150600090505b94509492505050565b60006020828403121561148857600080fd5b81356001600160e01b03198116811461121757600080fd5b6001600160a01b03811681146108db57600080fd5b600080604083850312156114c857600080fd5b82356114d3816114a0565b946020939093013593505050565b6000602082840312156114f357600080fd5b5035919050565b6000806040838503121561150d57600080fd5b82359150602083013561151f816114a0565b809150509250929050565b60006020828403121561153c57600080fd5b8135611217816114a0565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561158657611586611547565b604052919050565b6000806000606084860312156115a357600080fd5b833567ffffffffffffffff808211156115bb57600080fd5b818601915086601f8301126115cf57600080fd5b81356020828211156115e3576115e3611547565b6115f5601f8301601f1916820161155d565b9250818352888183860101111561160b57600080fd5b818185018285013760009183018101919091529097908601359650604090950135949350505050565b60006020828403121561164657600080fd5b5051919050565b6020808252602f908201527f546f776e53746f72793a2054686520726563697069656e74206163636f756e7460408201526e20616c72656164792065786973747360881b606082015260800190565b600080604083850312156116af57600080fd5b82519150602083015161151f816114a0565b6000608082840312156116d357600080fd5b6040516080810181811067ffffffffffffffff821117156116f6576116f6611547565b806040525082518152602083015160208201526040830151611717816114a0565b6040820152606083015161172a816114a0565b60608201529392505050565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561177c57815187529582019590820190600101611760565b509495945050505050565b60408152600061179a604083018561174c565b82810360208401526117ac818561174c565b95945050505050565b60005b838110156117d05781810151838201526020016117b8565b838111156117df576000848401525b50505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161181d8160178501602088016117b5565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161184e8160288401602088016117b5565b01602801949350505050565b60208152600082518060208401526118798160408501602087016117b5565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156118bd576118bd61188d565b500290565b600082198211156118d5576118d561188d565b500190565b6000816118e9576118e961188d565b506000190190565b634e487b7160e01b600052602160045260246000fdfea264697066735822122008a842452f6a793cb19a78c4d8bcad010af00e14dbdccb4c6a4015240fd8d8cf64736f6c63430008090033" + }, + { + "address": "0x7a0def86ff7de5e3dc19a8d9cfbb7641db9c33d9", + "nonce": 18, + "balance": "0x000000000000000000000000000000000000000000000000001b6e6683008020", + "code": "0x" + }, + { + "address": "0xbe001e07c10b67da88283160082a2b3834ca1ee0", + "nonce": 3, + "balance": "0x00000000000000000000000000000000000000000000000000325df2a007b598", + "code": "0x" + }, + { + "address": "0x751a8a5b62a98f8945e637d319845378253ac9d0", + "nonce": 38, + "balance": "0x0000000000000000000000000000000000000000000000000013b8007ce06c90", + "code": "0x" + }, + { + "address": "0x701b952c0346620ca736861650ea6f39a4139455", + "nonce": 23, + "balance": "0x0000000000000000000000000000000000000000000000000034b42418d4ec8f", + "code": "0x" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106102045760003560e01c806309beabc1146102095780630e1552f0146102395780631621835f1461026c57806316dc165b146102fe57806317fdacb9146103115780631aae2e5514610326578063252c09d71461033d5780632c4812521461037757806333005cd51461039f5780633c8a7d8d146103aa578063490e6cbc146103bd5780634cd70e91146103d0578063537c2d8e14610402578063544e705714610422578063588e59ae1461044d57806358c51ce61461045657806359dd14361461046a57806362c944ca1461047d57806362ccaafd146104905780636ad1718f146104e45780636d01843b146104f75780636f73f0061461051157806375c0e0d51461053157806381794fba146105b4578063857f812f146105e0578063872d1f15146105f35780638790aca314610606578063883bdbfd146106d457806398a0f72e146106f4578063a34123a714610714578063b0f5925714610727578063b14184e6146107a0578063b74d60a9146107c0578063b7d19fc4146107c8578063c19d93fb146107db578063c45a01551461089f578063d38a85ad146108b2578063d3b16864146108c5578063ddca3f43146108d9578063e556289f146108ef578063edcba3b2146108fa578063f0163ef41461091d578063f094685a14610930578063ff12504e14610943575b600080fd5b60065461021c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61024c61024736600461366c565b610956565b604080516001600160801b03938416815292909116602083015201610230565b6102c061027a366004613866565b600f60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b604080519687526001600160801b039586166020880152938516938601939093529083166060850152821660808401521660a082015260c001610230565b60025461021c906001600160a01b031681565b61032461031f366004613b2c565b610af4565b005b61032f60045481565b604051908152602001610230565b61035061034b366004613866565b610b9c565b6040805163ffffffff909416845260069290920b6020840152151590820152606001610230565b61038a610385366004613751565b610bd0565b60408051928352602083019190915201610230565b61032f620100105481565b61038a6103b836600461358f565b610d53565b6103246103cb366004613791565b610f08565b6103e36103de366004613931565b6110ae565b604080516001600160801b039093168352602083019190915201610230565b60005461040f9060020b81565b60405160029190910b8152602001610230565b610435610430366004613967565b611230565b6040516001600160801b039091168152602001610230565b61032f60055481565b60035461040f90600160b81b900460020b81565b61038a610478366004613751565b61136e565b6103e361048b366004613931565b6114e4565b6102c061049e366004613866565b600e60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b61024c6104f23660046136e3565b611636565b60005461043590600160301b90046001600160801b031681565b61052461051f3660046138b9565b6117df565b6040516102309190613d8c565b61057d61053f36600461389f565b600b6020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b929060ff1685565b604080516001600160801b039096168652600f9490940b60208601529284019190915260608301521515608082015260a001610230565b62010016546105cc90600160a01b900462ffffff1681565b60405162ffffff9091168152602001610230565b61038a6105ee366004613751565b611a6f565b61038a610601366004613616565b611b2e565b61067361061436600461389f565b600d6020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160801b0380871697600160801b978890048216978583169581900483169480841694919004909216918a565b604080516001600160801b039b8c168152998b1660208b01528901979097526060880195909552928716608087015290861660a0860152851660c085015290931660e083015261010082019290925261012081019190915261014001610230565b6106e76106e23660046137db565b611cb9565b6040516102309190613d51565b61032f61070236600461387e565b600a6020526000908152604090205481565b61038a6107223660046138eb565b611d40565b61076e610735366004613866565b600960205260009081526040902080546001820154600283015460038401546004909401546001600160801b0390931693919290919085565b604080516001600160801b0390961686526020860194909452928401919091526060830152608082015260a001610230565b6107b36107ae3660046138b9565b611eef565b6040516102309190613d0a565b6103246120f5565b60035461021c906001600160a01b031681565b600754600854610840916001600160a01b03811691600160a01b820460020b9161ffff600160b81b8204811692600160c81b8304821692600160d81b81049092169160ff600160e81b90910416906001600160801b0380821691600160801b90041688565b604080516001600160a01b03909916895260029790970b602089015261ffff9586169688019690965292841660608701529216608085015290151560a08401526001600160801b0390811660c08401521660e082015261010001610230565b60015461021c906001600160a01b031681565b6103246108c0366004613b4e565b612264565b60005461040f906301000000900460020b81565b6003546105cc90600160a01b900462ffffff1681565b61032f6201000f5481565b61040f61090836600461389f565b600c6020526000908152604090205460020b81565b61043561092b366004613967565b6123ec565b61038a61093e366004613751565b6124a5565b61024c61095136600461366c565b612564565b620100115460009081906001600160a01b0316301461097457600080fd5b600754600160e81b900460ff16156109a75760405162461bcd60e51b815260040161099e90613f3a565b60405180910390fd5b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906109e9908b908b908b908b908b90602401613c60565b60408051601f198184030181529181526020820180516001600160e01b031662e1552f60e41b17905251610a1d9190613bf2565b600060405180830381855af49150503d8060008114610a58576040519150601f19603f3d011682016040523d82523d6000602084013e610a5d565b606091505b50915091508115610ad05760008082806020019051810190610a7f9190613a96565b6040519399509197509350915060028b900b906001600160a01b038d169060008051602061445583398151915290610ac1908a908a9088908890600090613f81565b60405180910390a35050610ad9565b610ad981612b20565b50506007805460ff60e81b1916905590969095509350505050565b62010011546001600160a01b03163014610b0d57600080fd5b600754600160e81b900460ff1615610b375760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179081905561ffff600160d81b9091048116908216811015610b8b57610b6f60108284612bb3565b506007805461ffff60d81b1916600160d81b61ffff8516021790555b50506007805460ff60e81b19169055565b60108161ffff8110610bad57600080fd5b015463ffffffff81169150600160201b810460060b90600160581b900460ff1683565b620100115460009081906001600160a01b03163014610bee57600080fd5b600754600160e81b900460ff1615610c185760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100135460405160009182916001600160a01b0390911690610c5a908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b0316631624092960e11b17905251610c8f9190613bf2565b600060405180830381855af49150503d8060008114610cca576040519150601f19603f3d011682016040523d82523d6000602084013e610ccf565b606091505b50915091508115610ad05780806020019051810190610cee9190613b71565b60035460028054600754604051959950939750600160a01b80840462ffffff16956001600160a01b0394851695949092169360008051602061443583398151915293610d46936000938d938d93919004900b90613e16565b60405180910390a4610ad9565b620100115460009081906001600160a01b03163014610d7157600080fd5b600754600160e81b900460ff1615610d9b5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100145460405160009182916001600160a01b0390911690610ddf908c908c908c908c908c908c90602401613c0e565b60408051601f198184030181529181526020820180516001600160e01b0316633c8a7d8d60e01b17905251610e149190613bf2565b600060405180830381855af49150503d8060008114610e4f576040519150601f19603f3d011682016040523d82523d6000602084013e610e54565b606091505b50915091508115610ee35780806020019051810190610e739190613b71565b604080513381526001600160801b038b166020820152908101839052606081018290529195509350600289810b91908b900b906001600160a01b038d16907f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde9060800160405180910390a4610eec565b610eec81612b20565b50506007805460ff60e81b191690559097909650945050505050565b62010011546001600160a01b03163014610f2157600080fd5b600754600160e81b900460ff1615610f4b5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100165460405160009182916001600160a01b0390911690610f8d9089908990899089908990602401613cdc565b60408051601f198184030181529181526020820180516001600160e01b03166312439b2f60e21b17905251610fc29190613bf2565b600060405180830381855af49150503d8060008114610ffd576040519150601f19603f3d011682016040523d82523d6000602084013e611002565b606091505b5091509150811561108f57600080600080848060200190518101906110279190613b94565b604080518581526020810185905290810183905260608101829052939750919550935091506001600160a01b038c169033907fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6339060800160405180910390a350505050611098565b61109881612b20565b50506007805460ff60e81b191690555050505050565b620100115460009081906001600160a01b031630146110cc57600080fd5b600754600160e81b900460ff16156110f65760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906111329088908890602401613e36565b60408051601f198184030181529181526020820180516001600160e01b0316634cd70e9160e01b179052516111679190613bf2565b600060405180830381855af49150503d80600081146111a2576040519150601f19603f3d011682016040523d82523d6000602084013e6111a7565b606091505b5091509150811561120f57600080828060200190518101906111c99190613af4565b60405193995091975093509150600289900b90339060008051602061441583398151915290611200908a9087908790600190613f57565b60405180910390a35050611218565b61121881612b20565b50506007805460ff60e81b1916905590939092509050565b62010011546000906001600160a01b0316301461124c57600080fd5b600754600160e81b900460ff16156112765760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906112b490889088908890602401613e52565b60408051601f198184030181529181526020820180516001600160e01b031663544e705760e01b179052516112e99190613bf2565b600060405180830381855af49150503d8060008114611324576040519150601f19603f3d011682016040523d82523d6000602084013e611329565b606091505b5091509150811561134f57808060200190518101906113489190613a4c565b9250611358565b61135881612b20565b50506007805460ff60e81b191690559392505050565b620100115460009081906001600160a01b0316301461138c57600080fd5b600754600160e81b900460ff16156113b65760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100125460405160009182916001600160a01b03909116906113f8908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b0316632cee8a1b60e11b1790525161142d9190613bf2565b600060405180830381855af49150503d8060008114611468576040519150601f19603f3d011682016040523d82523d6000602084013e61146d565b606091505b50915091508115610ad0578080602001905181019061148c9190613b71565b60035460028054600754604051959950939750600160a01b80840462ffffff16956001600160a01b0394851695949092169360008051602061443583398151915293610d46936001938d938d93919004900b90613e16565b620100115460009081906001600160a01b0316301461150257600080fd5b600754600160e81b900460ff161561152c5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906115689088908890602401613e36565b60408051601f198184030181529181526020820180516001600160e01b0316633164a26560e11b1790525161159d9190613bf2565b600060405180830381855af49150503d80600081146115d8576040519150601f19603f3d011682016040523d82523d6000602084013e6115dd565b606091505b5091509150811561120f57600080828060200190518101906115ff9190613af4565b60405193995091975093509150600289900b90339060008051602061441583398151915290611200908a9087908790600090613f57565b620100115460009081906001600160a01b0316301461165457600080fd5b600754600160e81b900460ff161561167e5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905562010015546040516001600160a01b038981166024830152600289900b60448301526001600160801b0388811660648401528716608483015285151560a4830152600092839291169060c40160408051601f198184030181529181526020820180516001600160e01b0316636ad1718f60e01b179052516117129190613bf2565b600060405180830381855af49150503d806000811461174d576040519150601f19603f3d011682016040523d82523d6000602084013e611752565b606091505b50915091508115610ad057808060200190518101906117719190613a68565b604080516001600160a01b038d1681526001600160801b0384811660208301528316818301528815156060820152905192965090945060028a900b9133917f7d3d0e34c86e56b4dcd993c09bbbf1b04527ab27b4365dffca10e0ded914e071919081900360800190a3610ad9565b60608160020b8360020b126118065760405162461bcd60e51b815260040161099e90613ec8565b600054600290810b810b9084900b12156118325760405162461bcd60e51b815260040161099e90613f02565b60005463010000009004600290810b810b9083900b13156118655760405162461bcd60e51b815260040161099e90613f1e565b60035461187c90600160b81b900460020b84614305565b60020b1561189c5760405162461bcd60e51b815260040161099e90613ee5565b6003546118b390600160b81b900460020b83614305565b60020b156118d35760405162461bcd60e51b815260040161099e90613eab565b600354600090600160b81b900460020b6118ed85856141d0565b6118f7919061409d565b60020b9050806001600160401b0381111561192257634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561198257816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a082015282526000199092019101816119405790505b5091506000845b8460020b8160020b1215611a66576040805160c081018252600283810b900b6000818152600d602081815285832080546001600160801b038082168852600160801b91829004811684890152600183015498880198909852600382015404871660608701526004810154909616608086015292909152905260059091015460a08201528451859084908110611a2e57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508180611a44906142ea565b600354909350611a5f9150600160b81b900460020b82613fb4565b9050611989565b50505092915050565b620100115460009081906001600160a01b03163014611a8d57600080fd5b600754600160e81b900460ff1615611ab75760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100125460405160009182916001600160a01b0390911690611af9908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b031663857f812f60e01b1790525161142d9190613bf2565b620100115460009081906001600160a01b03163014611b4c57600080fd5b600754600160e81b900460ff1615611b765760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905562010014546040516001600160a01b038981166024830152600289810b604484015288900b60648301526084820187905260a48201869052600092839291169060c40160408051601f198184030181529181526020820180516001600160e01b031663872d1f1560e01b17905251611c019190613bf2565b600060405180830381855af49150503d8060008114611c3c576040519150601f19603f3d011682016040523d82523d6000602084013e611c41565b606091505b50915091508115610ad05780806020019051810190611c609190613b71565b604080516001600160a01b038d168152602081018490529081018290529195509350600288810b91908a900b9033907ff69135213cd78fa4cffb855edf80272133f69bd8a6fb3236340a69b4d6e248e390606001610d46565b62010011546060906001600160a01b03163014611cd557600080fd5b611d394284848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600754601094939250600160a01b810460020b915061ffff600160b81b8204811691600160c81b900416612c71565b9392505050565b620100115460009081906001600160a01b03163014611d5e57600080fd5b600754600160e81b900460ff1615611d885760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b1790556201001454604051600287810b602483015286900b60448201526001600160801b038516606482015260009182916001600160a01b039091169060840160408051601f198184030181529181526020820180516001600160e01b031663a34123a760e01b17905251611e0d9190613bf2565b600060405180830381855af49150503d8060008114611e48576040519150601f19603f3d011682016040523d82523d6000602084013e611e4d565b606091505b50915091508115611ecd5780806020019051810190611e6c9190613b71565b604080516001600160801b0389168152602081018490529081018290529195509350600287810b919089900b9033907f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c9060600160405180910390a4611ed6565b611ed681612b20565b50506007805460ff60e81b191690559094909350915050565b60608160020b8360020b12611f165760405162461bcd60e51b815260040161099e90613ec8565b600054600290810b810b9084900b1215611f425760405162461bcd60e51b815260040161099e90613f02565b60005463010000009004600290810b810b9083900b1315611f755760405162461bcd60e51b815260040161099e90613f1e565b600354611f8c90600160b81b900460020b84614305565b60020b15611fac5760405162461bcd60e51b815260040161099e90613ee5565b600354611fc390600160b81b900460020b83614305565b60020b15611fe35760405162461bcd60e51b815260040161099e90613eab565b600354600090600160b81b900460020b611ffd85856141d0565b612007919061409d565b60020b9050806001600160401b0381111561203257634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561205b578160200160208202803683370190505b5091506000845b8460020b8160020b1215611a6657600281810b900b6000908152600b60205260409020548451600160801b909104600f0b908590849081106120b457634e487b7160e01b600052603260045260246000fd5b6020026020010190600f0b9081600f0b8152505081806120d3906142ea565b6003549093506120ee9150600160b81b900460020b82613fb4565b9050612062565b62010011546001600160a01b0316301461210e57600080fd5b600754600160e81b900460ff16156121385760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905560015460408051636c66a87160e11b815290516001600160a01b039092169163d8cd50e291600480820192602092909190829003018186803b15801561219057600080fd5b505afa1580156121a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c89190613573565b6001600160a01b0316336001600160a01b03161461220d5760405162461bcd60e51b8152602060048201526002602482015261272960f11b604482015260640161099e565b6002546201000f5461222a916001600160a01b0316903390612d91565b6003546201001054612247916001600160a01b0316903390612d91565b60006201000f81905562010010556007805460ff60e81b19169055565b62010011546001600160a01b0316301461227d57600080fd5b600754600160e81b900460ff16156122a75760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905560015460408051638da5cb5b60e01b815290516001600160a01b0390921691638da5cb5b91600480820192602092909190829003018186803b1580156122ff57600080fd5b505afa158015612313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123379190613573565b6001600160a01b0316336001600160a01b03161461237d5760405162461bcd60e51b81526020600482015260036024820152622727a760e91b604482015260640161099e565b60648162ffffff1611156123b95760405162461bcd60e51b815260206004820152600360248201526204650360ec1b604482015260640161099e565b62010016805462ffffff909216600160a01b0262ffffff60a01b199092169190911790556007805460ff60e81b19169055565b62010011546000906001600160a01b0316301461240857600080fd5b600754600160e81b900460ff16156124325760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b039091169061247090889088908890602401613e52565b60408051601f198184030181529181526020820180516001600160e01b0316633c058fbd60e21b179052516112e99190613bf2565b620100115460009081906001600160a01b031630146124c357600080fd5b600754600160e81b900460ff16156124ed5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100135460405160009182916001600160a01b039091169061252f908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b031663784a342d60e11b17905251610c8f9190613bf2565b620100115460009081906001600160a01b0316301461258257600080fd5b600754600160e81b900460ff16156125ac5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906125ee908b908b908b908b908b90602401613c60565b60408051601f198184030181529181526020820180516001600160e01b031660016276d7d960e11b0319179052516126269190613bf2565b600060405180830381855af49150503d8060008114612661576040519150601f19603f3d011682016040523d82523d6000602084013e612666565b606091505b50915091508115610ad057600080828060200190518101906126889190613a96565b6040519399509197509350915060028b900b906001600160a01b038d169060008051602061445583398151915290610ac1908a908a9088908890600190613f81565b60008060008360020b126126e1578260020b6126ee565b8260020b6126ee9061437d565b90506126fd620d89e71961435c565b60020b8111156127335760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640161099e565b60006001821661274757600160801b612759565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561278e576080612789826ffff97272373d413259a46990580e213a6141b1565b901c90505b60048216156127b85760806127b3826ffff2e50f5f656932ef12357cf3c7fdcc6141b1565b901c90505b60088216156127e25760806127dd826fffe5caca7e10e4e61c3624eaa0941cd06141b1565b901c90505b601082161561280c576080612807826fffcb9843d60f6159c9db58835c9266446141b1565b901c90505b6020821615612836576080612831826fff973b41fa98c081472e6896dfb254c06141b1565b901c90505b604082161561286057608061285b826fff2ea16466c96a3843ec78b326b528616141b1565b901c90505b608082161561288a576080612885826ffe5dee046a99a2a811c461f1969c30536141b1565b901c90505b6101008216156128b55760806128b0826ffcbe86c7900a88aedcffc83b479aa3a46141b1565b901c90505b6102008216156128e05760806128db826ff987a7253ac413176f2b074cf7815e546141b1565b901c90505b61040082161561290b576080612906826ff3392b0822b70005940c7a398e4b70f36141b1565b901c90505b610800821615612936576080612931826fe7159475a2c29b7443b29c7fa6e889d96141b1565b901c90505b61100082161561296157608061295c826fd097f3bdfd2022b8845ad8f792aa58256141b1565b901c90505b61200082161561298c576080612987826fa9f746462d870fdf8a65dc1f90e061e56141b1565b901c90505b6140008216156129b75760806129b2826f70d869a156d2a1b890bb3df62baf32f76141b1565b901c90505b6180008216156129e25760806129dd826f31be135f97d08fd981231505542fcfa66141b1565b901c90505b62010000821615612a0e576080612a09826f09aa508b5b7a84e1c677de54f3e99bc96141b1565b901c90505b62020000821615612a39576080612a34826e5d6af8dedb81196699c329225ee6046141b1565b901c90505b62040000821615612a63576080612a5e826d2216e584f5fa1ea926041bedfe986141b1565b901c90505b62080000821615612a8b576080612a86826b048a170391f7dc42444e8fa26141b1565b901c90505b60008460020b1315612aa657612aa38160001961410c565b90505b612ab4600160201b82614348565b15612ac0576001612ac3565b60005b612ad49060ff16602083901c614065565b949350505050565b6040805160608101825263ffffffff83168082526000602083015260019190920181905283546001600160601b031916909117600160581b178355805b9250929050565b8051604014612b9357604481511015612b605760405162461bcd60e51b8152602060048201526002602482015261646360f01b604482015260640161099e565b60048101905080806020019051810190612b7a91906139a4565b60405162461bcd60e51b815260040161099e9190613e78565b602081019050805160405181815260208301519150816020820152604081fd5b6000808361ffff1611612bee5760405162461bcd60e51b81526020600482015260036024820152622622a760e91b604482015260640161099e565b8261ffff168261ffff1611612c04575081611d39565b825b8261ffff168161ffff161015612c68576001858261ffff1661ffff8110612c3d57634e487b7160e01b600052603260045260246000fd5b01805463ffffffff191663ffffffff9290921691909117905580612c60816142c8565b915050612c06565b50909392505050565b606060008261ffff1611612cab5760405162461bcd60e51b81526020600482015260016024820152604960f81b604482015260640161099e565b84516001600160401b03811115612cd257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612cfb578160200160208202803683370190505b50905060005b8551811015612d8657612d3f8888888481518110612d2f57634e487b7160e01b600052603260045260246000fd5b6020026020010151888888612e92565b828281518110612d5f57634e487b7160e01b600052603260045260246000fd5b602002602001019060060b908160060b815250508080612d7e906142ea565b915050612d01565b509695505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612ded9190613bf2565b6000604051808303816000865af19150503d8060008114612e2a576040519150601f19603f3d011682016040523d82523d6000602084013e612e2f565b606091505b5091509150818015612e59575080511580612e59575080806020019051810190612e59919061384a565b612e8b5760405162461bcd60e51b8152602060048201526003602482015262544e5360e81b604482015260640161099e565b5050505050565b600063ffffffff8516612f2d576000878461ffff1661ffff8110612ec657634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b90920460ff1615159383019390935290925090881614612f2257612f1f818887613013565b90505b602001519050613009565b6000612f398688614273565b9050600080612f4c8a8a858a8a8a61307d565b91509150816000015163ffffffff168363ffffffff161415612f7657506020015191506130099050565b805163ffffffff84811691161415612f9657602001519250613009915050565b81518151600091612fa691614273565b63ffffffff1690506000836000015185612fc09190614273565b63ffffffff169050808285602001518560200151612fde9190614217565b612fe891906140d7565b612ff29190614120565b84602001516130019190613ffa565b955050505050505b9695505050505050565b61301b6134fd565b835160009061302a9085614273565b63ffffffff16905060405180606001604052808563ffffffff168152602001828560020b6130589190614120565b87602001516130679190613ffa565b60060b8152600160209091015295945050505050565b6130856134fd565b61308d6134fd565b878461ffff1661ffff81106130b257634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b90910460ff16151592820192909252925061310290889088613258565b1561313b578563ffffffff16826000015163ffffffff16141561312657508061324d565b81613132838888613013565b9150915061324d565b878361314886600161403f565b6131529190614327565b61ffff1661ffff811061317557634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff16151591810182905292506131fa5760408051606081018252895463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff1615159181019190915291505b61320987836000015188613258565b61323b5760405162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015260640161099e565b6132488888888787613327565b915091505b965096945050505050565b60008363ffffffff168363ffffffff161115801561328257508363ffffffff168263ffffffff1611155b1561329e578163ffffffff168363ffffffff1611159050611d39565b60008463ffffffff168463ffffffff16116132cc576132c763ffffffff8516600160201b61407d565b6132d4565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff161161330b5761330663ffffffff8516600160201b61407d565b613313565b8363ffffffff165b64ffffffffff169091111595945050505050565b61332f6134fd565b6133376134fd565b60008361334586600161403f565b61334f9190614327565b61ffff169050600060018561ffff16836133699190614065565b613373919061425c565b905060005b60026133848385614065565b61338e919061410c565b90508961339f61ffff881683614348565b61ffff81106133be57634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff16151591810182905295506134155761340e816001614065565b9250613378565b8961ffff8716613426836001614065565b6134309190614348565b61ffff811061344f57634e487b7160e01b600052603260045260246000fd5b60408051606081018252929091015463ffffffff81168352600160201b8104600690810b810b900b602084015260ff600160581b9091041615159082015285519094506000906134a1908b908b613258565b90508080156134ba57506134ba8a8a8760000151613258565b156134c557506134f0565b806134dc576134d560018361425c565b92506134ea565b6134e7826001614065565b93505b50613378565b5050509550959350505050565b604080516060810182526000808252602082018190529181019190915290565b60008083601f84011261352e578182fd5b5081356001600160401b03811115613544578182fd5b602083019150836020828501011115612b1957600080fd5b8035600281900b811461356e57600080fd5b919050565b600060208284031215613584578081fd5b8151611d39816143d9565b60008060008060008060a087890312156135a7578182fd5b86356135b2816143d9565b95506135c06020880161355c565b94506135ce6040880161355c565b935060608701356135de816143ff565b925060808701356001600160401b038111156135f8578283fd5b61360489828a0161351d565b979a9699509497509295939492505050565b600080600080600060a0868803121561362d578081fd5b8535613638816143d9565b94506136466020870161355c565b93506136546040870161355c565b94979396509394606081013594506080013592915050565b600080600080600060808688031215613683578081fd5b853561368e816143d9565b945061369c6020870161355c565b935060408601356136ac816143ff565b925060608601356001600160401b038111156136c6578182fd5b6136d28882890161351d565b969995985093965092949392505050565b600080600080600060a086880312156136fa578081fd5b8535613705816143d9565b94506137136020870161355c565b93506040860135613723816143ff565b92506060860135613733816143ff565b91506080860135613743816143f1565b809150509295509295909350565b600080600080600060808688031215613768578081fd5b8535613773816143d9565b94506020860135613783816143ff565b93506136ac6040870161355c565b6000806000806000608086880312156137a8578283fd5b85356137b3816143d9565b9450602086013593506040860135925060608601356001600160401b038111156136c6578182fd5b600080602083850312156137ed578182fd5b82356001600160401b0380821115613803578384fd5b818501915085601f830112613816578384fd5b813581811115613824578485fd5b8660208260051b8501011115613838578485fd5b60209290920196919550909350505050565b60006020828403121561385b578081fd5b8151611d39816143f1565b600060208284031215613877578081fd5b5035919050565b60006020828403121561388f578081fd5b81358060010b8114611d39578182fd5b6000602082840312156138b0578081fd5b611d398261355c565b600080604083850312156138cb578182fd5b6138d48361355c565b91506138e26020840161355c565b90509250929050565b6000806000606084860312156138ff578081fd5b6139088461355c565b92506139166020850161355c565b91506040840135613926816143ff565b809150509250925092565b60008060408385031215613943578182fd5b61394c8361355c565b9150602083013561395c816143ff565b809150509250929050565b60008060006060848603121561397b578081fd5b6139848461355c565b92506020840135613994816143ff565b91506040840135613926816143f1565b6000602082840312156139b5578081fd5b81516001600160401b03808211156139cb578283fd5b818401915084601f8301126139de578283fd5b8151818111156139f0576139f06143c3565b604051601f8201601f19908116603f01168101908382118183101715613a1857613a186143c3565b81604052828152876020848701011115613a30578586fd5b613a41836020830160208801614298565b979650505050505050565b600060208284031215613a5d578081fd5b8151611d39816143ff565b60008060408385031215613a7a578182fd5b8251613a85816143ff565b602084015190925061395c816143ff565b60008060008060808587031215613aab578182fd5b8451613ab6816143ff565b6020860151909450613ac7816143ff565b6040860151909350613ad8816143ff565b6060860151909250613ae9816143ff565b939692955090935050565b60008060008060808587031215613b09578182fd5b8451613b14816143ff565b602086015160408701519195509350613ad8816143ff565b600060208284031215613b3d578081fd5b813561ffff81168114611d39578182fd5b600060208284031215613b5f578081fd5b813562ffffff81168114611d39578182fd5b60008060408385031215613b83578182fd5b505080516020909101519092909150565b60008060008060808587031215613ba9578182fd5b505082516020840151604085015160609095015191969095509092509050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008251613c04818460208701614298565b9190910192915050565b6001600160a01b0387168152600286810b602083015285900b60408201526001600160801b038416606082015260a060808201819052600090613c549083018486613bc9565b98975050505050505050565b6001600160a01b0386168152600285900b60208201526001600160801b0384166040820152608060608201819052600090613a419083018486613bc9565b6001600160a01b03861681526001600160801b0385166020820152600284900b6040820152608060608201819052600090613a419083018486613bc9565b60018060a01b0386168152846020820152836040820152608060608201526000613a41608083018486613bc9565b6020808252825182820181905260009190848201906040850190845b81811015613d45578351600f0b83529284019291840191600101613d26565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613d4557835160060b83529284019291840191600101613d6d565b602080825282518282018190526000919060409081850190868401855b82811015613e0957815180516001600160801b0390811686528782015181168887015286820151878701526060808301518216908701526080808301519091169086015260a0908101519085015260c09093019290850190600101613da9565b5091979650505050505050565b93151584526020840192909252604083015260020b606082015260800190565b60029290920b82526001600160801b0316602082015260400190565b60029390930b83526001600160801b039190911660208301521515604082015260600190565b6020815260008251806020840152613e97816040850160208701614298565b601f01601f19169190910160400192915050565b60208082526003908201526205244360ec1b604082015260600190565b602080825260039082015262261e2960e91b604082015260600190565b60208082526003908201526204c44360ec1b604082015260600190565b6020808252600290820152614c4f60f01b604082015260600190565b602080825260029082015261524f60f01b604082015260600190565b6020808252600390820152621312d160ea1b604082015260600190565b6001600160801b039485168152928416602084015292166040820152901515606082015260800190565b6001600160801b039586168152938516602085015291841660408401529092166060820152901515608082015260a00190565b60008160020b8360020b82821282627fffff03821381151615613fd957613fd9614397565b82627fffff19038212811615613ff157613ff1614397565b50019392505050565b60008160060b8360060b82821282667fffffffffffff0382138115161561402357614023614397565b82667fffffffffffff19038212811615613ff157613ff1614397565b600061ffff80831681851680830382111561405c5761405c614397565b01949350505050565b6000821982111561407857614078614397565b500190565b600064ffffffffff80831681851680830382111561405c5761405c614397565b60008160020b8360020b806140b4576140b46143ad565b627fffff198214600019821416156140ce576140ce614397565b90059392505050565b60008160060b8360060b806140ee576140ee6143ad565b667fffffffffffff198214600019821416156140ce576140ce614397565b60008261411b5761411b6143ad565b500490565b60008160060b8360060b667fffffffffffff8382138484138383048511828216161561414e5761414e614397565b667fffffffffffff198685128281168783058712161561417057614170614397565b87871292508582058712848416161561418b5761418b614397565b858505871281841616156141a1576141a1614397565b5050509290910295945050505050565b60008160001904831182151516156141cb576141cb614397565b500290565b60008160020b8360020b82811281627fffff19018312811516156141f6576141f6614397565b81627fffff01831381161561420d5761420d614397565b5090039392505050565b60008160060b8360060b82811281667fffffffffffff190183128115161561424157614241614397565b81667fffffffffffff01831381161561420d5761420d614397565b60008282101561426e5761426e614397565b500390565b600063ffffffff8381169083168181101561429057614290614397565b039392505050565b60005b838110156142b357818101518382015260200161429b565b838111156142c2576000848401525b50505050565b600061ffff808316818114156142e0576142e0614397565b6001019392505050565b60006000198214156142fe576142fe614397565b5060010190565b60008260020b80614318576143186143ad565b808360020b0791505092915050565b600061ffff8084168061433c5761433c6143ad565b92169190910692915050565b600082614357576143576143ad565b500690565b60008160020b627fffff1981141561437657614376614397565b9003919050565b6000600160ff1b82141561439357614393614397565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146143ee57600080fd5b50565b80151581146143ee57600080fd5b6001600160801b03811681146143ee57600080fdfe3736ba81d13006f6ea2012ba3e287f087169b55d90a9defb5966fe9eb830d7ea0fe977d619f8172f7fdbe8bb8928ef80952817d96936509f67d66346bc4cd10f4f4658280ee6d0e8f09b5e436dacaca69ec5dd7c2ba05fb010d5145a3567cdada2646970667358221220336d80b132feef86c529f37d3371b115ca9f1c5a659c38276dc7fea0925be6ab64736f6c63430008040033" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000120d915dd02ae700", + "code": "0x6080604052600436106103c35760003560e01c80636817031b116101f2578063ba9aede71161010d578063eea3f2f6116100a0578063fa4445771161006f578063fa44457714610cc9578063faf990f314610cf6578063fbfa77cf14610dd1578063fe13fcb214610df157600080fd5b8063eea3f2f614610c54578063f255527814610c69578063f3883d8b14610c89578063f851a44014610ca957600080fd5b8063cb0269c9116100dc578063cb0269c914610bde578063cefdb8b614610bf4578063e4d8f76814610c14578063ec05d5b214610c3457600080fd5b8063ba9aede714610b72578063c107532914610b88578063c66a29f014610ba8578063c74290a914610bc857600080fd5b8063990269e5116101855780639c3f1e90116101545780639c3f1e9014610a37578063a5a89c0914610b2c578063a915e53b14610b3f578063ae5efa2b14610b5257600080fd5b8063990269e5146109cc5780639a208100146109ec5780639b57862014610a0c5780639c3e86ca14610a2257600080fd5b80637323a7d3116101c15780637323a7d3146109545780637bea0d1c146109745780638d60b3921461099657806398d1e03a146109b657600080fd5b80636817031b146108d457806369953501146108f4578063704b6c0214610914578063724e78da1461093457600080fd5b80634067b132116102e2578063590f21131161027557806360a362e21161024457806360a362e214610851578063633451de146108715780636410659a1461089e57806367a52793146108be57600080fd5b8063590f2113146107975780635a29638d146107cf5780635b4c58df146107ef5780635b8d97751461082457600080fd5b8063490ae210116102b1578063490ae210146107115780634b0f534e14610731578063529a356f146107515780635841fcaa1461078157600080fd5b80634067b1321461069b57806343a28ba9146106bb5780634453a374146106d157806348328acb146106f157600080fd5b806327b42c0f1161035a57806336eba48a1161032957806336eba48a1461060f5780633833f5f51461063f5780633a2a80c71461066f5780633b0befca1461068557600080fd5b806327b42c0f146105a65780633422ead1146105c6578063347c91aa146105e657806335d4a103146105f957600080fd5b80631ce9cb8f116103965780631ce9cb8f146104575780631e261538146104845780631f285106146104a6578063225fc9fd1461058657600080fd5b806304225954146103c85780630d4d003d146103fb578063126082cf1461042b5780631bca8cf014610441575b600080fd5b3480156103d457600080fd5b506103e86103e33660046150c4565b610e11565b6040519081526020015b60405180910390f35b34801561040757600080fd5b5061041b6104163660046150f5565b610e32565b60405190151581526020016103f2565b34801561043757600080fd5b506103e861271081565b34801561044d57600080fd5b506103e860155481565b34801561046357600080fd5b506103e8610472366004615125565b60056020526000908152604090205481565b34801561049057600080fd5b506104a461049f366004615150565b6110e4565b005b3480156104b257600080fd5b506105216104c13660046150c4565b600e602052600090815260409020805460018201546002830154600384015460048501546005860154600687015460078801546008909801546001600160a01b03978816989688169795861696949560ff8516956101009095041693908a565b604080516001600160a01b039b8c168152998b1660208b0152978a169789019790975260608801959095529215156080870152951660a085015260c084019490945260e0830193909352610100820192909252610120810191909152610140016103f2565b34801561059257600080fd5b5061041b6105a13660046150f5565b61116e565b3480156105b257600080fd5b5061041b6105c13660046150f5565b611415565b3480156105d257600080fd5b506104a46105e1366004615150565b6117b2565b6103e86105f436600461517e565b611834565b34801561060557600080fd5b506103e8601e5481565b34801561061b57600080fd5b5061041b61062a366004615125565b60106020526000908152604090205460ff1681565b34801561064b57600080fd5b5061041b61065a366004615125565b601a6020526000908152604090205460ff1681565b34801561067b57600080fd5b506103e860125481565b34801561069157600080fd5b506103e8601c5481565b3480156106a757600080fd5b506104a46106b63660046151f8565b61197d565b3480156106c757600080fd5b506103e8601d5481565b3480156106dd57600080fd5b506104a46106ec366004615150565b6119fd565b3480156106fd57600080fd5b506104a461070c3660046150c4565b611a7f565b34801561071d57600080fd5b506104a461072c3660046150c4565b611aae565b34801561073d57600080fd5b506104a461074c3660046150c4565b611add565b34801561075d57600080fd5b5061041b61076c366004615125565b601b6020526000908152604090205460ff1681565b34801561078d57600080fd5b506103e860115481565b3480156107a357600080fd5b506003546107b7906001600160a01b031681565b6040516001600160a01b0390911681526020016103f2565b3480156107db57600080fd5b506002546107b7906001600160a01b031681565b3480156107fb57600080fd5b5061080f61080a366004615224565b611b0c565b604080519283529015156020830152016103f2565b34801561083057600080fd5b506103e861083f366004615125565b60196020526000908152604090205481565b34801561085d57600080fd5b5061041b61086c3660046150f5565b611c50565b34801561087d57600080fd5b506103e861088c366004615125565b600a6020526000908152604090205481565b3480156108aa57600080fd5b506104a46108b9366004615277565b611e8a565b3480156108ca57600080fd5b506103e860065481565b3480156108e057600080fd5b506104a46108ef366004615125565b612495565b34801561090057600080fd5b506104a461090f366004615125565b6124e1565b34801561092057600080fd5b506104a461092f366004615125565b61252d565b34801561094057600080fd5b506104a461094f366004615125565b612579565b34801561096057600080fd5b506104a461096f3660046150f5565b6125c5565b34801561098057600080fd5b50610989612723565b6040516103f291906152b9565b3480156109a257600080fd5b506104a46109b136600461537d565b6128da565b3480156109c257600080fd5b506103e860045481565b3480156109d857600080fd5b506104a46109e73660046150c4565b61290f565b3480156109f857600080fd5b506103e8610a073660046150f5565b61293e565b348015610a1857600080fd5b506103e860145481565b348015610a2e57600080fd5b50600c546103e8565b348015610a4357600080fd5b50610ac2610a523660046150c4565b601660205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b0396871697958716969094169492939192909160ff80821691610100810482169162010000820481169163010000009004168b565b604080516001600160a01b039c8d1681529a8c1660208c015298909a16978901979097526060880195909552608087019390935260a086019190915260c0850152151560e084015215156101008301521515610120820152901515610140820152610160016103f2565b6104a4610b3a36600461539f565b612af8565b6103e8610b4d366004615421565b612eb4565b348015610b5e57600080fd5b506104a4610b6d3660046154c5565b613162565b348015610b7e57600080fd5b506103e860085481565b348015610b9457600080fd5b506104a4610ba3366004615549565b613262565b348015610bb457600080fd5b506103e8610bc3366004615549565b613349565b348015610bd457600080fd5b506103e860095481565b348015610bea57600080fd5b506103e860135481565b348015610c0057600080fd5b506104a4610c0f366004615575565b613390565b348015610c2057600080fd5b506104a4610c2f3660046155a7565b613524565b348015610c4057600080fd5b506104a4610c4f3660046155f3565b6135fe565b348015610c6057600080fd5b50600f546103e8565b348015610c7557600080fd5b506104a4610c8436600461562b565b613642565b348015610c9557600080fd5b506103e8610ca43660046150f5565b6136fe565b348015610cb557600080fd5b506000546107b7906001600160a01b031681565b348015610cd557600080fd5b506103e8610ce4366004615125565b600d6020526000908152604090205481565b348015610d0257600080fd5b50610d74610d113660046150c4565b600b6020526000908152604090208054600182015460028301546003840154600485015460058601546006870154600788015460088901546009909901546001600160a01b039889169997891698909616969495939460ff90931693919290918a565b604080516001600160a01b039b8c168152998b1660208b0152979099169688019690965260608701949094526080860192909252151560a085015260c084015260e0830152610100820152610120810191909152610140016103f2565b348015610ddd57600080fd5b506001546107b7906001600160a01b031681565b348015610dfd57600080fd5b506104a4610e0c366004615659565b6138b8565b600c8181548110610e2157600080fd5b600091825260209091200154905081565b6000610e3c613957565b6000838152600e602090815260409182902082516101408101845281546001600160a01b039081168083526001840154821694830194909452600283015481169482019490945260038201546060820152600482015460ff8116151560808301526101009081900490941660a0820152600582015460c0820152600682015460e082015260078201549381019390935260080154610120830152610ee45760019150506110d4565b610efd8161010001518261012001518360000151613981565b610f0b5760009150506110d4565b6000848152600e6020908152604080832080546001600160a01b03199081168255600182018054821690556002820180549091169055600381018490556004810180546001600160a81b0319169055600581018490556006810184905560078101849055600801839055835191840151908401516060850151608086015160c0870151610f9e95949392919030906139dd565b60a08301516020840151919250610fbf916001600160a01b03169083613b90565b60e08201516040516000916001600160a01b038716918381818185875af1925050503d806000811461100d576040519150601f19603f3d011682016040523d82523d6000602084013e611012565b606091505b505090508061103c5760405162461bcd60e51b815260040161103390615696565b60405180910390fd5b82600001516001600160a01b03167fbece414bdfb172bf1b798de2a8ecc3c86ec25ad7011ee97f4e3549715137b5ef84602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001514361109f91906156ca565b6101208d01516110af90426156ca565b6040516110c4999897969594939291906156dd565b60405180910390a2600193505050505b6110de6001600755565b92915050565b6000546001600160a01b0316331461110e5760405162461bcd60e51b815260040161103390615733565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f1d5bc0255b943d6a5b5279e8a55d74d620baccbceecb25e87a3558f14c4c118e91015b60405180910390a25050565b6000611178613957565b6000838152600b602090815260409182902082516101408101845281546001600160a01b039081168083526001840154821694830194909452600283015416938101939093526003810154606084015260048101546080840152600581015460ff16151560a0840152600681015460c0840152600781015460e08401526008810154610100840152600901546101208301526112185760019150506110d4565b6112318161010001518261012001518360000151613bf3565b61123f5760009150506110d4565b6000848152600b60209081526040822080546001600160a01b03199081168255600182018054821690556002820180549091169055600381018390556004810183905560058101805460ff191690556006810183905560078101839055600881018390556009019190915581516060830151918301516112cb926001600160a01b039091169190613b90565b60e08101516040516000916001600160a01b038616918381818185875af1925050503d8060008114611319576040519150601f19603f3d011682016040523d82523d6000602084013e61131e565b606091505b505090508061133f5760405162461bcd60e51b815260040161103390615696565b81600001516001600160a01b03167fb46dc78d7a64b7dd9e215a1a5955b8e522c417f8260520d97a2ce9a73c72bd1283602001518460400151856060015186608001518760a001518860c001518960e001518a6101000151436113a291906156ca565b6101208c01516113b290426156ca565b604080516001600160a01b039a8b1681529990981660208a0152968801959095526060870193909352901515608086015260a085015260c084015260e0830152610100820152610120015b60405180910390a26001925050506110de6001600755565b600061141f613957565b6000838152600b602090815260409182902082516101408101845281546001600160a01b039081168083526001840154821694830194909452600283015416938101939093526003810154606084015260048101546080840152600581015460ff16151560a0840152600681015460c0840152600781015460e08401526008810154610100840152600901546101208301526114bf5760019150506110d4565b6114d88161010001518261012001518360000151613981565b6114e65760009150506110d4565b6000848152600b6020908152604080832080546001600160a01b031990811682556001808301805483169055600283018054909216909155600382018590556004820185905560058201805460ff19169055600682018590556007820185905560088201859055600990910193909355915483519184015160608501519385015160a086015160808701516115a6966001600160a01b03909516956115919590949390929091613c00565b60208401516001600160a01b03169190613b90565b6115cc81600001518260200151836040015184608001518560a001518660c00151613ca4565b60e08101516040516000916001600160a01b038616918381818185875af1925050503d806000811461161a576040519150601f19603f3d011682016040523d82523d6000602084013e61161f565b606091505b50509050806116405760405162461bcd60e51b815260040161103390615696565b60808201511561174f576000600260009054906101000a90046001600160a01b03166001600160a01b0316635dc271d684608001518560a001518660c00151601c5488606001516116919190615753565b60208901516040516001600160e01b031960e088901b16815260048101959095529215156024850152604484019190915260648301526001600160a01b0316608482015260a4016020604051808303816000875af11580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b919061576a565b905061174d836000015160008560200151866040015187608001518860a00151878a60a0015160095460006001613e60565b505b81600001516001600160a01b03167f02ca30b520a08cead06dc4eb7847b9df09adf21e5e07dd7d2d8c32381fecb75283602001518460400151856060015186608001518760a001518860c001518960e001518a6101000151436113a291906156ca565b6000546001600160a01b031633146117dc5760405162461bcd60e51b815260040161103390615733565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527ffbabc02389290a451c6e600d05bf9887b99bfad39d8e1237e4e3df042e4941fe9101611162565b600061183e613957565b600160009054906101000a90046001600160a01b03166001600160a01b031663ef9465c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b59190615793565b156118d25760405162461bcd60e51b8152600401611033906157b0565b6008548210156118f45760405162461bcd60e51b815260040161103390615696565b3482146119135760405162461bcd60e51b8152600401611033906157ce565b611920338989888a6140a9565b6119565760405162461bcd60e51b81526020600482015260076024820152664f4d3a73697a6560c81b6044820152606401611033565b611966338989898989898961415b565b90506119726001600755565b979650505050505050565b6000546001600160a01b031633146119a75760405162461bcd60e51b815260040161103390615733565b60118390556012829055601381905560408051848152602081018490529081018290527fb98e759701eaca2e60c25e91109003c1c7442ef731b5d569037063005da8254d906060015b60405180910390a1505050565b6000546001600160a01b03163314611a275760405162461bcd60e51b815260040161103390615733565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f8c0d56805c3b43d441481229dc64bee168253ffe4305f37ab7cfe63b1c4268c69101611162565b6000546001600160a01b03163314611aa95760405162461bcd60e51b815260040161103390615733565b600855565b6000546001600160a01b03163314611ad85760405162461bcd60e51b815260040161103390615733565b600655565b6000546001600160a01b03163314611b075760405162461bcd60e51b815260040161103390615733565b600955565b600080600083611b8957600354604051631b1c2b2360e11b81526001600160a01b03878116600483015290911690633638564690602401602060405180830381865afa158015611b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b84919061576a565b611bf7565b60035460405163286d59ad60e11b81526001600160a01b038781166004830152909116906350dab35a90602401602060405180830381865afa158015611bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf7919061576a565b9050600087611c0857868210611c0c565b8682115b905080611c435760405162461bcd60e51b815260206004820152600560248201526427a69d383960d91b6044820152606401611033565b9097909650945050505050565b6000611c5a613957565b6000838152600e602090815260409182902082516101408101845281546001600160a01b039081168083526001840154821694830194909452600283015481169482019490945260038201546060820152600482015460ff8116151560808301526101009081900490941660a0820152600582015460c0820152600682015460e082015260078201549381019390935260080154610120830152611d025760019150506110d4565b611d1b8161010001518261012001518360000151613bf3565b611d295760009150506110d4565b6000848152600e602052604080822080546001600160a01b03199081168255600182018054821690556002820180549091169055600381018390556004810180546001600160a81b031916905560058101839055600681018390556007810183905560080182905560e083015190516001600160a01b03861691908381818185875af1925050503d8060008114611ddc576040519150601f19603f3d011682016040523d82523d6000602084013e611de1565b606091505b5050905080611e025760405162461bcd60e51b815260040161103390615696565b81600001516001600160a01b03167fd2c665be6c7dd696827595026252b33f769220c8a4d2813d855c5d393afc158c83602001518460400151856060015186608001518760a001518860c001518960e001518a610100015143611e6591906156ca565b6101208c0151611e7590426156ca565b6040516113fd999897969594939291906156dd565b611e92613957565b336000908152601a602052604090205460ff16611ec15760405162461bcd60e51b8152600401611033906157ed565b6000611ecd8484613349565b60008181526016602090815260409182902082516101608101845281546001600160a01b039081168083526001840154821694830194909452600283015416938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460ff808216151560e0850152610100808304821615159085015262010000820481161515610120850152630100000090910416151561014083015291925090611f9a5760405162461bcd60e51b81526004016110339061580d565b6000611fb98261010001518360a0015184604001518560e00151611b0c565b509050816101200151156121905760015460608301516020840151611fec926001600160a01b0391821692911690613b90565b60015482516020840151604080860151608087015160e088015192516348d91abf60e01b81526001600160a01b039586166004820152938516602485015290841660448401526064830152151560848201529116906348d91abf9060a401600060405180830381600087803b15801561206457600080fd5b505af1158015612078573d6000803e3d6000fd5b5050505060808201511561218b576000600260009054906101000a90046001600160a01b03166001600160a01b0316635dc271d684608001518560e001518660a00151601c5488606001516120cd9190615753565b60208901516040516001600160e01b031960e088901b16815260048101959095529215156024850152604484019190915260648301526001600160a01b0316608482015260a4016020604051808303816000875af1158015612133573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612157919061576a565b9050612189836000015160008560200151866040015187608001518860e00151878a60e0015160095460006001613e60565b505b612282565b60006121b38360000151846020015185604001518660e0015187608001516140a9565b9050806121ce576121c58487856142b9565b50505050612486565b60015483516020850151604080870151608088015160e08901519251633cae4d0160e11b81526000966001600160a01b03169563795c9a029561221e95919490939092909190309060040161582e565b6020604051808303816000875af115801561223d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612261919061576a565b8451602086015191925061227f916001600160a01b03169083613b90565b50505b600083815260166020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101829055600581018290556006810191909155600701805463ffffffff191690556122eb6017846144c8565b5060c08201516040516000916001600160a01b038716918381818185875af1925050503d806000811461233a576040519150601f19603f3d011682016040523d82523d6000602084013e61233f565b606091505b50509050806123605760405162461bcd60e51b815260040161103390615696565b826101200151151583600001516001600160a01b03167ff24fdd74c4b1144dd9f57bc5cc659cf1cfc0a71cff35b366ff486c212510d9bb856020015186604001518a886060015189608001518a60a001518b60c001518b8d60e001518e61010001516040516124289a999897969594939291906001600160a01b039a8b16815298909916602089015260408801969096526060870194909452608086019290925260a085015260c084015260e083015215156101008201529015156101208201526101400190565b60405180910390a38251602084015160408086015161014087015191516000946001600160a01b031693600080516020615b61833981519152936124799391928d9188918291829182918291615868565b60405180910390a3505050505b6124906001600755565b505050565b6000546001600160a01b031633146124bf5760405162461bcd60e51b815260040161103390615733565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461250b5760405162461bcd60e51b815260040161103390615733565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125575760405162461bcd60e51b815260040161103390615733565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125a35760405162461bcd60e51b815260040161103390615733565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6125cd613957565b60006125d98284613349565b60008181526016602090815260409182902082516101608101845281546001600160a01b03908116825260018301548116938201939093526002820154909216928201929092526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460ff808216151560e0840152610100808304821615159084015262010000820481161515610120840152630100000090910416158015610140830152919250906126c657336000908152601a602052604090205460ff166126c15760405162461bcd60e51b8152600401611033906157ed565b612708565b336001600160a01b03841614806126ec5750336000908152601a602052604090205460ff165b6127085760405162461bcd60e51b8152600401611033906157ed565b6127138285836142b9565b505061271f6001600755565b5050565b6060600061273160176144d4565b905060008167ffffffffffffffff81111561274e5761274e6158b9565b6040519080825280602002602001820160405280156127d557816020015b604080516101608101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201819052610140820152825260001990920191018161276c5790505b50905060005b828110156128d357601660006127f26017846144de565b8152602080820192909252604090810160002081516101608101835281546001600160a01b03908116825260018301548116948201949094526002820154909316918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460ff808216151560e0840152610100808304821615159084015262010000820481161515610120840152630100000090910416151561014082015282518390839081106128b5576128b56158cf565b602002602001018190525080806128cb906158e5565b9150506127db565b5092915050565b6000546001600160a01b031633146129045760405162461bcd60e51b815260040161103390615733565b601d91909155601e55565b6000546001600160a01b031633146129395760405162461bcd60e51b815260040161103390615733565b601c55565b3360009081526010602052604081205460ff1661296d5760405162461bcd60e51b8152600401611033906157ed565b601454600c54808210612982575090506110de565b8085111561298e578094505b84821015612aeb576000600c83815481106129ab576129ab6158cf565b6000918252602090912001546040516327b42c0f60e01b8152600481018290526001600160a01b038716602482015290915030906327b42c0f906044016020604051808303816000875af1925050508015612a23575060408051601f3d908101601f19168201909252612a2091810190615793565b60015b612aac5760405163225fc9fd60e01b8152600481018290526001600160a01b0386166024820152309063225fc9fd906044016020604051808303816000875af1925050508015612a90575060408051601f3d908101601f19168201909252612a8d91810190615793565b60015b612a9a575061298e565b80612aa6575050612aeb565b50612aba565b80612ab8575050612aeb565b505b600c8381548110612acd57612acd6158cf565b600091825260208220015582612ae2816158e5565b9350505061298e565b5060148190559392505050565b612b00613957565b600160009054906101000a90046001600160a01b03166001600160a01b031663ef9465c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b779190615793565b15612b945760405162461bcd60e51b8152600401611033906157b0565b600154604051631e3451e360e01b81526001600160a01b038a8116600483015290911690631e3451e390602401602060405180830381865afa158015612bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c029190615793565b612c375760405162461bcd60e51b815260206004820152600660248201526509e9a74d2c8f60d31b6044820152606401611033565b833414612c565760405162461bcd60e51b8152600401611033906157ce565b81151580612c6357508015155b15612c86578215612c865760405162461bcd60e51b81526004016110339061580d565b8115801590612c9457508015155b15612ccb57600954612ca7906002615753565b841015612cc65760405162461bcd60e51b815260040161103390615696565b612d01565b8215612cdf57600954612ca7906002615753565b600954841015612d015760405162461bcd60e51b815260040161103390615696565b88888888888787878215612d6357612d246001600160a01b03861633308b6144ea565b601e54881015612d465760405162461bcd60e51b8152600401611033906158fe565b612d5e3389878a8a89898b1560095460016000613e60565b612e97565b60008415612dde57600354604051631b1c2b2360e11b81526001600160a01b038a8116600483015290911690633638564690602401602060405180830381865afa158015612db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd9919061576a565b612e4c565b60035460405163286d59ad60e11b81526001600160a01b038a81166004830152909116906350dab35a90602401602060405180830381865afa158015612e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4c919061576a565b9050612e5a818685856138b8565b8a15612e7757612e77336000888b8b8a898c600954600080613e60565b8915612e9557612e95336000888b8b8a888c15600954600080613e60565b505b5050505050505050612ea96001600755565b505050505050505050565b6000612ebe613957565b600160009054906101000a90046001600160a01b03166001600160a01b031663ef9465c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f359190615793565b15612f525760405162461bcd60e51b8152600401611033906157b0565b600154604051631e3451e360e01b81526001600160a01b038b8116600483015290911690631e3451e390602401602060405180830381865afa158015612f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc09190615793565b612ff55760405162461bcd60e51b815260206004820152600660248201526509e9a74d2c8f60d31b6044820152606401611033565b3482146130145760405162461bcd60e51b8152600401611033906157ce565b83158015613020575082155b1561305957600954600854613035919061591c565b8210156130545760405162461bcd60e51b8152600401611033906157ce565b6130c1565b831580159061306757508215155b156130875760095461307a906003615753565b600854613035919061591c565b600954613095906002615753565b6008546130a2919061591c565b8210156130c15760405162461bcd60e51b8152600401611033906157ce565b601d548810156130e35760405162461bcd60e51b8152600401611033906158fe565b6130f86001600160a01b038b1633308b6144ea565b600061310c338c8c8c8c8c8c600854614522565b9050841561312b5761312b3360008d8d8c8c8b8e600954600080613e60565b8315613149576131493360008d8d8c8c8a8e15600954600080613e60565b90506131556001600755565b9998505050505050505050565b336000908152601a602052604090205460ff166131915760405162461bcd60e51b8152600401611033906157ed565b8360005b818110156132595730636410659a8888848181106131b5576131b56158cf565b90506020020160208101906131ca9190615125565b8787858181106131dc576131dc6158cf565b6040516001600160e01b031960e087901b1681526001600160a01b039485166004820152602090910292909201356024830152509086166044820152606401600060405180830381600087803b15801561323557600080fd5b505af1925050508015613246575060015b5080613251816158e5565b915050613195565b50505050505050565b6000546001600160a01b0316331461328c5760405162461bcd60e51b815260040161103390615733565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa1580156132d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f4919061576a565b81111561332f5760405162461bcd60e51b815260206004820152600960248201526813d34e985b5bdd5b9d60ba1b6044820152606401611033565b60005461271f906001600160a01b03848116911683613b90565b6040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260009060540160405160208183030381529060405280519060200120905092915050565b613398613957565b6000601660006133a83388613349565b8152602081019190915260400160002080549091506001600160a01b03166133e25760405162461bcd60e51b81526004016110339061580d565b6003810154600782015462010000900460ff161561348e57601e5484101561341c5760405162461bcd60e51b8152600401611033906158fe565b8084116000816134355761343086846156ca565b61343f565b61343f83876156ca565b90508115613466576001840154613461906001600160a01b03163330846144ea565b613484565b83546001850154613484916001600160a01b03918216911683613b90565b5050600382018490555b6005820183905560048201859055600782015460018301546002840154600385015460405160ff62010000860481161515953395600080516020615b618339815191529561350a956001600160a01b039283169591909216938f938f928e92808316926101008104821692630100000090910490911690615868565b60405180910390a3505061351e6001600755565b50505050565b336000908152601b602052604090205460ff166135535760405162461bcd60e51b8152600401611033906157ed565b8160005b818110156135f7576001546001600160a01b031663e75a4a2c868684818110613582576135826158cf565b90506020020135856040518363ffffffff1660e01b81526004016135b99291909182526001600160a01b0316602082015260400190565b600060405180830381600087803b1580156135d357600080fd5b505af19250505080156135e4575060015b50806135ef816158e5565b915050613557565b5050505050565b8115613623578281106124905760405162461bcd60e51b81526004016110339061592f565b8281116124905760405162461bcd60e51b81526004016110339061592f565b6000546001600160a01b0316331461366c5760405162461bcd60e51b815260040161103390615733565b6001600160a01b0382166000908152600560205260408120549081900361369257505050565b6001600160a01b0383166000818152600560205260408120556136b6908383613b90565b604080516001600160a01b038086168252841660208201529081018290527f4f1b51dd7a2fcb861aa2670f668be66835c4ee12b4bbbf037e4d0018f39819e4906060016119f0565b3360009081526010602052604081205460ff1661372d5760405162461bcd60e51b8152600401611033906157ed565b601554600f54808210613742575090506110de565b8085111561374e578094505b848210156138ab576000600f838154811061376b5761376b6158cf565b600091825260209091200154604051630d4d003d60e01b8152600481018290526001600160a01b03871660248201529091503090630d4d003d906044016020604051808303816000875af19250505080156137e3575060408051601f3d908101601f191682019092526137e091810190615793565b60015b61386c57604051633051b17160e11b8152600481018290526001600160a01b038616602482015230906360a362e2906044016020604051808303816000875af1925050508015613850575060408051601f3d908101601f1916820190925261384d91810190615793565b60015b61385a575061374e565b806138665750506138ab565b5061387a565b806138785750506138ab565b505b600f838154811061388d5761388d6158cf565b6000918252602082200155826138a2816158e5565b9350505061374e565b5060158190559392505050565b821561390d5781156138e3578382116138e35760405162461bcd60e51b81526004016110339061592f565b8015613908578381106139085760405162461bcd60e51b81526004016110339061592f565b61351e565b8115613932578382106139325760405162461bcd60e51b81526004016110339061592f565b801561351e5783811161351e5760405162461bcd60e51b81526004016110339061592f565b60026007540361397a57604051633ee5aeb560e01b815260040160405180910390fd5b6002600755565b600060135483613991919061591c565b42106139c85760405162461bcd60e51b815260206004820152600660248201526504f4d3a6578760d41b6044820152606401611033565b6139d3848484614643565b90505b9392505050565b60008084613a585760035460405163286d59ad60e11b81526001600160a01b038981166004830152909116906350dab35a90602401602060405180830381865afa158015613a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a53919061576a565b613ac6565b600354604051631b1c2b2360e11b81526001600160a01b03898116600483015290911690633638564690602401602060405180830381865afa158015613aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac6919061576a565b90508415613af35782811015613aee5760405162461bcd60e51b81526004016110339061594d565b613b13565b82811115613b135760405162461bcd60e51b81526004016110339061594d565b600154604051633cae4d0160e11b81526001600160a01b039091169063795c9a0290613b4d908c908c908c908c908c908c9060040161582e565b6020604051808303816000875af1158015613b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613155919061576a565b6040516001600160a01b03831660248201526044810182905261249090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526146f7565b60006139d3848484614643565b6000613c138787878787876004546147c9565b15613c97576000612710600654612710613c2d91906156ca565b613c379088615753565b613c41919061596c565b90506000613c4f82886156ca565b6001600160a01b038916600090815260056020526040902054909150613c7690829061591c565b6001600160a01b038916600090815260056020526040902055509050613c9a565b50835b9695505050505050565b600082613d1e57600354604051631b1c2b2360e11b81526001600160a01b03878116600483015290911690633638564690602401602060405180830381865afa158015613cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d19919061576a565b613d8c565b60035460405163286d59ad60e11b81526001600160a01b038781166004830152909116906350dab35a90602401602060405180830381865afa158015613d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8c919061576a565b90508215613db95781811115613db45760405162461bcd60e51b81526004016110339061594d565b613dd9565b81811015613dd95760405162461bcd60e51b81526004016110339061594d565b6001546040516348d91abf60e01b81526001600160a01b03898116600483015288811660248301528781166044830152606482018790528515156084830152909116906348d91abf9060a401600060405180830381600087803b158015613e3f57600080fd5b505af1158015613e53573d6000803e3d6000fd5b5050505050505050505050565b6001600160a01b038b166000908152601960205260409020548b908b908b908b908b908b908b908b908b908b908b90613e9a81600161591c565b6001600160a01b038d16600090815260196020526040812091909155613ec08d83613349565b90506040518061016001604052808e6001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018d81526020018a81526020018881526020018681526020018915158152602001871515815260200185151581526020018415158152506016600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548160ff0219169083151502179055506101008201518160070160016101000a81548160ff0219169083151502179055506101208201518160070160026101000a81548160ff0219169083151502179055506101408201518160070160036101000a81548160ff0219169083151502179055509050506140846017826149cd565b5061408f8d836149d9565b505050505050505050505050505050505050505050505050565b600154604051634a3f088d60e01b81526001600160a01b0387811660048301528681166024830152858116604483015284151560648301526000928392911690634a3f088d9060840161016060405180830381865afa158015614110573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413491906159d1565b9050828160800151101561414c576000915050614152565b60019150505b95945050505050565b6000806040518061014001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018715158152602001866001600160a01b031681526020018581526020018481526020014381526020014281525090506000806141d883614b5f565b9150915082600001516001600160a01b03167fa04ce72776d6eacadbfa98056fa95f0d1c17edf59cd5a86311242bf7e190272884602001518560400151866060015187608001518860a001518960c001518a60e001518a6001600f8054905061424191906156ca565b604080516001600160a01b039a8b168152988a1660208a0152880196909652931515606087015295909116608085015260a084015260c083019390935260e08201929092526101008101919091524361012082015242610140820152610160015b60405180910390a29b9a5050505050505050505050565b80516001600160a01b03166142e05760405162461bcd60e51b81526004016110339061580d565b600083815260166020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101829055600581018290556006810191909155600701805463ffffffff191690556143496017846144c8565b508061012001511561437657805160608201516020830151614376926001600160a01b0390911691613b90565b805160c08201516040516000926001600160a01b031691908381818185875af1925050503d80600081146143c6576040519150601f19603f3d011682016040523d82523d6000602084013e6143cb565b606091505b50509050806143ec5760405162461bcd60e51b815260040161103390615696565b816101200151151582600001516001600160a01b03167f9baccefcc549a2604631907e5ed0fc1e156943afa56b8da2277721800b5fb0158460200151856040015187876060015188608001518960a001518a60c001518b60e001518c61010001518d61014001516040516144699a99989796959493929190615a80565b60405180910390a38151602083015160408085015161014086015191516000946001600160a01b031693600080516020615b61833981519152936144ba9391928a9188918291829182918291615868565b60405180910390a350505050565b60006139d68383614cb9565b60006110de825490565b60006139d68383614dac565b6040516001600160a01b038085166024830152831660448201526064810182905261351e9085906323b872dd60e01b90608401613bbc565b6000806040518061014001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b03168152602001888152602001878152602001861515815260200185815260200184815260200143815260200142815250905060008061459683614dd6565b915091508b6001600160a01b03167f030190664051033b47fa29bb4639c1e5c2efac367a1071e4cbb970508870f4db8c8c8c8c8c8c8c8a6001600c805490506145df91906156ca565b604080516001600160a01b039a8b1681529990981660208a0152968801959095526060870193909352901515608086015260a085015260c084015260e083015261010082015243610120820152426101408201523a610160820152610180016142a2565b60003330148061466257503360009081526010602052604090205460ff165b1561467f574360115485614676919061591c565b111590506139d6565b336001600160a01b038316146146a75760405162461bcd60e51b8152600401611033906157ed565b42601254846146b6919061591c565b11156146ed5760405162461bcd60e51b81526004016110339060208082526004908201526313d34e9960e21b604082015260600190565b5060019392505050565b600061474c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614f159092919063ffffffff16565b805190915015612490578080602001905181019061476a9190615793565b6124905760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611033565b6000826000036147db57506001611972565b600154604051634a3f088d60e01b81526001600160a01b038a811660048301528981166024830152878116604483015286151560648301526000921690634a3f088d9060840161016060405180830381865afa15801561483f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061486391906159d1565b608081015160a08201519192509060008290036148865760009350505050611972565b6000614892878461591c565b600254604051630a48d5a960e01b81526001600160a01b038e81166004830152602482018e905292935060009290911690630a48d5a990604401602060405180830381865afa1580156148e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061490d919061576a565b9050600061491b828561591c565b905060008461492c61271088615753565b614936919061596c565b90506000826149478b61271061591c565b6149519087615753565b61495b919061596c565b9050818110156149b75760408051858152602081018490529081018290527f3f6e9241514ae172d9872f51274a73fd6b370b2f8fa612669bb17d933078860c9060600160405180910390a1600198505050505050505050611972565b5060009f9e505050505050505050505050505050565b60006139d68383614f24565b6000601660006149e98585613349565b8152602080820192909252604090810160002081516101608101835281546001600160a01b0390811682526001830154811694820185905260028301548116828501819052600384015460608401819052600485015460808501819052600586015460a08601819052600687015460c0870181905260079097015460ff808216151560e0890181905261010080840483161515908a01819052620100008404831615156101208b01819052630100000090940490921615156101408a018190529a51989c50919a968e16997fc9a016c895f4c3fd94ea06c606c2bad25bbfded616bd87d92bbe8845e342d8dd99614ae9998f979695949193919290615a80565b60405180910390a38061012001511515836001600160a01b0316600080516020615b618339815191528360200151846040015186866060015187608001518860a001518960e001518a61010001518b6101400151604051614b5299989796959493929190615868565b60405180910390a3505050565b80516001600160a01b0381166000908152600d6020526040812054909182918290614b8b90600161591c565b6001600160a01b0383166000908152600d60205260408120829055909150614bb38383613349565b6000818152600e602090815260408083208a5181546001600160a01b03199081166001600160a01b03928316178355938c015160018084018054871692841692909217909155928c01516002830180549095169082161790935560608b0151600382015560808b015160048201805460a08e01516001600160a81b0319909116921515610100600160a81b031916929092176101009290951682029490941790935560c08b0151600582015560e08b01516006820155918a0151600783015561012090990151600890910155600f8054988901815590527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802909601869055509492505050565b60008181526001830160205260408120548015614da2576000614cdd6001836156ca565b8554909150600090614cf1906001906156ca565b9050818114614d56576000866000018281548110614d1157614d116158cf565b9060005260206000200154905080876000018481548110614d3457614d346158cf565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614d6757614d67615ad7565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506110de565b60009150506110de565b6000826000018281548110614dc357614dc36158cf565b9060005260206000200154905092915050565b80516001600160a01b0381166000908152600a6020526040812054909182918290614e0290600161591c565b6001600160a01b0383166000908152600a60205260408120829055909150614e2a8383613349565b6000818152600b602090815260408083208a5181546001600160a01b03199081166001600160a01b03928316178355938c015160018084018054871692841692909217909155928c015160028301805490951691161790925560608a0151600383015560808a0151600483015560a08a015160058301805460ff191691151591909117905560c08a0151600683015560e08a015160078301556101008a0151600883015561012090990151600990910155600c8054988901815590527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7909601869055509492505050565b60606139d38484600085614f73565b6000818152600183016020526040812054614f6b575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556110de565b5060006110de565b606082471015614fd45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611033565b843b6150225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611033565b600080866001600160a01b0316858760405161503e9190615b11565b60006040518083038185875af1925050503d806000811461507b576040519150601f19603f3d011682016040523d82523d6000602084013e615080565b606091505b50915091506119728282866060831561509a5750816139d6565b8251156150aa5782518084602001fd5b8160405162461bcd60e51b81526004016110339190615b2d565b6000602082840312156150d657600080fd5b5035919050565b6001600160a01b03811681146150f257600080fd5b50565b6000806040838503121561510857600080fd5b82359150602083013561511a816150dd565b809150509250929050565b60006020828403121561513757600080fd5b81356139d6816150dd565b80151581146150f257600080fd5b6000806040838503121561516357600080fd5b823561516e816150dd565b9150602083013561511a81615142565b600080600080600080600060e0888a03121561519957600080fd5b87356151a4816150dd565b965060208801356151b4816150dd565b95506040880135945060608801356151cb81615142565b935060808801356151db816150dd565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561520d57600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561523a57600080fd5b843561524581615142565b935060208501359250604085013561525c816150dd565b9150606085013561526c81615142565b939692955090935050565b60008060006060848603121561528c57600080fd5b8335615297816150dd565b92506020840135915060408401356152ae816150dd565b809150509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561537057815180516001600160a01b03908116865287820151811688870152868201511686860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e08082015115159086015261010080820151151590860152610120808201511515908601526101409081015115159085015261016090930192908501906001016152d6565b5091979650505050505050565b6000806040838503121561539057600080fd5b50508035926020909101359150565b60008060008060008060008060006101208a8c0312156153be57600080fd5b8935985060208a01356153d0816150dd565b975060408a0135965060608a01356153e7816150dd565b955060808a01356153f781615142565b989b979a50959894979660a0860135965060c08601359560e0810135955061010001359350915050565b60008060008060008060008060006101208a8c03121561544057600080fd5b893561544b816150dd565b985060208a013561545b816150dd565b975060408a0135965060608a0135955060808a01356153f781615142565b60008083601f84011261548b57600080fd5b50813567ffffffffffffffff8111156154a357600080fd5b6020830191508360208260051b85010111156154be57600080fd5b9250929050565b6000806000806000606086880312156154dd57600080fd5b853567ffffffffffffffff808211156154f557600080fd5b61550189838a01615479565b9097509550602088013591508082111561551a57600080fd5b5061552788828901615479565b909450925050604086013561553b816150dd565b809150509295509295909350565b6000806040838503121561555c57600080fd5b8235615567816150dd565b946020939093013593505050565b6000806000806080858703121561558b57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000604084860312156155bc57600080fd5b833567ffffffffffffffff8111156155d357600080fd5b6155df86828701615479565b90945092505060208401356152ae816150dd565b60008060006060848603121561560857600080fd5b83359250602084013561561a81615142565b929592945050506040919091013590565b6000806040838503121561563e57600080fd5b8235615649816150dd565b9150602083013561511a816150dd565b6000806000806080858703121561566f57600080fd5b84359350602085013561568181615142565b93969395505050506040820135916060013590565b60208082526004908201526327a69d3360e11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156110de576110de6156b4565b6001600160a01b03998a16815297891660208901526040880196909652931515606087015291909516608085015260a084019490945260c083019390935260e08201929092526101008101919091526101200190565b602080825260069082015265424d3a34303360d01b604082015260600190565b80820281158282048414176110de576110de6156b4565b60006020828403121561577c57600080fd5b5051919050565b805161578e81615142565b919050565b6000602082840312156157a557600080fd5b81516139d681615142565b60208082526004908201526304f4d3a360e41b604082015260600190565b60208082526005908201526427a69d32b360d91b604082015260600190565b6020808252600690820152654f4d3a34303360d01b604082015260600190565b60208082526007908201526613d34e99985a5b60ca1b604082015260600190565b6001600160a01b0396871681529486166020860152928516604085015260608401919091521515608083015290911660a082015260c00190565b6001600160a01b03998a16815297909816602088015260408701959095526060860193909352608085019190915260a0840152151560c0830152151560e08201529015156101008201526101200190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016158f7576158f76156b4565b5060010190565b6020808252600490820152634f4d3a6360e01b604082015260600190565b808201808211156110de576110de6156b4565b60208082526004908201526304f4d3a760e41b604082015260600190565b6020808252600590820152640424d3a6d760dc1b604082015260600190565b60008261598957634e487b7160e01b600052601260045260246000fd5b500490565b604051610160810167ffffffffffffffff811182821017156159c057634e487b7160e01b600052604160045260246000fd5b60405290565b805161578e816150dd565b600061016082840312156159e457600080fd5b6159ec61598e565b6159f5836159c6565b8152615a03602084016159c6565b6020820152615a14604084016159c6565b6040820152615a2560608401615783565b60608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152506101408084015181830152508091505092915050565b6001600160a01b039a8b16815298909916602089015260408801969096526060870194909452608086019290925260a085015260c0840152151560e083015215156101008201529015156101208201526101400190565b634e487b7160e01b600052603160045260246000fd5b60005b83811015615b08578181015183820152602001615af0565b50506000910152565b60008251615b23818460208701615aed565b9190910192915050565b6020815260008251806020840152615b4c816040850160208701615aed565b601f01601f1916919091016040019291505056fed21a7b68c66e053c73bd8bed4d752fc154d5a35d095063cd99a7b35b3787df27a2646970667358221220de8b3beae66e86e258b7f3ff43efac7d163a5ea2bf67531c3dfbb83f309ee13e64736f6c63430008130033" + }, + { + "address": "0x0ea644267003897625618344e937369022fb1b52", + "nonce": 21, + "balance": "0x000000000000000000000000000000000000000000000000001081d9ba3fcc00", + "code": "0x" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000001240876e88980000", + "code": "0x60806040526004361061014b5760003560e01c8063717a002b116100b657806395d89b411161006f57806395d89b411461045b578063a22cb46514610486578063b88d4fde146104af578063bdb4b848146104d8578063c87b56dd14610503578063e985e9c5146105405761014b565b8063717a002b146103715780638545f4ea1461039c5780638584c1fa146103c5578063879dbfed146103ee578063931e2e49146104055780639382f739146104305761014b565b806318160ddd1161010857806318160ddd1461025157806323b872dd1461027c57806342842e0e146102a557806351cff8d9146102ce5780636352211e146102f757806370a08231146103345761014b565b806301ffc9a71461015057806302fe53051461018d57806306fdde03146101b6578063081812fc146101e1578063095ea7b31461021e5780631249c58b14610247575b600080fd5b34801561015c57600080fd5b5061017760048036038101906101729190612259565b61057d565b60405161018491906122a1565b60405180910390f35b34801561019957600080fd5b506101b460048036038101906101af9190612402565b61065f565b005b3480156101c257600080fd5b506101cb610789565b6040516101d891906124d3565b60405180910390f35b3480156101ed57600080fd5b506102086004803603810190610203919061252b565b61081b565b6040516102159190612599565b60405180910390f35b34801561022a57600080fd5b50610245600480360381019061024091906125e0565b610861565b005b61024f610979565b005b34801561025d57600080fd5b50610266610a98565b604051610273919061262f565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061264a565b610a9e565b005b3480156102b157600080fd5b506102cc60048036038101906102c7919061264a565b610b2e565b005b3480156102da57600080fd5b506102f560048036038101906102f091906126db565b610bbe565b005b34801561030357600080fd5b5061031e6004803603810190610319919061252b565b610db8565b60405161032b9190612599565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190612708565b610e3f565b604051610368919061262f565b60405180910390f35b34801561037d57600080fd5b50610386610ef7565b604051610393919061262f565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be919061252b565b610efd565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190612735565b61104b565b005b3480156103fa57600080fd5b50610403611235565b005b34801561041157600080fd5b5061041a61133c565b604051610427919061262f565b60405180910390f35b34801561043c57600080fd5b50610445611342565b60405161045291906127e7565b60405180910390f35b34801561046757600080fd5b50610470611368565b60405161047d91906124d3565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a8919061282e565b6113fa565b005b3480156104bb57600080fd5b506104d660048036038101906104d1919061290f565b611410565b005b3480156104e457600080fd5b506104ed611472565b6040516104fa919061262f565b60405180910390f35b34801561050f57600080fd5b5061052a6004803603810190610525919061252b565b611478565b60405161053791906124d3565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190612992565b611515565b60405161057491906122a1565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106585750610657826115a9565b5b9050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b81526004016106ba9190612599565b602060405180830381865afa1580156106d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fb91906129e7565b610731576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008151141561076e576040517f3ba0191100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600b908051906020019061078492919061214a565b505050565b60606000805461079890612a43565b80601f01602080910402602001604051908101604052809291908181526020018280546107c490612a43565b80156108115780601f106107e657610100808354040283529160200191610811565b820191906000526020600020905b8154815290600101906020018083116107f457829003601f168201915b5050505050905090565b600061082682611613565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086c82610db8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d490612ae7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc61165e565b73ffffffffffffffffffffffffffffffffffffffff16148061092b575061092a8161092561165e565b611515565b5b61096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096190612b79565b60405180910390fd5b6109748383611666565b505050565b6007544210156109b5576040517ff3c63b2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600854141580156109c9575060085442115b15610a00576040517ff3c63b2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009543414610a3b576040517fa295726b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4733600a5461171f565b600a6000815480929190610a5a90612bc8565b91905055507f3c3284d117c92d0b1699230960384e794dcba184cc48ff114fe4fed20c9b056533604051610a8e9190612599565b60405180910390a1565b600a5481565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b1d5760006008541480610ae5575060085442105b15610b1c576040517fa24e573d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610b2884848461193d565b50505050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bad5760006008541480610b75575060085442105b15610bac576040517fa24e573d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610bb884848461199d565b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b8152600401610c199190612599565b602060405180830381865afa158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5a91906129e7565b610c90576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790506000811415610cd0576040517f669567ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610cf690612c42565b60006040518083038185875af1925050503d8060008114610d33576040519150601f19603f3d011682016040523d82523d6000602084013e610d38565b606091505b5050905080610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7390612ca3565b60405180910390fd5b7ff67611512e0a2d90c96fd3f08dca4971bc45fba9dc679eabe839a32abbe58a8e83604051610dab9190612ce4565b60405180910390a1505050565b600080610dc4836119bd565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90612d4b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea790612ddd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b8152600401610f589190612599565b602060405180830381865afa158015610f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9991906129e7565b610fcf576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081141561100a576040517f6c4aabce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806009819055507ff66fd9d9623ddfdc9ce19324c9037f799c288f2c29e0ab4df866d8296d592e4381604051611040919061262f565b60405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b81526004016110a69190612599565b602060405180830381865afa1580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e791906129e7565b61111d576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282824283101561115a576040517fb290253c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821415801561116b5750828211155b156111a2576040517f38af65f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008114156111dd576040517f6c4aabce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560078190555084600881905550836009819055507ff7bb3cb650f5d805d4b17ede5d7d1b950b9d95c2bbb1bc3d20775c94d6af435686868660405161122593929190612dfd565b60405180910390a1505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b81526004016112909190612599565b602060405180830381865afa1580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d191906129e7565b611307576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426008819055507f3e0a88b7f473f23267f4f675ce2bf9648d402704c089c5dea378f1433a7ba0d460405160405180910390a1565b60075481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001805461137790612a43565b80601f01602080910402602001604051908101604052809291908181526020018280546113a390612a43565b80156113f05780601f106113c5576101008083540402835291602001916113f0565b820191906000526020600020905b8154815290600101906020018083116113d357829003601f168201915b5050505050905090565b61140c61140561165e565b83836119fa565b5050565b61142161141b61165e565b83611b67565b611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790612ea6565b60405180910390fd5b61146c84848484611bfc565b50505050565b60095481565b606061148382611613565b600b805461149090612a43565b80601f01602080910402602001604051908101604052809291908181526020018280546114bc90612a43565b80156115095780601f106114de57610100808354040283529160200191611509565b820191906000526020600020905b8154815290600101906020018083116114ec57829003601f168201915b50505050509050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61161c81611c58565b61165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290612d4b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116d983610db8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690612f12565b60405180910390fd5b61179881611c58565b156117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90612f7e565b60405180910390fd5b6117e6600083836001611c99565b6117ef81611c58565b1561182f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182690612f7e565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611939600083836001611c9f565b5050565b61194e61194861165e565b82611b67565b61198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490612ea6565b60405180910390fd5b611998838383611ca5565b505050565b6119b883838360405180602001604052806000815250611410565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090612fea565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b5a91906122a1565b60405180910390a3505050565b600080611b7383610db8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bb55750611bb48185611515565b5b80611bf357508373ffffffffffffffffffffffffffffffffffffffff16611bdb8461081b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b611c07848484611ca5565b611c1384848484611f9f565b611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c499061307c565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611c7a836119bd565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b8273ffffffffffffffffffffffffffffffffffffffff16611cc582610db8565b73ffffffffffffffffffffffffffffffffffffffff1614611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d129061310e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d82906131a0565b60405180910390fd5b611d988383836001611c99565b8273ffffffffffffffffffffffffffffffffffffffff16611db882610db8565b73ffffffffffffffffffffffffffffffffffffffff1614611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e059061310e565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f9a8383836001611c9f565b505050565b6000611fc08473ffffffffffffffffffffffffffffffffffffffff16612127565b1561211a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fe961165e565b8786866040518563ffffffff1660e01b815260040161200b9493929190613215565b6020604051808303816000875af192505050801561204757506040513d601f19601f820116820180604052508101906120449190613276565b60015b6120ca573d8060008114612077576040519150601f19603f3d011682016040523d82523d6000602084013e61207c565b606091505b506000815114156120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b99061307c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061211f565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461215690612a43565b90600052602060002090601f01602090048101928261217857600085556121bf565b82601f1061219157805160ff19168380011785556121bf565b828001600101855582156121bf579182015b828111156121be5782518255916020019190600101906121a3565b5b5090506121cc91906121d0565b5090565b5b808211156121e95760008160009055506001016121d1565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61223681612201565b811461224157600080fd5b50565b6000813590506122538161222d565b92915050565b60006020828403121561226f5761226e6121f7565b5b600061227d84828501612244565b91505092915050565b60008115159050919050565b61229b81612286565b82525050565b60006020820190506122b66000830184612292565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61230f826122c6565b810181811067ffffffffffffffff8211171561232e5761232d6122d7565b5b80604052505050565b60006123416121ed565b905061234d8282612306565b919050565b600067ffffffffffffffff82111561236d5761236c6122d7565b5b612376826122c6565b9050602081019050919050565b82818337600083830152505050565b60006123a56123a084612352565b612337565b9050828152602081018484840111156123c1576123c06122c1565b5b6123cc848285612383565b509392505050565b600082601f8301126123e9576123e86122bc565b5b81356123f9848260208601612392565b91505092915050565b600060208284031215612418576124176121f7565b5b600082013567ffffffffffffffff811115612436576124356121fc565b5b612442848285016123d4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561248557808201518184015260208101905061246a565b83811115612494576000848401525b50505050565b60006124a58261244b565b6124af8185612456565b93506124bf818560208601612467565b6124c8816122c6565b840191505092915050565b600060208201905081810360008301526124ed818461249a565b905092915050565b6000819050919050565b612508816124f5565b811461251357600080fd5b50565b600081359050612525816124ff565b92915050565b600060208284031215612541576125406121f7565b5b600061254f84828501612516565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061258382612558565b9050919050565b61259381612578565b82525050565b60006020820190506125ae600083018461258a565b92915050565b6125bd81612578565b81146125c857600080fd5b50565b6000813590506125da816125b4565b92915050565b600080604083850312156125f7576125f66121f7565b5b6000612605858286016125cb565b925050602061261685828601612516565b9150509250929050565b612629816124f5565b82525050565b60006020820190506126446000830184612620565b92915050565b600080600060608486031215612663576126626121f7565b5b6000612671868287016125cb565b9350506020612682868287016125cb565b925050604061269386828701612516565b9150509250925092565b60006126a882612558565b9050919050565b6126b88161269d565b81146126c357600080fd5b50565b6000813590506126d5816126af565b92915050565b6000602082840312156126f1576126f06121f7565b5b60006126ff848285016126c6565b91505092915050565b60006020828403121561271e5761271d6121f7565b5b600061272c848285016125cb565b91505092915050565b60008060006060848603121561274e5761274d6121f7565b5b600061275c86828701612516565b935050602061276d86828701612516565b925050604061277e86828701612516565b9150509250925092565b6000819050919050565b60006127ad6127a86127a384612558565b612788565b612558565b9050919050565b60006127bf82612792565b9050919050565b60006127d1826127b4565b9050919050565b6127e1816127c6565b82525050565b60006020820190506127fc60008301846127d8565b92915050565b61280b81612286565b811461281657600080fd5b50565b60008135905061282881612802565b92915050565b60008060408385031215612845576128446121f7565b5b6000612853858286016125cb565b925050602061286485828601612819565b9150509250929050565b600067ffffffffffffffff821115612889576128886122d7565b5b612892826122c6565b9050602081019050919050565b60006128b26128ad8461286e565b612337565b9050828152602081018484840111156128ce576128cd6122c1565b5b6128d9848285612383565b509392505050565b600082601f8301126128f6576128f56122bc565b5b813561290684826020860161289f565b91505092915050565b60008060008060808587031215612929576129286121f7565b5b6000612937878288016125cb565b9450506020612948878288016125cb565b935050604061295987828801612516565b925050606085013567ffffffffffffffff81111561297a576129796121fc565b5b612986878288016128e1565b91505092959194509250565b600080604083850312156129a9576129a86121f7565b5b60006129b7858286016125cb565b92505060206129c8858286016125cb565b9150509250929050565b6000815190506129e181612802565b92915050565b6000602082840312156129fd576129fc6121f7565b5b6000612a0b848285016129d2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a5b57607f821691505b60208210811415612a6f57612a6e612a14565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ad1602183612456565b9150612adc82612a75565b604082019050919050565b60006020820190508181036000830152612b0081612ac4565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000612b63603d83612456565b9150612b6e82612b07565b604082019050919050565b60006020820190508181036000830152612b9281612b56565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bd3826124f5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c0657612c05612b99565b5b600182019050919050565b600081905092915050565b50565b6000612c2c600083612c11565b9150612c3782612c1c565b600082019050919050565b6000612c4d82612c1f565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000612c8d600f83612456565b9150612c9882612c57565b602082019050919050565b60006020820190508181036000830152612cbc81612c80565b9050919050565b6000612cce826127b4565b9050919050565b612cde81612cc3565b82525050565b6000602082019050612cf96000830184612cd5565b92915050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000612d35601883612456565b9150612d4082612cff565b602082019050919050565b60006020820190508181036000830152612d6481612d28565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000612dc7602983612456565b9150612dd282612d6b565b604082019050919050565b60006020820190508181036000830152612df681612dba565b9050919050565b6000606082019050612e126000830186612620565b612e1f6020830185612620565b612e2c6040830184612620565b949350505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000612e90602d83612456565b9150612e9b82612e34565b604082019050919050565b60006020820190508181036000830152612ebf81612e83565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612efc602083612456565b9150612f0782612ec6565b602082019050919050565b60006020820190508181036000830152612f2b81612eef565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612f68601c83612456565b9150612f7382612f32565b602082019050919050565b60006020820190508181036000830152612f9781612f5b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612fd4601983612456565b9150612fdf82612f9e565b602082019050919050565b6000602082019050818103600083015261300381612fc7565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613066603283612456565b91506130718261300a565b604082019050919050565b6000602082019050818103600083015261309581613059565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006130f8602583612456565b91506131038261309c565b604082019050919050565b60006020820190508181036000830152613127816130eb565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061318a602483612456565b91506131958261312e565b604082019050919050565b600060208201905081810360008301526131b98161317d565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006131e7826131c0565b6131f181856131cb565b9350613201818560208601612467565b61320a816122c6565b840191505092915050565b600060808201905061322a600083018761258a565b613237602083018661258a565b6132446040830185612620565b818103606083015261325681846131dc565b905095945050505050565b6000815190506132708161222d565b92915050565b60006020828403121561328c5761328b6121f7565b5b600061329a84828501613261565b9150509291505056fea26469706673582212208544ccbd8a093d9d28b750f429637b8f066bb33021875b8b1bb168edf30fda4064736f6c634300080c0033" + }, + { + "address": "0x34c2f64eae617691bd24a5acb1d77565676cb8c1", + "nonce": 26, + "balance": "0x00000000000000000000000000000000000000000000000000261790b0c8c8d4", + "code": "0x" + }, + { + "address": "0x03ef86b748c6a9dff661770cca42440746708c5a", + "nonce": 94, + "balance": "0x000000000000000000000000000000000000000000000000004e20695f367a19", + "code": "0x" + }, + { + "address": "0x4f60cb6d7d1ad3e1912177bb56cd080586b43d0c", + "nonce": 6, + "balance": "0x000000000000000000000000000000000000000000000000001583a95bdd6b87", + "code": "0x" + }, + { + "address": "0x032b241de86a8660f1ae0691a4760b426ea246d7", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100cc5760003560e01c806375ceafe61161007a57806375ceafe6146101a9578063826377f6146101bc578063ac9650d8146101cf578063becbcc6a146101ef578063c45a01551461020f578063d3e1c28414610243578063df2ab5bb14610263578063f3da61a91461027657600080fd5b8063115ff67e146100d857806312210e8a14610105578063187806841461010f578063247ec02c1461012f57806346edd9c81461014257806349404b7c146101555780634aa4a4fc1461016857600080fd5b366100d357005b600080fd5b6100eb6100e636600461235e565b610289565b604080519283526020830191909152015b60405180910390f35b61010d61040f565b005b34801561011b57600080fd5b5061010d61012a3660046124ff565b610421565b61010d61013d366004612442565b6104d1565b61010d610150366004612442565b610732565b61010d6101633660046124ad565b610965565b34801561017457600080fd5b5061019c7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b6040516100fc919061260c565b6100eb6101b736600461235e565b610ab5565b61010d6101ca366004612442565b610bb7565b6101e26101dd366004612237565b610ea2565b6040516100fc9190612667565b3480156101fb57600080fd5b5061019c61020a3660046121b0565b611023565b34801561021b57600080fd5b5061019c7f00000000000000000000000045e5f26451cdb01b0fa1f8582e0aad9a6f27c21881565b34801561024f57600080fd5b5061010d61025e3660046124ff565b6110dc565b61010d6102713660046121f6565b61117b565b61010d610284366004612442565b611233565b6000808260800135804211156102ba5760405162461bcd60e51b81526004016102b19061274a565b60405180910390fd5b61033e6102cd6060860160408701612454565b6001600160801b03166102e66040870160208801612171565b60408051808201909152806102fb89806127ac565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152611521565b9150600054925083606001358311156103995760405162461bcd60e51b815260206004820152601c60248201527f546f6f206d75636820706179656420696e20737761704465736972650000000060448201526064016102b1565b6103a96060850160408601612454565b6001600160801b03168210156104015760405162461bcd60e51b815260206004820181905260248201527f546f6f206d7563682072657175657374656420696e207377617044657369726560448201526064016102b1565b506000196000559092909150565b471561041f5761041f33476116d8565b565b600061042f82840184612390565b90506000806000610443846000015161177b565b9250925092506104548383836117b7565b816001600160a01b0316836001600160a01b031610156104835761047e838560200151338b611807565b6104c7565b835161048e90611997565b156104b157835161049e906119d1565b84526104ab883386611521565b506104c7565b6104c1828560200151338b611807565b60008890555b5050505050505050565b806101000135804211156104f75760405162461bcd60e51b81526004016102b19061274a565b6105076040830160208401612171565b6001600160a01b031661051d6020840184612171565b6001600160a01b0316106105435760405162461bcd60e51b81526004016102b1906126db565b60006105756105556020850185612171565b6105656040860160208701612171565b61020a606087016040880161247b565b90503360008061058b60a0870160808801612171565b6001600160a01b0316146105ae576105a960a0860160808701612171565b6105b0565b305b905060006001600160a01b038416632c481252836105d460c08a0160a08b01612454565b6105e460808b0160608c016122c6565b60405180604001604052808c60200160208101906106029190612171565b8d6040016020810190610615919061247b565b8e60000160208101906106289190612171565b60405160200161063a939291906125a5565b6040516020818303038152906040528152602001896001600160a01b031681525060405160200161066b919061276f565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016106999493929190612620565b6040805180830381600087803b1580156106b257600080fd5b505af11580156106c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ea91906124dc565b5090508560e0013581101561072a5760405162461bcd60e51b81526004016102b1906020808252600490820152632c26a4a760e11b604082015260600190565b505050505050565b806101000135804211156107585760405162461bcd60e51b81526004016102b19061274a565b6107686040830160208401612171565b6001600160a01b031661077e6020840184612171565b6001600160a01b0316106107a45760405162461bcd60e51b81526004016102b1906126db565b60006107b66105556020850185612171565b9050336000806107cc60a0870160808801612171565b6001600160a01b0316146107ef576107ea60a0860160808701612171565b6107f1565b305b905060006001600160a01b03841663857f812f8361081560c08a0160a08b01612454565b61082560808b0160608c016122c6565b604080518082019091528061083d60208e018e612171565b8d6040016020810190610850919061247b565b8e60200160208101906108639190612171565b604051602001610875939291906125a5565b6040516020818303038152906040528152602001896001600160a01b03168152506040516020016108a6919061276f565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016108d49493929190612620565b6040805180830381600087803b1580156108ed57600080fd5b505af1158015610901573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092591906124dc565b9150508560e0013581101561072a5760405162461bcd60e51b81526004016102b1906020808252600490820152632ca6a4a760e11b604082015260600190565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f16906370a08231906109b490309060040161260c565b60206040518083038186803b1580156109cc57600080fd5b505afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a049190612495565b905082811015610a265760405162461bcd60e51b81526004016102b190612720565b8015610ab057604051632e1a7d4d60e01b8152600481018290527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015610a8e57600080fd5b505af1158015610aa2573d6000803e3d6000fd5b50505050610ab082826116d8565b505050565b600080826080013580421115610add5760405162461bcd60e51b81526004016102b19061274a565b610b58610af06060860160408701612454565b610b006040870160208801612171565b6040805180820190915280610b1589806127ac565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152611a08565b90935091506060840135821015610bb15760405162461bcd60e51b815260206004820181905260248201527f546f6f206d7563682072657175657374656420696e2073776170416d6f756e7460448201526064016102b1565b50915091565b80610100013580421115610bdd5760405162461bcd60e51b81526004016102b19061274a565b610bed6040830160208401612171565b6001600160a01b0316610c036020840184612171565b6001600160a01b031610610c295760405162461bcd60e51b81526004016102b1906126db565b6000610c3b6105556020850185612171565b905033600080610c5160a0870160808801612171565b6001600160a01b031614610c7457610c6f60a0860160808701612171565b610c76565b305b9050610c95604051806040016040528060008152602001600081525090565b6001600160a01b03841663f094685a83610cb560c08a0160a08b01612454565b610cc560808b0160608c016122c6565b6040805180820190915280610cdd60208e018e612171565b8d6040016020810190610cf0919061247b565b8e6020016020810190610d039190612171565b604051602001610d15939291906125a5565b6040516020818303038152906040528152602001896001600160a01b0316815250604051602001610d46919061276f565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401610d749493929190612620565b6040805180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc591906124dc565b60208301528152610ddc60808701606088016122c6565b60020b620c35011415610e6157610df960c0870160a08801612454565b6001600160801b031681600001511015610e615760405162461bcd60e51b8152602060048201526024808201527f546f6f206d7563682072657175657374656420696e20737761705932584465736044820152630d2e4cab60e31b60648201526084016102b1565b8560c001358160200151111561072a5760405162461bcd60e51b81526004016102b1906020808252600490820152630b29a82b60e31b604082015260600190565b6060816001600160401b03811115610eca57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610efd57816020015b6060815260200190600190039081610ee85790505b50905060005b8281101561101c5760008030868685818110610f2f57634e487b7160e01b600052603260045260246000fd5b9050602002810190610f4191906127ac565b604051610f4f9291906125e0565b600060405180830381855af49150503d8060008114610f8a576040519150601f19603f3d011682016040523d82523d6000602084013e610f8f565b606091505b509150915081610fdb57604481511015610fa857600080fd5b60048101905080806020019051810190610fc291906122e7565b60405162461bcd60e51b81526004016102b191906126c8565b80848481518110610ffc57634e487b7160e01b600052603260045260246000fd5b602002602001018190525050508080611014906128d1565b915050610f03565b5092915050565b604051635f65e63560e11b81526001600160a01b038481166004830152838116602483015262ffffff831660448301526000917f00000000000000000000000045e5f26451cdb01b0fa1f8582e0aad9a6f27c2189091169063becbcc6a9060640160206040518083038186803b15801561109c57600080fd5b505afa1580156110b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d49190612194565b949350505050565b60006110ea82840184612390565b905060008060006110fe846000015161177b565b92509250925061110f8383836117b7565b816001600160a01b0316836001600160a01b0316101561116b57835161113490611997565b15611151578351611144906119d1565b84526104ab873386611521565b611161828560200151338a611807565b60008790556104c7565b6104c7838560200151338a611807565b6040516370a0823160e01b81526000906001600160a01b038516906370a08231906111aa90309060040161260c565b60206040518083038186803b1580156111c257600080fd5b505afa1580156111d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fa9190612495565b90508281101561121c5760405162461bcd60e51b81526004016102b190612720565b801561122d5761122d848383611cc1565b50505050565b806101000135804211156112595760405162461bcd60e51b81526004016102b19061274a565b6112696040830160208401612171565b6001600160a01b031661127f6020840184612171565b6001600160a01b0316106112a55760405162461bcd60e51b81526004016102b1906126db565b60006112b76105556020850185612171565b9050336000806112cd60a0870160808801612171565b6001600160a01b0316146112f0576112eb60a0860160808701612171565b6112f2565b305b9050611311604051806040016040528060008152602001600081525090565b6001600160a01b0384166359dd14368361133160c08a0160a08b01612454565b61134160808b0160608c016122c6565b60405180604001604052808c602001602081019061135f9190612171565b8d6040016020810190611372919061247b565b8e60000160208101906113859190612171565b604051602001611397939291906125a5565b6040516020818303038152906040528152602001896001600160a01b03168152506040516020016113c8919061276f565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016113f69493929190612620565b6040805180830381600087803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144791906124dc565b602083015280825260c0870135101561148b5760405162461bcd60e51b81526004016102b1906020808252600490820152630b09a82b60e31b604082015260600190565b61149b60808701606088016122c6565b60020b620c350019141561072a576114b960c0870160a08801612454565b6001600160801b03168160200151101561072a5760405162461bcd60e51b8152602060048201526024808201527f546f6f206d7563682072657175657374656420696e20737761705832594465736044820152636972655960e01b60648201526084016102b1565b60006001600160a01b038316611535573092505b6000806000611547856000015161177b565b925092509250600061155a848484611023565b9050826001600160a01b0316846001600160a01b0316101561162357806001600160a01b031663f094685a888a620c35018a60405160200161159c919061276f565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016115ca9493929190612620565b6040805180830381600087803b1580156115e357600080fd5b505af11580156115f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161b91906124dc565b5094506116cd565b806001600160a01b03166359dd1436888a620c3500198a60405160200161164a919061276f565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016116789493929190612620565b6040805180830381600087803b15801561169157600080fd5b505af11580156116a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c991906124dc565b9550505b505050509392505050565b604080516000808252602082019092526001600160a01b03841690839060405161170291906125f0565b60006040518083038185875af1925050503d806000811461173f576040519150601f19603f3d011682016040523d82523d6000602084013e611744565b606091505b5050905080610ab05760405162461bcd60e51b815260206004820152600360248201526253544560e81b60448201526064016102b1565b600080806117898482611dc1565b9250611796846014611e75565b90506117ae6117a760036014612876565b8590611dc1565b91509193909250565b6117c2838383611023565b6001600160a01b0316336001600160a01b031614610ab05760405162461bcd60e51b8152602060048201526002602482015261073760f41b60448201526064016102b1565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316846001600160a01b03161480156118485750804710155b1561196a577f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156118a857600080fd5b505af11580156118bc573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038681166004830152602482018690527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f16935063a9059cbb92506044019050602060405180830381600087803b15801561192c57600080fd5b505af1158015611940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196491906122a6565b5061122d565b6001600160a01b03831630141561198b57611986848383611cc1565b61122d565b61122d84848484611f20565b60006119a560036014612876565b60146119b2600382612876565b6119bc9190612876565b6119c69190612876565b825110159050919050565b6060611a026119e260036014612876565b6119ee60036014612876565b84516119fa919061288e565b849190612022565b92915050565b6000806001600160a01b038416611a1d573093505b3360015b6000611a308660000151611997565b90506000806000611a44896000015161177b565b9250925092506000611a57838584611023565b9050826001600160a01b0316846001600160a01b03161015611b7b576000816001600160a01b031663857f812f87611a8f578d611a91565b305b8f620c34fe1960405180604001604052808b8a8c604051602001611ab7939291906125a5565b60405160208183030381529060405281526020018e6001600160a01b0316815250604051602001611ae8919061276f565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401611b169493929190612620565b6040805180830381600087803b158015611b2f57600080fd5b505af1158015611b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6791906124dc565b995090508615611b75578099505b50611c7f565b6000816001600160a01b0316632c48125287611b97578d611b99565b305b8f620c34ff60405180604001604052808b8a8c604051602001611bbe939291906125a5565b60405160208183030381529060405281526020018e6001600160a01b0316815250604051602001611bef919061276f565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401611c1d9493929190612620565b6040805180830381600087803b158015611c3657600080fd5b505af1158015611c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6e91906124dc565b90995090508615611c7d578099505b505b600095508415611ca3578951309750611c97906119d1565b8a52969a508a96611cad565b5050505050611cb7565b5050505050611a21565b5050935093915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611d1d91906125f0565b6000604051808303816000865af19150503d8060008114611d5a576040519150601f19603f3d011682016040523d82523d6000602084013e611d5f565b606091505b5091509150818015611d89575080511580611d89575080806020019051810190611d8991906122a6565b611dba5760405162461bcd60e51b815260206004820152600260248201526114d560f21b60448201526064016102b1565b5050505050565b600081611dcf816014612876565b1015611e125760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b60448201526064016102b1565b611e1d826014612876565b83511015611e655760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b60448201526064016102b1565b500160200151600160601b900490565b600081611e83816003612876565b1015611ec55760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b60448201526064016102b1565b611ed0826003612876565b83511015611f175760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b60448201526064016102b1565b50016003015190565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611f8491906125f0565b6000604051808303816000865af19150503d8060008114611fc1576040519150601f19603f3d011682016040523d82523d6000602084013e611fc6565b606091505b5091509150818015611ff0575080511580611ff0575080806020019051810190611ff091906122a6565b61072a5760405162461bcd60e51b815260206004820152600360248201526229aa2360e91b60448201526064016102b1565b60608161203081601f612876565b101561204e5760405162461bcd60e51b81526004016102b1906126f8565b826120598382612876565b10156120775760405162461bcd60e51b81526004016102b1906126f8565b6120818284612876565b845110156120c55760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016102b1565b6060821580156120e4576040519150600082526020820160405261212e565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561211d578051835260209283019201612105565b5050858452601f01601f1916604052505b50949350505050565b803561214281612918565b919050565b600060a08284031215612158578081fd5b50919050565b803562ffffff8116811461214257600080fd5b600060208284031215612182578081fd5b813561218d81612918565b9392505050565b6000602082840312156121a5578081fd5b815161218d81612918565b6000806000606084860312156121c4578182fd5b83356121cf81612918565b925060208401356121df81612918565b91506121ed6040850161215e565b90509250925092565b60008060006060848603121561220a578283fd5b833561221581612918565b925060208401359150604084013561222c81612918565b809150509250925092565b60008060208385031215612249578182fd5b82356001600160401b038082111561225f578384fd5b818501915085601f830112612272578384fd5b813581811115612280578485fd5b8660208260051b8501011115612294578485fd5b60209290920196919550909350505050565b6000602082840312156122b7578081fd5b8151801515811461218d578182fd5b6000602082840312156122d7578081fd5b81358060020b811461218d578182fd5b6000602082840312156122f8578081fd5b81516001600160401b0381111561230d578182fd5b8201601f8101841361231d578182fd5b805161233061232b8261284f565b61281f565b818152856020838501011115612344578384fd5b6123558260208301602086016128a5565b95945050505050565b60006020828403121561236f578081fd5b81356001600160401b03811115612384578182fd5b6110d484828501612147565b600060208083850312156123a2578182fd5b82356001600160401b03808211156123b8578384fd5b90840190604082870312156123cb578384fd5b6123d36127f7565b8235828111156123e1578586fd5b83019150601f820187136123f3578485fd5b813561240161232b8261284f565b8181528886838601011115612414578687fd5b818685018783013790810185018690528152612431838501612137565b848201528094505050505092915050565b60006101208284031215612158578081fd5b600060208284031215612465578081fd5b81356001600160801b038116811461218d578182fd5b60006020828403121561248c578081fd5b61218d8261215e565b6000602082840312156124a6578081fd5b5051919050565b600080604083850312156124bf578182fd5b8235915060208301356124d181612918565b809150509250929050565b600080604083850312156124ee578182fd5b505080516020909101519092909150565b60008060008060608587031215612514578182fd5b843593506020850135925060408501356001600160401b0380821115612538578384fd5b818701915087601f83011261254b578384fd5b813581811115612559578485fd5b88602082850101111561256a578485fd5b95989497505060200194505050565b600081518084526125918160208601602086016128a5565b601f01601f19169290920160200192915050565b606093841b6bffffffffffffffffffffffff19908116825260e89390931b6001600160e81b0319166014820152921b166017820152602b0190565b8183823760009101908152919050565b600082516126028184602087016128a5565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03851681526001600160801b0384166020820152600283900b604082015260806060820181905260009061265d90830184612579565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b8701019250838701855b828110156126bb57603f198886030184526126a9858351612579565b9450928501929085019060010161268d565b5092979650505050505050565b60208152600061218d6020830184612579565b602080825260039082015262783c7960e81b604082015260600190565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b604082015260600190565b60208082526010908201526f0ae8aa89072409cdee8408adcdeeaced60831b604082015260600190565b6020808252600b908201526a4f7574206f662074696d6560a81b604082015260600190565b60208152600082516040602084015261278b6060840182612579565b602094909401516001600160a01b0316604093909301929092525090919050565b6000808335601e198436030181126127c2578283fd5b8301803591506001600160401b038211156127db578283fd5b6020019150368190038213156127f057600080fd5b9250929050565b604080519081016001600160401b038111828210171561281957612819612902565b60405290565b604051601f8201601f191681016001600160401b038111828210171561284757612847612902565b604052919050565b60006001600160401b0382111561286857612868612902565b50601f01601f191660200190565b60008219821115612889576128896128ec565b500190565b6000828210156128a0576128a06128ec565b500390565b60005b838110156128c05781810151838201526020016128a8565b8381111561122d5750506000910152565b60006000198214156128e5576128e56128ec565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461292d57600080fd5b5056fea26469706673582212203f04faa4dca18f05efe398c3650f73525f483569bb428cf66df84ddc4006fd2e64736f6c63430008040033" + }, + { + "address": "0xf34cc0410350b99e181ec1569c35db0bc59296ce", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106102695760003560e01c8063662eef6811610151578063b480c781116100c3578063d11151e711610087578063d11151e714610714578063dcc67de914610730578063e7109b5f1461074c578063e985e9c514610768578063eebb28b214610798578063f2fde38b146107b657610269565b8063b480c78114610674578063b88d4fde14610690578063c26793bd146106ac578063c7af1961146106c8578063c87b56dd146106e457610269565b80638da5cb5b116101155780638da5cb5b146105b457806391518477146105d257806395d89b41146105ee578063a0712d681461060c578063a22cb46514610628578063b3a57c331461064457610269565b8063662eef68146104fe57806370a082311461052e578063715018a61461055e578063822f010b146105685780638c2a993e1461059857610269565b80633d6a5745116101ea5780634cd88b76116101ae5780634cd88b761461042c578063504334c21461044857806355f804b3146104645780635b43bba1146104805780636352211e1461049e57806363a846f8146104ce57610269565b80633d6a5745146103a057806342842e0e146103bc57806342966c68146103d8578063449a52f8146103f45780634b0bddd21461041057610269565b8063091dfac811610231578063091dfac814610326578063095ea7b31461034257806323b872dd1461035e5780632f05be8f1461037a57806336f4c0eb1461038457610269565b806301ffc9a71461026e57806302669b521461029e57806304d8c29f146102bc57806306fdde03146102d8578063081812fc146102f6575b600080fd5b6102886004803603810190610283919061402e565b6107d2565b604051610295919061478c565b60405180910390f35b6102a661084c565b6040516102b39190614725565b60405180910390f35b6102d660048036038101906102d19190613d8d565b610872565b005b6102e0610882565b6040516102ed91906147c2565b60405180910390f35b610310600480360381019061030b919061412d565b610914565b60405161031d9190614725565b60405180910390f35b610340600480360381019061033b9190613fed565b610999565b005b61035c60048036038101906103579190613ef6565b610bd7565b005b61037860048036038101906103739190613d8d565b610cef565b005b610382610d4f565b005b61039e60048036038101906103999190613cbc565b610ea5565b005b6103ba60048036038101906103b59190613ef6565b610f65565b005b6103d660048036038101906103d19190613d8d565b61103c565b005b6103f260048036038101906103ed919061412d565b61105c565b005b61040e60048036038101906104099190613ef6565b6110b1565b005b61042a60048036038101906104259190613eba565b6114c5565b005b610446600480360381019061044191906140c1565b61159c565b005b610462600480360381019061045d91906140c1565b611646565b005b61047e60048036038101906104799190614080565b611741565b005b610488611824565b6040516104959190614ba4565b60405180910390f35b6104b860048036038101906104b3919061412d565b61182e565b6040516104c59190614725565b60405180910390f35b6104e860048036038101906104e39190613cbc565b6118e0565b6040516104f5919061478c565b60405180910390f35b61051860048036038101906105139190613cbc565b611900565b604051610525919061478c565b60405180910390f35b61054860048036038101906105439190613cbc565b611920565b6040516105559190614ba4565b60405180910390f35b6105666119d8565b005b610582600480360381019061057d919061412d565b611a60565b60405161058f919061478c565b60405180910390f35b6105b260048036038101906105ad9190613ef6565b611b3b565b005b6105bc611c19565b6040516105c99190614725565b60405180910390f35b6105ec60048036038101906105e79190614156565b611c43565b005b6105f6611cfd565b60405161060391906147c2565b60405180910390f35b6106266004803603810190610621919061412d565b611d8f565b005b610642600480360381019061063d9190613eba565b611e65565b005b61065e6004803603810190610659919061412d565b611e7b565b60405161066b9190614ba4565b60405180910390f35b61068e60048036038101906106899190613d21565b611e9f565b005b6106aa60048036038101906106a59190613ddc565b611f11565b005b6106c660048036038101906106c19190613f81565b611f73565b005b6106e260048036038101906106dd9190613f32565b61217c565b005b6106fe60048036038101906106f9919061412d565b61227d565b60405161070b91906147c2565b60405180910390f35b61072e60048036038101906107299190613e57565b612324565b005b61074a6004803603810190610745919061412d565b612350565b005b61076660048036038101906107619190613eba565b61247c565b005b610782600480360381019061077d9190613ce5565b612553565b60405161078f919061478c565b60405180910390f35b6107a06125e7565b6040516107ad9190614ba4565b60405180910390f35b6107d060048036038101906107cb9190613cbc565b6125f1565b005b60007ff162c1eb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108455750610844826126e9565b5b9050919050565b60cf60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61087d838383610cef565b505050565b606060cb805461089190614e71565b80601f01602080910402602001604051908101604052809291908181526020018280546108bd90614e71565b801561090a5780601f106108df5761010080835404028352916020019161090a565b820191906000526020600020905b8154815290600101906020018083116108ed57829003601f168201915b5050505050905090565b600061091f826127cb565b61095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590614a24565b60405180910390fd5b6069600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60ca60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610a2357503373ffffffffffffffffffffffffffffffffffffffff16610a0b611c19565b73ffffffffffffffffffffffffffffffffffffffff16145b610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990614ae4565b60405180910390fd5b6000815111610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90614a64565b60405180910390fd5b60005b8151811015610bb757610afb828281518110610aee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516127cb565b15610b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3290614924565b60405180910390fd5b60d0828281518110610b76577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190806001815401808255809150506001900390600052602060002001600090919091909150558080610baf90614ed4565b915050610aa9565b50610bce815160cd5461283790919063ffffffff16565b60cd8190555050565b6000610be28261182e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90614b24565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7261284d565b73ffffffffffffffffffffffffffffffffffffffff161480610ca15750610ca081610c9b61284d565b612553565b5b610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790614964565b60405180910390fd5b610cea8383612855565b505050565b610d00610cfa61284d565b8261290e565b610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690614b44565b60405180910390fd5b610d4a8383836129ec565b505050565b60ca60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610dd957503373ffffffffffffffffffffffffffffffffffffffff16610dc1611c19565b73ffffffffffffffffffffffffffffffffffffffff16145b610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f90614ae4565b60405180910390fd5b60cd54610e3560d08054905060ce5461283790919063ffffffff16565b14610e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6c90614b84565b60405180910390fd5b610e8f60d08054905060cd54612c5390919063ffffffff16565b60cd8190555060d06000610ea39190613949565b565b610ead61284d565b73ffffffffffffffffffffffffffffffffffffffff16610ecb611c19565b73ffffffffffffffffffffffffffffffffffffffff1614610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890614a84565b60405180910390fd5b8060cf60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60ca60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610fef57503373ffffffffffffffffffffffffffffffffffffffff16610fd7611c19565b73ffffffffffffffffffffffffffffffffffffffff16145b61102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590614ae4565b60405180910390fd5b6110388282612c69565b5050565b61105783838360405180602001604052806000815250611f11565b505050565b611066338261290e565b6110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109c90614aa4565b60405180910390fd5b6110ae81612e43565b50565b600073ffffffffffffffffffffffffffffffffffffffff1660cf60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a90614824565b60405180910390fd5b60cf60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca90614b04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a90614a44565b60405180910390fd5b60008111611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90614904565b60405180910390fd5b60cd548160ce546112979190614ce1565b11156112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf906149e4565b60405180910390fd5b6000600190505b8181116114c05760006112f660d080549050612f60565b90506000611313600160d080549050612c5390919063ffffffff16565b9050600060d08281548110611351577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905081831461143a5760d0838154811061139f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905060d082815481106113e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015460d0848154811061142b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055505b60d0805480611472577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590556114928682612c69565b60ce60008154809291906114a590614ed4565b919050555050505080806114b890614ed4565b9150506112df565b505050565b6114cd61284d565b73ffffffffffffffffffffffffffffffffffffffff166114eb611c19565b73ffffffffffffffffffffffffffffffffffffffff1614611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890614a84565b60405180910390fd5b8060ca60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006115a86001612faf565b905080156115cc576001600060016101000a81548160ff0219169083151502179055505b6115d6838361309f565b6115de6130fc565b6115e88383611646565b80156116415760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161163891906147a7565b60405180910390a15b505050565b60ca60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806116d057503373ffffffffffffffffffffffffffffffffffffffff166116b8611c19565b73ffffffffffffffffffffffffffffffffffffffff16145b61170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690614ae4565b60405180910390fd5b8160cb908051906020019061172592919061396a565b508060cc908051906020019061173c92919061396a565b505050565b60ca60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806117cb57503373ffffffffffffffffffffffffffffffffffffffff166117b3611c19565b73ffffffffffffffffffffffffffffffffffffffff16145b61180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190614ae4565b60405180910390fd5b8060c9908051906020019061182092919061396a565b5050565b600060cd54905090565b6000806067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ce906149a4565b60405180910390fd5b80915050919050565b60ca6020528060005260406000206000915054906101000a900460ff1681565b60d16020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198890614984565b60405180910390fd5b606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119e061284d565b73ffffffffffffffffffffffffffffffffffffffff166119fe611c19565b73ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90614a84565b60405180910390fd5b611a5e6000613155565b565b600060d16000611a6e61284d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611af357503373ffffffffffffffffffffffffffffffffffffffff16611adb611c19565b73ffffffffffffffffffffffffffffffffffffffff16145b611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2990614804565b60405180910390fd5b60019050919050565b60d16000611b4761284d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611bcc57503373ffffffffffffffffffffffffffffffffffffffff16611bb4611c19565b73ffffffffffffffffffffffffffffffffffffffff16145b611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290614804565b60405180910390fd5b611c158282612c69565b5050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c4b61284d565b73ffffffffffffffffffffffffffffffffffffffff16611c69611c19565b73ffffffffffffffffffffffffffffffffffffffff1614611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb690614a84565b60405180910390fd5b60008290505b81811015611cf857611cd6816127cb565b15611ce557611ce481612e43565b5b8080611cf090614ed4565b915050611cc5565b505050565b606060cc8054611d0c90614e71565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3890614e71565b8015611d855780601f10611d5a57610100808354040283529160200191611d85565b820191906000526020600020905b815481529060010190602001808311611d6857829003601f168201915b5050505050905090565b60ca60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e1957503373ffffffffffffffffffffffffffffffffffffffff16611e01611c19565b73ffffffffffffffffffffffffffffffffffffffff16145b611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90614ae4565b60405180910390fd5b611e623382612c69565b50565b611e77611e7061284d565b838361321b565b5050565b60d08181548110611e8b57600080fd5b906000526020600020016000915090505481565b60005b82829050811015611f0a57611ef78585858585818110611eeb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135610cef565b8080611f0290614ed4565b915050611ea2565b5050505050565b611f22611f1c61284d565b8361290e565b611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890614b44565b60405180910390fd5b611f6d84848484613388565b50505050565b60ca60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ffd57503373ffffffffffffffffffffffffffffffffffffffff16611fe5611c19565b73ffffffffffffffffffffffffffffffffffffffff16145b61203c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203390614ae4565b60405180910390fd5b8051825114612080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612077906147e4565b60405180910390fd5b60005b8151811015612177576120d58282815181106120c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516127cb565b61216457612163838281518110612115577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151838381518110612156577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151612c69565b5b808061216f90614ed4565b915050612083565b505050565b60ca60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061220657503373ffffffffffffffffffffffffffffffffffffffff166121ee611c19565b73ffffffffffffffffffffffffffffffffffffffff16145b612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90614ae4565b60405180910390fd5b5b80821161227857612256826127cb565b612265576122648383612c69565b5b818061227090614ed4565b925050612246565b505050565b6060612288826127cb565b6122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90614ac4565b60405180910390fd5b60006122d16133e4565b905060008151116122f1576040518060200160405280600081525061231c565b806122fb84613476565b60405160200161230c9291906146a2565b6040516020818303038152906040525b915050919050565b5b80821161234a57612337848484610cef565b818061234290614ed4565b925050612325565b50505050565b60d1600061235c61284d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123e157503373ffffffffffffffffffffffffffffffffffffffff166123c9611c19565b73ffffffffffffffffffffffffffffffffffffffff16145b612420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241790614804565b60405180910390fd5b61243161242b61284d565b8261290e565b612470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246790614aa4565b60405180910390fd5b61247981612e43565b50565b61248461284d565b73ffffffffffffffffffffffffffffffffffffffff166124a2611c19565b73ffffffffffffffffffffffffffffffffffffffff16146124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef90614a84565b60405180910390fd5b8060d160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000606a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600060ce54905090565b6125f961284d565b73ffffffffffffffffffffffffffffffffffffffff16612617611c19565b73ffffffffffffffffffffffffffffffffffffffff161461266d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266490614a84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d490614864565b60405180910390fd5b6126e681613155565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127b457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127c457506127c382613623565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600081836128459190614ce1565b905092915050565b600033905090565b816069600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128c88361182e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612919826127cb565b612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294f90614944565b60405180910390fd5b60006129638361182e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129a557506129a48185612553565b5b806129e357508373ffffffffffffffffffffffffffffffffffffffff166129cb84610914565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a0c8261182e565b73ffffffffffffffffffffffffffffffffffffffff1614612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5990614884565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac9906148c4565b60405180910390fd5b612add83838361368d565b612ae8600082612855565b6001606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b389190614d68565b925050819055506001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b8f9190614ce1565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c4e838383613692565b505050565b60008183612c619190614d68565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd090614a04565b60405180910390fd5b612ce2816127cb565b15612d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d19906148a4565b60405180910390fd5b612d2e6000838361368d565b6001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d7e9190614ce1565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e3f60008383613692565b5050565b6000612e4e8261182e565b9050612e5c8160008461368d565b612e67600083612855565b6001606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eb79190614d68565b925050819055506067600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f5c81600084613692565b5050565b6000612fa88260ce5444454342604051602001612f819594939291906146c6565b6040516020818303038152906040528051906020012060001c61369790919063ffffffff16565b9050919050565b60008060019054906101000a900460ff16156130265760018260ff16148015612fde5750612fdc306136ad565b155b61301d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613014906149c4565b60405180910390fd5b6000905061309a565b8160ff1660008054906101000a900460ff1660ff161061307b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613072906149c4565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b600060019054906101000a900460ff166130ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e590614b64565b60405180910390fd5b6130f882826136d0565b5050565b600060019054906101000a900460ff1661314b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314290614b64565b60405180910390fd5b613153613751565b565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561328a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613281906148e4565b60405180910390fd5b80606a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161337b919061478c565b60405180910390a3505050565b6133938484846129ec565b61339f848484846137b2565b6133de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d590614844565b60405180910390fd5b50505050565b606060c980546133f390614e71565b80601f016020809104026020016040519081016040528092919081815260200182805461341f90614e71565b801561346c5780601f106134415761010080835404028352916020019161346c565b820191906000526020600020905b81548152906001019060200180831161344f57829003601f168201915b5050505050905090565b606060008214156134be576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061361e565b600082905060005b600082146134f05780806134d990614ed4565b915050600a826134e99190614d37565b91506134c6565b60008167ffffffffffffffff811115613532577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156135645781602001600182028036833780820191505090505b5090505b600085146136175760018261357d9190614d68565b9150600a8561358c9190614f27565b60306135989190614ce1565b60f81b8183815181106135d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856136109190614d37565b9450613568565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b505050565b600081836136a59190614f27565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff1661371f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371690614b64565b60405180910390fd5b816065908051906020019061373592919061396a565b50806066908051906020019061374c92919061396a565b505050565b600060019054906101000a900460ff166137a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379790614b64565b60405180910390fd5b6137b06137ab61284d565b613155565b565b60006137d38473ffffffffffffffffffffffffffffffffffffffff166136ad565b1561393c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026137fc61284d565b8786866040518563ffffffff1660e01b815260040161381e9493929190614740565b602060405180830381600087803b15801561383857600080fd5b505af192505050801561386957506040513d601f19601f820116820180604052508101906138669190614057565b60015b6138ec573d8060008114613899576040519150601f19603f3d011682016040523d82523d6000602084013e61389e565b606091505b506000815114156138e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138db90614844565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613941565b600190505b949350505050565b508054600082559060005260206000209081019061396791906139f0565b50565b82805461397690614e71565b90600052602060002090601f01602090048101928261399857600085556139df565b82601f106139b157805160ff19168380011785556139df565b828001600101855582156139df579182015b828111156139de5782518255916020019190600101906139c3565b5b5090506139ec91906139f0565b5090565b5b80821115613a095760008160009055506001016139f1565b5090565b6000613a20613a1b84614be4565b614bbf565b90508083825260208201905082856020860282011115613a3f57600080fd5b60005b85811015613a6f5781613a558882613b61565b845260208401935060208301925050600181019050613a42565b5050509392505050565b6000613a8c613a8784614c10565b614bbf565b90508083825260208201905082856020860282011115613aab57600080fd5b60005b85811015613adb5781613ac18882613ca7565b845260208401935060208301925050600181019050613aae565b5050509392505050565b6000613af8613af384614c3c565b614bbf565b905082815260208101848484011115613b1057600080fd5b613b1b848285614e2f565b509392505050565b6000613b36613b3184614c6d565b614bbf565b905082815260208101848484011115613b4e57600080fd5b613b59848285614e2f565b509392505050565b600081359050613b70816157c5565b92915050565b600082601f830112613b8757600080fd5b8135613b97848260208601613a0d565b91505092915050565b60008083601f840112613bb257600080fd5b8235905067ffffffffffffffff811115613bcb57600080fd5b602083019150836020820283011115613be357600080fd5b9250929050565b600082601f830112613bfb57600080fd5b8135613c0b848260208601613a79565b91505092915050565b600081359050613c23816157dc565b92915050565b600081359050613c38816157f3565b92915050565b600081519050613c4d816157f3565b92915050565b600082601f830112613c6457600080fd5b8135613c74848260208601613ae5565b91505092915050565b600082601f830112613c8e57600080fd5b8135613c9e848260208601613b23565b91505092915050565b600081359050613cb68161580a565b92915050565b600060208284031215613cce57600080fd5b6000613cdc84828501613b61565b91505092915050565b60008060408385031215613cf857600080fd5b6000613d0685828601613b61565b9250506020613d1785828601613b61565b9150509250929050565b60008060008060608587031215613d3757600080fd5b6000613d4587828801613b61565b9450506020613d5687828801613b61565b935050604085013567ffffffffffffffff811115613d7357600080fd5b613d7f87828801613ba0565b925092505092959194509250565b600080600060608486031215613da257600080fd5b6000613db086828701613b61565b9350506020613dc186828701613b61565b9250506040613dd286828701613ca7565b9150509250925092565b60008060008060808587031215613df257600080fd5b6000613e0087828801613b61565b9450506020613e1187828801613b61565b9350506040613e2287828801613ca7565b925050606085013567ffffffffffffffff811115613e3f57600080fd5b613e4b87828801613c53565b91505092959194509250565b60008060008060808587031215613e6d57600080fd5b6000613e7b87828801613b61565b9450506020613e8c87828801613b61565b9350506040613e9d87828801613ca7565b9250506060613eae87828801613ca7565b91505092959194509250565b60008060408385031215613ecd57600080fd5b6000613edb85828601613b61565b9250506020613eec85828601613c14565b9150509250929050565b60008060408385031215613f0957600080fd5b6000613f1785828601613b61565b9250506020613f2885828601613ca7565b9150509250929050565b600080600060608486031215613f4757600080fd5b6000613f5586828701613b61565b9350506020613f6686828701613ca7565b9250506040613f7786828701613ca7565b9150509250925092565b60008060408385031215613f9457600080fd5b600083013567ffffffffffffffff811115613fae57600080fd5b613fba85828601613b76565b925050602083013567ffffffffffffffff811115613fd757600080fd5b613fe385828601613bea565b9150509250929050565b600060208284031215613fff57600080fd5b600082013567ffffffffffffffff81111561401957600080fd5b61402584828501613bea565b91505092915050565b60006020828403121561404057600080fd5b600061404e84828501613c29565b91505092915050565b60006020828403121561406957600080fd5b600061407784828501613c3e565b91505092915050565b60006020828403121561409257600080fd5b600082013567ffffffffffffffff8111156140ac57600080fd5b6140b884828501613c7d565b91505092915050565b600080604083850312156140d457600080fd5b600083013567ffffffffffffffff8111156140ee57600080fd5b6140fa85828601613c7d565b925050602083013567ffffffffffffffff81111561411757600080fd5b61412385828601613c7d565b9150509250929050565b60006020828403121561413f57600080fd5b600061414d84828501613ca7565b91505092915050565b6000806040838503121561416957600080fd5b600061417785828601613ca7565b925050602061418885828601613ca7565b9150509250929050565b61419b81614d9c565b82525050565b6141aa81614dae565b82525050565b60006141bb82614c9e565b6141c58185614cb4565b93506141d5818560208601614e3e565b6141de81615014565b840191505092915050565b6141f281614e1d565b82525050565b600061420382614ca9565b61420d8185614cc5565b935061421d818560208601614e3e565b61422681615014565b840191505092915050565b600061423c82614ca9565b6142468185614cd6565b9350614256818560208601614e3e565b80840191505092915050565b600061426f600f83614cc5565b915061427a82615025565b602082019050919050565b6000614292602983614cc5565b915061429d8261504e565b604082019050919050565b60006142b5601a83614cc5565b91506142c08261509d565b602082019050919050565b60006142d8603283614cc5565b91506142e3826150c6565b604082019050919050565b60006142fb602683614cc5565b915061430682615115565b604082019050919050565b600061431e602583614cc5565b915061432982615164565b604082019050919050565b6000614341601c83614cc5565b915061434c826151b3565b602082019050919050565b6000614364602483614cc5565b915061436f826151dc565b604082019050919050565b6000614387601983614cc5565b91506143928261522b565b602082019050919050565b60006143aa601b83614cc5565b91506143b582615254565b602082019050919050565b60006143cd600e83614cc5565b91506143d88261527d565b602082019050919050565b60006143f0602c83614cc5565b91506143fb826152a6565b604082019050919050565b6000614413603883614cc5565b915061441e826152f5565b604082019050919050565b6000614436602a83614cc5565b915061444182615344565b604082019050919050565b6000614459602983614cc5565b915061446482615393565b604082019050919050565b600061447c602e83614cc5565b9150614487826153e2565b604082019050919050565b600061449f601283614cc5565b91506144aa82615431565b602082019050919050565b60006144c2602083614cc5565b91506144cd8261545a565b602082019050919050565b60006144e5602c83614cc5565b91506144f082615483565b604082019050919050565b6000614508601b83614cc5565b9150614513826154d2565b602082019050919050565b600061452b602583614cc5565b9150614536826154fb565b604082019050919050565b600061454e602083614cc5565b91506145598261554a565b602082019050919050565b6000614571602d83614cc5565b915061457c82615573565b604082019050919050565b6000614594602f83614cc5565b915061459f826155c2565b604082019050919050565b60006145b7601e83614cc5565b91506145c282615611565b602082019050919050565b60006145da601683614cc5565b91506145e58261563a565b602082019050919050565b60006145fd602183614cc5565b915061460882615663565b604082019050919050565b6000614620603183614cc5565b915061462b826156b2565b604082019050919050565b6000614643602b83614cc5565b915061464e82615701565b604082019050919050565b6000614666604883614cc5565b915061467182615750565b606082019050919050565b61468581614e06565b82525050565b61469c61469782614e06565b614f1d565b82525050565b60006146ae8285614231565b91506146ba8284614231565b91508190509392505050565b60006146d2828861468b565b6020820191506146e2828761468b565b6020820191506146f2828661468b565b602082019150614702828561468b565b602082019150614712828461468b565b6020820191508190509695505050505050565b600060208201905061473a6000830184614192565b92915050565b60006080820190506147556000830187614192565b6147626020830186614192565b61476f604083018561467c565b818103606083015261478181846141b0565b905095945050505050565b60006020820190506147a160008301846141a1565b92915050565b60006020820190506147bc60008301846141e9565b92915050565b600060208201905081810360008301526147dc81846141f8565b905092915050565b600060208201905081810360008301526147fd81614262565b9050919050565b6000602082019050818103600083015261481d81614285565b9050919050565b6000602082019050818103600083015261483d816142a8565b9050919050565b6000602082019050818103600083015261485d816142cb565b9050919050565b6000602082019050818103600083015261487d816142ee565b9050919050565b6000602082019050818103600083015261489d81614311565b9050919050565b600060208201905081810360008301526148bd81614334565b9050919050565b600060208201905081810360008301526148dd81614357565b9050919050565b600060208201905081810360008301526148fd8161437a565b9050919050565b6000602082019050818103600083015261491d8161439d565b9050919050565b6000602082019050818103600083015261493d816143c0565b9050919050565b6000602082019050818103600083015261495d816143e3565b9050919050565b6000602082019050818103600083015261497d81614406565b9050919050565b6000602082019050818103600083015261499d81614429565b9050919050565b600060208201905081810360008301526149bd8161444c565b9050919050565b600060208201905081810360008301526149dd8161446f565b9050919050565b600060208201905081810360008301526149fd81614492565b9050919050565b60006020820190508181036000830152614a1d816144b5565b9050919050565b60006020820190508181036000830152614a3d816144d8565b9050919050565b60006020820190508181036000830152614a5d816144fb565b9050919050565b60006020820190508181036000830152614a7d8161451e565b9050919050565b60006020820190508181036000830152614a9d81614541565b9050919050565b60006020820190508181036000830152614abd81614564565b9050919050565b60006020820190508181036000830152614add81614587565b9050919050565b60006020820190508181036000830152614afd816145aa565b9050919050565b60006020820190508181036000830152614b1d816145cd565b9050919050565b60006020820190508181036000830152614b3d816145f0565b9050919050565b60006020820190508181036000830152614b5d81614613565b9050919050565b60006020820190508181036000830152614b7d81614636565b9050919050565b60006020820190508181036000830152614b9d81614659565b9050919050565b6000602082019050614bb9600083018461467c565b92915050565b6000614bc9614bda565b9050614bd58282614ea3565b919050565b6000604051905090565b600067ffffffffffffffff821115614bff57614bfe614fe5565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c2b57614c2a614fe5565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c5757614c56614fe5565b5b614c6082615014565b9050602081019050919050565b600067ffffffffffffffff821115614c8857614c87614fe5565b5b614c9182615014565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614cec82614e06565b9150614cf783614e06565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d2c57614d2b614f58565b5b828201905092915050565b6000614d4282614e06565b9150614d4d83614e06565b925082614d5d57614d5c614f87565b5b828204905092915050565b6000614d7382614e06565b9150614d7e83614e06565b925082821015614d9157614d90614f58565b5b828203905092915050565b6000614da782614de6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e2882614e10565b9050919050565b82818337600083830152505050565b60005b83811015614e5c578082015181840152602081019050614e41565b83811115614e6b576000848401525b50505050565b60006002820490506001821680614e8957607f821691505b60208210811415614e9d57614e9c614fb6565b5b50919050565b614eac82615014565b810181811067ffffffffffffffff82111715614ecb57614eca614fe5565b5b80604052505050565b6000614edf82614e06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f1257614f11614f58565b5b600182019050919050565b6000819050919050565b6000614f3282614e06565b9150614f3d83614e06565b925082614f4d57614f4c614f87565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f6c656e677468206d69736d617463680000000000000000000000000000000000600082015250565b7f4272696467653a2063616c6c6572206973206e6f74207468652062726964676560008201527f206f72206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6c61756e63687061642061646472657373206d75737420736574000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f73697a65206d7573742067726561746572207468616e207a65726f0000000000600082015250565b7f746f6b656e6964206d696e746564000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f6d617820737570706c7920726561636865640000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f63616e2774206d696e7420746f20656d70747920616464726573730000000000600082015250565b7f746f6b656e696473206c656e677468206d75737420677265746572207468616e60008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a206275726e2063616c6c6572206973206e6f74206f776e657260008201527f206e6f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f41646d696e3a2063616c6c6572206973206e6f74207468652061646d696e0000600082015250565b7f6d7573742063616c6c206279206c61756e636870616400000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f4c61756e63686d6178737570706c79206d75737420626520657175616c20746f60008201527f206c61756e6368737570706c79202b206c61756e6368706164546f6b656e496460208201527f732e6c656e677468000000000000000000000000000000000000000000000000604082015250565b6157ce81614d9c565b81146157d957600080fd5b50565b6157e581614dae565b81146157f057600080fd5b50565b6157fc81614dba565b811461580757600080fd5b50565b61581381614e06565b811461581e57600080fd5b5056fea264697066735822122099abcb848967e6eaca6b88abd6abecbbe5e62da2ab02a5e810729af5d44d9ab764736f6c63430008040033" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000000aa87bee538000", + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6058565b565b600060537f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156076573d6000f35b3d6000fdfea2646970667358221220cd192a3c3833c82a19c4e89c6a3770f270ec5751497edd1c0d260a060b06fa3464736f6c63430008130033" + }, + { + "address": "0xd380a95ca364561f3867c5734aae712b744bb7d0", + "nonce": 10, + "balance": "0x0000000000000000000000000000000000000000000000000011b1950b1e7eee", + "code": "0x" + }, + { + "address": "0x7b5d1affa60244cbbac9f25de50b32990a8a7031", + "nonce": 8, + "balance": "0x000000000000000000000000000000000000000000000000001343bbbfcbf456", + "code": "0x" + }, + { + "address": "0xb9cc0bb020cf55197c4c3d826ac87cadba51f272", + "nonce": 1, + "balance": "0x00000000000000000000000000000000000000000000000109f43476fb960000", + "code": "0x6080604052600436106101e35760003560e01c80638456cb5911610102578063b666493411610095578063ed6d73f911610064578063ed6d73f914610563578063f2fde38b14610583578063f3fef3a3146105a3578063f887ea40146105c357600080fd5b8063b6664934146104f0578063b75c7dc614610510578063b95459e414610530578063ecdbb4fd1461055057600080fd5b80639e69bee9116100d15780639e69bee914610479578063acdfb1bb14610499578063b2494df3146104ae578063b2c8ea79146104d057600080fd5b80638456cb59146104055780638da5cb5b1461041a578063958f9735146104385780639c1584dc1461045957600080fd5b80633f4ba83a1161017a578063715018a611610149578063715018a614610375578063742f06881461038a57806381b2248a146103ba5780638388e226146103f257600080fd5b80633f4ba83a146103015780634ada807614610316578063523ba7ca146103365780635c975abb1461035657600080fd5b80631ed86f19116101b65780631ed86f191461028057806320d8d2a4146102a057806339f08d1c146102c15780633cc30e2a146102e157600080fd5b806301ffc9a7146101e857806303e25c491461021d57806305e67f6314610258578063074321961461026d575b600080fd5b3480156101f457600080fd5b5061020861020336600461130c565b6105e3565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061024a61023836600461133d565b60076020526000908152604090205481565b604051908152602001610214565b61026b61026636600461159c565b610635565b005b61026b61027b36600461159c565b610643565b34801561028c57600080fd5b5061026b61029b366004611614565b610723565b3480156102ac57600080fd5b5060055461020890600160a81b900460ff1681565b3480156102cd57600080fd5b5061026b6102dc366004611631565b61077c565b3480156102ed57600080fd5b5061026b6102fc3660046117ac565b6107ab565b34801561030d57600080fd5b5061026b610886565b34801561032257600080fd5b5061026b610331366004611833565b610898565b34801561034257600080fd5b5061026b61035136600461186f565b610906565b34801561036257600080fd5b50600554600160a01b900460ff16610208565b34801561038157600080fd5b5061026b6109a7565b34801561039657600080fd5b506102086103a536600461133d565b60066020526000908152604090205460ff1681565b3480156103c657600080fd5b506103da6103d536600461133d565b6109b9565b6040516001600160a01b039091168152602001610214565b3480156103fe57600080fd5b50336103da565b34801561041157600080fd5b5061026b6109e3565b34801561042657600080fd5b506005546001600160a01b03166103da565b34801561044457600080fd5b5060055461020890600160b01b900460ff1681565b34801561046557600080fd5b5061026b6104743660046118d6565b6109f3565b34801561048557600080fd5b5061026b61049436600461190f565b610a2f565b3480156104a557600080fd5b5061026b610b00565b3480156104ba57600080fd5b506104c3610b1c565b60405161021491906119c9565b3480156104dc57600080fd5b5061026b6104eb366004611a61565b610b7e565b3480156104fc57600080fd5b506004546103da906001600160a01b031681565b34801561051c57600080fd5b5061026b61052b36600461133d565b610c2d565b34801561053c57600080fd5b506002546103da906001600160a01b031681565b61026b61055e366004611acc565b610c67565b34801561056f57600080fd5b506003546103da906001600160a01b031681565b34801561058f57600080fd5b5061026b61059e366004611614565b610d14565b3480156105af57600080fd5b5061026b6105be366004611b2e565b610d92565b3480156105cf57600080fd5b506000546103da906001600160a01b031681565b60006001600160e01b0319821663204cf90960e01b148061061457506001600160e01b031982166331c1afd560e01b145b8061062f57506001600160e01b031982166301ffc9a760e01b145b92915050565b61063f8282610643565b5050565b60025460405163747129e560e11b81526001600160a01b039091169063e8e253ca9061067a90600190869086903490600401611c9c565b600060405180830381600087803b15801561069457600080fd5b505af11580156106a8573d6000803e3d6000fd5b505050506106bd826106b73390565b34610e12565b6003546001600160a01b03166362fa3d4583336040518363ffffffff1660e01b81526004016106ed929190611ce7565b600060405180830381600087803b15801561070757600080fd5b505af115801561071b573d6000803e3d6000fd5b505050505050565b61072b610e69565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526007602052604090205481101561063f576040516330c00ff760e01b815260040160405180910390fd5b60025460405163715d762560e11b81526001600160a01b039091169063e2baec4a906107e09060019086908690600401611d59565b600060405180830381600087803b1580156107fa57600080fd5b505af115801561080e573d6000803e3d6000fd5b5050505061081d838383610ec3565b6003546001600160a01b0316636ec4d4cb8484336040518463ffffffff1660e01b815260040161084f93929190611e10565b600060405180830381600087803b15801561086957600080fd5b505af115801561087d573d6000803e3d6000fd5b50505050505050565b61088e610e69565b610896610f90565b565b6108a181610fe5565b60035460405163256d403b60e11b81526001600160a01b0390911690634ada8076906108d1908490600401611e4e565b600060405180830381600087803b1580156108eb57600080fd5b505af11580156108ff573d6000803e3d6000fd5b5050505050565b60025460405163715d762560e11b81526001600160a01b039091169063e2baec4a9061093b9060019086908690600401611d59565b600060405180830381600087803b15801561095557600080fd5b505af1158015610969573d6000803e3d6000fd5b50505050610977828261108b565b6003546001600160a01b031663a8e2812d83336040518363ffffffff1660e01b81526004016106ed929190611e61565b6109af610e69565b6108966000611151565b600181815481106109c957600080fd5b6000918252602090912001546001600160a01b0316905081565b6109eb610e69565b6108966111a3565b6109fb610e69565b6005805461ffff60a81b1916600160b01b9315159390930260ff60a81b191692909217600160a81b91151591909102179055565b610a37610e69565b8051825114610a595760405163512509d360e11b815260040160405180910390fd5b60005b8251811015610ac257818181518110610a7757610a77611e74565b602002602001015160076000858481518110610a9557610a95611e74565b60200260200101518152602001908152602001600020819055508080610aba90611e8a565b915050610a5c565b507fe6819e2393072526980433f94718a65624dac839c064a79991c3d8d06cba0c1a8282604051610af4929190611eb1565b60405180910390a15050565b610b08610e69565b610b106111e6565b610896600160006112da565b60606001805480602002602001604051908101604052809291908181526020018280548015610b7457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b56575b5050505050905090565b610b86610e69565b828114610ba65760405163512509d360e11b815260040160405180910390fd5b60005b838110156108ff57828282818110610bc357610bc3611e74565b9050602002016020810190610bd89190611f08565b60066000878785818110610bee57610bee611e74565b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c2590611e8a565b915050610ba9565b610c3681610fe5565b600354604051635bae3ee360e11b8152600481018390526001600160a01b039091169063b75c7dc6906024016108d1565b60025460405163747129e560e11b81526001600160a01b039091169063e8e253ca90610c9e90600190869086903490600401611c9c565b600060405180830381600087803b158015610cb857600080fd5b505af1158015610ccc573d6000803e3d6000fd5b50505050610ce28383610cdc3390565b34611236565b6003546001600160a01b0316638ffa736b8484336040518463ffffffff1660e01b815260040161084f93929190611f25565b610d1c610e69565b6001600160a01b038116610d865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610d8f81611151565b50565b610d9a610e69565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610de7576040519150601f19603f3d011682016040523d82523d6000602084013e610dec565b606091505b5050905080610e0d5760405162c0f29960e01b815260040160405180910390fd5b505050565b610e1a61128d565b825160009081526006602052604090205460ff16610e4b576040516304a057b360e21b815260040160405180910390fd5b600554600160b01b900460ff1615610e0d578251610e0d908261077c565b6005546001600160a01b031633146108965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d7d565b610ecb61128d565b600554600160a81b900460ff16610f1a5760405162461bcd60e51b81526020600482015260136024820152724f6e6c792073696e676c65207265706c61636560681b6044820152606401610d7d565b60005b8251811015610f8a5760066000848381518110610f3c57610f3c611e74565b6020908102919091018101515182528101919091526040016000205460ff16610f78576040516304a057b360e21b815260040160405180910390fd5b80610f8281611e8a565b915050610f1d565b50505050565b610f986111e6565b6005805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6004805460405163181f78e960e31b815230928101929092526001600160a01b03169063c0fbc74890602401600060405180830381865afa15801561102e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611056919081019061201a565b602001516001600160a01b0316336001600160a01b031614610d8f576040516371f63e3160e01b815260040160405180910390fd5b61109361128d565b600554600160a81b900460ff166110e15760405162461bcd60e51b815260206004820152601260248201527113db9b1e481cda5b99db1948185d1d195cdd60721b6044820152606401610d7d565b60005b8251811015610e0d576006600084838151811061110357611103611e74565b6020908102919091018101515182528101919091526040016000205460ff1661113f576040516304a057b360e21b815260040160405180910390fd5b8061114981611e8a565b9150506110e4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6111ab61128d565b6005805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610fc83390565b600554600160a01b900460ff166108965760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610d7d565b61123e61128d565b825160009081526006602052604090205460ff1661126f576040516304a057b360e21b815260040160405180910390fd5b600554600160b01b900460ff1615610f8a578251610f8a908261077c565b600554600160a01b900460ff16156108965760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610d7d565b5080546000825590600052602060002090810190610d8f91905b8082111561130857600081556001016112f4565b5090565b60006020828403121561131e57600080fd5b81356001600160e01b03198116811461133657600080fd5b9392505050565b60006020828403121561134f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171561138e5761138e611356565b60405290565b604051601f8201601f191681016001600160401b03811182821017156113bc576113bc611356565b604052919050565b60006001600160401b038211156113dd576113dd611356565b50601f01601f191660200190565b600082601f8301126113fc57600080fd5b813561140f61140a826113c4565b611394565b81815284602083860101111561142457600080fd5b816020850160208301376000918101602001919091529392505050565b60006080828403121561145357600080fd5b604051608081016001600160401b03828210818311171561147657611476611356565b816040528293508435835260208501359150808216821461149657600080fd5b81602084015260408501359150808211156114b057600080fd5b6114bc868387016113eb565b604084015260608501359150808211156114d557600080fd5b506114e2858286016113eb565b6060830152505092915050565b60006001600160401b0382111561150857611508611356565b5060051b60200190565b600082601f83011261152357600080fd5b8135602061153361140a836114ef565b82815260059290921b8401810191818101908684111561155257600080fd5b8286015b848110156115915780356001600160401b038111156115755760008081fd5b6115838986838b01016113eb565b845250918301918301611556565b509695505050505050565b600080604083850312156115af57600080fd5b82356001600160401b03808211156115c657600080fd5b6115d286838701611441565b935060208501359150808211156115e857600080fd5b506115f585828601611512565b9150509250929050565b6001600160a01b0381168114610d8f57600080fd5b60006020828403121561162657600080fd5b8135611336816115ff565b6000806040838503121561164457600080fd5b50508035926020909101359150565b600082601f83011261166457600080fd5b8135602061167461140a836114ef565b82815260059290921b8401810191818101908684111561169357600080fd5b8286015b848110156115915780358352918301918301611697565b600082601f8301126116bf57600080fd5b813560206116cf61140a836114ef565b82815260059290921b840181019181810190868411156116ee57600080fd5b8286015b848110156115915780356001600160401b038111156117115760008081fd5b61171f8986838b0101611441565b8452509183019183016116f2565b600082601f83011261173e57600080fd5b8135602061174e61140a836114ef565b82815260059290921b8401810191818101908684111561176d57600080fd5b8286015b848110156115915780356001600160401b038111156117905760008081fd5b61179e8986838b0101611512565b845250918301918301611771565b6000806000606084860312156117c157600080fd5b83356001600160401b03808211156117d857600080fd5b6117e487838801611653565b945060208601359150808211156117fa57600080fd5b611806878388016116ae565b9350604086013591508082111561181c57600080fd5b506118298682870161172d565b9150509250925092565b60006020828403121561184557600080fd5b81356001600160401b0381111561185b57600080fd5b61186784828501611653565b949350505050565b6000806040838503121561188257600080fd5b82356001600160401b038082111561189957600080fd5b6118a5868387016116ae565b935060208501359150808211156118bb57600080fd5b506115f58582860161172d565b8015158114610d8f57600080fd5b600080604083850312156118e957600080fd5b82356118f4816118c8565b91506020830135611904816118c8565b809150509250929050565b6000806040838503121561192257600080fd5b82356001600160401b038082111561193957600080fd5b61194586838701611653565b935060209150818501358181111561195c57600080fd5b85019050601f8101861361196f57600080fd5b803561197d61140a826114ef565b81815260059190911b8201830190838101908883111561199c57600080fd5b928401925b828410156119ba578335825292840192908401906119a1565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611a0a5783516001600160a01b0316835292840192918401916001016119e5565b50909695505050505050565b60008083601f840112611a2857600080fd5b5081356001600160401b03811115611a3f57600080fd5b6020830191508360208260051b8501011115611a5a57600080fd5b9250929050565b60008060008060408587031215611a7757600080fd5b84356001600160401b0380821115611a8e57600080fd5b611a9a88838901611a16565b90965094506020870135915080821115611ab357600080fd5b50611ac087828801611a16565b95989497509550505050565b600080600060608486031215611ae157600080fd5b8335925060208401356001600160401b0380821115611aff57600080fd5b611b0b87838801611441565b93506040860135915080821115611b2157600080fd5b5061182986828701611512565b60008060408385031215611b4157600080fd5b8235611b4c816115ff565b946020939093013593505050565b6000815480845260208085019450836000528060002060005b83811015611b985781546001600160a01b031687529582019560019182019101611b73565b509495945050505050565b60005b83811015611bbe578181015183820152602001611ba6565b50506000910152565b60008151808452611bdf816020860160208601611ba3565b601f01601f19169290920160200192915050565b805182526001600160401b0360208201511660208301526000604082015160806040850152611c256080850182611bc7565b905060608301518482036060860152611c3e8282611bc7565b95945050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015611c8f578284038952611c7d848351611bc7565b98850198935090840190600101611c65565b5091979650505050505050565b608081526000611caf6080830187611b5a565b8281036020840152611cc18187611bf3565b90508281036040840152611cd58186611c47565b91505082606083015295945050505050565b604081526000611cfa6040830185611bf3565b905060018060a01b03831660208301529392505050565b600081518084526020808501808196508360051b8101915082860160005b85811015611c8f578284038952611d47848351611bf3565b98850198935090840190600101611d2f565b606081526000611d6c6060830186611b5a565b602083820381850152611d7f8287611d11565b915083820360408501528185518084528284019150828160051b85010183880160005b83811015611dd057601f19878403018552611dbe838351611c47565b94860194925090850190600101611da2565b50909a9950505050505050505050565b600081518084526020808501945080840160005b83811015611b9857815187529582019590820190600101611df4565b606081526000611e236060830186611de0565b8281036020840152611e358186611d11565b91505060018060a01b0383166040830152949350505050565b6020815260006113366020830184611de0565b604081526000611cfa6040830185611d11565b634e487b7160e01b600052603260045260246000fd5b600060018201611eaa57634e487b7160e01b600052601160045260246000fd5b5060010190565b604081526000611ec46040830185611de0565b82810360208481019190915284518083528582019282019060005b81811015611efb57845183529383019391830191600101611edf565b5090979650505050505050565b600060208284031215611f1a57600080fd5b8135611336816118c8565b838152606060208201526000611f3e6060830185611bf3565b905060018060a01b0383166040830152949350505050565b8051611f61816115ff565b919050565b600082601f830112611f7757600080fd5b81516020611f8761140a836114ef565b82815260059290921b84018101918181019086841115611fa657600080fd5b8286015b84811015611591578051611fbd816115ff565b8352918301918301611faa565b8051611f61816118c8565b600082601f830112611fe657600080fd5b8151611ff461140a826113c4565b81815284602083860101111561200957600080fd5b611867826020830160208701611ba3565b60006020828403121561202c57600080fd5b81516001600160401b038082111561204357600080fd5b9083019060e0828603121561205757600080fd5b61205f61136c565b61206883611f56565b815261207660208401611f56565b602082015260408301518281111561208d57600080fd5b61209987828601611f66565b6040830152506120ab60608401611fca565b60608201526080830151828111156120c257600080fd5b6120ce87828601611fd5565b60808301525060a0830151828111156120e657600080fd5b6120f287828601611fd5565b60a08301525060c08301518281111561210a57600080fd5b61211687828601611fd5565b60c0830152509594505050505056fea26469706673582212209da4e1de8a0ca697a046be2ae942188b8b7992a0d2513c23100c47200d844cd964736f6c63430008130033" + }, + { + "address": "0x472926e26f3d1d68a7e99f42ff8b34d856f94711", + "nonce": 30, + "balance": "0x000000000000000000000000000000000000000000000000000624d6092c94e7", + "code": "0x" + }, + { + "address": "0x0fcb5237a1997c4700ffa2bb4522ea38d4f851fc", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106102695760003560e01c80637d72150411610151578063d4b97046116100c3578063ee27c68911610087578063ee27c689146104e1578063f6b06e70146104e9578063f811d692146104f1578063fd1ed7e9146104f9578063fe24cb7f14610514578063fff6cae91461051c57610269565b8063d4b9704614610498578063d505accf146104a0578063dd62ed3e146104b3578063dd93f59a146104c6578063ec2fd46d146104d957610269565b8063a9059cbb11610115578063a9059cbb1461043c578063ab44a7a31461044f578063b56ceaa614610457578063bbf5ce781461046a578063bd6015b414610472578063d0a494e41461048557610269565b80637d721504146103e25780637ecebe00146103f7578063880a4d871461040a57806395d89b411461041f578063a382d1b91461042757610269565b80634322ec83116101ea57806354fd4d50116101ae57806354fd4d501461039157806365f6fcbb1461039957806366410a21146103a157806370a08231146103b457806371f9100c146103c757806379a04876146103cf57610269565b80634322ec831461032a578063440966091461033f5780634a248d2a146103525780634c85b4251461035a5780635039972a1461037c57610269565b80632df6cb48116102315780632df6cb48146102e757806330adf81f146102ef578063313ce567146102f757806336223ce91461030c5780633644e5151461032257610269565b806306fdde031461026e578063095ea7b31461028c57806317101940146102ac57806318160ddd146102bf57806323b872dd146102d4575b600080fd5b610276610524565b6040516102839190613914565b60405180910390f35b61029f61029a3660046134e7565b6105b2565b6040516102839190613882565b6102766102ba366004613361565b6105c9565b6102c76106f3565b604051610283919061388d565b61029f6102e2366004613439565b6106f9565b61029f61087d565b6102c761088b565b6102ff6108af565b6040516102839190613de0565b6103146108b8565b604051610283929190613d7b565b6102c76108d3565b6103326108d9565b6040516102839190613758565b61031461034d366004613361565b6108ef565b61033261097a565b61036d610368366004613361565b610989565b60405161028393929190613d89565b61038f61038a3660046133b0565b610c66565b005b610276610fa4565b6102c7610fc8565b6103146103af3660046134e7565b61106f565b6102c76103c2366004613361565b611144565b6102c761115f565b6103146103dd3660046134e7565b6111ab565b6103ea6111bf565b6040516102839190613d67565b6102c7610405366004613361565b6111ce565b6104126111e0565b6040516102839190613dcf565b6102766111f3565b61042f61124e565b6040516102839190613d0d565b61029f61044a3660046134e7565b6112a2565b6102c7611371565b610314610465366004613545565b611377565b6103ea611670565b6102c7610480366004613361565b611686565b61038f6104933660046135bf565b611872565b610332611ca0565b61038f6104ae366004613479565b611caf565b6102c76104c136600461337c565b611e1e565b6102c76104d4366004613361565b611e49565b6102c7612019565b6102c761201f565b610332612031565b6102c7612040565b610501612046565b6040516102839796959493929190613d9f565b6102c76120a9565b61038f6120af565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105aa5780601f1061057f576101008083540402835291602001916105aa565b820191906000526020600020905b81548152906001019060200180831161058d57829003601f168201915b505050505081565b60006105bf3384846120f3565b5060015b92915050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b6020820152815160088082528184019093526060926001600160a01b0385169291849160208201818036833701905050905060005b60048110156106e8578260048583600c016020811061063a57fe5b1a60f81b6001600160f81b031916901c60f81c60ff168151811061065a57fe5b602001015160f81c60f81b82826002028151811061067457fe5b60200101906001600160f81b031916908160001a905350828482600c016020811061069b57fe5b825191901a600f169081106106ac57fe5b602001015160f81c60f81b8282600202600101815181106106c957fe5b60200101906001600160f81b031916908160001a90535060010161061f565b50925050505b919050565b60085481565b6001600160a01b03831660009081526009602052604081205482111561073a5760405162461bcd60e51b815260040161073190613bd2565b60405180910390fd5b6001600160a01b0384166000908152600a6020908152604080832033845290915290205482111561077d5760405162461bcd60e51b815260040161073190613972565b6001600160a01b0384166000908152600960205260409020546107a6908363ffffffff61215b16565b6001600160a01b0380861660009081526009602052604080822093909355908516815220546107db908363ffffffff61218316565b6001600160a01b038085166000908152600960209081526040808320949094559187168152600a8252828120338252909152205461081f908363ffffffff61215b16565b6001600160a01b038086166000818152600a60209081526040808320338452909152908190209390935591519085169190600080516020613e4d8339815191529061086b90869061388d565b60405180910390a35060019392505050565b600054610100900460ff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60065460ff1681565b6003546001600160701b0380821692600160701b9092041690565b600b5481565b600054630100000090046001600160a01b031681565b600d54600e54604051638198edbf60e01b81526000916001600160a01b031690638198edbf90610923908690600401613758565b60206040518083038186803b15801561093b57600080fd5b505afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610973919061352d565b9050915091565b6001546001600160a01b031681565b600080548190819060ff16156109b15760405162461bcd60e51b8152600401610731906139c8565b6000805460ff191660019081178255546040516370a0823160e01b81526001600160a01b03909116906370a08231906109ee903090600401613758565b60206040518083038186803b158015610a0657600080fd5b505afa158015610a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3e919061352d565b6002546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190610a74903090600401613758565b60206040518083038186803b158015610a8c57600080fd5b505afa158015610aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac4919061352d565b6003549091506001600160701b0380821691600160701b900416610aee848363ffffffff61215b16565b9550610b00838263ffffffff61215b16565b945060008611610b225760405162461bcd60e51b815260040161073190613a57565b600854610b53576103e8841015610b4b5760405162461bcd60e51b815260040161073190613b9b565b839650610be8565b600082118015610b61575080155b15610b9257610b8b82610b7f600854896121af90919063ffffffff16565b9063ffffffff6121e916565b9650610be8565b600082118015610ba25750600081115b15610be8576000610bb3878461221b565b90506000610bc1878461221b565b90506000828210610bd25782610bd4565b815b9050610be260085482612239565b99505050505b610bf2888861225b565b610bfc8484612355565b6001600160a01b038816600090815260096020526040908190205490517f1c172440bdebb59cd92a7f08f4227903a3305ab6f880cb25f93eddb66843a10291610c48918b918b91613861565b60405180910390a150506000805460ff191690555092949193509150565b60005462010000900460ff1615610c8f5760405162461bcd60e51b815260040161073190613aa6565b6000805462ff00001916620100001790556001600160a01b038781169087161415610ccc5760405162461bcd60e51b8152600401610731906139eb565b600180546001600160a01b03808a166001600160a01b03199283161790925560028054928916929091169190911790558215801590610d1a57506ec097ce7bc90715b34b9f10000000008311155b610d2357600080fd5b6010839055670de0b6b3a7640000821115610d3d57600080fd5b600f829055600d859055600e80546001600160a01b038087166001600160a01b03199092169190911790915560008054831580156101000261ff0019948d166301000000026301000000600160b81b03199093169290921793909316179055610dbe57600380546001600160e01b03164263ffffffff16600160e01b021790555b60408051808201825260018152605f60f81b602080830191909152825180840190935260038352620444c560ec1b90830152908082610dfc306105c9565b604051602001610e0e939291906136f8565b60405160208183030381529060405260079080519060200190610e3292919061322b565b50604080518082019091526003808252620444c560ec1b6020909201918252610e5d9160059161322b565b50600160009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610eac57600080fd5b505afa158015610ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee49190613626565b6006805460ff191660ff9290921691909117905560405146907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90610f2b90600790613688565b60408051918290038220828201825260018352603160f81b6020938401529051610f7c93927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc69186913091016138e8565b60408051601f198184030181529190528051602090910120600b555050505050505050505050565b604080518082019091526009815268222b2690189718171960b91b60208201525b90565b6003546001546040516370a0823160e01b815260009261106a926001600160701b03909116916001600160a01b03909116906370a082319061100e903090600401613758565b60206040518083038186803b15801561102657600080fd5b505afa15801561103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105e919061352d565b9063ffffffff61215b16565b905090565b60008061108361107d61124e565b846123e4565b50600d54600e54604051638198edbf60e01b815292945090916000916001600160a01b031690638198edbf906110bd908990600401613758565b60206040518083038186803b1580156110d557600080fd5b505afa1580156110e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110d919061352d565b90506111198482612239565b92506111398361105e61112c8786612239565b879063ffffffff61215b16565b935050509250929050565b6001600160a01b031660009081526009602052604090205490565b6003546002546040516370a0823160e01b815260009261106a92600160701b9091046001600160701b0316916001600160a01b03909116906370a082319061100e903090600401613758565b6000806110836111b961124e565b846124ea565b6003546001600160701b031681565b600c6020526000908152604090205481565b600354600160e01b900463ffffffff1681565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105aa5780601f1061057f576101008083540402835291602001916105aa565b6112566132a9565b6010548152600f5460208201526003546001600160701b038082166040840152600160701b90910416606082015260006080820181905260a0820152600160c0820152610fc5816125eb565b336000908152600960205260408120548211156112d15760405162461bcd60e51b815260040161073190613bd2565b336000908152600960205260409020546112f1908363ffffffff61215b16565b33600090815260096020526040808220929092556001600160a01b03851681522054611323908363ffffffff61218316565b6001600160a01b038416600081815260096020526040908190209290925590513390600080516020613e4d8339815191529061136090869061388d565b60405180910390a350600192915050565b600d5481565b60008054819060ff161561139d5760405162461bcd60e51b8152600401610731906139c8565b6000805460ff19166001179055428310156113ca5760405162461bcd60e51b815260040161073190613cc4565b336000908152600960205260409020548911156113f95760405162461bcd60e51b815260040161073190613b73565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a082319061142a903090600401613758565b60206040518083038186803b15801561144257600080fd5b505afa158015611456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147a919061352d565b6002546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906114b0903090600401613758565b60206040518083038186803b1580156114c857600080fd5b505afa1580156114dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611500919061352d565b60085490915061151a81610b7f858f63ffffffff6121af16565b945061153081610b7f848f63ffffffff6121af16565b93508985101580156115425750888410155b61155e5760405162461bcd60e51b815260040161073190613b46565b611568338d612695565b6115728b86612762565b61157c8b85612785565b6115846127a8565b86156115f3578a6001600160a01b0316632411d338338e88888d8d6040518763ffffffff1660e01b81526004016115c0969594939291906137ce565b600060405180830381600087803b1580156115da57600080fd5b505af11580156115ee573d6000803e3d6000fd5b505050505b7f55caccde83781f39bfc1296eff45655b6496729443a7d48958b18b3b685600a5338c8e60096000336001600160a01b03166001600160a01b031681526020019081526020016000205460405161164d949392919061376c565b60405180910390a150506000805460ff1916905550909890975095505050505050565b600354600160701b90046001600160701b031681565b6000805460ff16156116aa5760405162461bcd60e51b8152600401610731906139c8565b6000805460ff191660019081178255546040516370a0823160e01b81526001600160a01b03909116906370a08231906116e7903090600401613758565b60206040518083038186803b1580156116ff57600080fd5b505afa158015611713573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611737919061352d565b60035490915060009061175a9083906001600160701b031663ffffffff61215b16565b9050600061176832836111ab565b90945090506117778585612785565b60005461179490630100000090046001600160a01b031682612785565b6002546040516370a0823160e01b815261181f9185916001600160a01b03909116906370a08231906117ca903090600401613758565b60206040518083038186803b1580156117e257600080fd5b505afa1580156117f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181a919061352d565b612355565b600154600254604051600080516020613e6d83398151915292611858926001600160a01b03918216929116908690899033908c9061380e565b60405180910390a150506000805460ff1916905550919050565b60005460ff16156118955760405162461bcd60e51b8152600401610731906139c8565b6000805460ff191660011790556118ac8386612762565b6118b68385612785565b80156119235760405163eb2021c360e01b81526001600160a01b0384169063eb2021c3906118f09033908990899088908890600401613795565b600060405180830381600087803b15801561190a57600080fd5b505af115801561191e573d6000803e3d6000fd5b505050505b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611954903090600401613758565b60206040518083038186803b15801561196c57600080fd5b505afa158015611980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a4919061352d565b6002546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906119da903090600401613758565b60206040518083038186803b1580156119f257600080fd5b505afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a919061352d565b6003549091506001600160701b031682101580611a595750600354600160701b90046001600160701b03168110155b611a755760405162461bcd60e51b815260040161073190613947565b6003546001600160701b0316821015611b5b57600354600090611aa9908390600160701b90046001600160701b031661215b565b9050600080611ab8328461106f565b60035491935091508290611adb906001600160701b03168763ffffffff61215b16565b1115611af95760405162461bcd60e51b815260040161073190613947565b600054611b1690630100000090046001600160a01b031682612762565b600254600154604051600080516020613e6d83398151915292611b4f926001600160a01b03918216929116908790879033908f9061380e565b60405180910390a15050505b600354600160701b90046001600160701b0316811015611c4857600354600090611b959084906001600160701b031663ffffffff61215b16565b9050600080611ba432846111ab565b60035491935091508290611bc890600160701b90046001600160701b03168661215b565b1115611be65760405162461bcd60e51b815260040161073190613947565b600054611c0390630100000090046001600160a01b031682612785565b600154600254604051600080516020613e6d83398151915292611c3c926001600160a01b03918216929116908790879033908f9061380e565b60405180910390a15050505b611c506127a8565b7f0b82e93068db15abd9fbb2682c65462ea8a0a10582dce93a5664818e296f54eb33868989604051611c85949392919061376c565b60405180910390a150506000805460ff191690555050505050565b6002546001600160a01b031681565b42841015611ccf5760405162461bcd60e51b815260040161073190613b18565b600b546001600160a01b0388166000908152600c602090815260408083208054600181019091559051929392611d30927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92918d9101613896565b60405160208183030381529060405280519060200120604051602001611d5792919061373d565b604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051611d9494939291906138ca565b6020604051602081039080840390855afa158015611db6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611dec5750886001600160a01b0316816001600160a01b0316145b611e085760405162461bcd60e51b815260040161073190613c8d565b611e138989896120f3565b505050505050505050565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6000805460ff1615611e6d5760405162461bcd60e51b8152600401610731906139c8565b6000805460ff191660011781556002546040516370a0823160e01b81526001600160a01b03909116906370a0823190611eaa903090600401613758565b60206040518083038186803b158015611ec257600080fd5b505afa158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa919061352d565b600354909150600090611f1e908390600160701b90046001600160701b031661215b565b90506000611f2c328361106f565b9094509050611f3b8585612762565b600054611f5890630100000090046001600160a01b031682612762565b6001546040516370a0823160e01b8152611fe0916001600160a01b0316906370a0823190611f8a903090600401613758565b60206040518083038186803b158015611fa257600080fd5b505afa158015611fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda919061352d565b84612355565b600254600154604051600080516020613e6d83398151915292611858926001600160a01b03918216929116908690899033908c9061380e565b600f5481565b600061106a61202c61124e565b61296f565b600e546001600160a01b031681565b60105481565b60008060008060008060006120596132a9565b61206161124e565b905080600001519750806020015196508060400151955080606001519450806080015193508060a0015192508060c00151600281111561209d57fe5b91505090919293949596565b60045481565b60005460ff16156120d25760405162461bcd60e51b8152600401610731906139c8565b6000805460ff191660011790556120e76127a8565b6000805460ff19169055565b6001600160a01b038084166000818152600a602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061214e90859061388d565b60405180910390a3505050565b60008282111561217d5760405162461bcd60e51b815260040161073190613af5565b50900390565b6000828201838110156121a85760405162461bcd60e51b815260040161073190613c20565b9392505050565b6000826121be575060006105c3565b828202828482816121cb57fe5b04146121a85760405162461bcd60e51b815260040161073190613cea565b600080821161220a5760405162461bcd60e51b815260040161073190613a7e565b81838161221357fe5b049392505050565b60006121a882610b7f85670de0b6b3a764000063ffffffff6121af16565b6000670de0b6b3a7640000612254848463ffffffff6121af16565b8161221357fe5b6103e8811161227c5760405162461bcd60e51b815260040161073190613acf565b6001600160a01b0382166000908152600960205260409020546122a5908263ffffffff61218316565b6001600160a01b0383166000908152600960205260409020556008546122d1908263ffffffff61218316565b6008556040516001600160a01b038316907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859061230f90849061388d565b60405180910390a2816001600160a01b031660006001600160a01b0316600080516020613e4d83398151915283604051612349919061388d565b60405180910390a35050565b6001600160701b03821180159061237357506001600160701b038111155b61238f5760405162461bcd60e51b815260040161073190613bfe565b600380546001600160701b03838116600160701b02600160701b600160e01b03199186166001600160701b0319909316929092171617905560005460ff61010090910416156123e0576123e0612a61565b5050565b600080808460c0015160028111156123f857fe5b1415612413576124088484612af6565b9150600190506124e3565b60018460c00151600281111561242557fe5b1415612435576124088484612b1d565b600061245285606001518660a0015161215b90919063ffffffff16565b905060006124718660800151876040015161215b90919063ffffffff16565b90508185101561249c576124858686612b3a565b93506002925080841115612497578093505b6124e0565b818514156124b057809350600092506124e0565b6124d96124cc876124c7888663ffffffff61215b16565b612af6565b829063ffffffff61218316565b9350600192505b50505b9250929050565b600080808460c0015160028111156124fe57fe5b14156125195761250e8484612b75565b9150600290506124e3565b60018460c00151600281111561252b57fe5b14156125d657600061254e8560400151866080015161215b90919063ffffffff16565b9050600061256d8660a00151876060015161215b90919063ffffffff16565b905081851015612598576125818686612b94565b93506001925080841115612593578093505b6125cf565b818514156125ac57809350600092506125cf565b6125c86124cc876125c3888663ffffffff61215b16565b612b75565b9350600292505b50506124e3565b6125e08484612bc6565b946002945092505050565b60028160c0015160028111156125fd57fe5b141561263c5761263281606001516126268360800151846040015161215b90919063ffffffff16565b83516020850151612be5565b60a0820152612692565b60018160c00151600281111561264e57fe5b14156126925761268c81604001516126778360a00151846060015161215b90919063ffffffff16565b835161268290612d0b565b8460200151612be5565b60808201525b50565b6001600160a01b0382166000908152600960205260409020546126be908263ffffffff61215b16565b6001600160a01b0383166000908152600960205260409020556008546126ea908263ffffffff61215b16565b6008556040516001600160a01b038316907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59061272890849061388d565b60405180910390a260006001600160a01b0316826001600160a01b0316600080516020613e4d83398151915283604051612349919061388d565b80156123e0576001546123e0906001600160a01b0316838363ffffffff612d2c16565b80156123e0576002546123e0906001600160a01b0316838363ffffffff612d2c16565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a08231906127d9903090600401613758565b60206040518083038186803b1580156127f157600080fd5b505afa158015612805573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612829919061352d565b6002546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061285f903090600401613758565b60206040518083038186803b15801561287757600080fd5b505afa15801561288b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128af919061352d565b90506001600160701b0382118015906128cf57506001600160701b038111155b6128eb5760405162461bcd60e51b815260040161073190613bfe565b6003546001600160701b0316821461291957600380546001600160701b0319166001600160701b0384161790555b600354600160701b90046001600160701b031681146129575760038054600160701b600160e01b031916600160701b6001600160701b038416021790555b600054610100900460ff16156123e0576123e0612a61565b600060028260c00151600281111561298357fe5b1415612a0e57606082015160a08301516000916129b9916129af9190610b7f908063ffffffff6121af16565b846060015161221b565b90506129f66129cc846020015183612239565b60208501516129ea90670de0b6b3a76400009063ffffffff61215b16565b9063ffffffff61218316565b9050612a0683600001518261221b565b9150506106ee565b60408201516080830151600091612a3e91612a349190610b7f908063ffffffff6121af16565b846040015161221b565b9050612a516129cc846020015183612239565b9050612a06836000015182612239565b60035463ffffffff42811691600160e01b90048116820390811615801590612a9357506003546001600160701b031615155b8015612ab05750600354600160701b90046001600160701b031615155b15612ad0578063ffffffff16612ac461201f565b60048054919092020190555b506003805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b60006121a88360800151846080015184612b138760000151612d0b565b8760200151612d87565b60006121a88360800151846040015184612b138760000151612d0b565b60006121a88360a00151612b5b84866060015161218390919063ffffffff16565b60608601518651612b6b90612d0b565b8760200151613007565b60006121a88360a001518460a001518486600001518760200151612d87565b60006121a88360800151612bb584866040015161218390919063ffffffff16565b604086015186516020880151613007565b60006121a88360a0015184606001518486600001518760200151612d87565b600081612c0d57612c06612bf98486612239565b869063ffffffff61218316565b9050612d03565b84612c1a57506000612d03565b600080612c30600485028663ffffffff6121af16565b905080612c4757670de0b6b3a76400009150612cc7565b858187830281612c5357fe5b041415612c8e57612c87612c826ec097ce7bc90715b34b9f10000000006129ea848a028b63ffffffff6121e916565b6130e0565b9150612cc7565b612cc4612c826ec097ce7bc90715b34b9f10000000006129ea89612cb8868d63ffffffff6121e916565b9063ffffffff6121af16565b91505b6000612cf1670de0b6b3a76400006129ea612ce8868363ffffffff61215b16565b8860020261221b565b9050612cfd8882612239565b93505050505b949350505050565b60006105c36ec097ce7bc90715b34b9f10000000008363ffffffff6121e916565b612d828363a9059cbb60e01b8484604051602401612d4b929190613848565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613117565b505050565b6000808611612da85760405162461bcd60e51b8152600401610731906139a0565b83612db557506000612ffe565b81612de25784612dc58486612239565b11612dd957612dd48385612239565b612ddb565b845b9050612ffe565b670de0b6b3a7640000821415612ea257600080612e05858763ffffffff6121af16565b905080612e155760009150612e6e565b868188830281612e2157fe5b041415612e5157612e4a612e3b898063ffffffff6121af16565b8289029063ffffffff6121e916565b9150612e6e565b612e6b88610b7f87612cb883838c8e63ffffffff6121af16565b91505b612e99612e8983670de0b6b3a764000063ffffffff61218316565b610b7f898563ffffffff6121af16565b92505050612ffe565b6000612ecf612eb7858763ffffffff6121af16565b6129ea89612cb88a610b7f898463ffffffff6121af16565b90506000612eef87612cb8670de0b6b3a76400008763ffffffff61215b16565b90506000828210612f0557508190036000612f0b565b50810360015b612f2382670de0b6b3a764000063ffffffff6121e916565b91506000612f5a612f476004612cb8670de0b6b3a76400008a63ffffffff61215b16565b612f558c612cb88a8f612239565b612239565b9050612f73612c82826129ea868063ffffffff6121af16565b90506000612f946002612cb8670de0b6b3a76400008a63ffffffff61215b16565b905060008315612fb557612fae838663ffffffff61215b16565b9050612fc8565b612fc5858463ffffffff61218316565b90505b6000612fd482846131d4565b90508b811115612fee576000975050505050505050612ffe565b8b039650612ffe95505050505050565b95945050505050565b60008086116130285760405162461bcd60e51b8152600401610731906139a0565b600061304a61303d878763ffffffff61215b16565b859063ffffffff6121af16565b9050826130715761306981670de0b6b3a764000063ffffffff6121e916565b915050612ffe565b600061309061308a88610b7f8b8063ffffffff6121af16565b8761221b565b9050600061309e8583612239565b90506130d36ec097ce7bc90715b34b9f1000000000610b7f85612cb8856129ea670de0b6b3a76400008c63ffffffff61215b16565b9998505050505050505050565b80600160028204015b818110156131115780915060028182858161310057fe5b04018161310957fe5b0490506130e9565b50919050565b60006060836001600160a01b031683604051613133919061366c565b6000604051808303816000865af19150503d8060008114613170576040519150601f19603f3d011682016040523d82523d6000602084013e613175565b606091505b5091509150816131975760405162461bcd60e51b815260040161073190613a22565b8051156131ce57808060200190518101906131b29190613511565b6131ce5760405162461bcd60e51b815260040161073190613c43565b50505050565b60006121a8826131f285670de0b6b3a764000063ffffffff6121af16565b9063ffffffff6131fe16565b60008061320b84846121e9565b905082810284038015613223575060010190506105c3565b5090506105c3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061326c57805160ff1916838001178555613299565b82800160010185558215613299579182015b8281111561329957825182559160200191906001019061327e565b506132a59291506132f0565b5090565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060028111156132eb57fe5b905290565b610fc591905b808211156132a557600081556001016132f6565b80356001600160a01b03811681146105c357600080fd5b60008083601f840112613332578182fd5b50813567ffffffffffffffff811115613349578182fd5b6020830191508360208285010111156124e357600080fd5b600060208284031215613372578081fd5b6121a8838361330a565b6000806040838503121561338e578081fd5b613398848461330a565b91506133a7846020850161330a565b90509250929050565b600080600080600080600080610100898b0312156133cc578384fd5b6133d68a8a61330a565b97506133e58a60208b0161330a565b96506133f48a60408b0161330a565b95506060890135945061340a8a60808b0161330a565b935060a0890135925060c0890135915060e089013561342881613e2f565b809150509295985092959890939650565b60008060006060848603121561344d578283fd5b833561345881613e1a565b9250602084013561346881613e1a565b929592945050506040919091013590565b600080600080600080600060e0888a031215613493578283fd5b61349d898961330a565b96506134ac8960208a0161330a565b9550604088013594506060880135935060808801356134ca81613e3d565b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156134f9578182fd5b613503848461330a565b946020939093013593505050565b600060208284031215613522578081fd5b81516121a881613e2f565b60006020828403121561353e578081fd5b5051919050565b600080600080600080600060c0888a03121561355f578283fd5b87359650602088013561357181613e1a565b95506040880135945060608801359350608088013567ffffffffffffffff81111561359a578384fd5b6135a68a828b01613321565b989b979a5095989497959660a090950135949350505050565b6000806000806000608086880312156135d6578081fd5b85359450602086013593506135ee876040880161330a565b9250606086013567ffffffffffffffff811115613609578182fd5b61361588828901613321565b969995985093965092949392505050565b600060208284031215613637578081fd5b81516121a881613e3d565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000825161367e818460208701613dee565b9190910192915050565b60008083546001808216600081146136a757600181146136be576136ed565b60ff198316865260028304607f16860193506136ed565b600283048786526020808720875b838110156136e55781548a8201529085019082016136cc565b505050860193505b509195945050505050565b6000845161370a818460208901613dee565b845190830161371d828260208901613dee565b8451918101613730838260208901613dee565b9091019695505050505050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b600060018060a01b0387168252856020830152846040830152608060608301526137c3608083018486613642565b979650505050505050565b600060018060a01b038816825286602083015285604083015284606083015260a0608083015261380260a083018486613642565b98975050505050505050565b6001600160a01b0396871681529486166020860152604085019390935260608401919091528316608083015290911660a082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000602082528251806020840152613933816040850160208701613dee565b601f01601f19169190910160400192915050565b60208082526011908201527011931054d217d313d05397d19052531151607a1b604082015260600190565b60208082526014908201527308298989eae829c868abe9c9ea8be8a9c9eaa8e960631b604082015260600190565b6020808252600e908201526d5441524745545f49535f5a45524f60901b604082015260600190565b60208082526009908201526814915153951490539560ba1b604082015260600190565b6020808252601a908201527f424153455f51554f54455f43414e5f4e4f545f42455f53414d45000000000000604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600d908201526c1393d7d09054d157d253941555609a1b604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b6020808252600f908201526e11159357d253925512505312569151608a1b604082015260600190565b6020808252600c908201526b1352539517d253959053125160a21b604082015260600190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b6020808252601490820152731113d113d7d1159357d3140e881156141254915160621b604082015260600190565b6020808252601390820152720ae92a89088a482aebe9c9ea8be8a9c9eaa8e9606b1b604082015260600190565b6020808252600e908201526d08898a0be9c9ea8be8a9c9eaa8e960931b604082015260600190565b6020808252601c908201527f494e53554646494349454e545f4c49515549444954595f4d494e454400000000604082015260600190565b6020808252601290820152710848298829c868abe9c9ea8be8a9c9eaa8e960731b604082015260600190565b6020808252600890820152674f564552464c4f5760c01b604082015260600190565b60208082526009908201526820a2222fa2a92927a960b91b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601e908201527f444f444f5f44564d5f4c503a20494e56414c49445f5349474e41545552450000604082015260600190565b6020808252600c908201526b1512535157d156141254915160a21b604082015260600190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160038110613d5a57fe5b8060c08401525092915050565b6001600160701b0391909116815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60005b83811015613e09578181015183820152602001613df1565b838111156131ce5750506000910152565b6001600160a01b038116811461269257600080fd5b801515811461269257600080fd5b60ff8116811461269257600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efc2c0245e056d5fb095f04cd6373bc770802ebd1e6c918eb78fdef843cdb37b0fa264697066735822122067ef193f677e7c93cc080187cd0e2df07be3617724211497f53c6827beb19a7464736f6c63430006090033" + }, + { + "address": "0xc557f27445c6ef0017a2ffc91689c1ca7d13ac4a", + "nonce": 94, + "balance": "0x0000000000000000000000000000000000000000000000000009ba11df0fd7f7", + "code": "0x" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106102045760003560e01c806309beabc1146102095780630e1552f0146102395780631621835f1461026c57806316dc165b146102fe57806317fdacb9146103115780631aae2e5514610326578063252c09d71461033d5780632c4812521461037757806333005cd51461039f5780633c8a7d8d146103aa578063490e6cbc146103bd5780634cd70e91146103d0578063537c2d8e14610402578063544e705714610422578063588e59ae1461044d57806358c51ce61461045657806359dd14361461046a57806362c944ca1461047d57806362ccaafd146104905780636ad1718f146104e45780636d01843b146104f75780636f73f0061461051157806375c0e0d51461053157806381794fba146105b4578063857f812f146105e0578063872d1f15146105f35780638790aca314610606578063883bdbfd146106d457806398a0f72e146106f4578063a34123a714610714578063b0f5925714610727578063b14184e6146107a0578063b74d60a9146107c0578063b7d19fc4146107c8578063c19d93fb146107db578063c45a01551461089f578063d38a85ad146108b2578063d3b16864146108c5578063ddca3f43146108d9578063e556289f146108ef578063edcba3b2146108fa578063f0163ef41461091d578063f094685a14610930578063ff12504e14610943575b600080fd5b60065461021c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61024c61024736600461366c565b610956565b604080516001600160801b03938416815292909116602083015201610230565b6102c061027a366004613866565b600f60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b604080519687526001600160801b039586166020880152938516938601939093529083166060850152821660808401521660a082015260c001610230565b60025461021c906001600160a01b031681565b61032461031f366004613b2c565b610af4565b005b61032f60045481565b604051908152602001610230565b61035061034b366004613866565b610b9c565b6040805163ffffffff909416845260069290920b6020840152151590820152606001610230565b61038a610385366004613751565b610bd0565b60408051928352602083019190915201610230565b61032f620100105481565b61038a6103b836600461358f565b610d53565b6103246103cb366004613791565b610f08565b6103e36103de366004613931565b6110ae565b604080516001600160801b039093168352602083019190915201610230565b60005461040f9060020b81565b60405160029190910b8152602001610230565b610435610430366004613967565b611230565b6040516001600160801b039091168152602001610230565b61032f60055481565b60035461040f90600160b81b900460020b81565b61038a610478366004613751565b61136e565b6103e361048b366004613931565b6114e4565b6102c061049e366004613866565b600e60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b61024c6104f23660046136e3565b611636565b60005461043590600160301b90046001600160801b031681565b61052461051f3660046138b9565b6117df565b6040516102309190613d8c565b61057d61053f36600461389f565b600b6020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b929060ff1685565b604080516001600160801b039096168652600f9490940b60208601529284019190915260608301521515608082015260a001610230565b62010016546105cc90600160a01b900462ffffff1681565b60405162ffffff9091168152602001610230565b61038a6105ee366004613751565b611a6f565b61038a610601366004613616565b611b2e565b61067361061436600461389f565b600d6020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160801b0380871697600160801b978890048216978583169581900483169480841694919004909216918a565b604080516001600160801b039b8c168152998b1660208b01528901979097526060880195909552928716608087015290861660a0860152851660c085015290931660e083015261010082019290925261012081019190915261014001610230565b6106e76106e23660046137db565b611cb9565b6040516102309190613d51565b61032f61070236600461387e565b600a6020526000908152604090205481565b61038a6107223660046138eb565b611d40565b61076e610735366004613866565b600960205260009081526040902080546001820154600283015460038401546004909401546001600160801b0390931693919290919085565b604080516001600160801b0390961686526020860194909452928401919091526060830152608082015260a001610230565b6107b36107ae3660046138b9565b611eef565b6040516102309190613d0a565b6103246120f5565b60035461021c906001600160a01b031681565b600754600854610840916001600160a01b03811691600160a01b820460020b9161ffff600160b81b8204811692600160c81b8304821692600160d81b81049092169160ff600160e81b90910416906001600160801b0380821691600160801b90041688565b604080516001600160a01b03909916895260029790970b602089015261ffff9586169688019690965292841660608701529216608085015290151560a08401526001600160801b0390811660c08401521660e082015261010001610230565b60015461021c906001600160a01b031681565b6103246108c0366004613b4e565b612264565b60005461040f906301000000900460020b81565b6003546105cc90600160a01b900462ffffff1681565b61032f6201000f5481565b61040f61090836600461389f565b600c6020526000908152604090205460020b81565b61043561092b366004613967565b6123ec565b61038a61093e366004613751565b6124a5565b61024c61095136600461366c565b612564565b620100115460009081906001600160a01b0316301461097457600080fd5b600754600160e81b900460ff16156109a75760405162461bcd60e51b815260040161099e90613f3a565b60405180910390fd5b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906109e9908b908b908b908b908b90602401613c60565b60408051601f198184030181529181526020820180516001600160e01b031662e1552f60e41b17905251610a1d9190613bf2565b600060405180830381855af49150503d8060008114610a58576040519150601f19603f3d011682016040523d82523d6000602084013e610a5d565b606091505b50915091508115610ad05760008082806020019051810190610a7f9190613a96565b6040519399509197509350915060028b900b906001600160a01b038d169060008051602061445583398151915290610ac1908a908a9088908890600090613f81565b60405180910390a35050610ad9565b610ad981612b20565b50506007805460ff60e81b1916905590969095509350505050565b62010011546001600160a01b03163014610b0d57600080fd5b600754600160e81b900460ff1615610b375760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179081905561ffff600160d81b9091048116908216811015610b8b57610b6f60108284612bb3565b506007805461ffff60d81b1916600160d81b61ffff8516021790555b50506007805460ff60e81b19169055565b60108161ffff8110610bad57600080fd5b015463ffffffff81169150600160201b810460060b90600160581b900460ff1683565b620100115460009081906001600160a01b03163014610bee57600080fd5b600754600160e81b900460ff1615610c185760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100135460405160009182916001600160a01b0390911690610c5a908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b0316631624092960e11b17905251610c8f9190613bf2565b600060405180830381855af49150503d8060008114610cca576040519150601f19603f3d011682016040523d82523d6000602084013e610ccf565b606091505b50915091508115610ad05780806020019051810190610cee9190613b71565b60035460028054600754604051959950939750600160a01b80840462ffffff16956001600160a01b0394851695949092169360008051602061443583398151915293610d46936000938d938d93919004900b90613e16565b60405180910390a4610ad9565b620100115460009081906001600160a01b03163014610d7157600080fd5b600754600160e81b900460ff1615610d9b5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100145460405160009182916001600160a01b0390911690610ddf908c908c908c908c908c908c90602401613c0e565b60408051601f198184030181529181526020820180516001600160e01b0316633c8a7d8d60e01b17905251610e149190613bf2565b600060405180830381855af49150503d8060008114610e4f576040519150601f19603f3d011682016040523d82523d6000602084013e610e54565b606091505b50915091508115610ee35780806020019051810190610e739190613b71565b604080513381526001600160801b038b166020820152908101839052606081018290529195509350600289810b91908b900b906001600160a01b038d16907f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde9060800160405180910390a4610eec565b610eec81612b20565b50506007805460ff60e81b191690559097909650945050505050565b62010011546001600160a01b03163014610f2157600080fd5b600754600160e81b900460ff1615610f4b5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100165460405160009182916001600160a01b0390911690610f8d9089908990899089908990602401613cdc565b60408051601f198184030181529181526020820180516001600160e01b03166312439b2f60e21b17905251610fc29190613bf2565b600060405180830381855af49150503d8060008114610ffd576040519150601f19603f3d011682016040523d82523d6000602084013e611002565b606091505b5091509150811561108f57600080600080848060200190518101906110279190613b94565b604080518581526020810185905290810183905260608101829052939750919550935091506001600160a01b038c169033907fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6339060800160405180910390a350505050611098565b61109881612b20565b50506007805460ff60e81b191690555050505050565b620100115460009081906001600160a01b031630146110cc57600080fd5b600754600160e81b900460ff16156110f65760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906111329088908890602401613e36565b60408051601f198184030181529181526020820180516001600160e01b0316634cd70e9160e01b179052516111679190613bf2565b600060405180830381855af49150503d80600081146111a2576040519150601f19603f3d011682016040523d82523d6000602084013e6111a7565b606091505b5091509150811561120f57600080828060200190518101906111c99190613af4565b60405193995091975093509150600289900b90339060008051602061441583398151915290611200908a9087908790600190613f57565b60405180910390a35050611218565b61121881612b20565b50506007805460ff60e81b1916905590939092509050565b62010011546000906001600160a01b0316301461124c57600080fd5b600754600160e81b900460ff16156112765760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906112b490889088908890602401613e52565b60408051601f198184030181529181526020820180516001600160e01b031663544e705760e01b179052516112e99190613bf2565b600060405180830381855af49150503d8060008114611324576040519150601f19603f3d011682016040523d82523d6000602084013e611329565b606091505b5091509150811561134f57808060200190518101906113489190613a4c565b9250611358565b61135881612b20565b50506007805460ff60e81b191690559392505050565b620100115460009081906001600160a01b0316301461138c57600080fd5b600754600160e81b900460ff16156113b65760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100125460405160009182916001600160a01b03909116906113f8908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b0316632cee8a1b60e11b1790525161142d9190613bf2565b600060405180830381855af49150503d8060008114611468576040519150601f19603f3d011682016040523d82523d6000602084013e61146d565b606091505b50915091508115610ad0578080602001905181019061148c9190613b71565b60035460028054600754604051959950939750600160a01b80840462ffffff16956001600160a01b0394851695949092169360008051602061443583398151915293610d46936001938d938d93919004900b90613e16565b620100115460009081906001600160a01b0316301461150257600080fd5b600754600160e81b900460ff161561152c5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906115689088908890602401613e36565b60408051601f198184030181529181526020820180516001600160e01b0316633164a26560e11b1790525161159d9190613bf2565b600060405180830381855af49150503d80600081146115d8576040519150601f19603f3d011682016040523d82523d6000602084013e6115dd565b606091505b5091509150811561120f57600080828060200190518101906115ff9190613af4565b60405193995091975093509150600289900b90339060008051602061441583398151915290611200908a9087908790600090613f57565b620100115460009081906001600160a01b0316301461165457600080fd5b600754600160e81b900460ff161561167e5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905562010015546040516001600160a01b038981166024830152600289900b60448301526001600160801b0388811660648401528716608483015285151560a4830152600092839291169060c40160408051601f198184030181529181526020820180516001600160e01b0316636ad1718f60e01b179052516117129190613bf2565b600060405180830381855af49150503d806000811461174d576040519150601f19603f3d011682016040523d82523d6000602084013e611752565b606091505b50915091508115610ad057808060200190518101906117719190613a68565b604080516001600160a01b038d1681526001600160801b0384811660208301528316818301528815156060820152905192965090945060028a900b9133917f7d3d0e34c86e56b4dcd993c09bbbf1b04527ab27b4365dffca10e0ded914e071919081900360800190a3610ad9565b60608160020b8360020b126118065760405162461bcd60e51b815260040161099e90613ec8565b600054600290810b810b9084900b12156118325760405162461bcd60e51b815260040161099e90613f02565b60005463010000009004600290810b810b9083900b13156118655760405162461bcd60e51b815260040161099e90613f1e565b60035461187c90600160b81b900460020b84614305565b60020b1561189c5760405162461bcd60e51b815260040161099e90613ee5565b6003546118b390600160b81b900460020b83614305565b60020b156118d35760405162461bcd60e51b815260040161099e90613eab565b600354600090600160b81b900460020b6118ed85856141d0565b6118f7919061409d565b60020b9050806001600160401b0381111561192257634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561198257816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a082015282526000199092019101816119405790505b5091506000845b8460020b8160020b1215611a66576040805160c081018252600283810b900b6000818152600d602081815285832080546001600160801b038082168852600160801b91829004811684890152600183015498880198909852600382015404871660608701526004810154909616608086015292909152905260059091015460a08201528451859084908110611a2e57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508180611a44906142ea565b600354909350611a5f9150600160b81b900460020b82613fb4565b9050611989565b50505092915050565b620100115460009081906001600160a01b03163014611a8d57600080fd5b600754600160e81b900460ff1615611ab75760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100125460405160009182916001600160a01b0390911690611af9908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b031663857f812f60e01b1790525161142d9190613bf2565b620100115460009081906001600160a01b03163014611b4c57600080fd5b600754600160e81b900460ff1615611b765760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905562010014546040516001600160a01b038981166024830152600289810b604484015288900b60648301526084820187905260a48201869052600092839291169060c40160408051601f198184030181529181526020820180516001600160e01b031663872d1f1560e01b17905251611c019190613bf2565b600060405180830381855af49150503d8060008114611c3c576040519150601f19603f3d011682016040523d82523d6000602084013e611c41565b606091505b50915091508115610ad05780806020019051810190611c609190613b71565b604080516001600160a01b038d168152602081018490529081018290529195509350600288810b91908a900b9033907ff69135213cd78fa4cffb855edf80272133f69bd8a6fb3236340a69b4d6e248e390606001610d46565b62010011546060906001600160a01b03163014611cd557600080fd5b611d394284848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600754601094939250600160a01b810460020b915061ffff600160b81b8204811691600160c81b900416612c71565b9392505050565b620100115460009081906001600160a01b03163014611d5e57600080fd5b600754600160e81b900460ff1615611d885760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b1790556201001454604051600287810b602483015286900b60448201526001600160801b038516606482015260009182916001600160a01b039091169060840160408051601f198184030181529181526020820180516001600160e01b031663a34123a760e01b17905251611e0d9190613bf2565b600060405180830381855af49150503d8060008114611e48576040519150601f19603f3d011682016040523d82523d6000602084013e611e4d565b606091505b50915091508115611ecd5780806020019051810190611e6c9190613b71565b604080516001600160801b0389168152602081018490529081018290529195509350600287810b919089900b9033907f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c9060600160405180910390a4611ed6565b611ed681612b20565b50506007805460ff60e81b191690559094909350915050565b60608160020b8360020b12611f165760405162461bcd60e51b815260040161099e90613ec8565b600054600290810b810b9084900b1215611f425760405162461bcd60e51b815260040161099e90613f02565b60005463010000009004600290810b810b9083900b1315611f755760405162461bcd60e51b815260040161099e90613f1e565b600354611f8c90600160b81b900460020b84614305565b60020b15611fac5760405162461bcd60e51b815260040161099e90613ee5565b600354611fc390600160b81b900460020b83614305565b60020b15611fe35760405162461bcd60e51b815260040161099e90613eab565b600354600090600160b81b900460020b611ffd85856141d0565b612007919061409d565b60020b9050806001600160401b0381111561203257634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561205b578160200160208202803683370190505b5091506000845b8460020b8160020b1215611a6657600281810b900b6000908152600b60205260409020548451600160801b909104600f0b908590849081106120b457634e487b7160e01b600052603260045260246000fd5b6020026020010190600f0b9081600f0b8152505081806120d3906142ea565b6003549093506120ee9150600160b81b900460020b82613fb4565b9050612062565b62010011546001600160a01b0316301461210e57600080fd5b600754600160e81b900460ff16156121385760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905560015460408051636c66a87160e11b815290516001600160a01b039092169163d8cd50e291600480820192602092909190829003018186803b15801561219057600080fd5b505afa1580156121a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c89190613573565b6001600160a01b0316336001600160a01b03161461220d5760405162461bcd60e51b8152602060048201526002602482015261272960f11b604482015260640161099e565b6002546201000f5461222a916001600160a01b0316903390612d91565b6003546201001054612247916001600160a01b0316903390612d91565b60006201000f81905562010010556007805460ff60e81b19169055565b62010011546001600160a01b0316301461227d57600080fd5b600754600160e81b900460ff16156122a75760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905560015460408051638da5cb5b60e01b815290516001600160a01b0390921691638da5cb5b91600480820192602092909190829003018186803b1580156122ff57600080fd5b505afa158015612313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123379190613573565b6001600160a01b0316336001600160a01b03161461237d5760405162461bcd60e51b81526020600482015260036024820152622727a760e91b604482015260640161099e565b60648162ffffff1611156123b95760405162461bcd60e51b815260206004820152600360248201526204650360ec1b604482015260640161099e565b62010016805462ffffff909216600160a01b0262ffffff60a01b199092169190911790556007805460ff60e81b19169055565b62010011546000906001600160a01b0316301461240857600080fd5b600754600160e81b900460ff16156124325760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b039091169061247090889088908890602401613e52565b60408051601f198184030181529181526020820180516001600160e01b0316633c058fbd60e21b179052516112e99190613bf2565b620100115460009081906001600160a01b031630146124c357600080fd5b600754600160e81b900460ff16156124ed5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100135460405160009182916001600160a01b039091169061252f908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b031663784a342d60e11b17905251610c8f9190613bf2565b620100115460009081906001600160a01b0316301461258257600080fd5b600754600160e81b900460ff16156125ac5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906125ee908b908b908b908b908b90602401613c60565b60408051601f198184030181529181526020820180516001600160e01b031660016276d7d960e11b0319179052516126269190613bf2565b600060405180830381855af49150503d8060008114612661576040519150601f19603f3d011682016040523d82523d6000602084013e612666565b606091505b50915091508115610ad057600080828060200190518101906126889190613a96565b6040519399509197509350915060028b900b906001600160a01b038d169060008051602061445583398151915290610ac1908a908a9088908890600190613f81565b60008060008360020b126126e1578260020b6126ee565b8260020b6126ee9061437d565b90506126fd620d89e71961435c565b60020b8111156127335760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640161099e565b60006001821661274757600160801b612759565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561278e576080612789826ffff97272373d413259a46990580e213a6141b1565b901c90505b60048216156127b85760806127b3826ffff2e50f5f656932ef12357cf3c7fdcc6141b1565b901c90505b60088216156127e25760806127dd826fffe5caca7e10e4e61c3624eaa0941cd06141b1565b901c90505b601082161561280c576080612807826fffcb9843d60f6159c9db58835c9266446141b1565b901c90505b6020821615612836576080612831826fff973b41fa98c081472e6896dfb254c06141b1565b901c90505b604082161561286057608061285b826fff2ea16466c96a3843ec78b326b528616141b1565b901c90505b608082161561288a576080612885826ffe5dee046a99a2a811c461f1969c30536141b1565b901c90505b6101008216156128b55760806128b0826ffcbe86c7900a88aedcffc83b479aa3a46141b1565b901c90505b6102008216156128e05760806128db826ff987a7253ac413176f2b074cf7815e546141b1565b901c90505b61040082161561290b576080612906826ff3392b0822b70005940c7a398e4b70f36141b1565b901c90505b610800821615612936576080612931826fe7159475a2c29b7443b29c7fa6e889d96141b1565b901c90505b61100082161561296157608061295c826fd097f3bdfd2022b8845ad8f792aa58256141b1565b901c90505b61200082161561298c576080612987826fa9f746462d870fdf8a65dc1f90e061e56141b1565b901c90505b6140008216156129b75760806129b2826f70d869a156d2a1b890bb3df62baf32f76141b1565b901c90505b6180008216156129e25760806129dd826f31be135f97d08fd981231505542fcfa66141b1565b901c90505b62010000821615612a0e576080612a09826f09aa508b5b7a84e1c677de54f3e99bc96141b1565b901c90505b62020000821615612a39576080612a34826e5d6af8dedb81196699c329225ee6046141b1565b901c90505b62040000821615612a63576080612a5e826d2216e584f5fa1ea926041bedfe986141b1565b901c90505b62080000821615612a8b576080612a86826b048a170391f7dc42444e8fa26141b1565b901c90505b60008460020b1315612aa657612aa38160001961410c565b90505b612ab4600160201b82614348565b15612ac0576001612ac3565b60005b612ad49060ff16602083901c614065565b949350505050565b6040805160608101825263ffffffff83168082526000602083015260019190920181905283546001600160601b031916909117600160581b178355805b9250929050565b8051604014612b9357604481511015612b605760405162461bcd60e51b8152602060048201526002602482015261646360f01b604482015260640161099e565b60048101905080806020019051810190612b7a91906139a4565b60405162461bcd60e51b815260040161099e9190613e78565b602081019050805160405181815260208301519150816020820152604081fd5b6000808361ffff1611612bee5760405162461bcd60e51b81526020600482015260036024820152622622a760e91b604482015260640161099e565b8261ffff168261ffff1611612c04575081611d39565b825b8261ffff168161ffff161015612c68576001858261ffff1661ffff8110612c3d57634e487b7160e01b600052603260045260246000fd5b01805463ffffffff191663ffffffff9290921691909117905580612c60816142c8565b915050612c06565b50909392505050565b606060008261ffff1611612cab5760405162461bcd60e51b81526020600482015260016024820152604960f81b604482015260640161099e565b84516001600160401b03811115612cd257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612cfb578160200160208202803683370190505b50905060005b8551811015612d8657612d3f8888888481518110612d2f57634e487b7160e01b600052603260045260246000fd5b6020026020010151888888612e92565b828281518110612d5f57634e487b7160e01b600052603260045260246000fd5b602002602001019060060b908160060b815250508080612d7e906142ea565b915050612d01565b509695505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612ded9190613bf2565b6000604051808303816000865af19150503d8060008114612e2a576040519150601f19603f3d011682016040523d82523d6000602084013e612e2f565b606091505b5091509150818015612e59575080511580612e59575080806020019051810190612e59919061384a565b612e8b5760405162461bcd60e51b8152602060048201526003602482015262544e5360e81b604482015260640161099e565b5050505050565b600063ffffffff8516612f2d576000878461ffff1661ffff8110612ec657634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b90920460ff1615159383019390935290925090881614612f2257612f1f818887613013565b90505b602001519050613009565b6000612f398688614273565b9050600080612f4c8a8a858a8a8a61307d565b91509150816000015163ffffffff168363ffffffff161415612f7657506020015191506130099050565b805163ffffffff84811691161415612f9657602001519250613009915050565b81518151600091612fa691614273565b63ffffffff1690506000836000015185612fc09190614273565b63ffffffff169050808285602001518560200151612fde9190614217565b612fe891906140d7565b612ff29190614120565b84602001516130019190613ffa565b955050505050505b9695505050505050565b61301b6134fd565b835160009061302a9085614273565b63ffffffff16905060405180606001604052808563ffffffff168152602001828560020b6130589190614120565b87602001516130679190613ffa565b60060b8152600160209091015295945050505050565b6130856134fd565b61308d6134fd565b878461ffff1661ffff81106130b257634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b90910460ff16151592820192909252925061310290889088613258565b1561313b578563ffffffff16826000015163ffffffff16141561312657508061324d565b81613132838888613013565b9150915061324d565b878361314886600161403f565b6131529190614327565b61ffff1661ffff811061317557634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff16151591810182905292506131fa5760408051606081018252895463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff1615159181019190915291505b61320987836000015188613258565b61323b5760405162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015260640161099e565b6132488888888787613327565b915091505b965096945050505050565b60008363ffffffff168363ffffffff161115801561328257508363ffffffff168263ffffffff1611155b1561329e578163ffffffff168363ffffffff1611159050611d39565b60008463ffffffff168463ffffffff16116132cc576132c763ffffffff8516600160201b61407d565b6132d4565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff161161330b5761330663ffffffff8516600160201b61407d565b613313565b8363ffffffff165b64ffffffffff169091111595945050505050565b61332f6134fd565b6133376134fd565b60008361334586600161403f565b61334f9190614327565b61ffff169050600060018561ffff16836133699190614065565b613373919061425c565b905060005b60026133848385614065565b61338e919061410c565b90508961339f61ffff881683614348565b61ffff81106133be57634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff16151591810182905295506134155761340e816001614065565b9250613378565b8961ffff8716613426836001614065565b6134309190614348565b61ffff811061344f57634e487b7160e01b600052603260045260246000fd5b60408051606081018252929091015463ffffffff81168352600160201b8104600690810b810b900b602084015260ff600160581b9091041615159082015285519094506000906134a1908b908b613258565b90508080156134ba57506134ba8a8a8760000151613258565b156134c557506134f0565b806134dc576134d560018361425c565b92506134ea565b6134e7826001614065565b93505b50613378565b5050509550959350505050565b604080516060810182526000808252602082018190529181019190915290565b60008083601f84011261352e578182fd5b5081356001600160401b03811115613544578182fd5b602083019150836020828501011115612b1957600080fd5b8035600281900b811461356e57600080fd5b919050565b600060208284031215613584578081fd5b8151611d39816143d9565b60008060008060008060a087890312156135a7578182fd5b86356135b2816143d9565b95506135c06020880161355c565b94506135ce6040880161355c565b935060608701356135de816143ff565b925060808701356001600160401b038111156135f8578283fd5b61360489828a0161351d565b979a9699509497509295939492505050565b600080600080600060a0868803121561362d578081fd5b8535613638816143d9565b94506136466020870161355c565b93506136546040870161355c565b94979396509394606081013594506080013592915050565b600080600080600060808688031215613683578081fd5b853561368e816143d9565b945061369c6020870161355c565b935060408601356136ac816143ff565b925060608601356001600160401b038111156136c6578182fd5b6136d28882890161351d565b969995985093965092949392505050565b600080600080600060a086880312156136fa578081fd5b8535613705816143d9565b94506137136020870161355c565b93506040860135613723816143ff565b92506060860135613733816143ff565b91506080860135613743816143f1565b809150509295509295909350565b600080600080600060808688031215613768578081fd5b8535613773816143d9565b94506020860135613783816143ff565b93506136ac6040870161355c565b6000806000806000608086880312156137a8578283fd5b85356137b3816143d9565b9450602086013593506040860135925060608601356001600160401b038111156136c6578182fd5b600080602083850312156137ed578182fd5b82356001600160401b0380821115613803578384fd5b818501915085601f830112613816578384fd5b813581811115613824578485fd5b8660208260051b8501011115613838578485fd5b60209290920196919550909350505050565b60006020828403121561385b578081fd5b8151611d39816143f1565b600060208284031215613877578081fd5b5035919050565b60006020828403121561388f578081fd5b81358060010b8114611d39578182fd5b6000602082840312156138b0578081fd5b611d398261355c565b600080604083850312156138cb578182fd5b6138d48361355c565b91506138e26020840161355c565b90509250929050565b6000806000606084860312156138ff578081fd5b6139088461355c565b92506139166020850161355c565b91506040840135613926816143ff565b809150509250925092565b60008060408385031215613943578182fd5b61394c8361355c565b9150602083013561395c816143ff565b809150509250929050565b60008060006060848603121561397b578081fd5b6139848461355c565b92506020840135613994816143ff565b91506040840135613926816143f1565b6000602082840312156139b5578081fd5b81516001600160401b03808211156139cb578283fd5b818401915084601f8301126139de578283fd5b8151818111156139f0576139f06143c3565b604051601f8201601f19908116603f01168101908382118183101715613a1857613a186143c3565b81604052828152876020848701011115613a30578586fd5b613a41836020830160208801614298565b979650505050505050565b600060208284031215613a5d578081fd5b8151611d39816143ff565b60008060408385031215613a7a578182fd5b8251613a85816143ff565b602084015190925061395c816143ff565b60008060008060808587031215613aab578182fd5b8451613ab6816143ff565b6020860151909450613ac7816143ff565b6040860151909350613ad8816143ff565b6060860151909250613ae9816143ff565b939692955090935050565b60008060008060808587031215613b09578182fd5b8451613b14816143ff565b602086015160408701519195509350613ad8816143ff565b600060208284031215613b3d578081fd5b813561ffff81168114611d39578182fd5b600060208284031215613b5f578081fd5b813562ffffff81168114611d39578182fd5b60008060408385031215613b83578182fd5b505080516020909101519092909150565b60008060008060808587031215613ba9578182fd5b505082516020840151604085015160609095015191969095509092509050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008251613c04818460208701614298565b9190910192915050565b6001600160a01b0387168152600286810b602083015285900b60408201526001600160801b038416606082015260a060808201819052600090613c549083018486613bc9565b98975050505050505050565b6001600160a01b0386168152600285900b60208201526001600160801b0384166040820152608060608201819052600090613a419083018486613bc9565b6001600160a01b03861681526001600160801b0385166020820152600284900b6040820152608060608201819052600090613a419083018486613bc9565b60018060a01b0386168152846020820152836040820152608060608201526000613a41608083018486613bc9565b6020808252825182820181905260009190848201906040850190845b81811015613d45578351600f0b83529284019291840191600101613d26565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613d4557835160060b83529284019291840191600101613d6d565b602080825282518282018190526000919060409081850190868401855b82811015613e0957815180516001600160801b0390811686528782015181168887015286820151878701526060808301518216908701526080808301519091169086015260a0908101519085015260c09093019290850190600101613da9565b5091979650505050505050565b93151584526020840192909252604083015260020b606082015260800190565b60029290920b82526001600160801b0316602082015260400190565b60029390930b83526001600160801b039190911660208301521515604082015260600190565b6020815260008251806020840152613e97816040850160208701614298565b601f01601f19169190910160400192915050565b60208082526003908201526205244360ec1b604082015260600190565b602080825260039082015262261e2960e91b604082015260600190565b60208082526003908201526204c44360ec1b604082015260600190565b6020808252600290820152614c4f60f01b604082015260600190565b602080825260029082015261524f60f01b604082015260600190565b6020808252600390820152621312d160ea1b604082015260600190565b6001600160801b039485168152928416602084015292166040820152901515606082015260800190565b6001600160801b039586168152938516602085015291841660408401529092166060820152901515608082015260a00190565b60008160020b8360020b82821282627fffff03821381151615613fd957613fd9614397565b82627fffff19038212811615613ff157613ff1614397565b50019392505050565b60008160060b8360060b82821282667fffffffffffff0382138115161561402357614023614397565b82667fffffffffffff19038212811615613ff157613ff1614397565b600061ffff80831681851680830382111561405c5761405c614397565b01949350505050565b6000821982111561407857614078614397565b500190565b600064ffffffffff80831681851680830382111561405c5761405c614397565b60008160020b8360020b806140b4576140b46143ad565b627fffff198214600019821416156140ce576140ce614397565b90059392505050565b60008160060b8360060b806140ee576140ee6143ad565b667fffffffffffff198214600019821416156140ce576140ce614397565b60008261411b5761411b6143ad565b500490565b60008160060b8360060b667fffffffffffff8382138484138383048511828216161561414e5761414e614397565b667fffffffffffff198685128281168783058712161561417057614170614397565b87871292508582058712848416161561418b5761418b614397565b858505871281841616156141a1576141a1614397565b5050509290910295945050505050565b60008160001904831182151516156141cb576141cb614397565b500290565b60008160020b8360020b82811281627fffff19018312811516156141f6576141f6614397565b81627fffff01831381161561420d5761420d614397565b5090039392505050565b60008160060b8360060b82811281667fffffffffffff190183128115161561424157614241614397565b81667fffffffffffff01831381161561420d5761420d614397565b60008282101561426e5761426e614397565b500390565b600063ffffffff8381169083168181101561429057614290614397565b039392505050565b60005b838110156142b357818101518382015260200161429b565b838111156142c2576000848401525b50505050565b600061ffff808316818114156142e0576142e0614397565b6001019392505050565b60006000198214156142fe576142fe614397565b5060010190565b60008260020b80614318576143186143ad565b808360020b0791505092915050565b600061ffff8084168061433c5761433c6143ad565b92169190910692915050565b600082614357576143576143ad565b500690565b60008160020b627fffff1981141561437657614376614397565b9003919050565b6000600160ff1b82141561439357614393614397565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146143ee57600080fd5b50565b80151581146143ee57600080fd5b6001600160801b03811681146143ee57600080fdfe3736ba81d13006f6ea2012ba3e287f087169b55d90a9defb5966fe9eb830d7ea0fe977d619f8172f7fdbe8bb8928ef80952817d96936509f67d66346bc4cd10f4f4658280ee6d0e8f09b5e436dacaca69ec5dd7c2ba05fb010d5145a3567cdada2646970667358221220336d80b132feef86c529f37d3371b115ca9f1c5a659c38276dc7fea0925be6ab64736f6c63430008040033" + }, + { + "address": "0x4960eda41a25c6c0fedbe8798940cb4585e36311", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100675780634f1ef286146100905780635c60da1b146100ac5780638f283970146100d7578063f851a440146101005761005d565b3661005d5761005b61012b565b005b61006561012b565b005b34801561007357600080fd5b5061008e6004803603810190610089919061068c565b610145565b005b6100aa60048036038101906100a591906106b5565b61019a565b005b3480156100b857600080fd5b506100c1610269565b6040516100ce91906107c3565b60405180910390f35b3480156100e357600080fd5b506100fe60048036038101906100f9919061068c565b6102c1565b005b34801561010c57600080fd5b506101156103c6565b60405161012291906107c3565b60405180910390f35b61013361042e565b61014361013e6104ae565b6104df565b565b61014d610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018981610536565b610197565b61019661012b565b5b50565b6101a2610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561025b576101de83610536565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516102079291906107aa565b600060405180830381855af49150503d8060008114610242576040519150601f19603f3d011682016040523d82523d6000602084013e610247565b606091505b505090508061025557600080fd5b50610264565b61026361012b565b5b505050565b6000610273610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102b5576102ae6104ae565b90506102be565b6102bd61012b565b5b90565b6102c9610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103ba57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561036c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036390610827565b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610395610505565b826040516103a49291906107de565b60405180910390a16103b581610585565b6103c3565b6103c261012b565b5b50565b60006103d0610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104125761040b610505565b905061041b565b61041a61012b565b5b90565b6000813b60008111915050919050565b610436610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049b90610807565b60405180910390fd5b6104ac6105b4565b565b6000807f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b9050805491505090565b3660008037600080366000845af43d6000803e8060008114610500573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050805491505090565b61053f816105b6565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b90508181555050565b565b6105bf8161041e565b6105fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f590610847565b60405180910390fd5b60007f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b90508181555050565b60008135905061063c816109b1565b92915050565b60008083601f84011261065457600080fd5b8235905067ffffffffffffffff81111561066d57600080fd5b60208301915083600182028301111561068557600080fd5b9250929050565b60006020828403121561069e57600080fd5b60006106ac8482850161062d565b91505092915050565b6000806000604084860312156106ca57600080fd5b60006106d88682870161062d565b935050602084013567ffffffffffffffff8111156106f557600080fd5b61070186828701610642565b92509250509250925092565b61071681610883565b82525050565b60006107288385610867565b93506107358385846108b5565b82840190509392505050565b600061074e603283610872565b9150610759826108c4565b604082019050919050565b6000610771603683610872565b915061077c82610913565b604082019050919050565b6000610794603b83610872565b915061079f82610962565b604082019050919050565b60006107b782848661071c565b91508190509392505050565b60006020820190506107d8600083018461070d565b92915050565b60006040820190506107f3600083018561070d565b610800602083018461070d565b9392505050565b6000602082019050818103600083015261082081610741565b9050919050565b6000602082019050818103600083015261084081610764565b9050919050565b6000602082019050818103600083015261086081610787565b9050919050565b600081905092915050565b600082825260208201905092915050565b600061088e82610895565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b7f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260008201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000602082015250565b7f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60008201527f787920746f20746865207a65726f206164647265737300000000000000000000602082015250565b7f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60008201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000602082015250565b6109ba81610883565b81146109c557600080fd5b5056fea2646970667358221220b19e98ed56f7105d9dba7a9a58dd948e28cf216e3bcd6e9150295d65848fcd0464736f6c63430008040033" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102ee602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516101079190610250565b600060405180830381855af49150503d8060008114610142576040519150601f19603f3d011682016040523d82523d6000602084013e610147565b606091505b509150915061015886838387610162565b9695505050505050565b606083156101fa5782516101f35773ffffffffffffffffffffffffffffffffffffffff85163b6101f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610204565b610204838361020c565b949350505050565b81511561021c5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ea919061026c565b600082516102628184602087016102bd565b9190910192915050565b602081526000825180602084015261028b8160408501602087016102bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60005b838110156102d85781810151838201526020016102c0565b838111156102e7576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201114e583bef0b119acfdb1eddd6c65ed0d3859e4b212aaf95abaf9f8d98efa7c64736f6c63430008040033" + }, + { + "address": "0x70b9c57e1ff24761c1c3ced57ddae9a3f3570698", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000001bfa6fa639ec84", + "code": "0x6080604052600436106101225760003560e01c80638da5cb5b116100a5578063b887bdac1161006c578063b887bdac1461030c578063bc74f9ff14610322578063e22367a414610362578063e7cd4a0414610392578063eb99be12146103b2578063f2fde38b146103e657005b80638da5cb5b1461029257806394cfab17146102b057806396c82e57146102c3578063a8676443146102d9578063b1dc7df9146102ec57005b80633b16827f116100e95780633b16827f146101fd5780634ab755631461021d5780634f3d2fd71461023d5780635af351181461025d578063715018a61461027d57005b80630c8310851461012b5780630d4eec8f1461014b5780632042e5c21461019c5780632a7bc4a8146101bc578063301a3720146101dc57005b3661012957005b005b34801561013757600080fd5b506101296101463660046121bd565b610406565b34801561015757600080fd5b5061017f7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101a857600080fd5b506101296101b73660046121fb565b61047d565b3480156101c857600080fd5b506101296101d73660046121fb565b6104a6565b6101ef6101ea3660046123f0565b6104d2565b604051908152602001610193565b34801561020957600080fd5b506101296102183660046121bd565b610981565b34801561022957600080fd5b506101296102383660046121fb565b6109ee565b34801561024957600080fd5b5060055461017f906001600160a01b031681565b34801561026957600080fd5b506101296102783660046121fb565b610a17565b34801561028957600080fd5b50610129610aa3565b34801561029e57600080fd5b506000546001600160a01b031661017f565b6101ef6102be366004612570565b610ab7565b3480156102cf57600080fd5b506101ef60015481565b6101ef6102e736600461265f565b610d34565b3480156102f857600080fd5b506101296103073660046121fb565b6111fd565b34801561031857600080fd5b506101ef60045481565b34801561032e57600080fd5b5061035261033d3660046121fb565b60026020526000908152604090205460ff1681565b6040519015158152602001610193565b34801561036e57600080fd5b5061035261037d3660046121fb565b60036020526000908152604090205460ff1681565b34801561039e57600080fd5b506101296103ad3660046121fb565b61129f565b3480156103be57600080fd5b5061017f7f000000000000000000000000cb3dc90e800c961d4a206beaafd92a6d2e06495e81565b3480156103f257600080fd5b506101296104013660046121fb565b6112cb565b61040e611341565b670de0b6b3a764000081106104785760405162461bcd60e51b815260206004820152602560248201527f444f444f526f75746550726f78793a206e657746656552617465206f766572666044820152641b1bddd95960da1b60648201526084015b60405180910390fd5b600455565b610485611341565b6001600160a01b03166000908152600260205260409020805460ff19169055565b6104ae611341565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b600081428110156104f55760405162461bcd60e51b815260040161046f90612727565b60008851116105465760405162461bcd60e51b815260206004820152601b60248201527f444f444f526f75746550726f78793a2050414952535f454d5054590000000000604482015260640161046f565b88518851146105a65760405162461bcd60e51b815260206004820152602660248201527f444f444f526f75746550726f78793a20504149525f414441505445525f4e4f546044820152650be9a82a886960d31b606482015260840161046f565b600187516105b49190612774565b8851146105d35760405162461bcd60e51b815260040161046f90612787565b60008a116105f35760405162461bcd60e51b815260040161046f906127cd565b8b8b8e60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146106365761062f6001600160a01b0385163061139b565b905061066c565b6106696001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f163061139b565b90505b6106bb338c6000815181106106835761068361280f565b6020026020010151848673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0316876001600160a01b031614611446565b60005b8c51811015610895578a6001166000036107a9578d81815181106106e4576106e461280f565b60200260200101516001600160a01b03166330e6ae318d8360016107089190612825565b815181106107185761071861280f565b60200260200101518f84815181106107325761073261280f565b60200260200101518d858151811061074c5761074c61280f565b60200260200101516040518463ffffffff1660e01b815260040161077293929190612888565b600060405180830381600087803b15801561078c57600080fd5b505af11580156107a0573d6000803e3d6000fd5b5050505061087c565b8d81815181106107bb576107bb61280f565b60200260200101516001600160a01b0316636f7929f28d8360016107df9190612825565b815181106107ef576107ef61280f565b60200260200101518f84815181106108095761080961280f565b60200260200101518d85815181106108235761082361280f565b60200260200101516040518463ffffffff1660e01b815260040161084993929190612888565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b505050505b60019a909a1c998061088d816128bd565b9150506106be565b506001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146108df57806108ce6001600160a01b0386163061139b565b6108d89190612774565b9550610920565b806109136001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f163061139b565b61091d9190612774565b95505b50505061092f8184878e6115e2565b92507f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a52217878e8e338f876040516109689594939291906128d6565b60405180910390a150509b9a5050505050505050505050565b610989611341565b61010081106109e95760405162461bcd60e51b815260206004820152602660248201527f444f444f526f75746550726f78793a20746f74616c576569676874206f766572604482015265199b1bddd95960d21b606482015260840161046f565b600155565b6109f6611341565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610a1f611341565b6001600160a01b038116610a815760405162461bcd60e51b815260206004820152602360248201527f444f444f526f75746550726f78793a20666565526563656976657220696e76616044820152621b1a5960ea1b606482015260840161046f565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b610aab611341565b610ab5600061186d565b565b60008142811015610ada5760405162461bcd60e51b815260040161046f90612727565b60008760018951610aeb9190612774565b81518110610afb57610afb61280f565b602002602001015190508851875114610b265760405162461bcd60e51b815260040161046f90612787565b60008a11610b465760405162461bcd60e51b815260040161046f906127cd565b60008b9050600089600081518110610b6057610b6061280f565b60200260200101519050600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0316846001600160a01b031614610bb357610bac6001600160a01b0385163061139b565b9050610be9565b610be66001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f163061139b565b90505b610c00338b6000815181106106835761068361280f565b610c0c8b8d8b8d6118bd565b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610c555780610c446001600160a01b0386163061139b565b610c4e9190612774565b9550610c96565b80610c896001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f163061139b565b610c939190612774565b95505b505050610ca58184878d6115e2565b92507f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a522178788600081518110610cdb57610cdb61280f565b60200260200101518960018b51610cf29190612774565b81518110610d0257610d0261280f565b6020026020010151338e87604051610d1e9594939291906128d6565b60405180910390a1505098975050505050505050565b60008142811015610d575760405162461bcd60e51b815260040161046f90612727565b6001600160a01b03881660009081526002602052604090205460ff16610dce5760405162461bcd60e51b815260206004820152602660248201527f444f444f526f75746550726f78793a204e6f742057686974656c69737420436f6044820152651b9d1c9858dd60d21b606482015260840161046f565b6001600160a01b03891660009081526003602052604090205460ff16610e4e5760405162461bcd60e51b815260206004820152602f60248201527f444f444f526f75746550726f78793a204e6f742057686974656c69737420417060448201526e1c1c1c9bdd994810dbdb9d1c9858dd608a1b606482015260840161046f565b6001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610f28576001600160a01b03891615610e9557610e956001600160a01b038c168a89611c74565b60405163052f523360e11b81526001600160a01b038c81166004830152336024830152306044830152606482018990527f000000000000000000000000cb3dc90e800c961d4a206beaafd92a6d2e06495e1690630a5ea46690608401600060405180830381600087803b158015610f0b57600080fd5b505af1158015610f1f573d6000803e3d6000fd5b50505050610f82565b863414610f825760405162461bcd60e51b815260206004820152602260248201527f444f444f526f75746550726f78793a20696e76616c69642045544820616d6f756044820152611b9d60f21b606482015260840161046f565b60006001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610fc257610fbb6001600160a01b038c163061139b565b9050610ff8565b610ff56001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f163061139b565b90505b7f000000000000000000000000cb3dc90e800c961d4a206beaafd92a6d2e06495e6001600160a01b0316896001600160a01b0316036110795760405162461bcd60e51b815260206004820152601b60248201527f444f444f526f75746550726f78793a205269736b205461726765740000000000604482015260640161046f565b6000806001600160a01b03808c16908f1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146110ab5760006110ad565b8a5b886040516110bb919061290a565b60006040518083038185875af1925050503d80600081146110f8576040519150601f19603f3d011682016040523d82523d6000602084013e6110fd565b606091505b50909250905081151560000361111557805160208201fd5b50506001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611160578061114f6001600160a01b038d163061139b565b6111599190612774565b92506111a1565b806111946001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f163061139b565b61119e9190612774565b92505b6111ad8b84888a6115e2565b92507f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a52217878c8c338b876040516111e69594939291906128d6565b60405180910390a150509998505050505050505050565b611205611341565b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461125f57600061123e6001600160a01b0383163061139b565b60055490915061125b906001600160a01b03848116911683611d29565b5050565b60055460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611299573d6000803e3d6000fd5b50505b50565b6112a7611341565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6112d3611341565b6001600160a01b0381166113385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161046f565b61129c8161186d565b6000546001600160a01b03163314610ab55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161046f565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038416036113d257506001600160a01b03811631611440565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a08231906024015b602060405180830381865afa158015611419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143d9190612926565b90505b92915050565b8015611548578115611543578134146114935760405162461bcd60e51b815260206004820152600f60248201526e4554485f56414c55455f57524f4e4760881b604482015260640161046f565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156114ee57600080fd5b505af1158015611502573d6000803e3d6000fd5b505050506001600160a01b03851630149050611543576115437f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f8584611d9f565b6115db565b60405163052f523360e11b81526001600160a01b03848116600483015286811660248301528581166044830152606482018490527f000000000000000000000000cb3dc90e800c961d4a206beaafd92a6d2e06495e1690630a5ea46690608401600060405180830381600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b505050505b5050505050565b60008473eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b0382160161162e577f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f95505b60008085806020019051810190611645919061293f565b91509150670de0b6b3a764000081106116b15760405162461bcd60e51b815260206004820152602860248201527f444f444f526f75746550726f78793a2062726f6b657246656552617465206f76604482015267195c999b1bddd95960c21b606482015260840161046f565b60006116bf88600454611e02565b6005549091506116dc906001600160a01b038b8116911683611d29565b60006116e88984611e02565b90506116fe6001600160a01b038b168583611d29565b80611709838b612774565b6117139190612774565b9850868910156117795760405162461bcd60e51b815260206004820152602b60248201527f444f444f526f75746550726f78793a2052657475726e20616d6f756e7420697360448201526a040dcdee840cadcdeeaced60ab1b606482015260840161046f565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b0386160161184b57604051632e1a7d4d60e01b8152600481018a90527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561180057600080fd5b505af1158015611814573d6000803e3d6000fd5b50506040513392508b156108fc0291508b906000818181858888f19350505050158015611845573d6000803e3d6000fd5b5061185f565b61185f6001600160a01b038b16338b611d29565b509698975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60015b83518110156115db576000611923836118da600185612774565b815181106118ea576118ea61280f565b60200260200101518784815181106119045761190461280f565b60200260200101516001600160a01b0316611e2190919063ffffffff16565b6001805491925060009087906119399086612774565b815181106119495761194961280f565b602002602001015190505b8684815181106119665761196661280f565b6020026020010151811015611c5e576119c06040518060c0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b6000806000808a86815181106119d8576119d861280f565b60200260200101518060200190518101906119f3919061296d565b601182901c8952607f600983901c1660408a015260ff90911660208901526001600160a01b0392831660608901529116608087015260a086015250309250889150611a419050600188612774565b81518110611a5157611a5161280f565b60200260200101516001600160a01b031603611b2e57600083826040015186611a7a9190612a15565b611a849190612a34565b90506001898781518110611a9a57611a9a61280f565b6020026020010151611aac9190612774565b8303611acb57611ac8308b88815181106119045761190461280f565b90505b8160200151600103611b0457611aff8a8781518110611aec57611aec61280f565b6020026020010151836080015183611d9f565b611b2c565b611b2c8a8781518110611b1957611b1961280f565b6020026020010151836060015183611d9f565b505b8051600003611bc35780608001516001600160a01b03166330e6ae31878781518110611b5c57611b5c61280f565b602002602001015183606001518460a001516040518463ffffffff1660e01b8152600401611b8c93929190612888565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611bba573d6000803e3d6000fd5b50505050611c4b565b80608001516001600160a01b0316636f7929f2878781518110611be857611be861280f565b602002602001015183606001518460a001516040518463ffffffff1660e01b8152600401611c1893929190612888565b600060405180830381600087803b158015611c3257600080fd5b505af1158015611c46573d6000803e3d6000fd5b505050505b5080611c56816128bd565b915050611954565b5050508080611c6c906128bd565b9150506118c0565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015611cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce89190612926565b905081811015611d23578015611d0d57611d0d6001600160a01b038516846000611e53565b611d236001600160a01b03851684600019611e53565b50505050565b80156112995773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03841603611d8f576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d89573d6000803e3d6000fd5b50611299565b6112996001600160a01b03841683835b6040516001600160a01b03831660248201526044810182905261129990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f68565b6000670de0b6b3a7640000611e178385612a15565b61143d9190612a34565b6040516370a0823160e01b81526001600160a01b038281166004830152600091908416906370a08231906024016113fc565b801580611ecd5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb9190612926565b155b611f385760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161046f565b6040516001600160a01b03831660248201526044810182905261129990849063095ea7b360e01b90606401611dcb565b6000611fbd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661203a9092919063ffffffff16565b8051909150156112995780806020019051810190611fdb9190612a56565b6112995760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161046f565b60606120498484600085612053565b90505b9392505050565b6060824710156120b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161046f565b6001600160a01b0385163b61210b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161046f565b600080866001600160a01b03168587604051612127919061290a565b60006040518083038185875af1925050503d8060008114612164576040519150601f19603f3d011682016040523d82523d6000602084013e612169565b606091505b5091509150612179828286612184565b979650505050505050565b6060831561219357508161204c565b8251156121a35782518084602001fd5b8160405162461bcd60e51b815260040161046f9190612a78565b6000602082840312156121cf57600080fd5b5035919050565b6001600160a01b038116811461129c57600080fd5b80356121f6816121d6565b919050565b60006020828403121561220d57600080fd5b813561204c816121d6565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561225757612257612218565b604052919050565b600067ffffffffffffffff82111561227957612279612218565b5060051b60200190565b600082601f83011261229457600080fd5b813560206122a96122a48361225f565b61222e565b82815260059290921b840181019181810190868411156122c857600080fd5b8286015b848110156122ec5780356122df816121d6565b83529183019183016122cc565b509695505050505050565b600067ffffffffffffffff82111561231157612311612218565b50601f01601f191660200190565b600082601f83011261233057600080fd5b813561233e6122a4826122f7565b81815284602083860101111561235357600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261238157600080fd5b813560206123916122a48361225f565b82815260059290921b840181019181810190868411156123b057600080fd5b8286015b848110156122ec57803567ffffffffffffffff8111156123d45760008081fd5b6123e28986838b010161231f565b8452509183019183016123b4565b60008060008060008060008060008060006101608c8e03121561241257600080fd5b61241b8c6121eb565b9a5061242960208d016121eb565b995060408c0135985060608c0135975067ffffffffffffffff8060808e0135111561245357600080fd5b6124638e60808f01358f01612283565b97508060a08e0135111561247657600080fd5b6124868e60a08f01358f01612283565b96508060c08e0135111561249957600080fd5b6124a98e60c08f01358f01612283565b955060e08d01359450806101008e013511156124c457600080fd5b6124d58e6101008f01358f01612370565b9350806101208e013511156124e957600080fd5b506124fb8d6101208e01358e0161231f565b91506101408c013590509295989b509295989b9093969950565b600082601f83011261252657600080fd5b813560206125366122a48361225f565b82815260059290921b8401810191818101908684111561255557600080fd5b8286015b848110156122ec5780358352918301918301612559565b600080600080600080600080610100898b03121561258d57600080fd5b8835975060208901359650604089013567ffffffffffffffff808211156125b357600080fd5b6125bf8c838d01612515565b975060608b01359150808211156125d557600080fd5b6125e18c838d01612283565b965060808b01359150808211156125f757600080fd5b6126038c838d01612283565b955060a08b013591508082111561261957600080fd5b6126258c838d01612370565b945060c08b013591508082111561263b57600080fd5b506126488b828c0161231f565b92505060e089013590509295985092959890939650565b60008060008060008060008060006101208a8c03121561267e57600080fd5b8935612689816121d6565b985060208a0135612699816121d6565b97506126a760408b016121eb565b96506126b560608b016121eb565b955060808a0135945060a08a0135935060c08a013567ffffffffffffffff808211156126e057600080fd5b6126ec8d838e0161231f565b945060e08c013591508082111561270257600080fd5b5061270f8c828d0161231f565b9250506101008a013590509295985092959850929598565b60208082526017908201527f444f444f526f75746550726f78793a2045585049524544000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156114405761144061275e565b60208082526026908201527f444f444f526f75746550726f78793a20504149525f4153534554544f5f4e4f546040820152650be9a82a886960d31b606082015260800190565b60208082526022908201527f444f444f526f75746550726f78793a2052455455524e5f414d4f554e545f5a45604082015261524f60f01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b808201808211156114405761144061275e565b60005b8381101561285357818101518382015260200161283b565b50506000910152565b60008151808452612874816020860160208601612838565b601f01601f19169290920160200192915050565b6001600160a01b038481168252831660208201526060604082018190526000906128b49083018461285c565b95945050505050565b6000600182016128cf576128cf61275e565b5060010190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b6000825161291c818460208701612838565b9190910192915050565b60006020828403121561293857600080fd5b5051919050565b6000806040838503121561295257600080fd5b825161295d816121d6565b6020939093015192949293505050565b6000806000806080858703121561298357600080fd5b845161298e816121d6565b602086015190945061299f816121d6565b60408601516060870151919450925067ffffffffffffffff8111156129c357600080fd5b8501601f810187136129d457600080fd5b80516129e26122a4826122f7565b8181528860208385010111156129f757600080fd5b612a08826020830160208601612838565b9598949750929550505050565b6000816000190483118215151615612a2f57612a2f61275e565b500290565b600082612a5157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a6857600080fd5b8151801515811461204c57600080fd5b60208152600061143d602083018461285c56fea26469706673582212206386589f8f4ea176bc3380ef661fe102f0a52bfdbe5d806de49210acad380c1464736f6c63430008100033" + }, + { + "address": "0x80e38291e06339d10aab483c65695d004dbd5c69", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000000017bbeaf70968", + "code": "0x60806040526004361061014b5760003560e01c80639dd41df2116100b6578063c4b3fc401161006f578063c4b3fc4014610395578063ced78795146103a8578063e84d494b146103bb578063f2428621146103ce578063f3995c6714610402578063fbfa77cf1461041557600080fd5b80639dd41df2146102e6578063a4a78f0c146102f9578063ac9650d81461030c578063ad271fa31461032c578063b956b3fb1461034c578063c2e3140a1461038257600080fd5b80636291027c116101085780636291027c1461024d578063688ee44c1461026d5780636cbe96fa146102805780636cc781cd146102a05780637d10c9d6146102b357806394ec6d78146102d357600080fd5b80632b4abadb146101505780632cc4081e14610186578063353766c6146101a65780634659a494146101d35780634f25b858146101e857806353c43f151461022d575b600080fd5b34801561015c57600080fd5b5061017061016b36600461191a565b610449565b60405161017d9190611966565b60405180910390f35b610199610194366004611ce1565b610481565b60405161017d9190611d74565b3480156101b257600080fd5b506101c66101c1366004611e89565b6104ca565b60405161017d9190611ffa565b6101e66101e136600461201f565b6105c3565b005b3480156101f457600080fd5b506102206102033660046120a9565b600060208181529281526040808220909352908152205460ff1681565b60405161017d91906120e4565b34801561023957600080fd5b506101996102483660046120f2565b610638565b34801561025957600080fd5b506101e66102683660046121a3565b610665565b6101e661027b366004612207565b61075b565b61029361028e3660046122d4565b6107e6565b60405161017d91906123ba565b6101e66102ae366004612207565b610807565b3480156102bf57600080fd5b506101996102ce3660046123e3565b610876565b6102936102e13660046122d4565b61091c565b6101706102f43660046124d0565b610947565b6101e661030736600461201f565b6109c5565b61031f61031a36600461252b565b610a54565b60405161017d9190612644565b34801561033857600080fd5b506101c6610347366004612655565b610ba9565b34801561035857600080fd5b506102936103673660046126fe565b6001600160a01b031660009081526001602052604090205490565b6101e661039036600461201f565b610c22565b6102936103a3366004612830565b610ca7565b6102936103b6366004612830565b610db4565b6101996103c9366004612947565b610dd3565b3480156103da57600080fd5b506101707f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b6101e661041036600461201f565b610eb2565b34801561042157600080fd5b506101707f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b81565b6001602052816000526040600020818154811061046557600080fd5b6000918252602090912001546001600160a01b03169150829050565b604080518082019091526000808252602082015281804211156104b757604051630407b05b60e31b815260040160405180910390fd5b6104c18585610eea565b95945050505050565b805160208201516040808401519051630b00663360e21b81526060936001600160a01b038f1693632c0198cc9361050b9333933093909290916004016129b9565b600060405180830381600087803b15801561052557600080fd5b505af1158015610539573d6000803e3d6000fd5b505050506105b48b8b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c92508b91508a9050611176565b9b9a5050505050505050505050565b6040516323f2ebc360e21b81526001600160a01b03871690638fcbaf0c906105fe90339030908a908a906001908b908b908b90600401612a09565b600060405180830381600087803b15801561061857600080fd5b505af115801561062c573d6000803e3d6000fd5b50505050505050505050565b604080518082019091526000808252602082015261065a8787878787876112e4565b979650505050505050565b61067183333085611405565b604051636eb1769f60e11b815282906001600160a01b0385169063dd62ed3e906106a19030908990600401612a73565b602060405180830381865afa1580156106be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e29190612a99565b10156106f5576106f583856000196114f3565b604051637acb775760e01b81526001600160a01b03851690637acb7757906107239085908590600401612aba565b600060405180830381600087803b15801561073d57600080fd5b505af1158015610751573d6000803e3d6000fd5b5050505050505050565b604051636eb1769f60e11b815284906001600160a01b0387169063dd62ed3e9061078b9033903090600401612a73565b602060405180830381865afa1580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190612a99565b10156107df576107df8585858585610807565b5050505050565b60006107f98a8a8a8a8a8a8a8a8a6115df565b9a9950505050505050505050565b604051630b00663360e21b81526001600160a01b03861690632c0198cc9061083d90339030908990899089908990600401612aeb565b600060405180830381600087803b15801561085757600080fd5b505af115801561086b573d6000803e3d6000fd5b505050505050505050565b60408051808201909152600080825260208201526001600160a01b038816632c0198cc3330853560208701356108af6040890189612b33565b6040518763ffffffff1660e01b81526004016108d096959493929190612aeb565b600060405180830381600087803b1580156108ea57600080fd5b505af11580156108fe573d6000803e3d6000fd5b505050506109108888888888886112e4565b98975050505050505050565b600061092f8a8a8a8a8a8a8a8a8a6115df565b905061093a8a6116f4565b9998505050505050505050565b6040516313b8683f60e01b81526000906001600160a01b038516906313b8683f906109789086908690600401612b91565b6020604051808303816000875af1158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bb9190612bae565b90505b9392505050565b604051636eb1769f60e11b8152600019906001600160a01b0388169063dd62ed3e906109f79033903090600401612a73565b602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190612a99565b1015610a4c57610a4c8686868686866105c3565b505050505050565b6060816001600160401b03811115610a6e57610a6e611974565b604051908082528060200260200182016040528015610aa157816020015b6060815260200190600190039081610a8c5790505b50905060005b82811015610ba25760008030868685818110610ac557610ac5612bcf565b9050602002810190610ad79190612b33565b604051610ae5929190612bf8565b600060405180830381855af49150503d8060008114610b20576040519150601f19603f3d011682016040523d82523d6000602084013e610b25565b606091505b509150915081610b7a57604481511015610b3e57600080fd5b60048101905080806020019051810190610b589190612c5d565b60405162461bcd60e51b8152600401610b719190612c97565b60405180910390fd5b80848481518110610b8d57610b8d612bcf565b60209081029190910101525050600101610aa7565b5092915050565b60606107f98a8a8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92508a9150899050611176565b604051636eb1769f60e11b815285906001600160a01b0388169063dd62ed3e90610c529033903090600401612a73565b602060405180830381865afa158015610c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c939190612a99565b1015610a4c57610a4c868686868686610eb2565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905290919060005b82811015610d9157848181518110610cfa57610cfa612bcf565b6020026020010151915081600001516001600160a01b031663d505accf333085602001518660400151876060015188608001518960a001516040518863ffffffff1660e01b8152600401610d549796959493929190612ca8565b600060405180830381600087803b158015610d6e57600080fd5b505af1158015610d82573d6000803e3d6000fd5b50505050806001019050610ce0565b50610da38d8d8d8d8d8d8d8d8d6115df565b9d9c50505050505050505050505050565b6000610dc88b8b8b8b8b8b8b8b8b8b610ca7565b90506107f98b6116f4565b60408051808201909152600080825260208201528280421115610e0957604051630407b05b60e31b815260040160405180910390fd5b610e1660208401846126fe565b6001600160a01b031663d505accf333060208701356040880135610e4060808a0160608b01612d04565b89608001358a60a001356040518863ffffffff1660e01b8152600401610e6c9796959493929190612ca8565b600060405180830381600087803b158015610e8657600080fd5b505af1158015610e9a573d6000803e3d6000fd5b50505050610ea88686610eea565b9695505050505050565b60405163d505accf60e01b81526001600160a01b0387169063d505accf906105fe90339030908a908a908a908a908a90600401612ca8565b604080518082019091526000808252602082015282516040805160608082018352808252600060208084018290528385018290528451608081018652828152808201849052808601839052808401939093528451808601909552818552840152909160008060005b8681101561114457898181518110610f6c57610f6c612bcf565b602002602001015195508560000151600081518110610f8d57610f8d612bcf565b60200260200101519450610fae866020015186600001518860400151611773565b8551519250600091505b8282101561113c57610fcb600184612d3b565b82036110855784600001516001600160a01b0316637132bb7f866020015133886040015189606001516040518563ffffffff1660e01b81526004016110139493929190612d52565b60408051808303816000875af1158015611031573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110559190612ddb565b80516001600160a01b03168952602080820151908a018051929650909161107d908390612dfc565b90525061113c565b84600001516001600160a01b0316637132bb7f866020015133886040015189606001516040518563ffffffff1660e01b81526004016110c79493929190612d52565b60408051808303816000875af11580156110e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111099190612ddb565b508551611117836001612dfc565b8151811061112757611127612bcf565b60200260200101519450816001019150610fb8565b600101610f52565b50878760200151101561116a5760405163c9f52c7160e01b815260040160405180910390fd5b50505050505092915050565b6040516323b872dd60e01b81526060906001600160a01b038916906323b872dd906111a99033908c908c90600401612e14565b6020604051808303816000875af11580156111c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ec9190612e4f565b5060405163f66eab5b60e01b81526001600160a01b0389169063f66eab5b906112219089903390899089908990600401612e70565b6000604051808303816000875af1158015611240573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112689190810190612f27565b805190915060005b818110156112d75786818151811061128a5761128a612bcf565b60200260200101518382815181106112a4576112a4612bcf565b60200260200101516020015110156112cf5760405163c9f52c7160e01b815260040160405180910390fd5b600101611270565b5050979650505050505050565b6040805180820182526000808252602082015290516323b872dd60e01b81526001600160a01b038816906323b872dd906113269033908b908b90600401612e14565b6020604051808303816000875af1158015611345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113699190612e4f565b506040516313d85e7560e11b81526001600160a01b038816906327b0bcea9061139c908890339088908890600401612d52565b60408051808303816000875af11580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113de9190612ddb565b90508381602001511015610ea85760405163c9f52c7160e01b815260040160405180910390fd5b600080856001600160a01b03166323b872dd86868660405160240161142c93929190612e14565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516114659190612f83565b6000604051808303816000865af19150503d80600081146114a2576040519150601f19603f3d011682016040523d82523d6000602084013e6114a7565b606091505b50915091508115806114d557508051158015906114d55750808060200190518101906114d39190612e4f565b155b15610a4c57604051631e4e7d0960e21b815260040160405180910390fd5b600080846001600160a01b031663095ea7b38585604051602401611518929190612f8f565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516115519190612f83565b6000604051808303816000865af19150503d806000811461158e576040519150601f19603f3d011682016040523d82523d6000602084013e611593565b606091505b50915091508115806115c157508051158015906115c15750808060200190518101906115bf9190612e4f565b155b156107df57604051633e3f8f7360e01b815260040160405180910390fd5b6040805180820190915260008082526020820181905290889060005b82811015611648578b8b8281811061161557611615612bcf565b90506040020180360381019061162b9190612fe8565b915061164082600001518e8460200151611773565b6001016115fb565b506040516301f3943560e11b81526001600160a01b038d16906303e7286a9061167f908c908c9033908c908c908c90600401613009565b6020604051808303816000875af115801561169e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c29190612a99565b9250868310156116e55760405163124ca15f60e11b815260040160405180910390fd5b50509998505050505050505050565b6001600160a01b03811660009081526020818152604080832033845290915290205460ff16611770576001600160a01b0381166000818152602081815260408083203384528252808320805460ff1916600190811790915580835290832080549182018155835291200180546001600160a01b03191690911790555b50565b6001600160a01b03831661181a57604051631f2c13e160e31b81526001600160a01b037f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b169063f9609f089083906117d19087908790600401612a73565b60206040518083038185885af11580156117ef573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118149190612a99565b50505050565b61184683337f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b84611405565b604051631f2c13e160e31b81526001600160a01b037f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b169063f9609f08906118949086908690600401612a73565b6020604051808303816000875af11580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118149190612a99565b60006001600160a01b0382165b92915050565b6118f3816118d7565b811461177057600080fd5b80356118e4816118ea565b806118f3565b80356118e481611909565b6000806040838503121561193057611930600080fd5b600061193c85856118fe565b925050602061194d8582860161190f565b9150509250929050565b611960816118d7565b82525050565b602081016118e48284611957565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156119af576119af611974565b6040525050565b60006119c160405190565b90506119cd828261198a565b919050565b60006001600160401b038211156119eb576119eb611974565b5060209081020190565b60006001600160401b03821115611a0e57611a0e611974565b601f19601f83011660200192915050565b82818337506000910152565b6000611a3e611a39846119f5565b6119b6565b905082815260208101848484011115611a5957611a59600080fd5b611a64848285611a1f565b509392505050565b600082601f830112611a8057611a80600080fd5b8135611a90848260208601611a2b565b949350505050565b600060808284031215611aad57611aad600080fd5b611ab760806119b6565b90506000611ac584846118fe565b82525060208201356001600160401b03811115611ae457611ae4600080fd5b611af084828501611a6c565b6020830152506040611b04848285016118fe565b60408301525060608201356001600160401b03811115611b2657611b26600080fd5b611b3284828501611a6c565b60608301525092915050565b6000611b4c611a39846119d2565b83815290506020808201908402830185811115611b6b57611b6b600080fd5b835b81811015611bab5780356001600160401b03811115611b8e57611b8e600080fd5b808601611b9b8982611a98565b8552505060209283019201611b6d565b5050509392505050565b600082601f830112611bc957611bc9600080fd5b8135611a90848260208601611b3e565b600060608284031215611bee57611bee600080fd5b611bf860606119b6565b905081356001600160401b03811115611c1357611c13600080fd5b611c1f84828501611bb5565b8252506020611c30848483016118fe565b6020830152506040611c448482850161190f565b60408301525092915050565b6000611c5e611a39846119d2565b83815290506020808201908402830185811115611c7d57611c7d600080fd5b835b81811015611bab5780356001600160401b03811115611ca057611ca0600080fd5b808601611cad8982611bd9565b8552505060209283019201611c7f565b600082601f830112611cd157611cd1600080fd5b8135611a90848260208601611c50565b600080600060608486031215611cf957611cf9600080fd5b83356001600160401b03811115611d1257611d12600080fd5b611d1e86828701611cbd565b9350506020611d2f8682870161190f565b9250506040611d408682870161190f565b9150509250925092565b80611960565b80516040830190611d618482611957565b5060208201516118146020850182611d4a565b604081016118e48284611d50565b60008083601f840112611d9757611d97600080fd5b5081356001600160401b03811115611db157611db1600080fd5b602083019150836001820283011115611dcc57611dcc600080fd5b9250929050565b60008083601f840112611de857611de8600080fd5b5081356001600160401b03811115611e0257611e02600080fd5b602083019150836020820283011115611dcc57611dcc600080fd5b600060608284031215611e3257611e32600080fd5b611e3c60606119b6565b90506000611e4a848461190f565b8252506020611e5b8484830161190f565b60208301525060408201356001600160401b03811115611e7d57611e7d600080fd5b611c4484828501611a6c565b60008060008060008060008060008060e08b8d031215611eab57611eab600080fd5b6000611eb78d8d6118fe565b9a50506020611ec88d828e0161190f565b99505060408b01356001600160401b03811115611ee757611ee7600080fd5b611ef38d828e01611d82565b985098505060608b01356001600160401b03811115611f1457611f14600080fd5b611f208d828e01611dd3565b96509650506080611f338d828e016118fe565b94505060a08b01356001600160401b03811115611f5257611f52600080fd5b611f5e8d828e01611d82565b935093505060c08b01356001600160401b03811115611f7f57611f7f600080fd5b611f8b8d828e01611e1d565b9150509295989b9194979a5092959850565b6000611fa98383611d50565b505060400190565b6000611fbb825190565b80845260209384019383018060005b83811015611fef578151611fde8882611f9d565b975060208301925050600101611fca565b509495945050505050565b602080825281016109be8184611fb1565b60ff81166118f3565b80356118e48161200b565b60008060008060008060c0878903121561203b5761203b600080fd5b600061204789896118fe565b965050602061205889828a0161190f565b955050604061206989828a0161190f565b945050606061207a89828a01612014565b935050608061208b89828a0161190f565b92505060a061209c89828a0161190f565b9150509295509295509295565b600080604083850312156120bf576120bf600080fd5b60006120cb85856118fe565b925050602061194d858286016118fe565b801515611960565b602081016118e482846120dc565b60008060008060008060c0878903121561210e5761210e600080fd5b600061211a89896118fe565b965050602061212b89828a0161190f565b95505060408701356001600160401b0381111561214a5761214a600080fd5b61215689828a01611a6c565b945050606061216789828a0161190f565b935050608061217889828a016118fe565b92505060a08701356001600160401b0381111561219757612197600080fd5b61209c89828a01611a6c565b600080600080608085870312156121bc576121bc600080fd5b60006121c887876118fe565b94505060206121d9878288016118fe565b93505060406121ea8782880161190f565b92505060606121fb878288016118fe565b91505092959194509250565b60008060008060006080868803121561222257612222600080fd5b600061222e88886118fe565b955050602061223f8882890161190f565b94505060406122508882890161190f565b93505060608601356001600160401b0381111561226f5761226f600080fd5b61227b88828901611d82565b92509250509295509295909350565b60008083601f84011261229f5761229f600080fd5b5081356001600160401b038111156122b9576122b9600080fd5b602083019150836040820283011115611dcc57611dcc600080fd5b600080600080600080600080600060c08a8c0312156122f5576122f5600080fd5b60006123018c8c6118fe565b99505060208a01356001600160401b0381111561232057612320600080fd5b61232c8c828d0161228a565b985098505060408a01356001600160401b0381111561234d5761234d600080fd5b6123598c828d01611d82565b9650965050606061236c8c828d0161190f565b945050608061237d8c828d016118fe565b93505060a08a01356001600160401b0381111561239c5761239c600080fd5b6123a88c828d01611d82565b92509250509295985092959850929598565b602081016118e48284611d4a565b6000606082840312156123dd576123dd600080fd5b50919050565b600080600080600080600060e0888a03121561240157612401600080fd5b600061240d8a8a6118fe565b975050602061241e8a828b0161190f565b96505060408801356001600160401b0381111561243d5761243d600080fd5b6124498a828b01611a6c565b955050606061245a8a828b0161190f565b945050608061246b8a828b016118fe565b93505060a08801356001600160401b0381111561248a5761248a600080fd5b6124968a828b01611a6c565b92505060c08801356001600160401b038111156124b5576124b5600080fd5b6124c18a828b016123c8565b91505092959891949750929550565b6000806000604084860312156124e8576124e8600080fd5b60006124f486866118fe565b93505060208401356001600160401b0381111561251357612513600080fd5b61251f86828701611d82565b92509250509250925092565b6000806020838503121561254157612541600080fd5b82356001600160401b0381111561255a5761255a600080fd5b61256685828601611dd3565b92509250509250929050565b60005b8381101561258d578181015183820152602001612575565b838111156118145750506000910152565b60006125a8825190565b8084526020840193506125bf818560208601612572565b601f19601f8201165b9093019392505050565b60006109be838361259e565b60006125e8825190565b808452602084019350836020820285016126028560200190565b8060005b85811015612637578484038952815161261f85826125d2565b94506020830160209a909a0199925050600101612606565b5091979650505050505050565b602080825281016109be81846125de565b600080600080600080600080600060c08a8c03121561267657612676600080fd5b60006126828c8c6118fe565b99505060206126938c828d0161190f565b98505060408a01356001600160401b038111156126b2576126b2600080fd5b6126be8c828d01611d82565b975097505060608a01356001600160401b038111156126df576126df600080fd5b6126eb8c828d01611dd3565b9550955050608061237d8c828d016118fe565b60006020828403121561271357612713600080fd5b6000611a9084846118fe565b600060c0828403121561273457612734600080fd5b61273e60c06119b6565b9050600061274c84846118fe565b825250602061275d8484830161190f565b60208301525060406127718482850161190f565b604083015250606061278584828501612014565b60608301525060806127998482850161190f565b60808301525060a06127ad8482850161190f565b60a08301525092915050565b60006127c7611a39846119d2565b83815290506020810160c084028301858111156127e6576127e6600080fd5b835b81811015611bab57806127fb888261271f565b84525060209092019160c0016127e8565b600082601f83011261282057612820600080fd5b8135611a908482602086016127b9565b60008060008060008060008060008060e08b8d03121561285257612852600080fd5b600061285e8d8d6118fe565b9a505060208b01356001600160401b0381111561287d5761287d600080fd5b6128898d828e0161228a565b995099505060408b01356001600160401b038111156128aa576128aa600080fd5b6128b68d828e01611d82565b975097505060606128c98d828e0161190f565b95505060806128da8d828e016118fe565b94505060a08b01356001600160401b038111156128f9576128f9600080fd5b6129058d828e01611d82565b935093505060c08b01356001600160401b0381111561292657612926600080fd5b611f8b8d828e0161280c565b600060c082840312156123dd576123dd600080fd5b600080600080610120858703121561296157612961600080fd5b84356001600160401b0381111561297a5761297a600080fd5b61298687828801611cbd565b94505060206129978782880161190f565b93505060406129a88782880161190f565b92505060606121fb87828801612932565b60a081016129c78288611957565b6129d46020830187611957565b6129e16040830186611d4a565b6129ee6060830185611d4a565b818103608083015261065a818461259e565b60ff8116611960565b6101008101612a18828b611957565b612a25602083018a611957565b612a326040830189611d4a565b612a3f6060830188611d4a565b612a4c60808301876120dc565b612a5960a0830186612a00565b612a6660c0830185611d4a565b61093a60e0830184611d4a565b60408101612a818285611957565b6109be6020830184611957565b80516118e481611909565b600060208284031215612aae57612aae600080fd5b6000611a908484612a8e565b60408101612a818285611d4a565b8183526000602084019350612ade838584611a1f565b601f19601f8401166125c8565b60a08101612af98289611957565b612b066020830188611957565b612b136040830187611d4a565b612b206060830186611d4a565b8181036080830152610910818486612ac8565b6000808335601e1936859003018112612b4e57612b4e600080fd5b8084019250823591506001600160401b03821115612b6e57612b6e600080fd5b602083019250600182023603831315612b8957612b89600080fd5b509250929050565b602080825281016109bb818486612ac8565b80516118e4816118ea565b600060208284031215612bc357612bc3600080fd5b6000611a908484612ba3565b634e487b7160e01b600052603260045260246000fd5b6000612bf2838584611a1f565b50500190565b6000611a90828486612be5565b6000612c13611a39846119f5565b905082815260208101848484011115612c2e57612c2e600080fd5b611a64848285612572565b600082601f830112612c4d57612c4d600080fd5b8151611a90848260208601612c05565b600060208284031215612c7257612c72600080fd5b81516001600160401b03811115612c8b57612c8b600080fd5b611a9084828501612c39565b602080825281016109be818461259e565b60e08101612cb6828a611957565b612cc36020830189611957565b612cd06040830188611d4a565b612cdd6060830187611d4a565b612cea6080830186612a00565b612cf760a0830185611d4a565b61091060c0830184611d4a565b600060208284031215612d1957612d19600080fd5b6000611a908484612014565b634e487b7160e01b600052601160045260246000fd5b600082821015612d4d57612d4d612d25565b500390565b60808082528101612d63818761259e565b9050612d726020830186611957565b612d7f6040830185611957565b8181036060830152610ea8818461259e565b600060408284031215612da657612da6600080fd5b612db060406119b6565b90506000612dbe8484612ba3565b8252506020612dcf84848301612a8e565b60208301525092915050565b600060408284031215612df057612df0600080fd5b6000611a908484612d91565b60008219821115612e0f57612e0f612d25565b500190565b60608101612e228286611957565b612e2f6020830185611957565b611a906040830184611d4a565b8015156118f3565b80516118e481612e3c565b600060208284031215612e6457612e64600080fd5b6000611a908484612e44565b60808082528101612e81818861259e565b9050612e906020830187611957565b612e9d6040830186611957565b818103606083015261065a818486612ac8565b6000612ebe611a39846119d2565b83815290506020810160408402830185811115612edd57612edd600080fd5b835b81811015611bab5780612ef28882612d91565b845250602090920191604001612edf565b600082601f830112612f1757612f17600080fd5b8151611a90848260208601612eb0565b600060208284031215612f3c57612f3c600080fd5b81516001600160401b03811115612f5557612f55600080fd5b611a9084828501612f03565b6000612f6b825190565b612f79818560208601612572565b9290920192915050565b60006109be8284612f61565b60408101612f9d8285611957565b6109be6020830184611d4a565b600060408284031215612fbf57612fbf600080fd5b612fc960406119b6565b90506000612fd784846118fe565b8252506020612dcf8484830161190f565b600060408284031215612ffd57612ffd600080fd5b6000611a908484612faa565b6080808252810161301b81888a612ac8565b905061302a6020830187611957565b6130376040830186611957565b8181036060830152610910818486612ac856fea264697066735822122021d6dea4e36ea46e8e3b1cdfed26aba18483ad533843a5be49c86ecbdef0e8d964736f6c634300080f0033" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806370a082311161010f578063b88d4fde116100a2578063e3684e3911610071578063e3684e3914610416578063e985e9c5146104d4578063eac989f814610510578063f2fde38b1461052357600080fd5b8063b88d4fde146103ca578063bd62fd1f146103dd578063c87b56dd146103f0578063d547741f1461040357600080fd5b806391d14854116100de57806391d148541461039457806395d89b41146103a7578063a217fddf146103af578063a22cb465146103b757600080fd5b806370a0823114610355578063715018a614610368578063887d7aec146103705780638da5cb5b1461038357600080fd5b8063248225141161018757806336568abe1161015657806336568abe1461030957806342842e0e1461031c5780634f6ccce71461032f5780636352211e1461034257600080fd5b806324822514146102b7578063248a9ca3146102c05780632f2ff15d146102e35780632f745c59146102f657600080fd5b8063081812fc116101c3578063081812fc1461025c578063095ea7b31461028757806318160ddd1461029c57806323b872dd146102a457600080fd5b806301ffc9a7146101ea57806306fdde031461021257806307bd026514610227575b600080fd5b6101fd6101f8366004611aef565b610536565b60405190151581526020015b60405180910390f35b61021a61057c565b6040516102099190611b5c565b61024e7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610209565b61026f61026a366004611b6f565b61060e565b6040516001600160a01b039091168152602001610209565b61029a610295366004611b9d565b610635565b005b60085461024e565b61029a6102b2366004611bc9565b61074f565b61024e600c5481565b61024e6102ce366004611b6f565b6000908152600b602052604090206001015490565b61029a6102f1366004611c0a565b610780565b61024e610304366004611b9d565b6107a5565b61029a610317366004611c0a565b61083b565b61029a61032a366004611bc9565b6108b9565b61024e61033d366004611b6f565b6108d4565b61026f610350366004611b6f565b610967565b61024e610363366004611c3a565b6109c7565b61029a610a4d565b61029a61037e366004611c57565b610a61565b600a546001600160a01b031661026f565b6101fd6103a2366004611c0a565b610acf565b61021a610afa565b61024e600081565b61029a6103c5366004611c98565b610b09565b61029a6103d8366004611d3a565b610b14565b61029a6103eb366004611c3a565b610b4c565b61021a6103fe366004611b6f565b610b76565b61029a610411366004611c0a565b610c63565b610481610424366004611b6f565b600d6020526000908152604090208054600182015460029092015461ffff82169262010000830462ffffff169265010000000000810464ffffffffff1692600160501b9091046001600160801b0316916001600160a01b03169086565b6040805161ffff909716875262ffffff909516602087015264ffffffffff909316938501939093526001600160801b031660608401526001600160a01b03909116608083015260a082015260c001610209565b6101fd6104e2366004611de9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600e5461026f906001600160a01b031681565b61029a610531366004611c3a565b610c88565b60006001600160e01b0319821663780e9d6360e01b148061056757506001600160e01b03198216637965db0b60e01b145b80610576575061057682610d01565b92915050565b60606000805461058b90611e17565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790611e17565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b5050505050905090565b600061061982610d26565b506000908152600460205260409020546001600160a01b031690565b600061064082610967565b9050806001600160a01b0316836001600160a01b0316036106b25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806106ce57506106ce81336104e2565b6107405760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016106a9565b61074a8383610d85565b505050565b6107593382610df3565b6107755760405162461bcd60e51b81526004016106a990611e51565b61074a838383610e72565b6000828152600b602052604090206001015461079b81610fe3565b61074a8383610fed565b60006107b0836109c7565b82106108125760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106a9565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6001600160a01b03811633146108ab5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106a9565b6108b58282611073565b5050565b61074a83838360405180602001604052806000815250610b14565b60006108df60085490565b82106109425760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106a9565b6008828154811061095557610955611e9e565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806105765760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106a9565b60006001600160a01b038216610a315760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016106a9565b506001600160a01b031660009081526003602052604090205490565b610a556110da565b610a5f6000611134565b565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610a8b81610fe3565b6000600c60008154610a9c90611eca565b91829055509050610aad8482611186565b6000818152600d602052604090208390610ac78282611f20565b505050505050565b6000918252600b602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606001805461058b90611e17565b6108b533838361131f565b610b1e3383610df3565b610b3a5760405162461bcd60e51b81526004016106a990611e51565b610b46848484846113ed565b50505050565b610b546110da565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6060610b8182610d26565b600e546000838152600d60205260409081902090516318ff058560e01b81526001600160a01b03909216916318ff058591610c1e91869190600401918252805461ffff81166020840152601081901c62ffffff166040840152602881901c64ffffffffff16606084015260501c6001600160801b0316608083015260018101546001600160a01b031660a08301526002015460c082015260e00190565b600060405180830381865afa158015610c3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105769190810190612034565b6000828152600b6020526040902060010154610c7e81610fe3565b61074a8383611073565b610c906110da565b6001600160a01b038116610cf55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a9565b610cfe81611134565b50565b60006001600160e01b03198216637965db0b60e01b1480610576575061057682611420565b6000818152600260205260409020546001600160a01b0316610cfe5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106a9565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610dba82610967565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610dff83610967565b9050806001600160a01b0316846001600160a01b03161480610e4657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610e6a5750836001600160a01b0316610e5f8461060e565b6001600160a01b0316145b949350505050565b826001600160a01b0316610e8582610967565b6001600160a01b031614610eab5760405162461bcd60e51b81526004016106a9906120ab565b6001600160a01b038216610f0d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106a9565b610f1a8383836001611445565b826001600160a01b0316610f2d82610967565b6001600160a01b031614610f535760405162461bcd60e51b81526004016106a9906120ab565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610cfe81336114b6565b610ff78282610acf565b6108b5576000828152600b602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561102f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61107d8282610acf565b156108b5576000828152600b602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600a546001600160a01b03163314610a5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a9565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166111dc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106a9565b6000818152600260205260409020546001600160a01b0316156112415760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106a9565b61124f600083836001611445565b6000818152600260205260409020546001600160a01b0316156112b45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106a9565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b0316036113805760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106a9565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6113f8848484610e72565b6114048484848461150f565b610b465760405162461bcd60e51b81526004016106a9906120f0565b60006001600160e01b0319821663780e9d6360e01b1480610576575061057682611610565b6001600160a01b038416156114aa5760405162461bcd60e51b815260206004820152602560248201527f5a7970686572323034383a20746f6b656e206973206e6f74207472616e7366656044820152647261626c6560d81b60648201526084016106a9565b610b4684848484611660565b6114c08282610acf565b6108b5576114cd81611794565b6114d88360206117a6565b6040516020016114e9929190612142565b60408051601f198184030181529082905262461bcd60e51b82526106a991600401611b5c565b60006001600160a01b0384163b1561160557604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906115539033908990889088906004016121b7565b6020604051808303816000875af192505050801561158e575060408051601f3d908101601f1916820190925261158b918101906121f4565b60015b6115eb573d8080156115bc576040519150601f19603f3d011682016040523d82523d6000602084013e6115c1565b606091505b5080516000036115e35760405162461bcd60e51b81526004016106a9906120f0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e6a565b506001949350505050565b60006001600160e01b031982166380ac58cd60e01b148061164157506001600160e01b03198216635b5e139f60e01b145b8061057657506301ffc9a760e01b6001600160e01b0319831614610576565b60018111156116cf5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60648201526084016106a9565b816001600160a01b03851661172b5761172681600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61174e565b836001600160a01b0316856001600160a01b03161461174e5761174e8582611949565b6001600160a01b03841661176a57611765816119e6565b61178d565b846001600160a01b0316846001600160a01b03161461178d5761178d8482611a95565b5050505050565b60606105766001600160a01b03831660145b606060006117b5836002612211565b6117c0906002612228565b67ffffffffffffffff8111156117d8576117d8611ccb565b6040519080825280601f01601f191660200182016040528015611802576020820181803683370190505b509050600360fc1b8160008151811061181d5761181d611e9e565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061184c5761184c611e9e565b60200101906001600160f81b031916908160001a9053506000611870846002612211565b61187b906001612228565b90505b60018111156118f3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106118af576118af611e9e565b1a60f81b8282815181106118c5576118c5611e9e565b60200101906001600160f81b031916908160001a90535060049490941c936118ec8161223b565b905061187e565b5083156119425760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106a9565b9392505050565b60006001611956846109c7565b6119609190612252565b6000838152600760205260409020549091508082146119b3576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906119f890600190612252565b60008381526009602052604081205460088054939450909284908110611a2057611a20611e9e565b906000526020600020015490508060088381548110611a4157611a41611e9e565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611a7957611a79612265565b6001900381819060005260206000200160009055905550505050565b6000611aa0836109c7565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b031981168114610cfe57600080fd5b600060208284031215611b0157600080fd5b813561194281611ad9565b60005b83811015611b27578181015183820152602001611b0f565b50506000910152565b60008151808452611b48816020860160208601611b0c565b601f01601f19169290920160200192915050565b6020815260006119426020830184611b30565b600060208284031215611b8157600080fd5b5035919050565b6001600160a01b0381168114610cfe57600080fd5b60008060408385031215611bb057600080fd5b8235611bbb81611b88565b946020939093013593505050565b600080600060608486031215611bde57600080fd5b8335611be981611b88565b92506020840135611bf981611b88565b929592945050506040919091013590565b60008060408385031215611c1d57600080fd5b823591506020830135611c2f81611b88565b809150509250929050565b600060208284031215611c4c57600080fd5b813561194281611b88565b60008082840360e0811215611c6b57600080fd5b8335611c7681611b88565b925060c0601f1982011215611c8a57600080fd5b506020830190509250929050565b60008060408385031215611cab57600080fd5b8235611cb681611b88565b915060208301358015158114611c2f57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d0a57611d0a611ccb565b604052919050565b600067ffffffffffffffff821115611d2c57611d2c611ccb565b50601f01601f191660200190565b60008060008060808587031215611d5057600080fd5b8435611d5b81611b88565b93506020850135611d6b81611b88565b925060408501359150606085013567ffffffffffffffff811115611d8e57600080fd5b8501601f81018713611d9f57600080fd5b8035611db2611dad82611d12565b611ce1565b818152886020838501011115611dc757600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611dfc57600080fd5b8235611e0781611b88565b91506020830135611c2f81611b88565b600181811c90821680611e2b57607f821691505b602082108103611e4b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611edc57611edc611eb4565b5060010190565b6000813564ffffffffff8116811461057657600080fd5b600081356001600160801b038116811461057657600080fd5b6000813561057681611b88565b813561ffff8116808214611f3357600080fd5b825461ffff198116821784559150602084013562ffffff81168114611f5757600080fd5b64ffffffffff19929092161760109190911b64ffffff000016178155611fa8611f8260408401611ee3565b825469ffffffffff0000000000191660289190911b69ffffffffff000000000016178255565b611ff3611fb760608401611efa565b8280546fffffffffffffffffffffffffffffffff60501b191660509290921b6fffffffffffffffffffffffffffffffff60501b16919091179055565b61202661200260808401611f13565b6001830180546001600160a01b0319166001600160a01b0392909216919091179055565b60a082013560028201555050565b60006020828403121561204657600080fd5b815167ffffffffffffffff81111561205d57600080fd5b8201601f8101841361206e57600080fd5b805161207c611dad82611d12565b81815285602083850101111561209157600080fd5b6120a2826020830160208601611b0c565b95945050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161217a816017850160208801611b0c565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516121ab816028840160208801611b0c565b01602801949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906121ea90830184611b30565b9695505050505050565b60006020828403121561220657600080fd5b815161194281611ad9565b808202811582820484141761057657610576611eb4565b8082018082111561057657610576611eb4565b60008161224a5761224a611eb4565b506000190190565b8181038181111561057657610576611eb4565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209b02b079c9d98084f9d29d222e2788e4efa9d990ed72366fe9f3763ac4890eba64736f6c63430008140033" + }, + { + "address": "0x712c1703f4670081dd04544048f14d5bafc4a88d", + "nonce": 138, + "balance": "0x000000000000000000000000000000000000000000000000003bd498ec0a2e41", + "code": "0x" + }, + { + "address": "0x23af02e4b268a2502496f3425246d59e0962e583", + "nonce": 147, + "balance": "0x000000000000000000000000000000000000000000000000001ed45726d0741b", + "code": "0x" + }, + { + "address": "0x08ea843132b8d3df36ce2719c4726347b913db00", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100ab5760003560e01c80638da5cb5b116100645780638da5cb5b14610191578063affed0e0146101a6578063b00140aa146101c8578063bc197c81146101e8578063c8d18a4514610208578063f23a6e611461021b576100b2565b8063104d6537146100b7578063150b7a02146100cc5780631626ba7e1461010257806319045a2514610122578063485cc9551461014f5780637b1039991461017c576100b2565b366100b257005b600080fd5b6100ca6100c5366004610c7b565b61023b565b005b3480156100d857600080fd5b506100ec6100e7366004610a58565b610308565b6040516100f99190610dc0565b60405180910390f35b34801561010e57600080fd5b506100ec61011d366004610b87565b610331565b34801561012e57600080fd5b5061014261013d366004610bfd565b6103af565b6040516100f99190610d7a565b34801561015b57600080fd5b5061016f61016a366004610981565b610503565b6040516100f99190610d8e565b34801561018857600080fd5b506101426105d8565b34801561019d57600080fd5b506101426105e7565b3480156101b257600080fd5b506101bb6105f6565b6040516100f99190610d99565b3480156101d457600080fd5b506101bb6101e3366004610c41565b6105fc565b3480156101f457600080fd5b506100ec6102033660046109b3565b610633565b6100ca610216366004610b1f565b61065d565b34801561022757600080fd5b506100ec610236366004610abd565b610778565b6000610246826105fc565b6001549091506001600160a01b031661025f82856103af565b6001600160a01b03161461028e5760405162461bcd60e51b815260040161028590610e0c565b60405180910390fd5b60025461029c9060016107a2565b60025560405160009030906102b2908590610d3d565b6000604051808303816000865af19150503d80600081146102ef576040519150601f19603f3d011682016040523d82523d6000602084013e6102f4565b606091505b505090508061030257600080fd5b50505050565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f949350505050565b600154604080516020601f85018190048102820181019092528381526000926001600160a01b03169161038091879187908790819084018382808284376000920191909152506103af92505050565b6001600160a01b0316141561039d5750630b135d3f60e11b6103a8565b506001600160e01b03195b9392505050565b600081516041146103d25760405162461bcd60e51b815260040161028590610e75565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156104245760405162461bcd60e51b815260040161028590610f13565b8060ff16601b1415801561043c57508060ff16601c14155b156104595760405162461bcd60e51b815260040161028590610f7d565b600060018760405160200161046e9190610d49565b60405160208183030381529060405280519060200120838686604051600081526020016040526040516104a49493929190610da2565b6020604051602081039080840390855afa1580156104c6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166104f95760405162461bcd60e51b815260040161028590610dd5565b9695505050505050565b600080546001600160a01b03161561052d5760405162461bcd60e51b815260040161028590610fea565b6001600160a01b0383166105535760405162461bcd60e51b815260040161028590610eac565b6001600160a01b0382166105795760405162461bcd60e51b815260040161028590610eac565b600080546001600160a01b038086166001600160a01b03199283161783556001805491861691909216811790915560405190917f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b91a250600192915050565b6000546001600160a01b031681565b6001546001600160a01b031681565b60025481565b6000306002548360405160200161061593929190610d0a565b6040516020818303038152906040528051906020012090505b919050565b7fbc197c819b3e337a6f9652dd10becd7eef83032af3b9d958d3d42f669414662195945050505050565b6001546001600160a01b031633148061067557503330145b6106915760405162461bcd60e51b815260040161028590610fbf565b8281146106b05760405162461bcd60e51b815260040161028590610e34565b60005b838110156107715761075f8585838181106106de57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106f39190610967565b84848481811061071357634e487b7160e01b600052603260045260246000fd5b90506020028101906107259190611017565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506107d192505050565b806107698161109c565b9150506106b3565b5050505050565b7ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf9795945050505050565b6000806107af8385611084565b9050838110156103a85760405162461bcd60e51b815260040161028590610edc565b6001600160a01b0382166107f75760405162461bcd60e51b815260040161028590610f55565b600080825160208401855af480156001811461081257610302565b3d806000803e806000fd5b80356001600160a01b038116811461062e57600080fd5b60008083601f840112610845578182fd5b5081356001600160401b0381111561085b578182fd5b602083019150836020808302850101111561087557600080fd5b9250929050565b600082601f83011261088c578081fd5b813560206001600160401b038211156108a7576108a76110cd565b8082026108b582820161105b565b8381528281019086840183880185018910156108cf578687fd5b8693505b858410156108f15780358352600193909301929184019184016108d3565b50979650505050505050565b600082601f83011261090d578081fd5b81356001600160401b03811115610926576109266110cd565b610939601f8201601f191660200161105b565b81815284602083860101111561094d578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215610978578081fd5b6103a88261081d565b60008060408385031215610993578081fd5b61099c8361081d565b91506109aa6020840161081d565b90509250929050565b600080600080600060a086880312156109ca578081fd5b6109d38661081d565b94506109e16020870161081d565b935060408601356001600160401b03808211156109fc578283fd5b610a0889838a0161087c565b94506060880135915080821115610a1d578283fd5b610a2989838a0161087c565b93506080880135915080821115610a3e578283fd5b50610a4b888289016108fd565b9150509295509295909350565b60008060008060808587031215610a6d578384fd5b610a768561081d565b9350610a846020860161081d565b92506040850135915060608501356001600160401b03811115610aa5578182fd5b610ab1878288016108fd565b91505092959194509250565b600080600080600060a08688031215610ad4578081fd5b610add8661081d565b9450610aeb6020870161081d565b9350604086013592506060860135915060808601356001600160401b03811115610b13578182fd5b610a4b888289016108fd565b60008060008060408587031215610b34578384fd5b84356001600160401b0380821115610b4a578586fd5b610b5688838901610834565b90965094506020870135915080821115610b6e578384fd5b50610b7b87828801610834565b95989497509550505050565b600080600060408486031215610b9b578283fd5b8335925060208401356001600160401b0380821115610bb8578384fd5b818601915086601f830112610bcb578384fd5b813581811115610bd9578485fd5b876020828501011115610bea578485fd5b6020830194508093505050509250925092565b60008060408385031215610c0f578182fd5b8235915060208301356001600160401b03811115610c2b578182fd5b610c37858286016108fd565b9150509250929050565b600060208284031215610c52578081fd5b81356001600160401b03811115610c67578182fd5b610c73848285016108fd565b949350505050565b60008060408385031215610c8d578182fd5b82356001600160401b0380821115610ca3578384fd5b610caf868387016108fd565b93506020850135915080821115610cc4578283fd5b50610c37858286016108fd565b60008151815b81811015610cf15760208185018101518683015201610cd7565b81811115610cff5782828601525b509290920192915050565b60006bffffffffffffffffffffffff198560601b168252836014830152610d346034830184610cd1565b95945050505050565b60006103a88284610cd1565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6001600160e01b031991909116815260200190565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b6020808252600e908201526d24b73b30b634b21029b4b3b732b960911b604082015260600190565b60208082526021908201527f74617267657473206e6f7420657175616c20746f206e6f2e206f662063616c6c6040820152607360f81b606082015260800190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b60208082526016908201527543414e4e4f54204245205a45524f204144445245535360501b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b6020808252600e908201526d1d185c99d95d0b5a5b9d985b1a5960921b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b6020808252601190820152701c195c9b5a5cdcda5bdb8b59195b9a5959607a1b604082015260600190565b60208082526013908201527210531491505116481253925512505312569151606a1b604082015260600190565b6000808335601e1984360301811261102d578283fd5b8301803591506001600160401b03821115611046578283fd5b60200191503681900382131561087557600080fd5b6040518181016001600160401b038111828210171561107c5761107c6110cd565b604052919050565b60008219821115611097576110976110b7565b500190565b60006000198214156110b0576110b06110b7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212209381a3beb666751db82d5b08b7a825622fc1788ec6ae1f32abc79ffea020dea764736f6c63430008000033" + }, + { + "address": "0xfc7fa137552eac1d53f2060e12d0a43b394a5f8e", + "nonce": 43, + "balance": "0x0000000000000000000000000000000000000000000000000010547761c82b78", + "code": "0x" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000019c31f5c4d79f5a", + "code": "0x60806040526004361061016a5760003560e01c80635f281bfb116100d1578063a0712d681161008a578063c87b56dd11610064578063c87b56dd1461040d578063e41fdd751461042d578063e985e9c51461044d578063f2fde38b1461049657600080fd5b8063a0712d68146103ba578063a22cb465146103cd578063b88d4fde146103ed57600080fd5b80635f281bfb1461031c5780636352211e1461033257806370a0823114610352578063715018a6146103725780638da5cb5b1461038757806395d89b41146103a557600080fd5b806323b872dd1161012357806323b872dd146102665780632f745c591461028657806333d2a93b146102a657806340d097c3146102bc57806342842e0e146102dc5780634f6ccce7146102fc57600080fd5b806301ffc9a71461017657806306fdde03146101ab578063081812fc146101cd578063095ea7b31461020557806318160ddd146102275780631a026c961461024657600080fd5b3661017157005b600080fd5b34801561018257600080fd5b50610196610191366004611820565b6104b6565b60405190151581526020015b60405180910390f35b3480156101b757600080fd5b506101c06104e1565b6040516101a2919061188d565b3480156101d957600080fd5b506101ed6101e83660046118a0565b610573565b6040516001600160a01b0390911681526020016101a2565b34801561021157600080fd5b506102256102203660046118d5565b61059a565b005b34801561023357600080fd5b506008545b6040519081526020016101a2565b34801561025257600080fd5b50600d546101ed906001600160a01b031681565b34801561027257600080fd5b506102256102813660046118ff565b6106b4565b34801561029257600080fd5b506102386102a13660046118d5565b6106e5565b3480156102b257600080fd5b50610238600e5481565b3480156102c857600080fd5b506102256102d736600461193b565b61077b565b3480156102e857600080fd5b506102256102f73660046118ff565b6107ac565b34801561030857600080fd5b506102386103173660046118a0565b6107c7565b34801561032857600080fd5b50610238600c5481565b34801561033e57600080fd5b506101ed61034d3660046118a0565b61085a565b34801561035e57600080fd5b5061023861036d36600461193b565b6108ba565b34801561037e57600080fd5b50610225610940565b34801561039357600080fd5b50600a546001600160a01b03166101ed565b3480156103b157600080fd5b506101c0610954565b6102256103c83660046118a0565b610963565b3480156103d957600080fd5b506102256103e8366004611956565b610a0f565b3480156103f957600080fd5b506102256104083660046119a8565b610a1a565b34801561041957600080fd5b506101c06104283660046118a0565b610a52565b34801561043957600080fd5b506102256104483660046118a0565b610ab9565b34801561045957600080fd5b50610196610468366004611a84565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156104a257600080fd5b506102256104b136600461193b565b610ac6565b60006001600160e01b0319821663780e9d6360e01b14806104db57506104db82610b3f565b92915050565b6060600080546104f090611ab7565b80601f016020809104026020016040519081016040528092919081815260200182805461051c90611ab7565b80156105695780601f1061053e57610100808354040283529160200191610569565b820191906000526020600020905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b600061057e82610b8f565b506000908152600460205260409020546001600160a01b031690565b60006105a58261085a565b9050806001600160a01b0316836001600160a01b0316036106175760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061063357506106338133610468565b6106a55760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161060e565b6106af8383610bee565b505050565b6106be3382610c5c565b6106da5760405162461bcd60e51b815260040161060e90611af1565b6106af838383610cdb565b60006106f0836108ba565b82106107525760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161060e565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610783610e4c565b600061078e600b5490565b905061079e600b80546001019055565b6107a88282610ea6565b5050565b6106af83838360405180602001604052806000815250610a1a565b60006107d260085490565b82106108355760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161060e565b6008828154811061084857610848611b3e565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806104db5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161060e565b60006001600160a01b0382166109245760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161060e565b506001600160a01b031660009081526003602052604090205490565b610948610e4c565b6109526000610ec0565b565b6060600180546104f090611ab7565b6000600c54826109739190611b6a565b9050348111156109b55760405162461bcd60e51b815260206004820152600d60248201526c4572726f722042616c616e636560981b604482015260640161060e565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156109ef573d6000803e3d6000fd5b506109fa3383610f12565b81600e54610a089190611b81565b600e555050565b6107a8338383610f59565b610a243383610c5c565b610a405760405162461bcd60e51b815260040161060e90611af1565b610a4c84848484611027565b50505050565b6060610a5d82610b8f565b6000610a6761105a565b90506000815111610a875760405180602001604052806000815250610ab2565b80610a918461107a565b604051602001610aa2929190611b94565b6040516020818303038152906040525b9392505050565b610ac1610e4c565b600c55565b610ace610e4c565b6001600160a01b038116610b335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161060e565b610b3c81610ec0565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b7057506001600160e01b03198216635b5e139f60e01b145b806104db57506301ffc9a760e01b6001600160e01b03198316146104db565b6000818152600260205260409020546001600160a01b0316610b3c5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161060e565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610c238261085a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610c688361085a565b9050806001600160a01b0316846001600160a01b03161480610caf57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610cd35750836001600160a01b0316610cc884610573565b6001600160a01b0316145b949350505050565b826001600160a01b0316610cee8261085a565b6001600160a01b031614610d145760405162461bcd60e51b815260040161060e90611bc3565b6001600160a01b038216610d765760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161060e565b610d83838383600161110d565b826001600160a01b0316610d968261085a565b6001600160a01b031614610dbc5760405162461bcd60e51b815260040161060e90611bc3565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a546001600160a01b031633146109525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060e565b6107a882826040518060200160405280600081525061124d565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610f1d600b5490565b905060005b82811015610a4c57610f38600b80546001019055565b600b549150610f478483610ea6565b80610f5181611c08565b915050610f22565b816001600160a01b0316836001600160a01b031603610fba5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161060e565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611032848484610cdb565b61103e84848484611280565b610a4c5760405162461bcd60e51b815260040161060e90611c21565b6060604051806060016040528060298152602001611cf760299139905090565b6060600061108783611381565b600101905060008167ffffffffffffffff8111156110a7576110a7611992565b6040519080825280601f01601f1916602001820160405280156110d1576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846110db57509392505050565b61111984848484611459565b60018111156111885760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b606482015260840161060e565b816001600160a01b0385166111e4576111df81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611207565b836001600160a01b0316856001600160a01b0316146112075761120785826114e1565b6001600160a01b0384166112235761121e8161157e565b611246565b846001600160a01b0316846001600160a01b03161461124657611246848261162d565b5050505050565b6112578383611671565b6112646000848484611280565b6106af5760405162461bcd60e51b815260040161060e90611c21565b60006001600160a01b0384163b1561137657604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906112c4903390899088908890600401611c73565b6020604051808303816000875af19250505080156112ff575060408051601f3d908101601f191682019092526112fc91810190611cb0565b60015b61135c573d80801561132d576040519150601f19603f3d011682016040523d82523d6000602084013e611332565b606091505b5080516000036113545760405162461bcd60e51b815260040161060e90611c21565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610cd3565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106113c05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106113ec576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061140a57662386f26fc10000830492506010015b6305f5e1008310611422576305f5e100830492506008015b612710831061143657612710830492506004015b60648310611448576064830492506002015b600a83106104db5760010192915050565b6001811115610a4c576001600160a01b0384161561149f576001600160a01b03841660009081526003602052604081208054839290611499908490611ccd565b90915550505b6001600160a01b03831615610a4c576001600160a01b038316600090815260036020526040812080548392906114d6908490611b81565b909155505050505050565b600060016114ee846108ba565b6114f89190611ccd565b60008381526007602052604090205490915080821461154b576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061159090600190611ccd565b600083815260096020526040812054600880549394509092849081106115b8576115b8611b3e565b9060005260206000200154905080600883815481106115d9576115d9611b3e565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061161157611611611ce0565b6001900381819060005260206000200160009055905550505050565b6000611638836108ba565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166116c75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161060e565b6000818152600260205260409020546001600160a01b03161561172c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161060e565b61173a60008383600161110d565b6000818152600260205260409020546001600160a01b03161561179f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161060e565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b031981168114610b3c57600080fd5b60006020828403121561183257600080fd5b8135610ab28161180a565b60005b83811015611858578181015183820152602001611840565b50506000910152565b6000815180845261187981602086016020860161183d565b601f01601f19169290920160200192915050565b602081526000610ab26020830184611861565b6000602082840312156118b257600080fd5b5035919050565b80356001600160a01b03811681146118d057600080fd5b919050565b600080604083850312156118e857600080fd5b6118f1836118b9565b946020939093013593505050565b60008060006060848603121561191457600080fd5b61191d846118b9565b925061192b602085016118b9565b9150604084013590509250925092565b60006020828403121561194d57600080fd5b610ab2826118b9565b6000806040838503121561196957600080fd5b611972836118b9565b91506020830135801515811461198757600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156119be57600080fd5b6119c7856118b9565b93506119d5602086016118b9565b925060408501359150606085013567ffffffffffffffff808211156119f957600080fd5b818701915087601f830112611a0d57600080fd5b813581811115611a1f57611a1f611992565b604051601f8201601f19908116603f01168101908382118183101715611a4757611a47611992565b816040528281528a6020848701011115611a6057600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611a9757600080fd5b611aa0836118b9565b9150611aae602084016118b9565b90509250929050565b600181811c90821680611acb57607f821691505b602082108103611aeb57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176104db576104db611b54565b808201808211156104db576104db611b54565b60008351611ba681846020880161183d565b835190830190611bba81836020880161183d565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b600060018201611c1a57611c1a611b54565b5060010190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611ca690830184611861565b9695505050505050565b600060208284031215611cc257600080fd5b8151610ab28161180a565b818103818111156104db576104db611b54565b634e487b7160e01b600052603160045260246000fdfe68747470733a2f2f67616d652e737061636566616c636f6e2e636f6d2f76312f6e66742f6d6574612fa2646970667358221220b1e3cabee149b3bc4a5243afbe4cf1d7ea50ca56ffc1eecae71820b5e7d87d5c64736f6c63430008120033" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100995760003560e01c806314c540791461009e5780631c7004cb146100ca5780631dd486f2146100df5780631e5eb1d0146100ff57806336e52fee1461011c578063461645bf1461013c578063475fb80c1461015157806374eceae614610164578063bc2e01811461018a578063c53a182f146101ab578063fd31e988146101be575b600080fd5b6100b16100ac366004611fc8565b6101e1565b6040516100c19493929190612198565b60405180910390f35b6100dd6100d8366004611d76565b6102af565b005b6100f26100ed366004611ddc565b6104a9565b6040516100c1919061236c565b61010761050c565b6040516100c19998979695949392919061237b565b61012f61012a366004611d8e565b61056e565b6040516100c19190612358565b610144610626565b6040516100c191906123d0565b6100dd61015f366004611f3d565b61062d565b610177610172366004611e44565b610685565b6040516100c1979695949392919061213f565b61019d610198366004611f71565b6106fe565b6040516100c192919061233f565b6100f26101b9366004611f71565b61076f565b6101d16101cc366004611e5c565b61088c565b6040516100c1949392919061209c565b6000808080336001600160a01b037f000000000000000000000000704c442bfef3b6b31559085fc67083ca64e30b5c16146102375760405162461bcd60e51b815260040161022e906121f6565b60405180910390fd5b6000600187018161ffff821662010000811061024f57fe5b600202015460ff1615610260578091505b6000610271818d8d8d8d888e6108fb565b60408101516060820151608083015160c090930151919f909e506001600160581b039092169c506001600160901b03169a5098505050505050505050565b336001600160a01b037f000000000000000000000000622b2c98123d303ae067db4925cd6282b3a08d0f16148061038757507f000000000000000000000000622b2c98123d303ae067db4925cd6282b3a08d0f6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561033a57600080fd5b505afa15801561034e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103729190611d4f565b6001600160a01b0316336001600160a01b0316145b61039057600080fd5b61ffff6103a561012083016101008401611dc0565b61ffff166103b96040840160208501611dc0565b61ffff166103ca6020850185611dc0565b61ffff16010111156103ee5760405162461bcd60e51b815260040161022e90612227565b6103fe60a0820160808301611dc0565b61ffff1615801590610422575061041b60c0820160a08301611dc0565b61ffff1615155b8015610441575061043a610100820160e08301611dc0565b61ffff1615155b61045d5760405162461bcd60e51b815260040161022e906121ca565b806202000061046c8282612401565b9050507f86821edb04a8df5bac675c23c1eb986257da59363579c86d977a66fa59896b9d8160405161049e9190612251565b60405180910390a150565b6000336001600160a01b037f000000000000000000000000704c442bfef3b6b31559085fc67083ca64e30b5c16146104f35760405162461bcd60e51b815260040161022e906121f6565b61050260008787878787610eca565b9695505050505050565b620200005461ffff8082169162010000810482169163ffffffff600160201b8304811692600160401b8104821692600160601b8204811692600160701b8304821692600160801b810490911691600160a01b8204811691600160b01b90041689565b60008061057a83611178565b61058385611178565b0290506000600160c01b82106105c8576000866001600160801b0316116105ab5760016105ad565b855b6001600160801b0316600019816105c057fe5b0490506105fb565b6000866001600160801b0316116105e05760016105e2565b855b6001600160801b0316604083901b816105f757fe5b0490505b610c3560451b811061061657610c3560451b9250505061061f565b915061061f9050565b9392505050565b6201518090565b336001600160a01b037f000000000000000000000000704c442bfef3b6b31559085fc67083ca64e30b5c16146106755760405162461bcd60e51b815260040161022e906121f6565b610681600083836112c8565b5050565b60008162010000811061069757600080fd5b600290810291909101805460019091015460ff82169350610100820463ffffffff1692600160281b830460060b92600160601b90046001600160a01b0316916001600160581b03811691600160581b8204900b90600160701b90046001600160901b031687565b600080336001600160a01b037f000000000000000000000000704c442bfef3b6b31559085fc67083ca64e30b5c16146107495760405162461bcd60e51b815260040161022e906121f6565b610757600087878787611327565b6001600160581b039091169250905094509492505050565b6000336001600160a01b037f000000000000000000000000704c442bfef3b6b31559085fc67083ca64e30b5c16146107b95760405162461bcd60e51b815260040161022e906121f6565b6000806107c98188888888611327565b9150915061087f600f836001600160581b0316816107e357fe5b6040805161012081018252620200005461ffff80821683526201000082048116602084015263ffffffff600160201b8304811694840194909452600160401b820484166060840152600160601b820481166080840152600160701b8204811660a0840152600160801b820490931660c0830152600160a01b8104831660e0830152600160b01b90049091166101008201529190049083906114a6565b925050505b949350505050565b6060808080336001600160a01b037f000000000000000000000000704c442bfef3b6b31559085fc67083ca64e30b5c16146108d95760405162461bcd60e51b815260040161022e906121f6565b6108e860008a8a8a8a8a611538565b929c919b50995090975095505050505050565b610903611ccf565b85870363ffffffff871615806109405750610940898661ffff1662010000811061092957fe5b6002020154610100900463ffffffff16828a61176c565b15610ac3576000898661ffff1662010000811061095957fe5b6040805160e081018252600292830293909301805460ff811615158552610100810463ffffffff90811660208701819052600160281b8304600690810b810b900b94870194909452600160601b9091046001600160a01b031660608601526001909101546001600160581b0381166080860152600160581b8104840b840b90930b60a0850152600160701b9092046001600160901b031660c084015291925083161415610a09579150610ebf9050565b6000610a228b8b8a8a8a87602001518860400151611795565b90508761ffff88811690881614610aa857610a3b611ccf565b60008d60018b0361ffff16620100008110610a5257fe5b60020201805463ffffffff610100820481166020808701829052600160281b909304600690810b810b810b6040808901829052948b0151948b0151959650919093039091169203900b81610aa257fe5b05925050505b610ab883858b848a8760006118ff565b945050505050610ebf565b610ad8898561ffff1662010000811061092957fe5b610b0f576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b600080610b1f8b8b858a8a611a03565b6040518060e00160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a900460060b60060b60060b815260200160008201600c9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160581b03166001600160581b03166001600160581b0316815260200160018201600b9054906101000a900460020b60020b60020b815260200160018201600e9054906101000a90046001600160901b03166001600160901b03166001600160901b03168152505091506040518060e00160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a900460060b60060b60060b815260200160008201600c9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160581b03166001600160581b03166001600160581b0316815260200160018201600b9054906101000a900460020b60020b60020b815260200160018201600e9054906101000a90046001600160901b03166001600160901b03166001600160901b0316815250509150806020015163ffffffff168363ffffffff161415610d6b579250610ebf915050565b816020015163ffffffff168363ffffffff1614610eba5760008260200151826020015103905060008360200151850390508063ffffffff168263ffffffff16856040015185604001510360060b81610dbf57fe5b0502846040018181510191509060060b908160060b815250508163ffffffff168163ffffffff1685606001518560600151036001600160a01b03160281610e0257fe5b0484606001818151019150906001600160a01b031690816001600160a01b0316815250508063ffffffff168263ffffffff1685608001518560800151036001600160581b031681610e4f57fe5b040284608001818151019150906001600160581b031690816001600160581b0316815250508063ffffffff168263ffffffff168560c001518560c00151036001600160901b031681610e9d57fe5b60c0870180516001600160901b0393909204939093020116905250505b509150505b979650505050505050565b600080878761ffff16620100008110610edf57fe5b60020201805490915063ffffffff878116610100909204161415610f065786915050610502565b6040805160e081018252825460ff811615158252610100810463ffffffff166020830152600160281b8104600690810b810b900b92820192909252600160601b9091046001600160a01b031660608201526001808301546001600160581b0381166080840152600160581b8104600290810b810b900b60a0840152600160701b90046001600160901b031660c08301528801925060008961ffff8516620100008110610fae57fe5b600202015460ff1615610fbe5750825b6000610fd78b8a8a8d8688602001518960400151611795565b90508761ffff8b8116908416146110485760008c60018d0361ffff16620100008110610fff57fe5b6002020180546020870151604088015192935063ffffffff6101008304811693600160281b909304600690810b939285900390911691839003900b8161104157fe5b0593505050505b611057848b8b848c878d6118ff565b8c8761ffff1662010000811061106957fe5b825160029182029290920180546020850151604086015160608701516001600160a01b0316600160601b026001600160601b0360069290920b66ffffffffffffff16600160281b02600160281b600160601b031963ffffffff9094166101000264ffffffff001998151560ff1990961695909517979097169390931791909116949094179390931692909217825560808301516001909201805460a085015160c0909501516001600160901b0316600160701b026001600160701b039590930b62ffffff16600160581b0262ffffff60581b196001600160581b039095166001600160581b03199092169190911793909316929092179290921691909117905550505050509695505050505050565b600060ff82901d8083188190038061119357600092506112c1565b806001600160801b82106111ac5760809190911c9060401b5b600160401b82106111c25760409190911c9060201b5b600160201b82106111d85760209190911c9060101b5b6201000082106111ed5760109190911c9060081b5b61010082106112015760089190911c9060041b5b601082106112145760049190911c9060021b5b600882106112205760011b5b600181848161122b57fe5b048201901c9050600181848161123d57fe5b048201901c9050600181848161124f57fe5b048201901c9050600181848161126157fe5b048201901c9050600181848161127357fe5b048201901c9050600181848161128557fe5b048201901c9050600181848161129757fe5b048201901c905060008184816112a957fe5b0490508082106112b957806112bb565b815b95505050505b5050919050565b825460ff16156112d757600080fd5b825463ffffffff9290921661010002600160ff19909316831764ffffffff0019161783559101805462ffffff60581b1916600160581b62ffffff60029490940b9390931692909202919091179055565b6000808087600186018161ffff821662010000811061134257fe5b600202015460ff161561136b57898161ffff1662010000811061136157fe5b6002020191508092505b600061137d8b8b60008c8c898d6108fb565b8354909150610100900463ffffffff1661139e816201517f198d018d61176c565b156114065760006113b78d8d620151808e8e8b8f6108fb565b90506201518063ffffffff1681608001518460800151036001600160581b0316816113de57fe5b0460398260c001518560c00151036001600160901b0316901c9750975050505050505061149c565b8063ffffffff168b63ffffffff16146114965760008460010160009054906101000a90046001600160581b03169050600085600101600e9054906101000a90046001600160901b03169050828d0363ffffffff16828560800151036001600160581b03168161147157fe5b046039828660c00151036001600160901b0316901c985098505050505050505061149c565b50505050505b9550959350505050565b6000806114d0856001600160581b03168460a001518560200151866060015163ffffffff16611b0a565b6114f7866001600160581b031685608001518660000151876040015163ffffffff16611b0a565b01905061ffff811115611509575061ffff5b611523848460e00151838660c0015163ffffffff16611b0a565b83610100015161ffff16019150509392505050565b60608060608087516001600160401b038111801561155557600080fd5b5060405190808252806020026020018201604052801561157f578160200160208202803683370190505b50935087516001600160401b038111801561159957600080fd5b506040519080825280602002602001820160405280156115c3578160200160208202803683370190505b50925087516001600160401b03811180156115dd57600080fd5b50604051908082528060200260200182016040528015611607578160200160208202803683370190505b50915087516001600160401b038111801561162157600080fd5b5060405190808252806020026020018201604052801561164b578160200160208202803683370190505b5090506000600187018b61ffff821662010000811061166657fe5b600202015460ff1615611677578091505b61167f611ccf565b60005b8b5181101561175b576116ad8e8e8e848151811061169c57fe5b60200260200101518e8e898f6108fb565b91508160400151826060015183608001518460c00151816001600160581b03169150806001600160901b031690508b85815181106116e757fe5b602002602001018b86815181106116fa57fe5b602002602001018b878151811061170d57fe5b602002602001018b888151811061172057fe5b60209081029190910101939093526001600160701b039093169091526001600160a01b039092169052600691820b90910b9052600101611682565b505050509650965096509692505050565b63ffffffff80821684821681109184161181141561061f57505063ffffffff9081169116111590565b600080888561ffff166201000081106117aa57fe5b6002020154610100900463ffffffff16905060008961ffff87166201000081106117d057fe5b6002020154600160281b900460060b90506117f2826201517f198b018b61176c565b156118b85761180785620151808b038b61176c565b156118755760018703965060008a8861ffff1662010000811061182657fe5b60020201805490915060ff1661183f578860020b61186a565b805463ffffffff6101008204811688031690600160281b9004600690810b8703900b8161186857fe5b055b60060b9350506118b3565b600061188a8b8b620151808c8c8c60006108fb565b9050620151808a87030163ffffffff168160400151860360060b816118ab57fe5b0560060b9350505b6118f2565b8163ffffffff168563ffffffff16146118e75781850363ffffffff1681850360060b816118e157fe5b056118ec565b8760020b5b60060b92505b5050979650505050505050565b611907611ccf565b60208801805160018a5263ffffffff89811690925260408a018051918a0392831660028a900b02909101600690810b900b90526001600160801b03851661194f576001611951565b845b6001600160801b031663ffffffff60801b608083901b168161196f57fe5b0489606001818151019150906001600160a01b031690816001600160a01b0316815250506119b68163ffffffff168760020b8960020b8c60a0015160020b8860020b611bb2565b60808a018051919091016001600160581b031690525050600291820b90910b60a087015260c0860180516001600160801b03929092169091016001600160901b0316905250929392505050565b60008061ffff8084169082908616821115611a2757620100008661ffff1601611a2d565b8561ffff165b905081810160011c5b898161ffff16620100008110611a4857fe5b60020201805490955060ff811690610100900463ffffffff168115611af557611a72818b8d61176c565b15611ae9578b8360010161ffff16620100008110611a8c57fe5b60020201805490965060ff811690610100900463ffffffff168115611ad257611ab68c828f61176c565b15611ac7575050505050505061149c565b846001019650611ae2565b5087965061149c95505050505050565b5050611af0565b6001830393505b611afc565b8260010194505b50505081810160011c611a36565b600081851115611b645781850394508361ffff166006028510611b32575061ffff8216610884565b600861ffff85160a6000611b47878784611c07565b9050808201818661ffff160281611b5a57fe5b0492505050610884565b93810393600661ffff8516028510611b7e57506000610884565b600861ffff85160a6000611b93878784611c07565b8201905080828661ffff160281611ba657fe5b04979650505050505050565b6000828203858503038386038702600180890189026002808b02929092018102916006818c0a81029180870a8502868802850283020190860a8d029091020181611bf857fe5b059a9950505050505050505050565b808361ffff84168281611c1657fe5b049250828102820191508361ffff168381611c2d57fe5b0492508402600281840204820191508361ffff168381611c4957fe5b0492508402600681840204820191508361ffff168381611c6557fe5b0492508402601881840204820191508361ffff168381611c8157fe5b0492508402607881840204820191508361ffff168381611c9d57fe5b04925084026102d08184020491909101908402619d80818602046113b061ffff86168302040182019150509392505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b8035600281900b8114611d1d57600080fd5b919050565b80356001600160801b0381168114611d1d57600080fd5b8035611d1d816125bc565b8035611d1d816125cf565b600060208284031215611d60578081fd5b81516001600160a01b038116811461061f578182fd5b60006101208284031215611d88578081fd5b50919050565b600080600060608486031215611da2578182fd5b611dab84611d22565b95602085013595506040909401359392505050565b600060208284031215611dd1578081fd5b813561061f816125bc565b600080600080600060a08688031215611df3578081fd5b8535611dfe816125bc565b94506020860135611e0e816125cf565b9350611e1c60408701611d0b565b9250611e2a60608701611d22565b9150611e3860808701611d22565b90509295509295909350565b600060208284031215611e55578081fd5b5035919050565b600080600080600060a08688031215611e73578081fd5b8535611e7e816125cf565b94506020868101356001600160401b0380821115611e9a578384fd5b818901915089601f830112611ead578384fd5b813581811115611eb957fe5b83810260405185828201018181108582111715611ed257fe5b604052828152858101935084860182860187018e1015611ef0578788fd5b8795505b83861015611f1957611f0581611d44565b855260019590950194938601938601611ef4565b50809950505050505050611f2f60408701611d0b565b9250611e2a60608701611d39565b60008060408385031215611f4f578182fd5b8235611f5a816125cf565b9150611f6860208401611d0b565b90509250929050565b60008060008060808587031215611f86578384fd5b8435611f91816125cf565b9350611f9f60208601611d0b565b92506040850135611faf816125bc565b9150611fbd60608601611d22565b905092959194509250565b600080600080600060a08688031215611fdf578081fd5b8535611fea816125cf565b94506020860135611ffa816125cf565b935061200860408701611d0b565b92506060860135611e2a816125bc565b6000815180845260208085019450808401835b838110156120505781516001600160701b03168752958201959082019060010161202b565b509495945050505050565b6000815180845260208085019450808401835b838110156120505781518752958201959082019060010161206e565b61ffff169052565b63ffffffff169052565b6080808252855190820181905260009060209060a0840190828901845b828110156120d857815160060b845292840192908401906001016120b9565b50505083810382850152865180825287830191830190845b818110156121155783516001600160a01b0316835292840192918401916001016120f0565b505084810360408601526121298188612018565b925050508281036060840152610ebf818561205b565b961515875263ffffffff95909516602087015260069390930b60408601526001600160a01b039190911660608501526001600160581b0316608084015260020b60a08301526001600160901b031660c082015260e00190565b60069490940b84526001600160a01b039290921660208401526001600160701b03166040830152606082015260800190565b602080825260129082015271047616d6d6173206d757374206265203e20360741b604082015260600190565b6020808252601790820152766f6e6c7920706f6f6c2063616e2063616c6c207468697360481b604082015260600190565b60208082526010908201526f13585e0819995948195e18d95959195960821b604082015260600190565b61012081018235612261816125bc565b61ffff16825261227360208401611d39565b612280602084018261208a565b5061228d60408401611d44565b61229a6040840182612092565b506122a760608401611d44565b6122b46060840182612092565b506122c160808401611d39565b6122ce608084018261208a565b506122db60a08401611d39565b6122e860a084018261208a565b506122f560c08401611d44565b61230260c0840182612092565b5061230f60e08401611d39565b61231c60e084018261208a565b5061010061232b818501611d39565b6123378285018261208a565b505092915050565b6001600160701b03929092168252602082015260400190565b6001600160801b0391909116815260200190565b61ffff91909116815260200190565b61ffff998a168152978916602089015263ffffffff96871660408901529486166060880152928716608087015290861660a086015290921660c084015290831660e08301529091166101008201526101200190565b63ffffffff91909116815260200190565b600081356123ee816125bc565b92915050565b600081356123ee816125cf565b813561240c816125bc565b815461ffff191661ffff9190911617808255602083013561242c816125bc565b63ffff00008160101b1663ffff00001983161783555050612458612452604084016123f4565b82612576565b61246d612467606084016123f4565b82612599565b61248261247c608084016123e1565b826124d7565b61249761249160a084016123e1565b826124f6565b6124ac6124a660c084016123f4565b82612515565b6124c16124bb60e084016123e1565b82612538565b6106816124d161010084016123e1565b82612557565b805461ffff60601b191660609290921b61ffff60601b16919091179055565b805461ffff60701b191660709290921b61ffff60701b16919091179055565b805463ffffffff60801b191660809290921b63ffffffff60801b16919091179055565b805461ffff60a01b191660a09290921b61ffff60a01b16919091179055565b805461ffff60b01b191660b09290921b61ffff60b01b16919091179055565b805463ffffffff60201b191660209290921b63ffffffff60201b16919091179055565b805463ffffffff60401b191660409290921b63ffffffff60401b16919091179055565b61ffff811681146125cc57600080fd5b50565b63ffffffff811681146125cc57600080fdfea164736f6c6343000706000a" + }, + { + "address": "0x8cc5bdee02ba1a95da7a634ab5c552b00c6a2abf", + "nonce": 72, + "balance": "0x00000000000000000000000000000000000000000000000000062a2340544c59", + "code": "0x" + }, + { + "address": "0x22e2f236065b780fa33ec8c4e58b99ebc8b55c57", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106103635760003560e01c8063715018a6116101c6578063c4f6a8ce116100f7578063cfb8ccfb11610095578063f7260d3e1161006f578063f7260d3e14610be0578063fbc911d014610c00578063fc6f786514610c20578063fcf0b9d814610c4057600080fd5b8063cfb8ccfb14610b80578063df2ab5bb14610ba0578063f2fde38b14610bc057600080fd5b8063cc6db2da116100d1578063cc6db2da146109b4578063ce5f39c614610b20578063ced0911214610b40578063cf24284914610b6057600080fd5b8063c4f6a8ce14610ac3578063c97cef1e14610ad9578063caa6fea414610aef57600080fd5b8063ac9650d811610164578063b3ab15fb1161013e578063b3ab15fb14610a38578063b44a272214610a58578063b4ce128014610a8c578063b6a6d17714610aac57600080fd5b8063ac9650d8146109cd578063ad5c4648146109ed578063b1724b4614610a2157600080fd5b80638da5cb5b116101a05780638da5cb5b14610956578063a15ea89f14610974578063a80a71bd14610994578063aaf5eb68146109b457600080fd5b8063715018a614610901578063718da7ee146109165780637c2d6e011461093657600080fd5b8063219f5d17116102a05780634ca6ef281161023e57806369746a1d1161021857806369746a1d1461089157806369b02128146108b15780636d4cec78146108cb57806370a08231146108e157600080fd5b80634ca6ef281461082757806364482f791461085b5780636558954f1461087b57600080fd5b80633b1acf741161027a5780633b1acf74146106e757806342966c68146107c757806344780994146107e757806349404b7c1461080757600080fd5b8063219f5d17146106795780632f745c59146106b157806330ec24cc146106d157600080fd5b80630d55f9131161030d5780631526fe27116102e75780631526fe271461056f57806317caf6f11461062357806318fccc76146106395780631eaaa0451461065957600080fd5b80630d55f913146104c6578063127effb2146104e6578063150b7a021461051e57600080fd5b8063081e3eda1161033e578063081e3eda1461045b5780630c49ccbe146104715780630ce5d4cc146104a657600080fd5b8062f714ce146103db5780630501d5561461040e5780630743384d1461042e57600080fd5b366103d657336001600160a01b037f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f436416148015906103ca5750336001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f1614155b156103d457600080fd5b005b600080fd5b3480156103e757600080fd5b506103fb6103f6366004614ecb565b610c56565b6040519081526020015b60405180910390f35b34801561041a57600080fd5b506103d4610429366004614f09565b6110c1565b34801561043a57600080fd5b506103fb610449366004614f2d565b60096020526000908152604090205481565b34801561046757600080fd5b506103fb60055481565b34801561047d57600080fd5b5061049161048c366004614f75565b611140565b60408051928352602083019190915201610405565b3480156104b257600080fd5b506103d46104c1366004614fee565b611290565b3480156104d257600080fd5b506104916104e13660046150a7565b61149c565b3480156104f257600080fd5b50601254610506906001600160a01b031681565b6040516001600160a01b039091168152602001610405565b34801561052a57600080fd5b5061053e6105393660046150d4565b611700565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610405565b34801561057b57600080fd5b506105da61058a366004615173565b60066020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b039384169492841693821692600160a01b90920462ffffff169187565b604080519788526001600160a01b0396871660208901529486169487019490945293909116606085015262ffffff16608084015260a083019190915260c082015260e001610405565b34801561062f57600080fd5b506103fb600d5481565b34801561064557600080fd5b506103fb610654366004614ecb565b611c4f565b34801561066557600080fd5b506103d461067436600461518c565b611ce3565b61068c6106873660046151c3565b61233f565b604080516001600160801b039094168452602084019290925290820152606001610405565b3480156106bd57600080fd5b506103fb6106cc36600461523d565b61260a565b3480156106dd57600080fd5b506103fb600e5481565b3480156106f357600080fd5b50610767610702366004615173565b6007602052600090815260409020805460018201546002808401546003850154600486015460058701546006909701546001600160801b0380881698600160801b909804169686860b966301000000900490950b946001600160a01b03909216919089565b604080516001600160801b039a8b1681529990981660208a0152600296870b978901979097529390940b6060870152608086019190915260a08501526001600160a01b0390911660c084015260e083015261010082015261012001610405565b3480156107d357600080fd5b506103d46107e2366004615173565b6126c0565b3480156107f357600080fd5b506103d46108023660046152ae565b612989565b34801561081357600080fd5b506103d4610822366004614ecb565b612b84565b34801561083357600080fd5b506105067f0000000000000000000000000d1e753a25ebda689453309112904807625befbe81565b34801561086757600080fd5b506103d4610876366004614fee565b612cd2565b34801561088757600080fd5b506103fb60135481565b34801561089d57600080fd5b506103d46108ac3660046152f0565b612e7d565b3480156108bd57600080fd5b506103fb6501d1a94a200081565b3480156108d757600080fd5b506103fb60105481565b3480156108ed57600080fd5b506103fb6108fc366004614f2d565b612f24565b34801561090d57600080fd5b506103d4612fbe565b34801561092257600080fd5b506103d4610931366004614f2d565b612fd2565b34801561094257600080fd5b506103d4610951366004615173565b6130ef565b34801561096257600080fd5b506000546001600160a01b0316610506565b34801561098057600080fd5b5061049161098f366004614f2d565b613176565b3480156109a057600080fd5b506104916109af366004615173565b6131d1565b3480156109c057600080fd5b506103fb64e8d4a5100081565b6109e06109db3660046152ae565b6131fe565b604051610405919061536a565b3480156109f957600080fd5b506105067f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b348015610a2d57600080fd5b506103fb62278d0081565b348015610a4457600080fd5b506103d4610a53366004614f2d565b613356565b348015610a6457600080fd5b506105067f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f436481565b348015610a9857600080fd5b50600b54610506906001600160a01b031681565b348015610ab857600080fd5b506103fb6201518081565b348015610acf57600080fd5b506103fb60115481565b348015610ae557600080fd5b506103fb60145481565b348015610afb57600080fd5b50600c54610b1090600160a01b900460ff1681565b6040519015158152602001610405565b348015610b2c57600080fd5b506103fb610b3b366004615173565b6133d3565b348015610b4c57600080fd5b506103d4610b5b366004615173565b613625565b348015610b6c57600080fd5b506103d4610b7b366004614f2d565b613680565b348015610b8c57600080fd5b506103d4610b9b366004614f2d565b6136fd565b348015610bac57600080fd5b506103d4610bbb3660046153cc565b61374f565b348015610bcc57600080fd5b506103d4610bdb366004614f2d565b61385c565b348015610bec57600080fd5b50600a54610506906001600160a01b031681565b348015610c0c57600080fd5b50600c54610506906001600160a01b031681565b348015610c2c57600080fd5b50610491610c3b366004615403565b6138e9565b348015610c4c57600080fd5b506103fb600f5481565b6000610c60613a8f565b6001600160a01b038216301480610c7e57506001600160a01b038216155b15610cb5576040517f32c98ae600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083815260076020526040902060048101546001600160a01b03163314610cf0576040516330cd747160e01b815260040160405180910390fd5b610cfb818585613ae9565b6005820154600081815260066020908152604080832060018101548251630a81a92360e31b81529251969850949590946001600160a01b03169263540d491892600480820193918290030181865afa158015610d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7f919061542f565b90506001600160a01b03811615801590610da35750600c54600160a01b900460ff16155b15610ea3578354600090610dc690600160801b90046001600160801b0316615462565b6001860154604051638910faf160e01b8152600282810b6004830152630100000090920490910b6024820152600f82900b60448201529091506001600160a01b03831690638910faf190606401600060405180830381600087803b158015610e2d57600080fd5b505af1158015610e41573d6000803e3d6000fd5b50505050600185015460408051600f84900b8152600283810b6020830152630100000090930490920b908201528890859033907fee8f6362d59839b4b3c990d7e085a63a0fe2c58f4eff4a9a2b6de93a4c645ae39060600160405180910390a4505b83546004830180546001600160801b0390921691600090610ec5908490615492565b90915550508354600583018054600160801b9092046001600160801b031691600090610ef2908490615492565b9091555050600087815260076020526040812081815560018101805465ffffffffffff1916905560028101829055600381018290556004810180546001600160a01b03191690556005810182905560060155610f4e3388613da4565b600c546001600160a01b031615610fcb57600c5460405163622cd4e160e11b815233600482015260248101899052604481018590526001600160a01b039091169063c459a9c290606401600060405180830381600087803b158015610fb257600080fd5b505af1158015610fc6573d6000803e3d6000fd5b505050505b6040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038781166024830152604482018990527f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f436416906342842e0e90606401600060405180830381600087803b15801561105457600080fd5b505af1158015611068573d6000803e3d6000fd5b50506040516001600160a01b038916815289925085915033907ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679060200160405180910390a4505050506110bb60018055565b92915050565b6110c9613dd0565b600c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b8315158102919091179182905560405160ff9190920416151581527fc749456be5379ac4cfc1f856208b32ddcf01b9db3ce6c37784ad91a8390ae9a8906020015b60405180910390a150565b60008061114b613a8f565b8251600090815260076020526040902060048101546001600160a01b03163314611188576040516330cd747160e01b815260040160405180910390fd5b604080517f0c49ccbe0000000000000000000000000000000000000000000000000000000081528551600482015260208601516001600160801b0316602482015290850151604482015260608501516064820152608085015160848201527f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43646001600160a01b031690630c49ccbe9060a40160408051808303816000875af1158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c91906154a9565b855191945092506112709082906000613ae9565b506112818185600001516000613e2a565b5061128b60018055565b915091565b600a546001600160a01b031633146112ef5760405162461bcd60e51b815260206004820152600c60248201527f4e6f74207265636569766572000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600a5461132a906001600160a01b037f0000000000000000000000000d1e753a25ebda689453309112904807625befbe811691163086614251565b6014805484019055801561134057611340614302565b601354620151808310801590611359575062278d008311155b156113615750815b42600061136e83836154cd565b905060008087905083601054111561140557600064e8d4a51000601154866010546113999190615492565b6113a391906154e5565b6113ad9190615504565b600e5460105460408051918252602082018990528101839052919250907f317bea91082b2a8d33761ba0bdd38a785d60acc1b964e3ead01706baaebf548b9060600160405180910390a261140181836154cd565b9150505b8461141564e8d4a51000836154e5565b61141f9190615504565b600e8054600190810191829055868101600f5560108690556011839055919350907f44521c2bbb0ee364592908d6177ce446d5554c5a6c4ebd12adf86912c617a78b9061146d9087906154cd565b604080519182526020820187905281018590526060810184905260800160405180910390a25050505050505050565b6000806114a7613a8f565b835160009081526007602090815260409182902082516101208101845281546001600160801b038082168352600160801b90910416928101929092526001810154600281810b9484019490945263010000009004830b6060830152918201546080820152600382015460a082015260048201546001600160a01b031660c08201819052600583015460e0830152600690920154610100820152903314611560576040516330cd747160e01b815260040160405180910390fd5b60208501516001600160a01b0316611579573060208601525b6040805163fc6f786560e01b81528651600482015260208701516001600160a01b039081166024830152918701516001600160801b03908116604483015260608801511660648201527f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43649091169063fc6f78659060840160408051808303816000875af115801561160e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163291906154a9565b602087015191945092506001600160a01b03163014156116ef5760e081810151600090815260066020908152604091829020825193840183528054845260018101546001600160a01b0390811692850192909252600281015482169284019290925260038201548082166060850152600160a01b900462ffffff166080840152600482015460a084015260059091015460c083015285166116d1573394505b6116df816040015186614472565b6116ed816060015186614472565b505b506116f960018055565b9250929050565b600061170a613a8f565b336001600160a01b037f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f4364161461176c576040517f0bf3405700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c081018252600080825260208201819052818301819052606082018190526080820181905260a082015290517f99fbab88000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b037f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f436416906399fbab889060240161018060405180830381865afa158015611819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183d9190615556565b505050506001600160801b031660a08901819052600291820b60808a015291900b606088015262ffffff9190911660408701526001600160a01b03918216602087015291168452151591506118a7905057604051636180f03f60e11b815260040160405180910390fd5b80516001600160a01b0390811660009081526008602090815260408083208286015190941683529281528282208385015162ffffff16835290522054806119015760405163079f151f60e11b815260040160405180910390fd5b6000818152600660209081526040808320815160e0810183528154815260018201546001600160a01b03908116828601819052600284015482168386015260038401549182166060840152600160a01b90910462ffffff16608083015260048084015460a084015260059093015460c08301528351630a81a92360e31b81529351919594909363540d49189381810193918290030181865afa1580156119ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cf919061542f565b90506001600160a01b0381166119f85760405163ef3d9b2160e01b815260040160405180910390fd5b600088815260076020526040908190206060860151600182018054608089015162ffffff90811663010000000265ffffffffffff19909216931692909217919091179055600480820180546001600160a01b03808f166001600160a01b0319909216919091179091556005830187905592516310a537f160e11b8152919284169163214a6fe291611a979142910163ffffffff91909116815260200190565b600060405180830381600087803b158015611ab157600080fd5b505af1158015611ac5573d6000803e3d6000fd5b50505050611ad5818a6000613e2a565b60608501516080860151604051633816bae960e11b8152600292830b6004820152910b60248201526001600160a01b0383169063702d75d290604401602060405180830381865afa158015611b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b529190615637565b6002820155611baa8a8a6001600160a01b039190911660008181526002602081815260408084208054600384528286208187528452828620889055968552600483529084209590955592909152905280546001019055565b60a08501516060808701516080880151604080516001600160801b039095168552600292830b6020860152910b908301528a9186916001600160a01b038e16917fb19157bff94fdd40c58c7d4a5d52e8eb8c2d570ca17b322b49a2bbbeedc82fbf910160405180910390a4507f150b7a0200000000000000000000000000000000000000000000000000000000945050505050611c4660018055565b95945050505050565b6000611c59613a8f565b600083815260076020526040902060048101546001600160a01b03163314611c94576040516330cd747160e01b815260040160405180910390fd5b80546001600160801b0316158015611cae57506003810154155b15611ccc57604051636180f03f60e11b815260040160405180910390fd5b611cd7818585613ae9565b9150506110bb60018055565b611ceb613dd0565b8015611cf957611cf9614302565b600b546040517f4c96a3890000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526000921690634c96a389906024016020604051808303816000875af1158015611d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d83919061542f565b905083600d6000828254611d9791906154cd565b925050819055506000836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061542f565b90506000846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e68919061542f565b90506000856001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ece9190615650565b6001600160a01b038085166000908152600860209081526040808320938716835292815282822062ffffff851683529052205490915015611f73576001600160a01b038381166000908152600860209081526040808320938616835292815282822062ffffff8516835290528190205490517f7d38f65f00000000000000000000000000000000000000000000000000000000815260048101919091526024016112e6565b604051636eb1769f60e11b81523060048201526001600160a01b037f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43648116602483015284169063dd62ed3e90604401602060405180830381865afa158015611fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120039190615637565b61203d5761203d6001600160a01b0384167f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f436460001961460a565b604051636eb1769f60e11b81523060048201526001600160a01b037f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43648116602483015283169063dd62ed3e90604401602060405180830381865afa1580156120a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cd9190615637565b612107576121076001600160a01b0383167f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f436460001961460a565b6005600081548092919060010191905055506040518060e00160405280888152602001876001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b031681526020018262ffffff1681526020016000815260200160008152506006600060055481526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548162ffffff021916908362ffffff16021790555060a0820151816004015560c0820151816005015590505060055460086000856001600160a01b03166001600160a01b031681526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002060008362ffffff1662ffffff1681526020019081526020016000208190555060055460096000886001600160a01b03166001600160a01b0316815260200190815260200160002081905550836001600160a01b0316866001600160a01b03166005547f0621c8de33a230aec1aee0d4f7b6c81d97bd3ce0a2040ca33fbd668e521ecafe8a60405161232e91815260200190565b60405180910390a450505050505050565b600080600061234c613a8f565b83516000908152600760205260409020600581015461237e5760405163079f151f60e11b815260040160405180910390fd5b600581810154600090815260066020908152604091829020825160e0810184528154815260018201546001600160a01b03908116828501526002830154811694820185905260038301549081166060830152600160a01b900462ffffff166080820152600482015460a082015293015460c0840152870151612400919061473f565b6124128160600151876040015161473f565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031681604001516001600160a01b03161415801561248e57507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031681606001516001600160a01b031614155b801561249a5750600034115b156124a457600080fd5b604080517f219f5d170000000000000000000000000000000000000000000000000000000081528751600482015260208801516024820152908701516044820152606087015160648201526080870151608482015260a087015160a48201527f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43646001600160a01b03169063219f5d1790349060c40160606040518083038185885af1158015612557573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061257c919061566b565b60208901519297509095509350600090612597908690615492565b905060008488604001516125ab9190615492565b905081156125c1576125c18360400151836147d3565b80156125d5576125d58360600151826147d3565b6125e58489600001516000613ae9565b506125f68489600001516000613e2a565b5050505061260360018055565b9193909250565b6001600160a01b03821660009081526002602052604081205482106126975760405162461bcd60e51b815260206004820152602560248201527f456e756d657261626c653a206f776e657220696e646578206f7574206f66206260448201527f6f756e647300000000000000000000000000000000000000000000000000000060648201526084016112e6565b506001600160a01b03919091166000908152600360209081526040808320938352929052205490565b6126c8613a8f565b60008181526007602090815260409182902082516101208101845281546001600160801b038082168352600160801b90910416928101929092526001810154600281810b9484019490945263010000009004830b6060830152918201546080820152600382015460a082015260048201546001600160a01b031660c08201819052600583015460e083015260069092015461010082015290331461277f576040516330cd747160e01b815260040160405180910390fd5b60008160a00151118061279b575080516001600160801b031615155b156127d2576040517f32e7879300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260076020526040812081815560018101805465ffffffffffff1916905560028101829055600381018290556004810180546001600160a01b031916905560058101829055600601556128293383613da4565b600c546001600160a01b0316156128ac57600c5460e082015160405163622cd4e160e11b81523360048201526024810185905260448101919091526001600160a01b039091169063c459a9c290606401600060405180830381600087803b15801561289357600080fd5b505af11580156128a7573d6000803e3d6000fd5b505050505b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43646001600160a01b0316906342966c6890602401600060405180830381600087803b15801561292757600080fd5b505af115801561293b573d6000803e3d6000fd5b50505060e08201516040516000815284925033907ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679060200160405180910390a45061298660018055565b50565b6012546001600160a01b031633148015906129af57506000546001600160a01b03163314155b156129e6576040517f98f76d0e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4260005b82811015612b7e57600060066000868685818110612a0a57612a0a6156a2565b602090810292909201358352508181019290925260409081016000908120825160e0810184528154815260018201546001600160a01b03908116828701819052600284015482168387015260038401549182166060840152600160a01b90910462ffffff16608083015260048084015460a084015260059093015460c08301528451630a81a92360e31b815294519196509294929363540d491893818401939092918290030181865afa158015612ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae9919061542f565b825190915015801590612b0457506001600160a01b03811615155b15612b69576040516310a537f160e11b815263ffffffff851660048201526001600160a01b0382169063214a6fe290602401600060405180830381600087803b158015612b5057600080fd5b505af1158015612b64573d6000803e3d6000fd5b505050505b50508080612b76906156b8565b9150506129ea565b50505050565b612b8c613a8f565b6040516370a0823160e01b81523060048201526000907f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316906370a0823190602401602060405180830381865afa158015612bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c179190615637565b905082811015612c3a57604051632ca2f52b60e11b815260040160405180910390fd5b8015612cc457604051632e1a7d4d60e01b8152600481018290527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015612ca257600080fd5b505af1158015612cb6573d6000803e3d6000fd5b50505050612cc482826148aa565b50612cce60018055565b5050565b612cda613dd0565b82801580612ce9575060055481115b15612d20576040517f87e8068300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260066020908152604080832060018101548251630a81a92360e31b815292514295929492936001600160a01b039092169263540d491892600480820193918290030181865afa158015612d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da0919061542f565b90506001600160a01b03811615612e11576040516310a537f160e11b815263ffffffff841660048201526001600160a01b0382169063214a6fe290602401600060405180830381600087803b158015612df857600080fd5b505af1158015612e0c573d6000803e3d6000fd5b505050505b8415612e1f57612e1f614302565b8154600d548791612e2f91615492565b612e3991906154cd565b600d5585825560405186815287907fc0cfd54d2de2b55f1e6e108d3ec53ff0a1abe6055401d32c61e9433b747ef9f89060200160405180910390a250505050505050565b600c546001600160a01b03163314612ed75760405162461bcd60e51b815260206004820152601760248201527f4e6f74206661726d20626f6f737420636f6e747261637400000000000000000060448201526064016112e6565b60008281526007602052604090206005810154612f075760405163079f151f60e11b815260040160405180910390fd5b612f1381846000613ae9565b50612f1f818484613e2a565b505050565b60006001600160a01b038216612fa25760405162461bcd60e51b815260206004820152602d60248201527f456e756d657261626c653a2061646472657373207a65726f206973206e6f742060448201527f612076616c6964206f776e65720000000000000000000000000000000000000060648201526084016112e6565b506001600160a01b031660009081526002602052604090205490565b612fc6613dd0565b612fd0600061490a565b565b612fda613dd0565b6001600160a01b0381166130015760405163d92e233d60e01b815260040160405180910390fd5b604051636eb1769f60e11b81526001600160a01b038281166004830152306024830152600019917f0000000000000000000000000d1e753a25ebda689453309112904807625befbe9091169063dd62ed3e90604401602060405180830381865afa158015613073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130979190615637565b146130a157600080fd5b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f4a2963bfc20b87a0c055468a66e6638d57725e93fb4d65733fb2f25587ae8c4f90602001611135565b6130f7613dd0565b6201518081108061310a575062278d0081115b15613141576040517f9e11b5e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60138190556040518181527fb5521c8a03b484502769158d9dd83186bd0748f3ece2fbf358233994c2a2097690602001611135565b6000806000600d5411156131c757600d546001600160a01b038416600090815260096020908152604080832054835260069091529020546011546131ba91906154e5565b6131c49190615504565b91505b6010549050915091565b6000806000600d5411156131c757600d546000848152600660205260409020546011546131ba91906154e5565b60608167ffffffffffffffff81111561321957613219614f4a565b60405190808252806020026020018201604052801561324c57816020015b60608152602001906001900390816132375790505b50905060005b8281101561334f5760008030868685818110613270576132706156a2565b905060200281019061328291906156d3565b60405161329092919061571a565b600060405180830381855af49150503d80600081146132cb576040519150601f19603f3d011682016040523d82523d6000602084013e6132d0565b606091505b50915091508161331c576044815110156132e957600080fd5b60048101905080806020019051810190613303919061572a565b60405162461bcd60e51b81526004016112e691906157cc565b8084848151811061332f5761332f6156a2565b602002602001018190525050508080613347906156b8565b915050613252565b5092915050565b61335e613dd0565b6001600160a01b0381166133855760405163d92e233d60e01b815260040160405180910390fd5b601280546001600160a01b0319166001600160a01b0383169081179091556040519081527fc47d127c07bdd56c5ccba00463ce3bd3c1bca71b4670eea6e5d0c02e4aa156e290602001611135565b600081815260076020908152604080832081516101208101835281546001600160801b038082168352600160801b90910416938101939093526001810154600281810b9385019390935263010000009004820b6060840152908101546080830152600381015460a083015260048101546001600160a01b031660c0830152600581015460e083018190526006909101546101008301521561361f5760e0818101516000908152600660209081526040808320815194850182528054855260018101546001600160a01b03908116868501819052600283015482168785015260038301549182166060880152600160a01b90910462ffffff16608087015260048083015460a088015260059092015460c08701528251630a81a92360e31b81529251909363540d49189380840193919291908290030181865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061542f565b90506001600160a01b0381161561360b5760408381015160608501519151633816bae960e11b8152600291820b600482015291900b60248201526000906001600160a01b0383169063702d75d290604401602060405180830381865afa1580156135af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d39190615637565b60808501516020860151919250820390600160801b906135fc906001600160801b0316836154e5565b6136069190615504565b955050505b60a083015161361a90856154cd565b935050505b50919050565b61362d613a8f565b6000818152600760205260409020600581015461365d5760405163079f151f60e11b815260040160405180910390fd5b61366981836000613ae9565b5061367681836000613e2a565b5061298660018055565b613688613dd0565b6001600160a01b0381166136af5760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f29e3e57b4a1e4513d009781598c7e4b8b2a68e4b71fe977e362d1b591016fade90602001611135565b613705613dd0565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517ff32244aa081c72b930bb47bb702115e112d779ed353d6b1a70b28babc9822b7a90600090a250565b613757613a8f565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561379e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c29190615637565b90507f0000000000000000000000000d1e753a25ebda689453309112904807625befbe6001600160a01b0316846001600160a01b03161415613817576014548110613811576014549003613817565b60145560005b8281101561383857604051632ca2f52b60e11b815260040160405180910390fd5b8015613852576138526001600160a01b038516838361495a565b50612f1f60018055565b613864613dd0565b6001600160a01b0381166138e05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016112e6565b6129868161490a565b6000806138f4613a8f565b825160009081526007602090815260409182902082516101208101845281546001600160801b038082168352600160801b90910416928101929092526001810154600281810b9484019490945263010000009004830b6060830152918201546080820152600382015460a082015260048201546001600160a01b031660c08201819052600583015460e08301526006909201546101008201529033146139ad576040516330cd747160e01b815260040160405180910390fd5b60208401516001600160a01b03166139c6573060208501525b6040805163fc6f786560e01b81528551600482015260208601516001600160a01b039081166024830152918601516001600160801b03908116604483015260608701511660648201527f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43649091169063fc6f78659060840160408051808303816000875af1158015613a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7f91906154a9565b909350915061128b905060018055565b60026001541415613ae25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016112e6565b6002600155565b6005838101546000908152600660209081526040808320815160e0810183528154815260018201546001600160a01b03908116828601819052600284015482168386015260038401549182166060840152600160a01b90910462ffffff16608083015260048084015460a0840152929096015460c08201528251630a81a92360e31b81529251949590948694919363540d4918938181019392918290030181865afa158015613b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc0919061542f565b90506001600160a01b03811615801590613be45750600c54600160a01b900460ff16155b15613d0b576040516310a537f160e11b815263ffffffff421660048201526001600160a01b0382169063214a6fe290602401600060405180830381600087803b158015613c3057600080fd5b505af1158015613c44573d6000803e3d6000fd5b505050506001860154604051633816bae960e11b8152600282810b6004830152630100000090920490910b60248201526000906001600160a01b0383169063702d75d290604401602060405180830381865afa158015613ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccc9190615637565b60028801548854919250820390600160801b90613cf5908290046001600160801b0316836154e5565b613cff9190615504565b60028901929092555092505b6003860154613d1a90846154cd565b92508215613d9b576001600160a01b03841615613d935760006003870155613d4284846149a3565b6005860154604080516001600160a01b03871681526020810186905287929133917fd25759d838eb0a46600f8f327cce144e61d7caefbef27010fe31e2aab091704f910160405180910390a4613d9b565b600386018390555b50509392505050565b613dae8282614a94565b506001600160a01b031660009081526002602052604090208054600019019055565b6000546001600160a01b03163314612fd05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112e6565b60008060007f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43646001600160a01b03166399fbab88866040518263ffffffff1660e01b8152600401613e7d91815260200190565b61018060405180830381865afa158015613e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ebf9190615556565b5050505060058e015460009081526006602052604090208e54939b50919950975095506001600160801b038088169116149350613f4b9250505057865460048201546001600160801b0380851692613f1992911690615492565b613f2391906154cd565b600482015586546fffffffffffffffffffffffffffffffff19166001600160801b0383161787555b600c5464e8d4a51000906001600160a01b031615801590613f6a575085155b15613ffe57600c546040517f44e7bf06000000000000000000000000000000000000000000000000000000008152600481018990526001600160a01b03909116906344e7bf06906024016020604051808303816000875af1158015613fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ff79190615637565b9050614007565b85156140075750845b64e8d4a51000811015614020575064e8d4a51000614037565b6501d1a94a200081111561403757506501d1a94a20005b60068801819055600061406b64e8d4a5100061405c846001600160801b0388166154e5565b6140669190615504565b614bae565b895490915060009061408d90600160801b90046001600160801b0316836157df565b905080600f0b60001461424557895460058501546001600160801b03808516926140c292600160801b90910490911690615492565b6140cc91906154cd565b600585015589546001600160801b03808416600160801b029116178a55600184015460408051630a81a92360e31b815290516000926001600160a01b03169163540d49189160048083019260209291908290030181865afa158015614135573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614159919061542f565b90506001600160a01b0381166141825760405163ef3d9b2160e01b815260040160405180910390fd5b604051638910faf160e01b8152600289810b600483015288900b6024820152600f83900b60448201526001600160a01b03821690638910faf190606401600060405180830381600087803b1580156141d957600080fd5b505af11580156141ed573d6000803e3d6000fd5b5050505060058b015460408051600f85900b815260028b810b60208301528a900b8183015290518c929133917fee8f6362d59839b4b3c990d7e085a63a0fe2c58f4eff4a9a2b6de93a4c645ae39181900360600190a4505b50505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052612b7e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614c2d565b4260015b6005548111612cce576000818152600660209081526040808320815160e0810183528154815260018201546001600160a01b03908116828601819052600284015482168386015260038401549182166060840152600160a01b90910462ffffff16608083015260048084015460a084015260059093015460c08301528351630a81a92360e31b81529351919594909363540d49189381810193918290030181865afa1580156143b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143dd919061542f565b8251909150158015906143f857506001600160a01b03811615155b1561445d576040516310a537f160e11b815263ffffffff851660048201526001600160a01b0382169063214a6fe290602401600060405180830381600087803b15801561444457600080fd5b505af1158015614458573d6000803e3d6000fd5b505050505b5050808061446a906156b8565b915050614306565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156144b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144dd9190615637565b90507f0000000000000000000000000d1e753a25ebda689453309112904807625befbe6001600160a01b0316836001600160a01b0316141561453257601454811061452c576014549003614532565b60145560005b8015612f1f577f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316836001600160a01b031614156145f657604051632e1a7d4d60e01b8152600481018290527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156145d457600080fd5b505af11580156145e8573d6000803e3d6000fd5b50505050612f1f82826148aa565b612f1f6001600160a01b038416838361495a565b8015806146845750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561465e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146829190615637565b155b6146f65760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016112e6565b6040516001600160a01b038316602482015260448101829052612f1f9084907f095ea7b3000000000000000000000000000000000000000000000000000000009060640161429e565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316826001600160a01b03161480156147805750600034115b156147be57803414612cce576040517f4b508fef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cce6001600160a01b038316333084614251565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316826001600160a01b03161480156148145750600034115b15614896577f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43646001600160a01b03166312210e8a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561487457600080fd5b505af1158015614888573d6000803e3d6000fd5b50505050612cce33476148aa565b612cce6001600160a01b038316338361495a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146148f7576040519150601f19603f3d011682016040523d82523d6000602084013e6148fc565b606091505b5050905080612f1f57600080fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b038316602482015260448101829052612f1f9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161429e565b8015612cce576040516370a0823160e01b81523060048201526000907f0000000000000000000000000d1e753a25ebda689453309112904807625befbe6001600160a01b0316906370a0823190602401602060405180830381865afa158015614a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a349190615637565b905081811015614a42578091505b8160145410614a5957601480548390039055614a60565b8181036014555b612f1f6001600160a01b037f0000000000000000000000000d1e753a25ebda689453309112904807625befbe16848461495a565b6001600160a01b038216600090815260026020526040812054614ab990600190615492565b6000838152600460209081526040808320546001600160a01b03881684526003835281842081855290925290912054919250908314614b3a5760405162461bcd60e51b815260206004820152600f60248201527f496e76616c696420746f6b656e4964000000000000000000000000000000000060448201526064016112e6565b818114614b7b576001600160a01b03841660009081526003602090815260408083208584528252808320548484528184208190558352600490915290208190555b5060009182526004602090815260408084208490556001600160a01b039094168352600381528383209183525290812055565b6000600160801b8210614c295760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f323820626974730000000000000000000000000000000000000000000000000060648201526084016112e6565b5090565b6000614c82826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614d129092919063ffffffff16565b805190915015612f1f5780806020019051810190614ca09190615841565b612f1f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016112e6565b6060614d218484600085614d29565b949350505050565b606082471015614da15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016112e6565b600080866001600160a01b03168587604051614dbd919061585e565b60006040518083038185875af1925050503d8060008114614dfa576040519150601f19603f3d011682016040523d82523d6000602084013e614dff565b606091505b5091509150614e1087838387614e1b565b979650505050505050565b60608315614e87578251614e80576001600160a01b0385163b614e805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016112e6565b5081614d21565b614d218383815115614e9c5781518083602001fd5b8060405162461bcd60e51b81526004016112e691906157cc565b6001600160a01b038116811461298657600080fd5b60008060408385031215614ede57600080fd5b823591506020830135614ef081614eb6565b809150509250929050565b801515811461298657600080fd5b600060208284031215614f1b57600080fd5b8135614f2681614efb565b9392505050565b600060208284031215614f3f57600080fd5b8135614f2681614eb6565b634e487b7160e01b600052604160045260246000fd5b6001600160801b038116811461298657600080fd5b600060a08284031215614f8757600080fd5b60405160a0810181811067ffffffffffffffff82111715614faa57614faa614f4a565b604052823581526020830135614fbf81614f60565b806020830152506040830135604082015260608301356060820152608083013560808201528091505092915050565b60008060006060848603121561500357600080fd5b8335925060208401359150604084013561501c81614efb565b809150509250925092565b60006080828403121561503957600080fd5b6040516080810181811067ffffffffffffffff8211171561505c5761505c614f4a565b60405282358152905080602083013561507481614eb6565b6020820152604083013561508781614f60565b6040820152606083013561509a81614f60565b6060919091015292915050565b60008060a083850312156150ba57600080fd5b6150c48484615027565b91506080830135614ef081614eb6565b6000806000806000608086880312156150ec57600080fd5b85356150f781614eb6565b9450602086013561510781614eb6565b935060408601359250606086013567ffffffffffffffff8082111561512b57600080fd5b818801915088601f83011261513f57600080fd5b81358181111561514e57600080fd5b89602082850101111561516057600080fd5b9699959850939650602001949392505050565b60006020828403121561518557600080fd5b5035919050565b6000806000606084860312156151a157600080fd5b8335925060208401356151b381614eb6565b9150604084013561501c81614efb565b600060c082840312156151d557600080fd5b60405160c0810181811067ffffffffffffffff821117156151f8576151f8614f4a565b8060405250823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6000806040838503121561525057600080fd5b823561525b81614eb6565b946020939093013593505050565b60008083601f84011261527b57600080fd5b50813567ffffffffffffffff81111561529357600080fd5b6020830191508360208260051b85010111156116f957600080fd5b600080602083850312156152c157600080fd5b823567ffffffffffffffff8111156152d857600080fd5b6152e485828601615269565b90969095509350505050565b6000806040838503121561530357600080fd5b50508035926020909101359150565b60005b8381101561532d578181015183820152602001615315565b83811115612b7e5750506000910152565b60008151808452615356816020860160208601615312565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156153bf57603f198886030184526153ad85835161533e565b94509285019290850190600101615391565b5092979650505050505050565b6000806000606084860312156153e157600080fd5b83356153ec81614eb6565b925060208401359150604084013561501c81614eb6565b60006080828403121561541557600080fd5b614f268383615027565b805161542a81614eb6565b919050565b60006020828403121561544157600080fd5b8151614f2681614eb6565b634e487b7160e01b600052601160045260246000fd5b600081600f0b6f7fffffffffffffffffffffffffffffff198114156154895761548961544c565b60000392915050565b6000828210156154a4576154a461544c565b500390565b600080604083850312156154bc57600080fd5b505080516020909101519092909150565b600082198211156154e0576154e061544c565b500190565b60008160001904831182151516156154ff576154ff61544c565b500290565b60008261552157634e487b7160e01b600052601260045260246000fd5b500490565b805162ffffff8116811461542a57600080fd5b8051600281900b811461542a57600080fd5b805161542a81614f60565b6000806000806000806000806000806000806101808d8f03121561557957600080fd5b8c516bffffffffffffffffffffffff8116811461559557600080fd5b9b506155a360208e0161541f565b9a506155b160408e0161541f565b99506155bf60608e0161541f565b98506155cd60808e01615526565b97506155db60a08e01615539565b96506155e960c08e01615539565b95506155f760e08e0161554b565b94506101008d015193506101208d015192506156166101408e0161554b565b91506156256101608e0161554b565b90509295989b509295989b509295989b565b60006020828403121561564957600080fd5b5051919050565b60006020828403121561566257600080fd5b614f2682615526565b60008060006060848603121561568057600080fd5b835161568b81614f60565b602085015160409095015190969495509392505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156156cc576156cc61544c565b5060010190565b6000808335601e198436030181126156ea57600080fd5b83018035915067ffffffffffffffff82111561570557600080fd5b6020019150368190038213156116f957600080fd5b8183823760009101908152919050565b60006020828403121561573c57600080fd5b815167ffffffffffffffff8082111561575457600080fd5b818401915084601f83011261576857600080fd5b81518181111561577a5761577a614f4a565b604051601f8201601f19908116603f011681019083821181831017156157a2576157a2614f4a565b816040528281528760208487010111156157bb57600080fd5b614e10836020830160208801615312565b602081526000614f26602083018461533e565b600081600f0b83600f0b60008112816f7fffffffffffffffffffffffffffffff19018312811516156158135761581361544c565b816f7fffffffffffffffffffffffffffffff0183138116156158375761583761544c565b5090039392505050565b60006020828403121561585357600080fd5b8151614f2681614efb565b60008251615870818460208701615312565b919091019291505056fea264697066735822122099b93101b9e569c99f28ca8598a1622a8b4bc16f6b0ae7b1e3f6a8edb98e2ca964736f6c634300080a0033" + }, + { + "address": "0xc0face0db9363f0e1772186a4f44da97b32ba2e5", + "nonce": 14, + "balance": "0x000000000000000000000000000000000000000000000000002b44749c0c783b", + "code": "0x" + }, + { + "address": "0xb86b3e16b6b960fd822849fd4b4861d73805879b", + "nonce": 1, + "balance": "0x00000000000000000000000000000000000000000000000872b4a7860d608000", + "code": "0x6080604052600436106101095760003560e01c8063b2494df311610095578063ecdbb4fd11610064578063ecdbb4fd14610336578063ed6d73f914610352578063f2fde38b1461037d578063f3fef3a3146103a6578063f887ea40146103cf57610109565b8063b2494df31461028c578063b6664934146102b7578063b75c7dc6146102e2578063b95459e41461030b57610109565b8063523ba7ca116100dc578063523ba7ca146101b9578063715018a6146101e257806381b2248a146101f95780638388e226146102365780638da5cb5b1461026157610109565b806301ffc9a71461010e578063074321961461014b5780633cc30e2a146101675780634ada807614610190575b600080fd5b34801561011a57600080fd5b5061013560048036038101906101309190611219565b6103fa565b6040516101429190611261565b60405180910390f35b610165600480360381019061016091906115d8565b610534565b005b34801561017357600080fd5b5061018e600480360381019061018991906118d5565b610674565b005b34801561019c57600080fd5b506101b760048036038101906101b2919061197c565b6107ae565b005b3480156101c557600080fd5b506101e060048036038101906101db91906119c5565b610847565b005b3480156101ee57600080fd5b506101f761097d565b005b34801561020557600080fd5b50610220600480360381019061021b9190611a73565b610991565b60405161022d9190611ae1565b60405180910390f35b34801561024257600080fd5b5061024b6109d0565b6040516102589190611ae1565b60405180910390f35b34801561026d57600080fd5b506102766109d8565b6040516102839190611ae1565b60405180910390f35b34801561029857600080fd5b506102a1610a02565b6040516102ae9190611bba565b60405180910390f35b3480156102c357600080fd5b506102cc610a90565b6040516102d99190611c3b565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190611c56565b610ab6565b005b34801561031757600080fd5b50610320610b4f565b60405161032d9190611ca4565b60405180910390f35b610350600480360381019061034b9190611cbf565b610b75565b005b34801561035e57600080fd5b50610367610cb9565b6040516103749190611d6b565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190611db2565b610cdf565b005b3480156103b257600080fd5b506103cd60048036038101906103c89190611e1d565b610d62565b005b3480156103db57600080fd5b506103e4610e11565b6040516103f19190611e7e565b60405180910390f35b60007f204cf909000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104c557507f31c1afd5000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061052d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e253ca60018484346040518563ffffffff1660e01b8152600401610596949392919061215d565b600060405180830381600087803b1580156105b057600080fd5b505af11580156105c4573d6000803e3d6000fd5b505050506105da826105d46109d0565b34610e35565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362fa3d45836106216109d0565b6040518363ffffffff1660e01b815260040161063e9291906121b7565b600060405180830381600087803b15801561065857600080fd5b505af115801561066c573d6000803e3d6000fd5b505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2baec4a600184846040518463ffffffff1660e01b81526004016106d49392919061245b565b600060405180830381600087803b1580156106ee57600080fd5b505af1158015610702573d6000803e3d6000fd5b50505050610711838383610e3a565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ec4d4cb84846107596109d0565b6040518463ffffffff1660e01b815260040161077793929190612556565b600060405180830381600087803b15801561079157600080fd5b505af11580156107a5573d6000803e3d6000fd5b50505050505050565b6107b781610e3f565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ada8076826040518263ffffffff1660e01b8152600401610812919061259b565b600060405180830381600087803b15801561082c57600080fd5b505af1158015610840573d6000803e3d6000fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2baec4a600184846040518463ffffffff1660e01b81526004016108a79392919061245b565b600060405180830381600087803b1580156108c157600080fd5b505af11580156108d5573d6000803e3d6000fd5b505050506108e38282610f4b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8e2812d8361092a6109d0565b6040518363ffffffff1660e01b81526004016109479291906125bd565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b505050505050565b610985610f4f565b61098f6000610fcd565b565b600181815481106109a157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805480602002602001604051908101604052809291908181526020018280548015610a8657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610a3c575b5050505050905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610abf81611093565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b75c7dc6826040518263ffffffff1660e01b8152600401610b1a91906125fc565b600060405180830381600087803b158015610b3457600080fd5b505af1158015610b48573d6000803e3d6000fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e253ca60018484346040518563ffffffff1660e01b8152600401610bd7949392919061215d565b600060405180830381600087803b158015610bf157600080fd5b505af1158015610c05573d6000803e3d6000fd5b50505050610c1c8383610c166109d0565b3461119f565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638ffa736b8484610c646109d0565b6040518463ffffffff1660e01b8152600401610c8293929190612617565b600060405180830381600087803b158015610c9c57600080fd5b505af1158015610cb0573d6000803e3d6000fd5b50505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ce7610f4f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d906126d8565b60405180910390fd5b610d5f81610fcd565b50565b610d6a610f4f565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610d9090612729565b60006040518083038185875af1925050503d8060008114610dcd576040519150601f19603f3d011682016040523d82523d6000602084013e610dd2565b606091505b5050905080610e0c576040517ec0f29900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b505050565b505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0fbc748306040518263ffffffff1660e01b8152600401610e9a9190611ae1565b600060405180830381865afa158015610eb7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610ee09190612a07565b6020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f48576040517f71f63e3100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5050565b610f576111a5565b73ffffffffffffffffffffffffffffffffffffffff16610f756109d8565b73ffffffffffffffffffffffffffffffffffffffff1614610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc290612a9c565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0fbc748306040518263ffffffff1660e01b81526004016110ee9190611ae1565b600060405180830381865afa15801561110b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906111349190612a07565b6020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461119c576040517f71f63e3100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b50505050565b600033905090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6111f6816111c1565b811461120157600080fd5b50565b600081359050611213816111ed565b92915050565b60006020828403121561122f5761122e6111b7565b5b600061123d84828501611204565b91505092915050565b60008115159050919050565b61125b81611246565b82525050565b60006020820190506112766000830184611252565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6112ca82611281565b810181811067ffffffffffffffff821117156112e9576112e8611292565b5b80604052505050565b60006112fc6111ad565b905061130882826112c1565b919050565b600080fd5b6000819050919050565b61132581611312565b811461133057600080fd5b50565b6000813590506113428161131c565b92915050565b600067ffffffffffffffff82169050919050565b61136581611348565b811461137057600080fd5b50565b6000813590506113828161135c565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff8211156113ad576113ac611292565b5b6113b682611281565b9050602081019050919050565b82818337600083830152505050565b60006113e56113e084611392565b6112f2565b9050828152602081018484840111156114015761140061138d565b5b61140c8482856113c3565b509392505050565b600082601f83011261142957611428611388565b5b81356114398482602086016113d2565b91505092915050565b6000608082840312156114585761145761127c565b5b61146260806112f2565b9050600061147284828501611333565b600083015250602061148684828501611373565b602083015250604082013567ffffffffffffffff8111156114aa576114a961130d565b5b6114b684828501611414565b604083015250606082013567ffffffffffffffff8111156114da576114d961130d565b5b6114e684828501611414565b60608301525092915050565b600067ffffffffffffffff82111561150d5761150c611292565b5b602082029050602081019050919050565b600080fd5b6000611536611531846114f2565b6112f2565b905080838252602082019050602084028301858111156115595761155861151e565b5b835b818110156115a057803567ffffffffffffffff81111561157e5761157d611388565b5b80860161158b8982611414565b8552602085019450505060208101905061155b565b5050509392505050565b600082601f8301126115bf576115be611388565b5b81356115cf848260208601611523565b91505092915050565b600080604083850312156115ef576115ee6111b7565b5b600083013567ffffffffffffffff81111561160d5761160c6111bc565b5b61161985828601611442565b925050602083013567ffffffffffffffff81111561163a576116396111bc565b5b611646858286016115aa565b9150509250929050565b600067ffffffffffffffff82111561166b5761166a611292565b5b602082029050602081019050919050565b600061168f61168a84611650565b6112f2565b905080838252602082019050602084028301858111156116b2576116b161151e565b5b835b818110156116db57806116c78882611333565b8452602084019350506020810190506116b4565b5050509392505050565b600082601f8301126116fa576116f9611388565b5b813561170a84826020860161167c565b91505092915050565b600067ffffffffffffffff82111561172e5761172d611292565b5b602082029050602081019050919050565b600061175261174d84611713565b6112f2565b905080838252602082019050602084028301858111156117755761177461151e565b5b835b818110156117bc57803567ffffffffffffffff81111561179a57611799611388565b5b8086016117a78982611442565b85526020850194505050602081019050611777565b5050509392505050565b600082601f8301126117db576117da611388565b5b81356117eb84826020860161173f565b91505092915050565b600067ffffffffffffffff82111561180f5761180e611292565b5b602082029050602081019050919050565b600061183361182e846117f4565b6112f2565b905080838252602082019050602084028301858111156118565761185561151e565b5b835b8181101561189d57803567ffffffffffffffff81111561187b5761187a611388565b5b80860161188889826115aa565b85526020850194505050602081019050611858565b5050509392505050565b600082601f8301126118bc576118bb611388565b5b81356118cc848260208601611820565b91505092915050565b6000806000606084860312156118ee576118ed6111b7565b5b600084013567ffffffffffffffff81111561190c5761190b6111bc565b5b611918868287016116e5565b935050602084013567ffffffffffffffff811115611939576119386111bc565b5b611945868287016117c6565b925050604084013567ffffffffffffffff811115611966576119656111bc565b5b611972868287016118a7565b9150509250925092565b600060208284031215611992576119916111b7565b5b600082013567ffffffffffffffff8111156119b0576119af6111bc565b5b6119bc848285016116e5565b91505092915050565b600080604083850312156119dc576119db6111b7565b5b600083013567ffffffffffffffff8111156119fa576119f96111bc565b5b611a06858286016117c6565b925050602083013567ffffffffffffffff811115611a2757611a266111bc565b5b611a33858286016118a7565b9150509250929050565b6000819050919050565b611a5081611a3d565b8114611a5b57600080fd5b50565b600081359050611a6d81611a47565b92915050565b600060208284031215611a8957611a886111b7565b5b6000611a9784828501611a5e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611acb82611aa0565b9050919050565b611adb81611ac0565b82525050565b6000602082019050611af66000830184611ad2565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611b3181611ac0565b82525050565b6000611b438383611b28565b60208301905092915050565b6000602082019050919050565b6000611b6782611afc565b611b718185611b07565b9350611b7c83611b18565b8060005b83811015611bad578151611b948882611b37565b9750611b9f83611b4f565b925050600181019050611b80565b5085935050505092915050565b60006020820190508181036000830152611bd48184611b5c565b905092915050565b6000819050919050565b6000611c01611bfc611bf784611aa0565b611bdc565b611aa0565b9050919050565b6000611c1382611be6565b9050919050565b6000611c2582611c08565b9050919050565b611c3581611c1a565b82525050565b6000602082019050611c506000830184611c2c565b92915050565b600060208284031215611c6c57611c6b6111b7565b5b6000611c7a84828501611333565b91505092915050565b6000611c8e82611c08565b9050919050565b611c9e81611c83565b82525050565b6000602082019050611cb96000830184611c95565b92915050565b600080600060608486031215611cd857611cd76111b7565b5b6000611ce686828701611333565b935050602084013567ffffffffffffffff811115611d0757611d066111bc565b5b611d1386828701611442565b925050604084013567ffffffffffffffff811115611d3457611d336111bc565b5b611d40868287016115aa565b9150509250925092565b6000611d5582611c08565b9050919050565b611d6581611d4a565b82525050565b6000602082019050611d806000830184611d5c565b92915050565b611d8f81611ac0565b8114611d9a57600080fd5b50565b600081359050611dac81611d86565b92915050565b600060208284031215611dc857611dc76111b7565b5b6000611dd684828501611d9d565b91505092915050565b6000611dea82611aa0565b9050919050565b611dfa81611ddf565b8114611e0557600080fd5b50565b600081359050611e1781611df1565b92915050565b60008060408385031215611e3457611e336111b7565b5b6000611e4285828601611e08565b9250506020611e5385828601611a5e565b9150509250929050565b6000611e6882611c08565b9050919050565b611e7881611e5d565b82525050565b6000602082019050611e936000830184611e6f565b92915050565b600081549050919050565b60008190508160005260206000209050919050565b60008160001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ef9611ef483611eb9565b611ec6565b9050919050565b6000611f0c8254611ee6565b9050919050565b6000600182019050919050565b6000611f2b82611e99565b611f358185611b07565b9350611f4083611ea4565b8060005b83811015611f7857611f5582611f00565b611f5f8882611b37565b9750611f6a83611f13565b925050600181019050611f44565b5085935050505092915050565b611f8e81611312565b82525050565b611f9d81611348565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611fdd578082015181840152602081019050611fc2565b60008484015250505050565b6000611ff482611fa3565b611ffe8185611fae565b935061200e818560208601611fbf565b61201781611281565b840191505092915050565b600060808301600083015161203a6000860182611f85565b50602083015161204d6020860182611f94565b50604083015184820360408601526120658282611fe9565b9150506060830151848203606086015261207f8282611fe9565b9150508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006120c48383611fe9565b905092915050565b6000602082019050919050565b60006120e48261208c565b6120ee8185612097565b935083602082028501612100856120a8565b8060005b8581101561213c578484038952815161211d85826120b8565b9450612128836120cc565b925060208a01995050600181019050612104565b50829750879550505050505092915050565b61215781611a3d565b82525050565b600060808201905081810360008301526121778187611f20565b9050818103602083015261218b8186612022565b9050818103604083015261219f81856120d9565b90506121ae606083018461214e565b95945050505050565b600060408201905081810360008301526121d18185612022565b90506121e06020830184611ad2565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060808301600083015161222b6000860182611f85565b50602083015161223e6020860182611f94565b50604083015184820360408601526122568282611fe9565b915050606083015184820360608601526122708282611fe9565b9150508091505092915050565b60006122898383612213565b905092915050565b6000602082019050919050565b60006122a9826121e7565b6122b381856121f2565b9350836020820285016122c585612203565b8060005b8581101561230157848403895281516122e2858261227d565b94506122ed83612291565b925060208a019950506001810190506122c9565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b600061235b8261208c565b612365818561233f565b935083602082028501612377856120a8565b8060005b858110156123b3578484038952815161239485826120b8565b945061239f836120cc565b925060208a0199505060018101905061237b565b50829750879550505050505092915050565b60006123d18383612350565b905092915050565b6000602082019050919050565b60006123f182612313565b6123fb818561231e565b93508360208202850161240d8561232f565b8060005b85811015612449578484038952815161242a85826123c5565b9450612435836123d9565b925060208a01995050600181019050612411565b50829750879550505050505092915050565b600060608201905081810360008301526124758186611f20565b90508181036020830152612489818561229e565b9050818103604083015261249d81846123e6565b9050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006124df8383611f85565b60208301905092915050565b6000602082019050919050565b6000612503826124a7565b61250d81856124b2565b9350612518836124c3565b8060005b8381101561254957815161253088826124d3565b975061253b836124eb565b92505060018101905061251c565b5085935050505092915050565b6000606082019050818103600083015261257081866124f8565b90508181036020830152612584818561229e565b90506125936040830184611ad2565b949350505050565b600060208201905081810360008301526125b581846124f8565b905092915050565b600060408201905081810360008301526125d7818561229e565b90506125e66020830184611ad2565b9392505050565b6125f681611312565b82525050565b600060208201905061261160008301846125ed565b92915050565b600060608201905061262c60008301866125ed565b818103602083015261263e8185612022565b905061264d6040830184611ad2565b949350505050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006126c2602683612655565b91506126cd82612666565b604082019050919050565b600060208201905081810360008301526126f1816126b5565b9050919050565b600081905092915050565b50565b60006127136000836126f8565b915061271e82612703565b600082019050919050565b600061273482612706565b9150819050919050565b60008151905061274d81611d86565b92915050565b600067ffffffffffffffff82111561276e5761276d611292565b5b602082029050602081019050919050565b600061279261278d84612753565b6112f2565b905080838252602082019050602084028301858111156127b5576127b461151e565b5b835b818110156127de57806127ca888261273e565b8452602084019350506020810190506127b7565b5050509392505050565b600082601f8301126127fd576127fc611388565b5b815161280d84826020860161277f565b91505092915050565b61281f81611246565b811461282a57600080fd5b50565b60008151905061283c81612816565b92915050565b600067ffffffffffffffff82111561285d5761285c611292565b5b61286682611281565b9050602081019050919050565b600061288661288184612842565b6112f2565b9050828152602081018484840111156128a2576128a161138d565b5b6128ad848285611fbf565b509392505050565b600082601f8301126128ca576128c9611388565b5b81516128da848260208601612873565b91505092915050565b600060e082840312156128f9576128f861127c565b5b61290360e06112f2565b905060006129138482850161273e565b60008301525060206129278482850161273e565b602083015250604082015167ffffffffffffffff81111561294b5761294a61130d565b5b612957848285016127e8565b604083015250606061296b8482850161282d565b606083015250608082015167ffffffffffffffff81111561298f5761298e61130d565b5b61299b848285016128b5565b60808301525060a082015167ffffffffffffffff8111156129bf576129be61130d565b5b6129cb848285016128b5565b60a08301525060c082015167ffffffffffffffff8111156129ef576129ee61130d565b5b6129fb848285016128b5565b60c08301525092915050565b600060208284031215612a1d57612a1c6111b7565b5b600082015167ffffffffffffffff811115612a3b57612a3a6111bc565b5b612a47848285016128e3565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a86602083612655565b9150612a9182612a50565b602082019050919050565b60006020820190508181036000830152612ab581612a79565b905091905056fea264697066735822122060370175e518b9841849f1fbd1eeb74fcca4fb68228a6a1d650afa9d7318955064736f6c63430008150033" + }, + { + "address": "0xd1a3abf42f9e66be86cfdea8c5c2c74f041c5e14", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e8383604051806060016040528060278152602001610268602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b6060600080856001600160a01b0316856040516100e09190610218565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091506101318683838761013b565b9695505050505050565b606083156101ac5782516101a5576001600160a01b0385163b6101a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b50816101b6565b6101b683836101be565b949350505050565b8151156101ce5781518083602001fd5b8060405162461bcd60e51b815260040161019c9190610234565b60005b838110156102035781810151838201526020016101eb565b83811115610212576000848401525b50505050565b6000825161022a8184602087016101e8565b9190910192915050565b60208152600082518060208401526102538160408501602087016101e8565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ff8e6f2d761d58b3bd984933269e01a7ff1f70a460b808056daa4cff1ee8ab6964736f6c63430008090033" + }, + { + "address": "0xf5b709c209c3ba5e837d517bb2719e3d2da76629", + "nonce": 3, + "balance": "0x00000000000000000000000000000000000000000000000002be04272f9e0000", + "code": "0x6080604052600436106100fa5760003560e01c806301ffc9a7146100ff57806319f7fe4914610134578063248a9ca3146101565780632f2ff15d1461018457806336568abe146101a45780633f4ba83a146101c457806354a9b60b146101d95780635c975abb146102095780635fd8c7101461022157806363a01275146102365780637eb1ddd2146102495780638456cb591461027b57806391d1485414610290578063a035b1fe146102b0578063a20a3252146102c6578063a217fddf146102d9578063ab64d2e6146102ee578063d547741f1461030e578063df0866111461032e578063f580e8c514610344578063f996299114610374575b600080fd5b34801561010b57600080fd5b5061011f61011a366004610a53565b61038a565b60405190151581526020015b60405180910390f35b34801561014057600080fd5b5061015461014f366004610a99565b6103c1565b005b34801561016257600080fd5b50610176610171366004610ad8565b6103fd565b60405190815260200161012b565b34801561019057600080fd5b5061015461019f366004610af1565b610412565b3480156101b057600080fd5b506101546101bf366004610af1565b610434565b3480156101d057600080fd5b5061015461046c565b3480156101e557600080fd5b5061011f6101f4366004610b21565b60086020526000908152604090205460ff1681565b34801561021557600080fd5b5060015460ff1661011f565b34801561022d57600080fd5b50610154610482565b610154610244366004610b3e565b610573565b34801561025557600080fd5b5060015461026e9061010090046001600160a01b031681565b60405161012b9190610b68565b34801561028757600080fd5b506101546106ab565b34801561029c57600080fd5b5061011f6102ab366004610af1565b6106be565b3480156102bc57600080fd5b5061017660045481565b6101546102d4366004610b3e565b6106e7565b3480156102e557600080fd5b50610176600081565b3480156102fa57600080fd5b5060025461026e906001600160a01b031681565b34801561031a57600080fd5b50610154610329366004610af1565b610823565b34801561033a57600080fd5b5061017660055481565b34801561035057600080fd5b5061011f61035f366004610b21565b60076020526000908152604090205460ff1681565b34801561038057600080fd5b5061017660065481565b60006001600160e01b03198216637965db0b60e01b14806103bb57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006103cc8161083f565b50600593909355600691909155600380546001600160a01b0319166001600160a01b03909216919091179055600455565b60009081526020819052604090206001015490565b61041b826103fd565b6104248161083f565b61042e8383610849565b50505050565b6001600160a01b038116331461045d5760405163334bd91960e11b815260040160405180910390fd5b61046782826108db565b505050565b60006104778161083f565b61047f610946565b50565b600061048d8161083f565b47806104d95760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b60448201526064015b60405180910390fd5b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610526576040519150601f19603f3d011682016040523d82523d6000602084013e61052b565b606091505b50509050806104675760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064016104d0565b61057b610992565b600033600654604051602001610592929190610b7c565b60408051601f1981840301815291905280516020909101209050806001600160f01b0319838116908216146105d95760405162461bcd60e51b81526004016104d090610b99565b60045434146105fa5760405162461bcd60e51b81526004016104d090610be3565b3360009081526008602052604090205460ff161561062a5760405162461bcd60e51b81526004016104d090610c2a565b6002546040516335313c2160e11b81526001600160a01b0390911690636a6278429061065a903390600401610b68565b600060405180830381600087803b15801561067457600080fd5b505af1158015610688573d6000803e3d6000fd5b5050336000908152600860205260409020805460ff191660011790555050505050565b60006106b68161083f565b61047f6109b8565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6106ef610992565b600033600554604051602001610706929190610b7c565b60408051601f1981840301815291905280516020909101209050806001600160f01b03198381169082161461074d5760405162461bcd60e51b81526004016104d090610b99565b600454341461076e5760405162461bcd60e51b81526004016104d090610be3565b3360009081526007602052604090205460ff161561079e5760405162461bcd60e51b81526004016104d090610c2a565b6001546040516335313c2160e11b81526101009091046001600160a01b031690636a627842906107d2903390600401610b68565b600060405180830381600087803b1580156107ec57600080fd5b505af1158015610800573d6000803e3d6000fd5b5050336000908152600760205260409020805460ff191660011790555050505050565b61082c826103fd565b6108358161083f565b61042e83836108db565b61047f81336109f3565b600061085583836106be565b6108d3576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561088b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016103bb565b5060006103bb565b60006108e783836106be565b156108d3576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103bb565b61094e610a30565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516109889190610b68565b60405180910390a1565b60015460ff16156109b65760405163d93c066560e01b815260040160405180910390fd5b565b6109c0610992565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361097b565b6109fd82826106be565b610a2c5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016104d0565b5050565b60015460ff166109b657604051638dfc202b60e01b815260040160405180910390fd5b600060208284031215610a6557600080fd5b81356001600160e01b031981168114610a7d57600080fd5b9392505050565b6001600160a01b038116811461047f57600080fd5b60008060008060808587031215610aaf57600080fd5b84359350602085013592506040850135610ac881610a84565b9396929550929360600135925050565b600060208284031215610aea57600080fd5b5035919050565b60008060408385031215610b0457600080fd5b823591506020830135610b1681610a84565b809150509250929050565b600060208284031215610b3357600080fd5b8135610a7d81610a84565b600060208284031215610b5057600080fd5b81356001600160f01b031981168114610a7d57600080fd5b6001600160a01b0391909116815260200190565b60609290921b6001600160601b0319168252601482015260340190565b6020808252602a908201527f596f6f6c646f5270644d616e616765723a20496e636f727265637420696e70756040820152691d081c1c9bdd9a59195960b21b606082015260800190565b60208082526027908201527f596f6f6c646f5270644d616e616765723a20496e636f727265637420616d6f756040820152661b9d081cd95b9d60ca1b606082015260800190565b6020808252818101527f596f6f6c646f5270644d616e616765723a20416c7265616479206d696e74656460408201526060019056fea2646970667358221220a6abbaa947dd420fe09bcd48d8b3c425345a59a50f9c74ad67604b9d44cbabf664736f6c63430008140033" + }, + { + "address": "0xa3fe30e2c53e2744a7e2002e70fd88b476409745", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100bc5760003560e01c8063ad5c464811610074578063d7068fe11161004e578063d7068fe1146101b2578063e1399e76146101e6578063e756cac1146101f957600080fd5b8063ad5c464814610133578063c43025bd1461018c578063ca6182da1461019f57600080fd5b806348d31802116100a557806348d31802146100fa578063517e7ca11461010d578063aa293da21461012057600080fd5b806304cca9f7146100c15780631b96cfd4146100e7575b600080fd5b6100d46100cf366004612d81565b61020c565b6040519081526020015b60405180910390f35b6100d46100f5366004612d81565b6107d1565b6100d4610108366004612d81565b610c7e565b6100d461011b366004612d81565b61119a565b6100d461012e366004612d81565b6115a2565b34801561013f57600080fd5b506101677f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100de565b6100d461019a366004612d81565b61187b565b6100d46101ad366004612d81565b611cf4565b3480156101be57600080fd5b506100d47f9932588c857b0691792b49bc2500676cf28f18fb0177f2f1fd3490fb07babb7281565b6100d46101f4366004612d81565b611f86565b6100d4610207366004612d81565b6122d9565b60008061021b84860186613181565b6020810151516040820151519192509080610237836001613283565b146102c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4578656375746f723a20706f6f6c4c656e677468206973206e6f7420636f727260448201527f656374000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600083604001516000815181106102e2576102e261329b565b602002602001015190506000846040015160018461030091906132ca565b815181106103105761031061329b565b60200260200101519050610347877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16838760800151612544565b608086015260e087901c6002161515801561040c5750608085015185516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91821660248201529084169063dd62ed3e9060440160206040518083038186803b1580156103d257600080fd5b505afa1580156103e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040a91906132e1565b105b1561041f5761041f828660000151612587565b60008467ffffffffffffffff81111561043a5761043a612df9565b6040519080825280602002602001820160405280156104a057816020015b61048d6040518060a0016040528060008019168152602001600081526020016000815260200160008152602001606081525090565b8152602001906001900390816104585790505b50905060005b858110156105b757866020015181815181106104c4576104c461329b565b60200260200101518282815181106104de576104de61329b565b60200260200101516000018181525050808282815181106105015761050161329b565b602090810291909101810151015261051a816001613283565b82828151811061052c5761052c61329b565b602090810291909101015160400152801561054857600061054e565b86608001515b8282815181106105605761056061329b565b60200260200101516060018181525050866060015181815181106105865761058661329b565b60200260200101518282815181106105a0576105a061329b565b6020908102919091010151608001526001016104a6565b5060408051608081018252308082526000602083018190529282015260608101829052908567ffffffffffffffff8111156105f4576105f4612df9565b60405190808252806020026020018201604052801561061d578160200160208202803683370190505b50905061062d88608001516126ed565b816000815181106106405761064061329b565b6020026020010181815250506000886000015173ffffffffffffffffffffffffffffffffffffffff1663945bcec96000868c6040015187874260646106859190613283565b6040518763ffffffff1660e01b81526004016106a6969594939291906133f1565b600060405180830381600087803b1580156106c057600080fd5b505af11580156106d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261071a9190810190613566565b905061074b8161072b60018a6132ca565b8151811061073b5761073b61329b565b6020026020010151600190190190565b89516040805173ffffffffffffffffffffffffffffffffffffffff92831681526020810184905291881690820152909a507fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c489060600160405180910390a160e08b901c6001166107c1576107be8a6135f7565b99505b5050505050505050509392505050565b6000806107e08486018661362c565b9050610813837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682602001518360800151612544565b6080828101919091526040805160608082018352845173ffffffffffffffffffffffffffffffffffffffff9081168352602080870151821690840190815284870151821684860190815285518087019096528451831693860193909352518116948401949094525190921660a08201526000908060c08101604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905281523060209091015283517f9932588c857b0691792b49bc2500676cf28f18fb0177f2f1fd3490fb07babb728181556060860151929350909160009073ffffffffffffffffffffffffffffffffffffffff161561091a57856060015161091c565b305b90506000866040015173ffffffffffffffffffffffffffffffffffffffff16876020015173ffffffffffffffffffffffffffffffffffffffff161015610a5c57866000015173ffffffffffffffffffffffffffffffffffffffff1663857f812f8361098a8a6080015161271f565b60a08b015160020b156109a1578a60a001516109c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cb005b896040516020016109d491906136d6565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401610a02949392919061371e565b6040805180830381600087803b158015610a1b57600080fd5b505af1158015610a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a539190613778565b98509050610b3c565b866000015173ffffffffffffffffffffffffffffffffffffffff16632c48125283610a8a8a6080015161271f565b60a08b015160020b15610aa1578a60a00151610aa6565b620c35005b89604051602001610ab791906136d6565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401610ae5949392919061371e565b6040805180830381600087803b158015610afe57600080fd5b505af1158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190613778565b90985090505b8087608001511015610bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4578656375746f723a207061696420616d6f756e74206973206c61726765722060448201527f7468616e2073776170416d6f756e74000000000000000000000000000000000060648201526084016102c0565b8087608001511115610bfc57610bfc876020015133838a60800151610bf591906132ca565b6000612743565b8651604080890151815173ffffffffffffffffffffffffffffffffffffffff9384168152602081018c9052921682820152517fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c489181900360600190a160e089901c600116610c7057610c6d886135f7565b97505b505050505050509392505050565b600080610c8d8486018661379c565b9050610cc0837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682604001518360800151612544565b60808281019190915260408051606080820183526020808601805173ffffffffffffffffffffffffffffffffffffffff908116855285880180518216848701908152858a0180518416888a019081528951808b018b528951861698810198909852915184169987019990995251821660a0808701919091528751808703909101815260c086019097529584523092840192909252517f9932588c857b0691792b49bc2500676cf28f18fb0177f2f1fd3490fb07babb7281815595519451875194969395919460009384938116928116929092109183911615610da3578851610da5565b305b60c08a015190915060ff1c15801590610eed57896020015173ffffffffffffffffffffffffffffffffffffffff1663713346948b60c001518486610dec8f608001516126ed565b8f60a0015173ffffffffffffffffffffffffffffffffffffffff16600014610e18578f60a00151610e51565b88610e4157610e3c600173fffd8963efd1fc6a506488495d951d5263988d26613849565b610e51565b610e516401000276a3600161387e565b8e604051602001610e6291906136d6565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610e92969594939291906138b6565b6040805180830381600087803b158015610eab57600080fd5b505af1158015610ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee39190613778565b9095509350611016565b896020015173ffffffffffffffffffffffffffffffffffffffff1663128acb088385610f1c8e608001516126ed565b60a08f015173ffffffffffffffffffffffffffffffffffffffff1615610f46578e60a00151610f7f565b87610f6f57610f6a600173fffd8963efd1fc6a506488495d951d5263988d26613849565b610f7f565b610f7f6401000276a3600161387e565b8d604051602001610f9091906136d6565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610fbf959493929190613911565b6040805180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110109190613778565b90955093505b826110215784611023565b835b61102c90613958565b9a5060008361103b578461103d565b855b90508a608001518111156110d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4578656375746f723a207061696420616d6f756e74206973206c61726765722060448201527f7468616e2073776170416d6f756e74000000000000000000000000000000000060648201526084016102c0565b8a60800151811080156110e4575081155b15611102576111028b6040015133838e60800151610bf591906132ca565b7fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c488b602001518d8d606001516040516111689392919073ffffffffffffffffffffffffffffffffffffffff93841681526020810192909252909116604082015260600190565b60405180910390a160e08d901c600116611188576111858c6135f7565b9b505b50505050505050505050509392505050565b6000806111a984860186613991565b90506111dc837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682602001518360600151612544565b606082015260e083901c600216151580156112a557506060810151602082015182516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015291169063dd62ed3e9060440160206040518083038186803b15801561126b57600080fd5b505afa15801561127f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a391906132e1565b105b156112bc576112bc81602001518260000151612587565b608081015160009073ffffffffffffffffffffffffffffffffffffffff16156112e95781608001516112eb565b305b60408084015190517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350600092909116906370a082319060240160206040518083038186803b15801561135e57600080fd5b505afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139691906132e1565b83516020850151604080870151606088015191517f75ce8b8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152908316602482015286831660448201526064810191909152600060848201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60a482015292935016906375ce8b839060c401600060405180830381600087803b15801561145757600080fd5b505af115801561146b573d6000803e3d6000fd5b5050505060408381015190517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152839216906370a082319060240160206040518083038186803b1580156114dc57600080fd5b505afa1580156114f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151491906132e1565b61151e91906132ca565b8351604080860151815173ffffffffffffffffffffffffffffffffffffffff9384168152602081018590529216908201529094507fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c48906060015b60405180910390a160e085901c60011661159857611595846135f7565b93505b5050509392505050565b6000806115b184860186613991565b90506115e4837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682602001518360600151612544565b606082015260e083901c600216151580156116ad57506060810151602082015182516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015291169063dd62ed3e9060440160206040518083038186803b15801561167357600080fd5b505afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab91906132e1565b105b156116c4576116c481602001518260000151612587565b806000015173ffffffffffffffffffffffffffffffffffffffff16639908fc8b82602001518360400151846060015160008073ffffffffffffffffffffffffffffffffffffffff16876080015173ffffffffffffffffffffffffffffffffffffffff1614156117335730611739565b86608001515b60405160e087901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015293851660248501526044840192909252606483015290911660848201524260a482015260c4016040805180830381600087803b1580156117c157600080fd5b505af11580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f99190613778565b508151604080840151815173ffffffffffffffffffffffffffffffffffffffff9384168152602081018590529216908201529092507fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c489060600160405180910390a160e083901c60011661187357611870826135f7565b91505b509392505050565b60008061188a84860186613a02565b6080810180517f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81169182905291925060ff9190911c6001149015611914576118fa847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1683604001518460800151612544565b60808301819052604083015160208401516119149261283c565b8151600090819073ffffffffffffffffffffffffffffffffffffffff161561193d57835161193f565b305b90508215611acd57836060015173ffffffffffffffffffffffffffffffffffffffff16846020015173ffffffffffffffffffffffffffffffffffffffff1663b7d19fc46040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156119ae57600080fd5b505af11580156119c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e69190613a75565b73ffffffffffffffffffffffffffffffffffffffff16149150600080856020015173ffffffffffffffffffffffffffffffffffffffff166353c059a085856040518363ffffffff1660e01b8152600401611a62929190911515825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b6040805180830381600087803b158015611a7b57600080fd5b505af1158015611a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab39190613778565b9150915083611ac25781611ac4565b805b96505050611c6c565b836060015173ffffffffffffffffffffffffffffffffffffffff16846020015173ffffffffffffffffffffffffffffffffffffffff1663da10610c6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611b3457600080fd5b505af1158015611b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6c9190613a75565b60208601516040517f53c059a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169390931460048401819052848316602485015294506000929116906353c059a090604401602060405180830381600087803b158015611bed57600080fd5b505af1158015611c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2591906132e1565b905082611c44576fffffffffffffffffffffffffffffffff8116611c68565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081165b9550505b6020808501516060808701516040805173ffffffffffffffffffffffffffffffffffffffff94851681529485018a90529216918301919091527fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c4891015b60405180910390a160e086901c600116611ce957611ce6856135f7565b94505b505050509392505050565b600080611d0384860186613a92565b9050611d3a837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168260200151604001518360600151612544565b606082015260e083901c60021615158015611e095750602081015160c0810151604091820151835192517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff93841660248201529192169063dd62ed3e9060440160206040518083038186803b158015611dcf57600080fd5b505afa158015611de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0791906132e1565b105b15611e2457611e248160200151604001518260000151612587565b600080826000015173ffffffffffffffffffffffffffffffffffffffff1663baba5855846020015185604001516000876020015160c00151886060015111611e70578760600151611e7a565b876020015160c001515b88608001516040518663ffffffff1660e01b8152600401611e9f959493929190613bdd565b6040805180830381600087803b158015611eb857600080fd5b505af1158015611ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef09190613778565b915091508193508083606001511115611f2457611f248360200151604001518460800151838660600151610bf591906132ca565b82516020808501518101516040805173ffffffffffffffffffffffffffffffffffffffff94851681529283018890529216918101919091527fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c4890606001611578565b600080611f958486018661404f565b9050611fcc837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168260400151836060015160600151612544565b60608083018051909101919091525160a0015173ffffffffffffffffffffffffffffffffffffffff161561200857806060015160a0015161200a565b305b606082015173ffffffffffffffffffffffffffffffffffffffff90911660a09091015261203d600260e085901c16151590565b80156120fa57506060818101510151604080830151835191517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff928316602482015291169063dd62ed3e9060440160206040518083038186803b1580156120c057600080fd5b505afa1580156120d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f891906132e1565b105b156121115761211181604001518260000151612587565b6000806000836000015173ffffffffffffffffffffffffffffffffffffffff166382c62f9685606001516040518263ffffffff1660e01b81526004016121579190614241565b608060405180830381600087803b15801561217157600080fd5b505af1158015612185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a991906144b6565b5090945090925090506121bc81836132ca565b9450836060015160600151831115612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4578656375746f723a207061696420616d6f756e74206973206c61726765722060448201527f7468616e2073776170416d6f756e74000000000000000000000000000000000060648201526084016102c0565b8360600151606001518310156122835761228384604001513385876060015160600151610bf591906132ca565b83516040805173ffffffffffffffffffffffffffffffffffffffff90921680835260208301889052908201527fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c4890606001611cc9565b6000806122e8848601866144ec565b905060018160800151106123fc57612327837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682604001518360800151612544565b60808201819052604082015160208301516123419261283c565b6020810151604080830151606084015191517ff9609f0800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291811660248301529091169063f9609f0890604401602060405180830381600087803b1580156123c257600080fd5b505af11580156123d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fa91906132e1565b505b6060810151815160408051600080825260208201928390527f7132bb7f00000000000000000000000000000000000000000000000000000000909252909273ffffffffffffffffffffffffffffffffffffffff1691637132bb7f91612469919085908190602481016145a8565b6040805180830381600087803b15801561248257600080fd5b505af1158015612496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ba91906145f1565b60208181015160608581015184516040805173ffffffffffffffffffffffffffffffffffffffff93841681529586018590529116908401529095509192507fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c48910160405180910390a160e084901c60011661253b57612538836135f7565b92505b50509392505050565b600080612550846129b6565b90508461256e578083116125645782612566565b805b915050612580565b801561257a5784611870565b60009150505b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff83811660248301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448084019190915283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291516000928392908616916126409190614649565b6000604051808303816000865af19150503d806000811461267d576040519150601f19603f3d011682016040523d82523d6000602084013e612682565b606091505b50915091508180156126ac5750805115806126ac5750808060200190518101906126ac9190614665565b6126e7576126bc84846000612b00565b6126e784847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612b00565b50505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061271b57600080fd5b5090565b806fffffffffffffffffffffffffffffffff8116811461273e57600080fd5b919050565b8161274d576126e7565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff85161415612835578015612826576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561280d57600080fd5b505af1158015612821573d6000803e3d6000fd5b505050505b6128308383612c69565b6126e7565b6126e78484845b8061284657505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916128dd9190614649565b6000604051808303816000865af19150503d806000811461291a576040519150601f19603f3d011682016040523d82523d6000602084013e61291f565b606091505b50915091508180156129495750805115806129495750808060200190518101906129499190614665565b6129af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016102c0565b5050505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff83161415612aae576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff16906370a08231906024015b60206040518083038186803b158015612a7057600080fd5b505afa158015612a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa891906132e1565b92915050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401612a58565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001790529151600092839290871691612b979190614649565b6000604051808303816000865af19150503d8060008114612bd4576040519150601f19603f3d011682016040523d82523d6000602084013e612bd9565b606091505b5091509150818015612c03575080511580612c03575080806020019051810190612c039190614665565b6129af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c4544000060448201526064016102c0565b80612c72575050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8416908390604051612ca99190614649565b60006040518083038185875af1925050503d8060008114612ce6576040519150601f19603f3d011682016040523d82523d6000602084013e612ceb565b606091505b5050905080612d7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201527f4c4544000000000000000000000000000000000000000000000000000000000060648201526084016102c0565b505050565b600080600060408486031215612d9657600080fd5b833567ffffffffffffffff80821115612dae57600080fd5b818601915086601f830112612dc257600080fd5b813581811115612dd157600080fd5b876020828501011115612de357600080fd5b6020928301989097509590910135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612e4b57612e4b612df9565b60405290565b60405160e0810167ffffffffffffffff81118282101715612e4b57612e4b612df9565b604051610200810167ffffffffffffffff81118282101715612e4b57612e4b612df9565b6040805190810167ffffffffffffffff81118282101715612e4b57612e4b612df9565b6040516080810167ffffffffffffffff81118282101715612e4b57612e4b612df9565b60405160c0810167ffffffffffffffff81118282101715612e4b57612e4b612df9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f4857612f48612df9565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114612f7257600080fd5b50565b803561273e81612f50565b600067ffffffffffffffff821115612f9a57612f9a612df9565b5060051b60200190565b600082601f830112612fb557600080fd5b81356020612fca612fc583612f80565b612f01565b82815260059290921b84018101918181019086841115612fe957600080fd5b8286015b848110156130045780358352918301918301612fed565b509695505050505050565b600082601f83011261302057600080fd5b81356020613030612fc583612f80565b82815260059290921b8401810191818101908684111561304f57600080fd5b8286015b8481101561300457803561306681612f50565b8352918301918301613053565b600082601f83011261308457600080fd5b813567ffffffffffffffff81111561309e5761309e612df9565b6130cf60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612f01565b8181528460208386010111156130e457600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261311257600080fd5b81356020613122612fc583612f80565b82815260059290921b8401810191818101908684111561314157600080fd5b8286015b8481101561300457803567ffffffffffffffff8111156131655760008081fd5b6131738986838b0101613073565b845250918301918301613145565b60006020828403121561319357600080fd5b813567ffffffffffffffff808211156131ab57600080fd5b9083019060a082860312156131bf57600080fd5b6131c7612e28565b6131d083612f75565b81526020830135828111156131e457600080fd5b6131f087828601612fa4565b60208301525060408301358281111561320857600080fd5b6132148782860161300f565b60408301525060608301358281111561322c57600080fd5b61323887828601613101565b6060830152506080830135608082015280935050505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561329657613296613254565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000828210156132dc576132dc613254565b500390565b6000602082840312156132f357600080fd5b5051919050565b60005b838110156133155781810151838201526020016132fd565b838111156126e75750506000910152565b6000815180845261333e8160208601602086016132fa565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600081518084526020808501945080840160005b838110156133b657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101613384565b509495945050505050565b600081518084526020808501945080840160005b838110156133b6578151875295820195908201906001016133d5565b600061012080830160028a10613430577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b89845260208085019290925288519081905261014080850192600583901b8601909101918a820160005b828110156134da578785037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec00186528151805186528481015185870152604080820151908701526060808201519087015260809081015160a0918701829052906134c681880183613326565b97860197965050509083019060010161345a565b5050505083810360408501526134f08189613370565b91505061353f606084018773ffffffffffffffffffffffffffffffffffffffff808251168352602082015115156020840152806040830151166040840152506060810151151560608301525050565b82810360e084015261355181866133c1565b91505082610100830152979650505050505050565b6000602080838503121561357957600080fd5b825167ffffffffffffffff81111561359057600080fd5b8301601f810185136135a157600080fd5b80516135af612fc582612f80565b81815260059190911b820183019083810190878311156135ce57600080fd5b928401925b828410156135ec578351825292840192908401906135d3565b979650505050505050565b60008161360657613606613254565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600060c0828403121561363e57600080fd5b60405160c0810181811067ffffffffffffffff8211171561366157613661612df9565b604052823561366f81612f50565b8152602083013561367f81612f50565b6020820152604083013561369281612f50565b604082015260608301356136a581612f50565b806060830152506080830135608082015260a08301358060020b81146136ca57600080fd5b60a08201529392505050565b6020815260008251604060208401526136f26060840182613326565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b73ffffffffffffffffffffffffffffffffffffffff851681526fffffffffffffffffffffffffffffffff841660208201528260020b604082015260806060820152600061376e6080830184613326565b9695505050505050565b6000806040838503121561378b57600080fd5b505080516020909101519092909150565b600060e082840312156137ae57600080fd5b60405160e0810181811067ffffffffffffffff821117156137d1576137d1612df9565b60405282356137df81612f50565b815260208301356137ef81612f50565b6020820152604083013561380281612f50565b6040820152606083013561381581612f50565b60608201526080838101359082015261383060a08401612f75565b60a082015260c083013560c08201528091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff8381169083168181101561387657613876613254565b039392505050565b600073ffffffffffffffffffffffffffffffffffffffff8083168185168083038211156138ad576138ad613254565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152861515604084015285606084015280851660808401525060c060a083015261390560c0830184613326565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a060808301526135ec60a0830184613326565b60007f800000000000000000000000000000000000000000000000000000000000000082141561398a5761398a613254565b5060000390565b600060a082840312156139a357600080fd5b6139ab612e28565b82356139b681612f50565b815260208301356139c681612f50565b602082015260408301356139d981612f50565b60408201526060838101359082015260808301356139f681612f50565b60808201529392505050565b600060a08284031215613a1457600080fd5b613a1c612e28565b8235613a2781612f50565b81526020830135613a3781612f50565b60208201526040830135613a4a81612f50565b60408201526060830135613a5d81612f50565b60608201526080928301359281019290925250919050565b600060208284031215613a8757600080fd5b815161258081612f50565b600060208284031215613aa457600080fd5b813567ffffffffffffffff80821115613abc57600080fd5b90830190818503610160811215613ad257600080fd5b613ada612e28565b8335613ae581612f50565b815260e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083011215613b1757600080fd5b613b1f612e51565b9150602084013582526040840135613b3681612f50565b60208301526060840135613b4981612f50565b60408301526080840135613b5c81612f50565b606083015260a0840135613b6f81612f50565b8060808401525060c084013560a083015260e084013560c0830152816020820152610100840135915082821115613ba557600080fd5b613bb187838601613073565b60408201526101208401356060820152613bce6101408501612f75565b60808201529695505050505050565b600061016087518352602088015173ffffffffffffffffffffffffffffffffffffffff80821660208601528060408b01511660408601528060608b01511660608601528060808b0151166080860152505060a088015160a084015260c088015160c08401528060e0840152613c5481840188613326565b915050846101008301528361012083015261376e61014083018473ffffffffffffffffffffffffffffffffffffffff169052565b600082601f830112613c9957600080fd5b81356020613ca9612fc583612f80565b82815260059290921b84018101918181019086841115613cc857600080fd5b8286015b8481101561300457803567ffffffffffffffff80821115613ced5760008081fd5b8189019150610200807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215613d275760008081fd5b613d2f612e74565b8784013581526040613d42818601612f75565b898301526060613d53818701612f75565b8284015260809150613d66828701612f75565b9083015260a0613d77868201612f75565b8284015260c09150613d8a828701612f75565b818401525060e080860135828401526101009150818601358184015250610120808601358284015261014091508186013585811115613dc95760008081fd5b613dd78f8c838a0101613073565b8285015250506101608086013585811115613df25760008081fd5b613e008f8c838a0101613073565b838501525061018091508186013585811115613e1c5760008081fd5b613e2a8f8c838a0101613073565b8285015250506101a08086013585811115613e455760008081fd5b613e538f8c838a0101613073565b83850152506101c091508186013585811115613e6f5760008081fd5b613e7d8f8c838a0101613073565b8285015250506101e08086013585811115613e985760008081fd5b613ea68f8c838a0101613073565b8484015250928501359284841115613ec057600091508182fd5b613ece8e8b86890101613073565b90830152508652505050918301918301613ccc565b600082601f830112613ef457600080fd5b81356020613f04612fc583612f80565b82815260059290921b84018101918181019086841115613f2357600080fd5b8286015b8481101561300457803567ffffffffffffffff80821115613f485760008081fd5b81890191506040807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215613f815760008081fd5b613f89612e98565b8784013583811115613f9b5760008081fd5b613fa98d8a83880101613073565b825250908301359082821115613fbf5760008081fd5b613fcd8c8984870101613073565b818901528652505050918301918301613f27565b600082601f830112613ff257600080fd5b81356020614002612fc583612f80565b82815260059290921b8401810191818101908684111561402157600080fd5b8286015b8481101561300457803563ffffffff811681146140425760008081fd5b8352918301918301614025565b60006020828403121561406157600080fd5b813567ffffffffffffffff8082111561407957600080fd5b908301906080828603121561408d57600080fd5b614095612ebb565b82356140a081612f50565b815260208301356140b081612f50565b602082015260408301356140c381612f50565b60408201526060830135828111156140da57600080fd5b929092019160c083870312156140ef57600080fd5b6140f7612ede565b83358381111561410657600080fd5b61411288828701613c88565b82525060208401358381111561412757600080fd5b61413388828701613ee3565b60208301525060408401358381111561414b57600080fd5b61415788828701613fe1565b604083015250606084013560608201526080840135608082015261417d60a08501612f75565b60a0820152606082015295945050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156141fe5782840389528151604081518187526141d082880182613326565b915050868201519150858103878701526141ea8183613326565b9a87019a95505050908401906001016141ae565b5091979650505050505050565b600081518084526020808501945080840160005b838110156133b657815163ffffffff168752958201959082019060010161421f565b6000602080835260e0808401855160c0808588015282825180855261010094508489019150848160051b8a0101878501945060005b8281101561440e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008b83030184528551610200815184528a8201516142d38c86018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408281015173ffffffffffffffffffffffffffffffffffffffff9081169186019190915260608084015182169086015260808084015182169086015260a080840151909116908501528682015187850152898201518a85015288820151898501526101208083015181860183905261434f83870182613326565b92505050610140808301518583038287015261436b8382613326565b9250505061016080830151858303828701526143878382613326565b9250505061018080830151858303828701526143a38382613326565b925050506101a080830151858303828701526143bf8382613326565b925050506101c080830151858303828701526143db8382613326565b925050506101e080830151925084820381860152506143fa8183613326565b978b0197958b019593505050600101614276565b50878b015197507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09650868a82030160408b015261444c8189614190565b9750505050604088015192508387860301606088015261446c858461420b565b945060608801516080880152608088015160a088015260a088015193506144aa8188018573ffffffffffffffffffffffffffffffffffffffff169052565b50929695505050505050565b600080600080608085870312156144cc57600080fd5b505082516020840151604085015160609095015191969095509092509050565b6000602082840312156144fe57600080fd5b813567ffffffffffffffff8082111561451657600080fd5b9083019060a0828603121561452a57600080fd5b614532612e28565b82358281111561454157600080fd5b61454d87828601613073565b8252506020830135915061456082612f50565b8160208201526040830135915061457682612f50565b8160408201526060830135915061458c82612f50565b8160608201526080830135608082015280935050505092915050565b6080815260006145bb6080830187613326565b73ffffffffffffffffffffffffffffffffffffffff86811660208501528516604084015282810360608401526135ec8185613326565b60006040828403121561460357600080fd5b6040516040810181811067ffffffffffffffff8211171561462657614626612df9565b604052825161463481612f50565b81526020928301519281019290925250919050565b6000825161465b8184602087016132fa565b9190910192915050565b60006020828403121561467757600080fd5b8151801515811461258057600080fdfea2646970667358221220a85ce9b39ccf53332740c1225126cef0bca605d85187c48524d7b01abd1dba6764736f6c63430008090033" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106102275760003560e01c8063715018a611610130578063b88d4fde116100b8578063d547741f1161007c578063d547741f1461051a578063e0034d9a1461052d578063e985e9c514610540578063f2fde38b14610553578063fb94bd8a1461056657600080fd5b8063b88d4fde146104a7578063c87b56dd146104ba578063ca15c873146104cd578063d40a0c51146104e0578063d5391393146104f357600080fd5b80639010d07c116100ff5780639010d07c1461045e57806391d148541461047157806395d89b4114610484578063a217fddf1461048c578063a22cb4651461049457600080fd5b8063715018a61461040457806373115ced1461040c57806376ae5bc81461042c5780638da5cb5b1461044d57600080fd5b8063294cdf0d116101b357806342842e0e1161018257806342842e0e1461038d57806342966c68146103a0578063460c2561146103b35780636352211e146103de57806370a08231146103f157600080fd5b8063294cdf0d1461032b5780632cfd3005146103545780632f2ff15d1461036757806336568abe1461037a57600080fd5b806318160ddd116101fa57806318160ddd146102a957806320f76482146102bb57806323b872dd146102ce578063248a9ca3146102e1578063282c51f31461030457600080fd5b806301ffc9a71461022c57806306fdde0314610254578063081812fc14610269578063095ea7b314610294575b600080fd5b61023f61023a3660046117b6565b610579565b60405190151581526020015b60405180910390f35b61025c61058a565b60405161024b9190611823565b61027c610277366004611836565b61061c565b6040516001600160a01b03909116815260200161024b565b6102a76102a236600461186b565b610645565b005b600d545b60405190815260200161024b565b6102ad6102c9366004611895565b610654565b6102a76102dc3660046118bb565b610698565b6102ad6102ef366004611836565b60009081526007602052604090206001015490565b6102ad7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b6102ad6103393660046118f7565b6001600160a01b03166000908152600b602052604090205490565b6102ad61036236600461186b565b610728565b6102a7610375366004611912565b6107e6565b6102a7610388366004611912565b6107fd565b6102a761039b3660046118bb565b610830565b6102a76103ae366004611836565b61084b565b6009546103c99062010000900463ffffffff1681565b60405163ffffffff909116815260200161024b565b61027c6103ec366004611836565b61087e565b6102ad6103ff3660046118f7565b610889565b6102a76108d1565b6102ad61041a366004611836565b600a6020526000908152604090205481565b60095461043a9061ffff1681565b60405161ffff909116815260200161024b565b6000546001600160a01b031661027c565b61027c61046c36600461193e565b6108e5565b61023f61047f366004611912565b610904565b61025c61092f565b6102ad600081565b6102a76104a2366004611960565b61093e565b6102a76104b53660046119b2565b610949565b61025c6104c8366004611836565b610960565b6102ad6104db366004611836565b6109c7565b6102a76104ee366004611a8e565b6109de565b6102ad7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102a7610528366004611912565b610a53565b6102a761053b366004611ab3565b610a5b565b61023f61054e366004611ad7565b610aac565b6102a76105613660046118f7565b610ada565b6102a7610574366004611b01565b610b18565b600061058482610b6b565b92915050565b60606001805461059990611b73565b80601f01602080910402602001604051908101604052809291908181526020018280546105c590611b73565b80156106125780601f106105e757610100808354040283529160200191610612565b820191906000526020600020905b8154815290600101906020018083116105f557829003601f168201915b5050505050905090565b600061062782610b90565b506000828152600560205260409020546001600160a01b0316610584565b610650828233610bc9565b5050565b600c5460009060ff1661067a57604051638ad6d34360e01b815260040160405180910390fd5b5060095465ffff0000000060209190911b1663ffffffff9091161790565b6001600160a01b0382166106c757604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006106d4838333610bd6565b9050836001600160a01b0316816001600160a01b031614610722576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016106be565b50505050565b60007f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661075481610c8b565b600061075f85610889565b111561077e5760405163f3ac1db960e01b815260040160405180910390fd5b6009546000906107999062010000900463ffffffff16610654565b90506107a58582610c95565b6000818152600a602052604090209390935550506009805465ffffffff0000198116620100009182900463ffffffff90811660010116909102179055919050565b6107ee610caf565b6107f88282610cdc565b505050565b6001600160a01b03811633146108265760405163334bd91960e11b815260040160405180910390fd5b6107f88282610d11565b6107f883838360405180602001604052806000815250610949565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861087581610c8b565b61065082610d3e565b600061058482610b90565b60006001600160a01b0382166108b5576040516322718ad960e21b8152600060048201526024016106be565b506001600160a01b031660009081526004602052604090205490565b6108d9610caf565b6108e36000610d79565b565b60008281526008602052604081206108fd9083610dc9565b9392505050565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606002805461059990611b73565b610650338383610dd5565b610954848484610698565b61072284848484610e74565b606061096b82610b90565b506000610976610f9d565b9050600081511161099657604051806020016040528060008152506108fd565b806109a084610fac565b6040516020016109b1929190611bad565b6040516020818303038152906040529392505050565b60008181526008602052604081206105849061103f565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610a0881610c8b565b6000610a1384610889565b1115610a325760405163f3ac1db960e01b815260040160405180910390fd5b610a3c8385610c95565b506000928352600a60205260409092209190915550565b610826610caf565b610a63610caf565b600c5460ff1615610a87576040516302e79d6d60e61b815260040160405180910390fd5b6009805461ffff191661ffff92909216919091179055600c805460ff19166001179055565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b610ae2610caf565b6001600160a01b038116610b0c57604051631e4fbdf760e01b8152600060048201526024016106be565b610b1581610d79565b50565b610b20610caf565b600e610b2d828483611c2a565b507f31fb8e7479d927593f753403c4ef80f97d88c6c81a9f3cb9a94c0292a13cc26b8282604051610b5f929190611cea565b60405180910390a15050565b60006001600160e01b03198216635a05180f60e01b1480610584575061058482611049565b6000818152600360205260408120546001600160a01b03168061058457604051637e27328960e01b8152600481018490526024016106be565b6107f8838383600161106e565b600080610be4858585611174565b90506001600160a01b038116610c2957600d8054906000610c0483611d2f565b90915550506001600160a01b0385166000908152600b60205260409020849055610c83565b6001600160a01b038516610c6a57600d8054906000610c4783611d48565b90915550506001600160a01b0381166000908152600b6020526040812055610c83565b60405163647d843160e11b815260040160405180910390fd5b949350505050565b610b15813361126d565b6106508282604051806020016040528060008152506112a6565b6000546001600160a01b031633146108e35760405163118cdaa760e01b81523360048201526024016106be565b600080610ce984846112bd565b905080156108fd576000848152600860205260409020610d099084611351565b509392505050565b600080610d1e8484611366565b905080156108fd576000848152600860205260409020610d0990846113d3565b6000610d4d6000836000610bd6565b90506001600160a01b03811661065057604051637e27328960e01b8152600481018390526024016106be565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006108fd83836113e8565b6001600160a01b038216610e0757604051630b61174360e31b81526001600160a01b03831660048201526024016106be565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561072257604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610eb6903390889087908790600401611d5f565b6020604051808303816000875af1925050508015610ef1575060408051601f3d908101601f19168201909252610eee91810190611d9c565b60015b610f5a573d808015610f1f576040519150601f19603f3d011682016040523d82523d6000602084013e610f24565b606091505b508051600003610f5257604051633250574960e11b81526001600160a01b03851660048201526024016106be565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610f9657604051633250574960e11b81526001600160a01b03851660048201526024016106be565b5050505050565b6060600e805461059990611b73565b60606000610fb983611412565b600101905060008167ffffffffffffffff811115610fd957610fd961199c565b6040519080825280601f01601f191660200182016040528015611003576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461100d57509392505050565b6000610584825490565b60006001600160e01b03198216637965db0b60e01b14806105845750610584826114ea565b808061108257506001600160a01b03821615155b1561114457600061109284610b90565b90506001600160a01b038316158015906110be5750826001600160a01b0316816001600160a01b031614155b80156110d157506110cf8184610aac565b155b156110fa5760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016106be565b81156111425783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260056020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546001600160a01b03908116908316156111a1576111a181848661153a565b6001600160a01b038116156111df576111be60008560008061106e565b6001600160a01b038116600090815260046020526040902080546000190190555b6001600160a01b0385161561120e576001600160a01b0385166000908152600460205260409020805460010190555b60008481526003602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6112778282610904565b6106505760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016106be565b6112b0838361159e565b6107f86000848484610e74565b60006112c98383610904565b6113495760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556113013390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610584565b506000610584565b60006108fd836001600160a01b038416611603565b60006113728383610904565b156113495760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610584565b60006108fd836001600160a01b03841661164a565b60008260000182815481106113ff576113ff611db9565b9060005260206000200154905092915050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114515772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061147d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061149b57662386f26fc10000830492506010015b6305f5e10083106114b3576305f5e100830492506008015b61271083106114c757612710830492506004015b606483106114d9576064830492506002015b600a83106105845760010192915050565b60006001600160e01b031982166380ac58cd60e01b148061151b57506001600160e01b03198216635b5e139f60e01b145b8061058457506301ffc9a760e01b6001600160e01b0319831614610584565b61154583838361173d565b6107f8576001600160a01b03831661157357604051637e27328960e01b8152600481018290526024016106be565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016106be565b6001600160a01b0382166115c857604051633250574960e11b8152600060048201526024016106be565b60006115d683836000610bd6565b90506001600160a01b038116156107f8576040516339e3563760e11b8152600060048201526024016106be565b600081815260018301602052604081205461134957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b6000818152600183016020526040812054801561173357600061166e600183611dcf565b855490915060009061168290600190611dcf565b90508082146116e75760008660000182815481106116a2576116a2611db9565b90600052602060002001549050808760000184815481106116c5576116c5611db9565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806116f8576116f8611de2565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b60006001600160a01b03831615801590610c835750826001600160a01b0316846001600160a01b0316148061177757506117778484610aac565b80610c835750506000908152600560205260409020546001600160a01b03908116911614919050565b6001600160e01b031981168114610b1557600080fd5b6000602082840312156117c857600080fd5b81356108fd816117a0565b60005b838110156117ee5781810151838201526020016117d6565b50506000910152565b6000815180845261180f8160208601602086016117d3565b601f01601f19169290920160200192915050565b6020815260006108fd60208301846117f7565b60006020828403121561184857600080fd5b5035919050565b80356001600160a01b038116811461186657600080fd5b919050565b6000806040838503121561187e57600080fd5b6118878361184f565b946020939093013593505050565b6000602082840312156118a757600080fd5b813563ffffffff811681146108fd57600080fd5b6000806000606084860312156118d057600080fd5b6118d98461184f565b92506118e76020850161184f565b9150604084013590509250925092565b60006020828403121561190957600080fd5b6108fd8261184f565b6000806040838503121561192557600080fd5b823591506119356020840161184f565b90509250929050565b6000806040838503121561195157600080fd5b50508035926020909101359150565b6000806040838503121561197357600080fd5b61197c8361184f565b91506020830135801515811461199157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156119c857600080fd5b6119d18561184f565b93506119df6020860161184f565b925060408501359150606085013567ffffffffffffffff80821115611a0357600080fd5b818701915087601f830112611a1757600080fd5b813581811115611a2957611a2961199c565b604051601f8201601f19908116603f01168101908382118183101715611a5157611a5161199c565b816040528281528a6020848701011115611a6a57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080600060608486031215611aa357600080fd5b833592506118e76020850161184f565b600060208284031215611ac557600080fd5b813561ffff811681146108fd57600080fd5b60008060408385031215611aea57600080fd5b611af38361184f565b91506119356020840161184f565b60008060208385031215611b1457600080fd5b823567ffffffffffffffff80821115611b2c57600080fd5b818501915085601f830112611b4057600080fd5b813581811115611b4f57600080fd5b866020828501011115611b6157600080fd5b60209290920196919550909350505050565b600181811c90821680611b8757607f821691505b602082108103611ba757634e487b7160e01b600052602260045260246000fd5b50919050565b60008351611bbf8184602088016117d3565b835190830190611bd38183602088016117d3565b01949350505050565b601f8211156107f857600081815260208120601f850160051c81016020861015611c035750805b601f850160051c820191505b81811015611c2257828155600101611c0f565b505050505050565b67ffffffffffffffff831115611c4257611c4261199c565b611c5683611c508354611b73565b83611bdc565b6000601f841160018114611c8a5760008515611c725750838201355b600019600387901b1c1916600186901b178355610f96565b600083815260209020601f19861690835b82811015611cbb5786850135825560209485019460019092019101611c9b565b5086821015611cd85760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611d4157611d41611d19565b5060010190565b600081611d5757611d57611d19565b506000190190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611d92908301846117f7565b9695505050505050565b600060208284031215611dae57600080fd5b81516108fd816117a0565b634e487b7160e01b600052603260045260246000fd5b8181038181111561058457610584611d19565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220266000e3d7a46d1e2589cc0f8ae512094b276c79f6bef02a1787cb5b668150ab64736f6c63430008140033" + }, + { + "address": "0xa1737a96531b67a85213df67af4526559df86a7f", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80631bcbb88e14610046578063266d2daa14610077578063c9f745071461008a575b600080fd5b610059610054366004610192565b6100be565b60405167ffffffffffffffff90911681526020015b60405180910390f35b610059610085366004610192565b610146565b6100ae610098366004610192565b6001600160801b03166710000000400000001490565b604051901515815260200161006e565b600080805b601081101561013f576000805460016001607b1b03600587901c1695601f169190829081106100f4576100f46101c2565b90600052602060002090600491828204019190066008029054906101000a900467ffffffffffffffff168361012991906101ee565b92505080806101379061020f565b9150506100c3565b5092915050565b600080805b601081101561013f5760016001607b1b03600585901c1693601f1667ffffffffffffffff831681111561017f578060ff1692505b508061018a8161020f565b91505061014b565b6000602082840312156101a457600080fd5b81356001600160801b03811681146101bb57600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff81811683821601908082111561013f5761013f6101d8565b600060018201610221576102216101d8565b506001019056fea26469706673582212202a0cfcadc2f7b0d737d4502b7c4b9060be52deedc3044a781b3252952868309764736f6c63430008140033" + }, + { + "address": "0x655d9ce049e8a98e91ec3419deb7e2c288d7f87c", + "nonce": 23, + "balance": "0x000000000000000000000000000000000000000000000000003b4e77204e77ea", + "code": "0x" + }, + { + "address": "0x8e480709a03aa3856ae20fb9648ff7a379d485fd", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106102ad5760003560e01c8063715018a611610165578063a6a913f6116100cc578063e722a8d711610085578063e722a8d71461088f578063e985e9c5146108a4578063f23a6e61146108c4578063f2fde38b1461090a578063f70bbc521461092a578063f9f0164a14610950578063fd1c82501461096757600080fd5b8063a6a913f6146107cb578063af2f13e214610806578063b88d4fde14610819578063c75ff55a14610839578063c87b56dd14610859578063e627f2db1461087957600080fd5b80638da5cb5b1161011e5780638da5cb5b1461071657806395d4063f1461073457806395d89b41146107545780639a6a327c146107695780639b7e11c714610796578063a22cb465146107ab57600080fd5b8063715018a6146106515780637669a2a8146106665780637bd67868146106865780637fac96ac146106a657806381fb1fb4146106d45780638456cb591461070157600080fd5b80633a0277d9116102145780634f6ccce7116101cd5780634f6ccce714610559578063565b9a2a146105795780635c975abb146105ac578063616fc704146105c45780636352211e146105f1578063705c1a111461061157806370a082311461063157600080fd5b80633a0277d91461048a5780633f4ba83a146104b757806342842e0e146104cc57806342966c68146104ec5780634821c1bc1461050c5780634b07954a1461052c57600080fd5b806318160ddd1161026657806318160ddd146103dd5780631f040297146103fd57806323b872dd1461041d5780632eb4a7ab1461043d5780632f745c5914610454578063362f04c01461047457600080fd5b806301ffc9a7146102b957806302a57a45146102ee57806306fdde0314610310578063081812fc14610332578063095ea7b31461035f578063150b7a021461037f57600080fd5b366102b457005b600080fd5b3480156102c557600080fd5b506102d96102d4366004613853565b61097e565b60405190151581526020015b60405180910390f35b3480156102fa57600080fd5b5061030e610309366004613870565b61098f565b005b34801561031c57600080fd5b50610325610a19565b6040516102e591906138d9565b34801561033e57600080fd5b5061035261034d366004613870565b610aab565b6040516102e591906138ec565b34801561036b57600080fd5b5061030e61037a366004613917565b610ad2565b34801561038b57600080fd5b506103c461039a366004613989565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f95945050505050565b6040516001600160e01b031990911681526020016102e5565b3480156103e957600080fd5b50610161545b6040519081526020016102e5565b34801561040957600080fd5b5061030e610418366004613ae2565b610bec565b34801561042957600080fd5b5061030e610438366004613bd1565b610db0565b34801561044957600080fd5b506103ef6101925481565b34801561046057600080fd5b506103ef61046f366004613917565b610de2565b34801561048057600080fd5b50610197546103ef565b34801561049657600080fd5b506104aa6104a5366004613c9b565b610e79565b6040516102e59190613db7565b3480156104c357600080fd5b5061030e611369565b3480156104d857600080fd5b5061030e6104e7366004613bd1565b61137b565b3480156104f857600080fd5b5061030e610507366004613870565b611396565b34801561051857600080fd5b5061030e610527366004613e04565b6113c7565b34801561053857600080fd5b5061054c610547366004613870565b61147c565b6040516102e59190613e21565b34801561056557600080fd5b506103ef610574366004613870565b6114e2565b34801561058557600080fd5b50610599610594366004613870565b611577565b6040516102e59796959493929190613e41565b3480156105b857600080fd5b5060975460ff166102d9565b3480156105d057600080fd5b506105e46105df366004613e93565b611669565b6040516102e59190613ee0565b3480156105fd57600080fd5b5061035261060c366004613870565b611867565b34801561061d57600080fd5b5061035261062c366004613870565b61189c565b34801561063d57600080fd5b506103ef61064c366004613f18565b6118c7565b34801561065d57600080fd5b5061030e61194d565b34801561067257600080fd5b506102d9610681366004613f33565b61195f565b34801561069257600080fd5b5061030e6106a1366004613f79565b611a03565b3480156106b257600080fd5b506103ef6106c1366004613870565b61019a6020526000908152604090205481565b3480156106e057600080fd5b506106f46106ef366004613fad565b611a1c565b6040516102e59190613fcf565b34801561070d57600080fd5b5061030e611b1f565b34801561072257600080fd5b5060fb546001600160a01b0316610352565b34801561074057600080fd5b506102d961074f366004614040565b611b2f565b34801561076057600080fd5b50610325611b4b565b34801561077557600080fd5b50610789610784366004614040565b611b5a565b6040516102e5919061405b565b3480156107a257600080fd5b506000196103ef565b3480156107b757600080fd5b5061030e6107c63660046140d3565b611cb4565b3480156107d757600080fd5b50610191546107f09062010000900464ffffffffff1681565b60405164ffffffffff90911681526020016102e5565b6103ef61081436600461410a565b611cbf565b34801561082557600080fd5b5061030e61083436600461417b565b611de8565b34801561084557600080fd5b5061030e610854366004613f79565b611e20565b34801561086557600080fd5b50610325610874366004613870565b611e35565b34801561088557600080fd5b50610196546103ef565b34801561089b57600080fd5b506105e4611f5c565b3480156108b057600080fd5b506102d96108bf3660046141ea565b611fd8565b3480156108d057600080fd5b506103c46108df36600461421d565b7ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf979695505050505050565b34801561091657600080fd5b5061030e610925366004613f18565b612006565b34801561093657600080fd5b50610191546107f090600160381b900464ffffffffff1681565b34801561095c57600080fd5b506103ef61019b5481565b34801561097357600080fd5b506103ef61019c5481565b60006109898261207c565b92915050565b6109976120a1565b61099f6120fb565b6109a7612144565b6101955461019654604051638c0f463560e01b81526001600160a01b0390921691638c0f4635916109de9160040190815260200190565b600060405180830381600087803b1580156109f857600080fd5b505af1158015610a0c573d6000803e3d6000fd5b5050506101929190915550565b606060658054610a2890614294565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5490614294565b8015610aa15780601f10610a7657610100808354040283529160200191610aa1565b820191906000526020600020905b815481529060010190602001808311610a8457829003601f168201915b5050505050905090565b6000610ab68261219f565b506000908152606960205260409020546001600160a01b031690565b6000610add82611867565b9050806001600160a01b0316836001600160a01b031603610b4f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610b6b5750610b6b8133611fd8565b610bdd5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610b46565b610be783836121c4565b505050565b600054610100900460ff1615808015610c0c5750600054600160ff909116105b80610c265750303b158015610c26575060005460ff166001145b610c895760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b46565b6000805460ff191660011790558015610cac576000805461ff0019166101001790555b610191805464ffffffffff848116600160381b0264ffffffffff60381b199187166201000002919091166bffffffffffffffffffff00001990921691909117179055610193610cfb878261431c565b50610194610d09868261431c565b50610191805460ff19168a151517905561019580546001600160a01b0319166001600160a01b038616179055610d3f8888612232565b610d47612263565b610d4f612292565b610d576122c1565b610d5f6122c1565b8015610da5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b610dbb335b826122e8565b610dd75760405162461bcd60e51b8152600401610b46906143db565b610be7838383612346565b6000610ded836118c7565b8210610e4f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610b46565b506001600160a01b0391909116600090815261015f60209081526040808320938352929052205490565b6060610e836120a1565b610e8b612144565b610e93611369565b61019154610100900460ff1615610eec5760405162461bcd60e51b815260206004820152601d60248201527f53657373696f6e2077696e6e65727320616c726561647920666f756e640000006044820152606401610b46565b6000610ef86101615490565b610196549091506000906001600160401b03811115610f1957610f19613a10565b604051908082528060200260200182016040528015610f42578160200160208202803683370190505b50905081600003610f565791506113619050565b60005b610196548110156112b15782156112b1578551811461129f576000878281518110610f8657610f86614428565b602002602001015190506000878381518110610fa457610fa4614428565b6020026020010151905060006101978281548110610fc457610fc4614428565b600091825260208220015489516001600160a01b039091169250899086908110610ff057610ff0614428565b6020026020010151905061101e8c868151811061100f5761100f614428565b6020026020010151838361195f565b6110615760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21036b2b935b63290383937b7b360611b6044820152606401610b46565b61019554604051632d3e27f760e01b815260048101869052602481018790526001600160a01b0390911690632d3e27f790604401602060405180830381865afa1580156110b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d6919061443e565b6111125760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610b46565b600061111e8886614471565b905060005b868110156111a85760008c828151811061113f5761113f614428565b6020026020010151905085811015611195576000610197828154811061116757611167614428565b6000918252602090912001546001600160a01b03169050611187816118c7565b611191908561449b565b9350505b50806111a0816144ae565b915050611123565b508181146111b5876124a5565b6111be836124a5565b6111c7856124a5565b6040516020016111d9939291906144c7565b604051602081830303815290604052906112065760405162461bcd60e51b8152600401610b4691906138d9565b5082610196878154811061121c5761121c614428565b906000526020600020906005020160040160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508287878151811061126457611264614428565b60200260200101906001600160a01b031690816001600160a01b03168152505061128d836118c7565b6112979089614543565b975050505050505b806112a9816144ae565b915050610f59565b5060005b6101965481101561134c5760008282815181106112d4576112d4614428565b6020026020010151905060006001600160a01b0316816001600160a01b0316146113395761019b8054906000611309836144ae565b909155505061019b5461131c8282612537565b61132783600261449b565b600091825261019d6020526040909120555b5080611344816144ae565b9150506112b5565b50610191805461ff0019166101001790559150505b949350505050565b6113716120a1565b611379612640565b565b610be783838360405180602001604052806000815250611de8565b61139f33610db5565b6113bb5760405162461bcd60e51b8152600401610b46906143db565b6113c48161268c565b50565b61019154610100900460ff166114165760405162461bcd60e51b815260206004820152601460248201527313595d1a1bd9081b9bdd08185b1b1bddc81e595d60621b6044820152606401610b46565b61141e612144565b33600061142a826118c7565b90506000611439600183614543565b90505b60006114488483610de2565b600081815261019d6020526040812054919250036114695761146981611396565b508061147481614556565b91505061143c565b6040805180820190915260008082526020820152600061019783815481106114a6576114a6614428565b60009182526020918290200154604080518082019091526001600160a01b0390911680825292509081016114d9836118c7565b90529392505050565b60006114ee6101615490565b82106115515760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610b46565b610161828154811061156557611565614428565b90600052602060002001549050919050565b610196818154811061158857600080fd5b90600052602060002090600502016000915090508060000180546115ab90614294565b80601f01602080910402602001604051908101604052809291908181526020018280546115d790614294565b80156116245780601f106115f957610100808354040283529160200191611624565b820191906000526020600020905b81548152906001019060200180831161160757829003601f168201915b505050600184015460028501546003860154600490960154949591949093506001600160a01b03808316935060ff600160a01b8404811693600160a81b900416911687565b60606116736120a1565b61167b61275b565b6101915442600160381b90910464ffffffffff16106116dc5760405162461bcd60e51b815260206004820152601a60248201527f53657373696f6e206973206e6f742073746172746564207965740000000000006044820152606401610b46565b60008251116117275760405162461bcd60e51b8152602060048201526017602482015276139bc81d1c9e1b881a185cda195cc81c1c9bdd9a591959604a1b6044820152606401610b46565b600082516001600160401b0381111561174257611742613a10565b60405190808252806020026020018201604052801561176b578160200160208202803683370190505b50905060005b835181101561185f5761019a600085838151811061179157611791614428565b60200260200101518152602001908152602001600020546000146117eb5760405162461bcd60e51b8152602060048201526011602482015270151c9e1b88185b1c9958591e481d5cd959607a1b6044820152606401610b46565b60006117f886600061271d565b90508083838151811061180d5761180d614428565b6020026020010181815250508061019a600087858151811061183157611831614428565b6020026020010151815260200190815260200160002081905550508080611857906144ae565b915050611771565b509392505050565b6000818152606760205260408120546001600160a01b0316806109895760405162461bcd60e51b8152600401610b469061456d565b61019781815481106118ad57600080fd5b6000918252602090912001546001600160a01b0316905081565b60006001600160a01b0382166119315760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b46565b506001600160a01b031660009081526068602052604090205490565b6119556120a1565b61137960006127ab565b6101925460009081036119a55760405162461bcd60e51b815260206004820152600e60248201526d149bdbdd081b9bdd08199bdd5b9960921b6044820152606401610b46565b61019254604080516001600160a01b038616602082015290810184905261136191869160600160408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052805190602001206127fd565b611a0b6120a1565b610194611a18828261431c565b5050565b60606000611a2a8484614543565b6001600160401b03811115611a4157611a41613a10565b604051908082528060200260200182016040528015611a8657816020015b6040805180820190915260008082526020820152815260200190600190039081611a5f5790505b50905060005b8385101561185f5760006101978681548110611aaa57611aaa614428565b60009182526020918290200154604080518082019091526001600160a01b039091168082529250908101611add836118c7565b815250838381518110611af257611af2614428565b60200260200101819052508180611b08906144ae565b925050508480611b17906144ae565b955050611a8c565b611b276120a1565b611379612813565b6000611b396120a1565b611b4282612850565b5060015b919050565b606060668054610a2890614294565b6040805160e081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c08101919091526101968260ff1681548110611baa57611baa614428565b90600052602060002090600502016040518060e0016040529081600082018054611bd390614294565b80601f0160208091040260200160405190810160405280929190818152602001828054611bff90614294565b8015611c4c5780601f10611c2157610100808354040283529160200191611c4c565b820191906000526020600020905b815481529060010190602001808311611c2f57829003601f168201915b5050509183525050600182015460208201526002820154604082015260038201546001600160a01b03808216606084015260ff600160a01b830481166080850152600160a81b909204909116151560a083015260049092015490911660c09091015292915050565b611a18338383612c32565b6000611cc96120a1565b611cd161275b565b6040805160e081018252878152602081018790529081018590526001600160a01b038416606082015260ff83166080820152600060a0820181905260c0820181905261019680546001810182559152815160059091027f828feda00a4b64eb35101b6df8f6c29717b1ea6bae5dd03d3ddada8de0a9e7cb01908190611d56908261431c565b5060208201516001820155604082015160028201556060820151600382018054608085015160a08601511515600160a81b0260ff60a81b1960ff909216600160a01b026001600160a81b03199093166001600160a01b0395861617929092171617905560c09092015160049091018054919092166001600160a01b031991909116179055506101965495945050505050565b611df233836122e8565b611e0e5760405162461bcd60e51b8152600401610b46906143db565b611e1a84848484612cfc565b50505050565b611e286120a1565b610193611a18828261431c565b6060611e408261219f565b600082815261019d602052604081205490606090829003611ef657611eef6101938054611e6c90614294565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9890614294565b8015611ee55780601f10611eba57610100808354040283529160200191611ee5565b820191906000526020600020905b815481529060010190602001808311611ec857829003601f168201915b5050505050612d2f565b9050611f55565b81600103611f0f57611eef6101948054611e6c90614294565b6000611f1c600284614543565b9050611f516101968281548110611f3557611f35614428565b90600052602060002090600502016000018054611e6c90614294565b9150505b9392505050565b61019554604051632c9bf44560e11b81526060916001600160a01b031690635937e88a90611f8e9030906004016138ec565b600060405180830381865afa158015611fab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fd3919081019061459f565b905090565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b61200e6120a1565b6001600160a01b0381166120735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b46565b6113c4816127ab565b60006001600160e01b0319821663780e9d6360e01b1480610989575061098982612d60565b60fb546001600160a01b031633146113795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b46565b60975460ff166113795760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610b46565b61019154426201000090910464ffffffffff16106113795760405162461bcd60e51b815260206004820152601860248201527714d95cdcda5bdb881a5cc81b9bdd08195b991959081e595d60421b6044820152606401610b46565b6121a881612db0565b6113c45760405162461bcd60e51b8152600401610b469061456d565b600081815260696020526040902080546001600160a01b0319166001600160a01b03841690811790915581906121f982611867565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600054610100900460ff166122595760405162461bcd60e51b8152600401610b469061462f565b611a188282612dcd565b600054610100900460ff1661228a5760405162461bcd60e51b8152600401610b469061462f565b611379612e0d565b600054610100900460ff166122b95760405162461bcd60e51b8152600401610b469061462f565b611379612e40565b600054610100900460ff166113795760405162461bcd60e51b8152600401610b469061462f565b6000806122f483611867565b9050806001600160a01b0316846001600160a01b0316148061231b575061231b8185611fd8565b806113615750836001600160a01b031661233484610aab565b6001600160a01b031614949350505050565b826001600160a01b031661235982611867565b6001600160a01b03161461237f5760405162461bcd60e51b8152600401610b469061467a565b6001600160a01b0382166123e15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b46565b6123ee8383836001612e70565b826001600160a01b031661240182611867565b6001600160a01b0316146124275760405162461bcd60e51b8152600401610b469061467a565b600081815260696020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652606885528386208054600019019055908716808652838620805460010190558686526067909452828520805490921684179091559051849360008051602061488d83398151915291a4505050565b606060006124b283612fd7565b60010190506000816001600160401b038111156124d1576124d1613a10565b6040519080825280601f01601f1916602001820160405280156124fb576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461250557509392505050565b6001600160a01b03821661258d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b46565b61259681612db0565b156125b35760405162461bcd60e51b8152600401610b46906146bf565b6125c1600083836001612e70565b6125ca81612db0565b156125e75760405162461bcd60e51b8152600401610b46906146bf565b6001600160a01b038216600081815260686020908152604080832080546001019055848352606790915280822080546001600160a01b03191684179055518392919060008051602061488d833981519152908290a45050565b6126486120fb565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405161268291906138ec565b60405180910390a1565b600061269782611867565b90506126a7816000846001612e70565b6126b082611867565b600083815260696020908152604080832080546001600160a01b03199081169091556001600160a01b03851680855260688452828520805460001901905587855260679093528184208054909116905551929350849260008051602061488d833981519152908390a45050565b61019b80546000918261272f836144ae565b909155505061019b5461274284826130af565b600081815261019d602052604090209290925550919050565b61019154426201000090910464ffffffffff16116113795760405162461bcd60e51b815260206004820152600d60248201526c14d95cdcda5bdb88195b991959609a1b6044820152606401610b46565b60fb80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008261280a85846130c9565b14949350505050565b61281b61310e565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586126753390565b612858612144565b60006101968260ff168154811061287157612871614428565b90600052602060002090600502016040518060e001604052908160008201805461289a90614294565b80601f01602080910402602001604051908101604052809291908181526020018280546128c690614294565b80156129135780601f106128e857610100808354040283529160200191612913565b820191906000526020600020905b8154815290600101906020018083116128f657829003601f168201915b5050509183525050600182015460208201526002820154604082015260038201546001600160a01b03808216606084015260ff600160a01b830481166080850152600160a81b909204909116151560a0830152600490920154821660c09182015282015191925060009116612989575032612990565b5060c08101515b816080015160ff16600003612a3b5760208201516040516000916001600160a01b038416918381818185875af1925050503d80600081146129ed576040519150601f19603f3d011682016040523d82523d6000602084013e6129f2565b606091505b5050905080612a355760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610b46565b50612bec565b816080015160ff16600103612acd57606082015160208301516040516323b872dd60e01b81526001600160a01b038316916323b872dd91612a839130918791906004016146f6565b6020604051808303816000875af1158015612aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac6919061443e565b5050612bec565b816080015160ff16600203612b4d5760608201516040808401519051632142170760e11b81526001600160a01b038316916342842e0e91612b159130918791906004016146f6565b600060405180830381600087803b158015612b2f57600080fd5b505af1158015612b43573d6000803e3d6000fd5b5050505050612bec565b816080015160ff16600303612bec57606082015160408084015160208501519151637921219560e11b81523060048201526001600160a01b0385811660248301526044820192909252606481019290925260a06084830152600060a483015282169063f242432a9060c401600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b50505050505b60016101968460ff1681548110612c0557612c05614428565b906000526020600020906005020160030160156101000a81548160ff021916908315150217905550505050565b816001600160a01b0316836001600160a01b031603612c8f5760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610b46565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612d07848484612346565b612d1384848484613154565b611e1a5760405162461bcd60e51b8152600401610b469061471a565b6060612d3a82613252565b604051602001612d4a919061476c565b6040516020818303038152906040529050919050565b60006001600160e01b031982166380ac58cd60e01b1480612d9157506001600160e01b03198216635b5e139f60e01b145b8061098957506301ffc9a760e01b6001600160e01b0319831614610989565b6000908152606760205260409020546001600160a01b0316151590565b600054610100900460ff16612df45760405162461bcd60e51b8152600401610b469061462f565b6065612e00838261431c565b506066610be7828261431c565b600054610100900460ff16612e345760405162461bcd60e51b8152600401610b469061462f565b6097805460ff19169055565b600054610100900460ff16612e675760405162461bcd60e51b8152600401610b469061462f565b611379336127ab565b612e7c848484846133a4565b6101915460ff1680612e9557506001600160a01b038416155b80612ead575060fb546001600160a01b038581169116145b612ef95760405162461bcd60e51b815260206004820152601a60248201527f5469636b6574206973206e6f74207472616e7366657261626c650000000000006044820152606401610b46565b826001600160a01b0316846001600160a01b03160315611e1a576001600160a01b03841615801590612f335750612f2f846118c7565b6001145b15612f4157612f41846134e6565b6001600160a01b038316612f6457600082815261019d6020526040812055611e1a565b612f6d836118c7565b600003611e1a5761019780546001600160a01b038516600081815261019860205260408120839055600183018455929092527f3ea4d693734e62a1b4642df418cf4aae0e5ba336a2d6024b2d33585611a4e2eb0180546001600160a01b0319169091179055611e1a565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106130165772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613042576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061306057662386f26fc10000830492506010015b6305f5e1008310613078576305f5e100830492506008015b612710831061308c57612710830492506004015b6064831061309e576064830492506002015b600a83106109895760010192915050565b611a188282604051806020016040528060008152506135da565b600081815b845181101561185f576130fa828683815181106130ed576130ed614428565b602002602001015161360d565b915080613106816144ae565b9150506130ce565b60975460ff16156113795760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610b46565b60006001600160a01b0384163b1561324a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906131989033908990889088906004016147b1565b6020604051808303816000875af19250505080156131d3575060408051601f3d908101601f191682019092526131d0918101906147ee565b60015b613230573d808015613201576040519150601f19603f3d011682016040523d82523d6000602084013e613206565b606091505b5080516000036132285760405162461bcd60e51b8152600401610b469061471a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611361565b506001611361565b6060815160000361327157505060408051602081019091526000815290565b600060405180606001604052806040815260200161484d60409139905060006003845160026132a0919061449b565b6132aa919061480b565b6132b590600461481f565b6001600160401b038111156132cc576132cc613a10565b6040519080825280601f01601f1916602001820160405280156132f6576020820181803683370190505b509050600182016020820185865187015b80821015613362576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250613307565b505060038651066001811461337e576002811461339157613399565b603d6001830353603d6002830353613399565b603d60018303535b509195945050505050565b6133b084848484613639565b600181111561341f5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610b46565b816001600160a01b03851661347d57613478816101618054600083815261016260205260408120829055600182018355919091527fafbb1c043347995df017ce3291b765e028ad5f784d2aa00c3f5e073760a4de8b0155565b6134a0565b836001600160a01b0316856001600160a01b0316146134a0576134a085826136a0565b6001600160a01b0384166134bc576134b781613742565b6134df565b846001600160a01b0316846001600160a01b0316146134df576134df84826137f7565b5050505050565b610197546000906134f990600190614543565b6001600160a01b03831660009081526101986020526040812054610197805493945090928490811061352d5761352d614428565b60009182526020909120015461019780546001600160a01b03909216925082918490811061355d5761355d614428565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558383168252610198905260408082208590559186168152908120556101978054806135b2576135b2614836565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6135e48383612537565b6135f16000848484613154565b610be75760405162461bcd60e51b8152600401610b469061471a565b6000818310613629576000828152602084905260409020611f55565b5060009182526020526040902090565b60975460ff1615611e1a5760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610b46565b600060016136ad846118c7565b6136b79190614543565b6000838152610160602052604090205490915080821461370d576001600160a01b038416600090815261015f60209081526040808320858452825280832054848452818420819055835261016090915290208190555b506000918252610160602090815260408084208490556001600160a01b03909416835261015f81528383209183525290812055565b6101615460009061375590600190614543565b60008381526101626020526040812054610161805493945090928490811061377f5761377f614428565b906000526020600020015490508061016183815481106137a1576137a1614428565b600091825260208083209091019290925582815261016290915260408082208490558582528120556101618054806137db576137db614836565b6001900381819060005260206000200160009055905550505050565b6000613802836118c7565b6001600160a01b03909316600090815261015f6020908152604080832086845282528083208590559382526101609052919091209190915550565b6001600160e01b0319811681146113c457600080fd5b60006020828403121561386557600080fd5b8135611f558161383d565b60006020828403121561388257600080fd5b5035919050565b60005b838110156138a457818101518382015260200161388c565b50506000910152565b600081518084526138c5816020860160208601613889565b601f01601f19169290920160200192915050565b602081526000611f5560208301846138ad565b6001600160a01b0391909116815260200190565b80356001600160a01b0381168114611b4657600080fd5b6000806040838503121561392a57600080fd5b61393383613900565b946020939093013593505050565b60008083601f84011261395357600080fd5b5081356001600160401b0381111561396a57600080fd5b60208301915083602082850101111561398257600080fd5b9250929050565b6000806000806000608086880312156139a157600080fd5b6139aa86613900565b94506139b860208701613900565b93506040860135925060608601356001600160401b038111156139da57600080fd5b6139e688828901613941565b969995985093965092949392505050565b80151581146113c457600080fd5b8035611b46816139f7565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613a4e57613a4e613a10565b604052919050565b60006001600160401b03831115613a6f57613a6f613a10565b613a82601f8401601f1916602001613a26565b9050828152838383011115613a9657600080fd5b828260208301376000602084830101529392505050565b600082601f830112613abe57600080fd5b611f5583833560208501613a56565b803564ffffffffff81168114611b4657600080fd5b600080600080600080600080610100898b031215613aff57600080fd5b613b0889613a05565b975060208901356001600160401b0380821115613b2457600080fd5b613b308c838d01613aad565b985060408b0135915080821115613b4657600080fd5b613b528c838d01613aad565b975060608b0135915080821115613b6857600080fd5b613b748c838d01613aad565b965060808b0135915080821115613b8a57600080fd5b50613b978b828c01613aad565b945050613ba660a08a01613900565b9250613bb460c08a01613acd565b9150613bc260e08a01613acd565b90509295985092959890939650565b600080600060608486031215613be657600080fd5b613bef84613900565b9250613bfd60208501613900565b9150604084013590509250925092565b60006001600160401b03821115613c2657613c26613a10565b5060051b60200190565b600082601f830112613c4157600080fd5b81356020613c56613c5183613c0d565b613a26565b82815260059290921b84018101918181019086841115613c7557600080fd5b8286015b84811015613c905780358352918301918301613c79565b509695505050505050565b60008060008060808587031215613cb157600080fd5b84356001600160401b0380821115613cc857600080fd5b818701915087601f830112613cdc57600080fd5b81356020613cec613c5183613c0d565b82815260059290921b8401810191818101908b841115613d0b57600080fd5b8286015b84811015613d4357803586811115613d275760008081fd5b613d358e86838b0101613c30565b845250918301918301613d0f565b5098505088013592505080821115613d5a57600080fd5b613d6688838901613c30565b94506040870135915080821115613d7c57600080fd5b613d8888838901613c30565b93506060870135915080821115613d9e57600080fd5b50613dab87828801613c30565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015613df85783516001600160a01b031683529284019291840191600101613dd3565b50909695505050505050565b600060208284031215613e1657600080fd5b8135611f55816139f7565b81516001600160a01b031681526020808301519082015260408101610989565b60e081526000613e5460e083018a6138ad565b60208301989098525060408101959095526001600160a01b03938416606086015260ff929092166080850152151560a08401521660c090910152919050565b60008060408385031215613ea657600080fd5b613eaf83613900565b915060208301356001600160401b03811115613eca57600080fd5b613ed685828601613c30565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613df857835183529284019291840191600101613efc565b600060208284031215613f2a57600080fd5b611f5582613900565b600080600060608486031215613f4857600080fd5b83356001600160401b03811115613f5e57600080fd5b613f6a86828701613c30565b935050613bfd60208501613900565b600060208284031215613f8b57600080fd5b81356001600160401b03811115613fa157600080fd5b61136184828501613aad565b60008060408385031215613fc057600080fd5b50508035926020909101359150565b602080825282518282018190526000919060409081850190868401855b828110156140225761401284835180516001600160a01b03168252602090810151910152565b9284019290850190600101613fec565b5091979650505050505050565b803560ff81168114611b4657600080fd5b60006020828403121561405257600080fd5b611f558261402f565b602081526000825160e060208401526140786101008401826138ad565b90506020840151604084015260408401516060840152606084015160018060a01b03808216608086015260ff60808701511660a086015260a0860151151560c08601528060c08701511660e086015250508091505092915050565b600080604083850312156140e657600080fd5b6140ef83613900565b915060208301356140ff816139f7565b809150509250929050565b600080600080600060a0868803121561412257600080fd5b85356001600160401b0381111561413857600080fd5b61414488828901613aad565b955050602086013593506040860135925061416160608701613900565b915061416f6080870161402f565b90509295509295909350565b6000806000806080858703121561419157600080fd5b61419a85613900565b93506141a860208601613900565b92506040850135915060608501356001600160401b038111156141ca57600080fd5b8501601f810187136141db57600080fd5b613dab87823560208401613a56565b600080604083850312156141fd57600080fd5b61420683613900565b915061421460208401613900565b90509250929050565b60008060008060008060a0878903121561423657600080fd5b61423f87613900565b955061424d60208801613900565b9450604087013593506060870135925060808701356001600160401b0381111561427657600080fd5b61428289828a01613941565b979a9699509497509295939492505050565b600181811c908216806142a857607f821691505b6020821081036142c857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610be757600081815260208120601f850160051c810160208610156142f55750805b601f850160051c820191505b8181101561431457828155600101614301565b505050505050565b81516001600160401b0381111561433557614335613a10565b614349816143438454614294565b846142ce565b602080601f83116001811461437e57600084156143665750858301515b600019600386901b1c1916600185901b178555614314565b600085815260208120601f198616915b828110156143ad5788860151825594840194600190910190840161438e565b50858210156143cb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561445057600080fd5b8151611f55816139f7565b634e487b7160e01b600052601260045260246000fd5b6000826144805761448061445b565b500690565b634e487b7160e01b600052601160045260246000fd5b8082018082111561098957610989614485565b6000600182016144c0576144c0614485565b5060010190565b7502bb4b73732b91034b73232bc1036b4b9b6b0ba31b4160551b8152600084516144f8816016850160208901613889565b8083019050600160fd1b806016830152855161451b816017850160208a01613889565b60179201918201528351614536816018840160208801613889565b0160180195945050505050565b8181038181111561098957610989614485565b60008161456557614565614485565b506000190190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b600060208083850312156145b257600080fd5b82516001600160401b038111156145c857600080fd5b8301601f810185136145d957600080fd5b80516145e7613c5182613c0d565b81815260059190911b8201830190838101908783111561460657600080fd5b928401925b828410156146245783518252928401929084019061460b565b979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516147a481601d850160208701613889565b91909101601d0192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906147e4908301846138ad565b9695505050505050565b60006020828403121561480057600080fd5b8151611f558161383d565b60008261481a5761481a61445b565b500490565b808202811582820484141761098957610989614485565b634e487b7160e01b600052603160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202c44493d497081ebf475705a89735be01466de1ecbbb27a552c5b9b04c34fc2764736f6c63430008130033" + }, + { + "address": "0x78d49d969503413d08763f896ef910d56f726062", + "nonce": 6, + "balance": "0x000000000000000000000000000000000000000000000000002d96937c4f3082", + "code": "0x" + }, + { + "address": "0x039eafb9ce26f7af1a2c52505d68d6b50ac8eab7", + "nonce": 5, + "balance": "0x000000000000000000000000000000000000000000000000002408a019400840", + "code": "0x" + }, + { + "address": "0x2d3789a928c3507ba152e26859fafd4af409263b", + "nonce": 70, + "balance": "0x0000000000000000000000000000000000000000000000000009353330e891d5", + "code": "0x" + }, + { + "address": "0xf3f14a3c5acec9b8fd19939c5335fc4bbd05a308", + "nonce": 6, + "balance": "0x000000000000000000000000000000000000000000000000001c63bec8305cc6", + "code": "0x" + }, + { + "address": "0x1ded49e13453bf5e81e619c45789366080e00ff9", + "nonce": 21, + "balance": "0x000000000000000000000000000000000000000000000000000d2ceb18e1428f", + "code": "0x" + }, + { + "address": "0x45e5f26451cdb01b0fa1f8582e0aad9a6f27c218", + "nonce": 65, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523480156200001157600080fd5b5060043610620000fa5760003560e01c806310a17ee814620000ff578063254ace8f14620001185780633a6edcce14620001495780633c08189814620001605780633ce8e8db1462000174578063400b6cdc14620001ae578063476476e014620001c257806359950c8614620001d65780635deef20a146200020257806366f629f01462000216578063715018a6146200022d57806378eda67b146200023757806386df77de146200024e5780638da5cb5b1462000262578063becbcc6a146200026c578063cece24fe14620002a9578063d8cd50e2146200033d578063f2fde38b1462000351575b600080fd5b620001166200011036600462000a41565b62000368565b005b6005546200012c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001166200015a36600462000955565b62000446565b6004546200012c906001600160a01b031681565b6200019a6200018536600462000a24565b60036020526000908152604090205460020b81565b60405160029190910b815260200162000140565b6007546200012c906001600160a01b031681565b6008546200012c906001600160a01b031681565b600954620001ed90600160a01b900462ffffff1681565b60405162ffffff909116815260200162000140565b6009546200012c906001600160a01b031681565b620001166200022736600462000a24565b62000472565b62000116620004a0565b6200012c62000248366004620009c2565b620004b8565b6006546200012c906001600160a01b031681565b6200012c620007d5565b6200012c6200027d36600462000979565b60026020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b600a54600b54620002f5916001600160a01b03908116919081169062ffffff600160a01b8204811691600160b81b8104600290810b92600160d01b830490910b91600160e81b90041686565b604080516001600160a01b03978816815296909516602087015262ffffff93841694860194909452600291820b6060860152900b60808401521660a082015260c00162000140565b6001546200012c906001600160a01b031681565b620001166200036236600462000955565b620007e4565b6004546001600160a01b031630146200038057600080fd5b6200038a62000863565b60008162ffffff1611620003ca5760405162461bcd60e51b8152602060048201526002602482015261050360f41b60448201526064015b60405180910390fd5b62ffffff8216600090815260036020526040902054600290810b900b156200041b5760405162461bcd60e51b815260206004820152600360248201526204644360ec1b6044820152606401620003c1565b62ffffff9182166000908152600360205260409020805462ffffff191660029290920b909216179055565b6200045062000863565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6200047c62000863565b6009805462ffffff909216600160a01b0262ffffff60a01b19909216919091179055565b620004aa62000863565b620004b66000620008c6565b565b6004546000906001600160a01b03163014620004d357600080fd5b836001600160a01b0316856001600160a01b03161415620005205760405162461bcd60e51b8152600401620003c190602080825260049082015263536d544b60e01b604082015260600190565b836001600160a01b0316856001600160a01b031611156200053f579293925b6001600160a01b0385811660009081526002602090815260408083208885168452825280832062ffffff8816845290915290205416156200057f57600080fd5b62ffffff8316600090815260036020526040812054600290810b919082900b13620005d25760405162461bcd60e51b81526020600482015260026024820152611c1960f21b6044820152606401620003c1565b604080516001600160a01b03888116602080840182905291891683850181905262ffffff8981166060808701829052875180880390910181526080870180895281519190960120610140870188529484905260a0860183905260c0860181905260028a810b60e0880181905289820b6101008901819052600954600160a01b908190048616610120909a018a9052600a80546001600160a01b031916909817909755600b8054600160e81b909a026001600160e81b0392850b8716600160d01b0262ffffff60d01b199490950b909616600160b81b029290921665ffffffffffff60b81b19979094026001600160b81b031990991690951797909717949094161792909217161790915590518190620006eb9062000916565b8190604051809103906000f59050801580156200070c573d6000803e3d6000fd5b50600a80546001600160a01b03199081169091556000600b8190556001600160a01b038a81168083526002602081815260408086208e861680885290835281872062ffffff8f8116808a5291855283892080548b16988c1698891790558289529484528288208689528452828820818952845296829020805490981686179097558051928a1683529082019390935294975091937ff04da67755adf58739649e2fb9949a6328518141b7ac9e44aa10320688b04900910160405180910390a45050949350505050565b6000546001600160a01b031690565b620007ee62000863565b6001600160a01b038116620008555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620003c1565b6200086081620008c6565b50565b336200086e620007d5565b6001600160a01b031614620004b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620003c1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6153df8062000a7983390190565b80356001600160a01b03811681146200093c57600080fd5b919050565b803562ffffff811681146200093c57600080fd5b60006020828403121562000967578081fd5b620009728262000924565b9392505050565b6000806000606084860312156200098e578182fd5b620009998462000924565b9250620009a96020850162000924565b9150620009b96040850162000941565b90509250925092565b60008060008060808587031215620009d8578081fd5b620009e38562000924565b9350620009f36020860162000924565b925062000a036040860162000941565b915060608501358060020b811462000a19578182fd5b939692955090935050565b60006020828403121562000a36578081fd5b620009728262000941565b6000806040838503121562000a54578182fd5b62000a5f8362000941565b915062000a6f6020840162000941565b9050925092905056fe60806040523480156200001157600080fd5b50600080600080600080336001600160a01b031663cece24fe6040518163ffffffff1660e01b815260040160c06040518083038186803b1580156200005557600080fd5b505afa1580156200006a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000090919062000c58565b955095509550955095509550846001600160a01b0316866001600160a01b031610620000e95760405162461bcd60e51b8152602060048201526003602482015262783c7960e81b60448201526064015b60405180910390fd5b60008260020b13620001245760405162461bcd60e51b815260206004820152600360248201526207064360ec1b6044820152606401620000e0565b620100118054306001600160a01b03199182161790915560018054339216821790556040805163254ace8f60e01b8152905163254ace8f916004808201926020929091908290030181600087803b1580156200017f57600080fd5b505af115801562000194573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ba919062000c34565b6201001260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b03166386df77de6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200021e57600080fd5b505af115801562000233573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000259919062000c34565b6201001360006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b031663400b6cdc6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015620002bd57600080fd5b505af1158015620002d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f8919062000c34565b6201001460006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b031663476476e06040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200035c57600080fd5b505af115801562000371573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000397919062000c34565b6201001560006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b0316635deef20a6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015620003fb57600080fd5b505af115801562000410573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000436919062000c34565b6201001680546001600160a01b03199081166001600160a01b039384161790915560028054909116888316178155600380549288166001600160b81b031990931692909217600160a01b62ffffff888116919091029190911762ffffff60b81b1916600160b81b9286900b9190911691909102179055620004b78262000666565b600054600290810b810b9084900b1215620004fa5760405162461bcd60e51b81526020600482015260026024820152614c4f60f01b6044820152606401620000e0565b60005463010000009004600290810b810b9084900b1315620005445760405162461bcd60e51b8152602060048201526002602482015261484f60f01b6044820152606401620000e0565b6007805462ffffff60a01b1916600160a01b62ffffff600287900b16021790556200057b8362000748602090811b620026ca17901c565b600780546001600160a01b0319166001600160a01b03929092169190911790556000600855620005b8600162000748602090811b620026ca17901c565b600660006101000a8154816001600160a01b0302191690836001600160a01b03160217905550620005f942601062000ba760201b62002adc1790919060201c565b6007805463ffffffff60c81b1916600160d81b61ffff9384160261ffff60c81b191617600160c81b93909216929092021761ffff60b81b1916905562010016805462ffffff60a01b1916600160a01b62ffffff93909316929092029190911790555062000f259350505050565b806200067681620c350062000d1d565b62000682919062000d9d565b6000805465ffffff0000001916630100000062ffffff600294850b1681029190911791829055620006b7929104900b62000eb8565b6000805462ffffff191662ffffff600293840b161780825590918391620006eb9181810b9163010000009004900b62000e54565b620006f7919062000d1d565b6200070490600162000cd8565b90506200071e62ffffff82166001600160801b0362000d5d565b600060066101000a8154816001600160801b0302191690836001600160801b031602179055505050565b60008060008360020b1262000761578260020b62000770565b8260020b620007709062000edc565b905062000781620d89e71962000eb8565b60020b811115620007b95760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401620000e0565b600060018216620007cf57600160801b620007e1565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b0316905060028216156200081957608062000814826ffff97272373d413259a46990580e213a62000e32565b901c90505b60048216156200084657608062000841826ffff2e50f5f656932ef12357cf3c7fdcc62000e32565b901c90505b6008821615620008735760806200086e826fffe5caca7e10e4e61c3624eaa0941cd062000e32565b901c90505b6010821615620008a05760806200089b826fffcb9843d60f6159c9db58835c92664462000e32565b901c90505b6020821615620008cd576080620008c8826fff973b41fa98c081472e6896dfb254c062000e32565b901c90505b6040821615620008fa576080620008f5826fff2ea16466c96a3843ec78b326b5286162000e32565b901c90505b60808216156200092757608062000922826ffe5dee046a99a2a811c461f1969c305362000e32565b901c90505b6101008216156200095557608062000950826ffcbe86c7900a88aedcffc83b479aa3a462000e32565b901c90505b610200821615620009835760806200097e826ff987a7253ac413176f2b074cf7815e5462000e32565b901c90505b610400821615620009b1576080620009ac826ff3392b0822b70005940c7a398e4b70f362000e32565b901c90505b610800821615620009df576080620009da826fe7159475a2c29b7443b29c7fa6e889d962000e32565b901c90505b61100082161562000a0d57608062000a08826fd097f3bdfd2022b8845ad8f792aa582562000e32565b901c90505b61200082161562000a3b57608062000a36826fa9f746462d870fdf8a65dc1f90e061e562000e32565b901c90505b61400082161562000a6957608062000a64826f70d869a156d2a1b890bb3df62baf32f762000e32565b901c90505b61800082161562000a9757608062000a92826f31be135f97d08fd981231505542fcfa662000e32565b901c90505b6201000082161562000ac657608062000ac1826f09aa508b5b7a84e1c677de54f3e99bc962000e32565b901c90505b6202000082161562000af457608062000aef826e5d6af8dedb81196699c329225ee60462000e32565b901c90505b6204000082161562000b2157608062000b1c826d2216e584f5fa1ea926041bedfe9862000e32565b901c90505b6208000082161562000b4c57608062000b47826b048a170391f7dc42444e8fa262000e32565b901c90505b60008460020b131562000b6a5762000b678160001962000d86565b90505b62000b7b6401000000008262000ea1565b1562000b8957600162000b8c565b60005b62000b9f9060ff16602083901c62000d02565b949350505050565b6040805160608101825263ffffffff929092168083526000602084015260019290910182905282546001600160601b031916176b01000000000000000000000017909155908190565b80516001600160a01b038116811462000c0857600080fd5b919050565b8051600281900b811462000c0857600080fd5b805162ffffff8116811462000c0857600080fd5b60006020828403121562000c46578081fd5b62000c518262000bf0565b9392505050565b60008060008060008060c0878903121562000c71578182fd5b62000c7c8762000bf0565b955062000c8c6020880162000bf0565b945062000c9c6040880162000c20565b935062000cac6060880162000c0d565b925062000cbc6080880162000c0d565b915062000ccc60a0880162000c20565b90509295509295509295565b600062ffffff80831681851680830382111562000cf95762000cf962000ef9565b01949350505050565b6000821982111562000d185762000d1862000ef9565b500190565b60008160020b8360020b8062000d375762000d3762000f0f565b627fffff1982146000198214161562000d545762000d5462000ef9565b90059392505050565b60006001600160801b038381168062000d7a5762000d7a62000f0f565b92169190910492915050565b60008262000d985762000d9862000f0f565b500490565b60008160020b8360020b627fffff8382138484138383048511828216161562000dca5762000dca62000ef9565b627fffff198685128281168783058712161562000deb5762000deb62000ef9565b87871292508582058712848416161562000e095762000e0962000ef9565b8585058712818416161562000e225762000e2262000ef9565b5050509290910295945050505050565b600081600019048311821515161562000e4f5762000e4f62000ef9565b500290565b60008160020b8360020b82811281627fffff190183128115161562000e7d5762000e7d62000ef9565b81627fffff01831381161562000e975762000e9762000ef9565b5090039392505050565b60008262000eb35762000eb362000f0f565b500690565b60008160020b627fffff1981141562000ed55762000ed562000ef9565b9003919050565b6000600160ff1b82141562000ef55762000ef562000ef9565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6144aa8062000f356000396000f3fe608060405234801561001057600080fd5b50600436106102045760003560e01c806309beabc1146102095780630e1552f0146102395780631621835f1461026c57806316dc165b146102fe57806317fdacb9146103115780631aae2e5514610326578063252c09d71461033d5780632c4812521461037757806333005cd51461039f5780633c8a7d8d146103aa578063490e6cbc146103bd5780634cd70e91146103d0578063537c2d8e14610402578063544e705714610422578063588e59ae1461044d57806358c51ce61461045657806359dd14361461046a57806362c944ca1461047d57806362ccaafd146104905780636ad1718f146104e45780636d01843b146104f75780636f73f0061461051157806375c0e0d51461053157806381794fba146105b4578063857f812f146105e0578063872d1f15146105f35780638790aca314610606578063883bdbfd146106d457806398a0f72e146106f4578063a34123a714610714578063b0f5925714610727578063b14184e6146107a0578063b74d60a9146107c0578063b7d19fc4146107c8578063c19d93fb146107db578063c45a01551461089f578063d38a85ad146108b2578063d3b16864146108c5578063ddca3f43146108d9578063e556289f146108ef578063edcba3b2146108fa578063f0163ef41461091d578063f094685a14610930578063ff12504e14610943575b600080fd5b60065461021c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61024c61024736600461366c565b610956565b604080516001600160801b03938416815292909116602083015201610230565b6102c061027a366004613866565b600f60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b604080519687526001600160801b039586166020880152938516938601939093529083166060850152821660808401521660a082015260c001610230565b60025461021c906001600160a01b031681565b61032461031f366004613b2c565b610af4565b005b61032f60045481565b604051908152602001610230565b61035061034b366004613866565b610b9c565b6040805163ffffffff909416845260069290920b6020840152151590820152606001610230565b61038a610385366004613751565b610bd0565b60408051928352602083019190915201610230565b61032f620100105481565b61038a6103b836600461358f565b610d53565b6103246103cb366004613791565b610f08565b6103e36103de366004613931565b6110ae565b604080516001600160801b039093168352602083019190915201610230565b60005461040f9060020b81565b60405160029190910b8152602001610230565b610435610430366004613967565b611230565b6040516001600160801b039091168152602001610230565b61032f60055481565b60035461040f90600160b81b900460020b81565b61038a610478366004613751565b61136e565b6103e361048b366004613931565b6114e4565b6102c061049e366004613866565b600e60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b61024c6104f23660046136e3565b611636565b60005461043590600160301b90046001600160801b031681565b61052461051f3660046138b9565b6117df565b6040516102309190613d8c565b61057d61053f36600461389f565b600b6020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b929060ff1685565b604080516001600160801b039096168652600f9490940b60208601529284019190915260608301521515608082015260a001610230565b62010016546105cc90600160a01b900462ffffff1681565b60405162ffffff9091168152602001610230565b61038a6105ee366004613751565b611a6f565b61038a610601366004613616565b611b2e565b61067361061436600461389f565b600d6020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160801b0380871697600160801b978890048216978583169581900483169480841694919004909216918a565b604080516001600160801b039b8c168152998b1660208b01528901979097526060880195909552928716608087015290861660a0860152851660c085015290931660e083015261010082019290925261012081019190915261014001610230565b6106e76106e23660046137db565b611cb9565b6040516102309190613d51565b61032f61070236600461387e565b600a6020526000908152604090205481565b61038a6107223660046138eb565b611d40565b61076e610735366004613866565b600960205260009081526040902080546001820154600283015460038401546004909401546001600160801b0390931693919290919085565b604080516001600160801b0390961686526020860194909452928401919091526060830152608082015260a001610230565b6107b36107ae3660046138b9565b611eef565b6040516102309190613d0a565b6103246120f5565b60035461021c906001600160a01b031681565b600754600854610840916001600160a01b03811691600160a01b820460020b9161ffff600160b81b8204811692600160c81b8304821692600160d81b81049092169160ff600160e81b90910416906001600160801b0380821691600160801b90041688565b604080516001600160a01b03909916895260029790970b602089015261ffff9586169688019690965292841660608701529216608085015290151560a08401526001600160801b0390811660c08401521660e082015261010001610230565b60015461021c906001600160a01b031681565b6103246108c0366004613b4e565b612264565b60005461040f906301000000900460020b81565b6003546105cc90600160a01b900462ffffff1681565b61032f6201000f5481565b61040f61090836600461389f565b600c6020526000908152604090205460020b81565b61043561092b366004613967565b6123ec565b61038a61093e366004613751565b6124a5565b61024c61095136600461366c565b612564565b620100115460009081906001600160a01b0316301461097457600080fd5b600754600160e81b900460ff16156109a75760405162461bcd60e51b815260040161099e90613f3a565b60405180910390fd5b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906109e9908b908b908b908b908b90602401613c60565b60408051601f198184030181529181526020820180516001600160e01b031662e1552f60e41b17905251610a1d9190613bf2565b600060405180830381855af49150503d8060008114610a58576040519150601f19603f3d011682016040523d82523d6000602084013e610a5d565b606091505b50915091508115610ad05760008082806020019051810190610a7f9190613a96565b6040519399509197509350915060028b900b906001600160a01b038d169060008051602061445583398151915290610ac1908a908a9088908890600090613f81565b60405180910390a35050610ad9565b610ad981612b20565b50506007805460ff60e81b1916905590969095509350505050565b62010011546001600160a01b03163014610b0d57600080fd5b600754600160e81b900460ff1615610b375760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179081905561ffff600160d81b9091048116908216811015610b8b57610b6f60108284612bb3565b506007805461ffff60d81b1916600160d81b61ffff8516021790555b50506007805460ff60e81b19169055565b60108161ffff8110610bad57600080fd5b015463ffffffff81169150600160201b810460060b90600160581b900460ff1683565b620100115460009081906001600160a01b03163014610bee57600080fd5b600754600160e81b900460ff1615610c185760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100135460405160009182916001600160a01b0390911690610c5a908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b0316631624092960e11b17905251610c8f9190613bf2565b600060405180830381855af49150503d8060008114610cca576040519150601f19603f3d011682016040523d82523d6000602084013e610ccf565b606091505b50915091508115610ad05780806020019051810190610cee9190613b71565b60035460028054600754604051959950939750600160a01b80840462ffffff16956001600160a01b0394851695949092169360008051602061443583398151915293610d46936000938d938d93919004900b90613e16565b60405180910390a4610ad9565b620100115460009081906001600160a01b03163014610d7157600080fd5b600754600160e81b900460ff1615610d9b5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100145460405160009182916001600160a01b0390911690610ddf908c908c908c908c908c908c90602401613c0e565b60408051601f198184030181529181526020820180516001600160e01b0316633c8a7d8d60e01b17905251610e149190613bf2565b600060405180830381855af49150503d8060008114610e4f576040519150601f19603f3d011682016040523d82523d6000602084013e610e54565b606091505b50915091508115610ee35780806020019051810190610e739190613b71565b604080513381526001600160801b038b166020820152908101839052606081018290529195509350600289810b91908b900b906001600160a01b038d16907f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde9060800160405180910390a4610eec565b610eec81612b20565b50506007805460ff60e81b191690559097909650945050505050565b62010011546001600160a01b03163014610f2157600080fd5b600754600160e81b900460ff1615610f4b5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100165460405160009182916001600160a01b0390911690610f8d9089908990899089908990602401613cdc565b60408051601f198184030181529181526020820180516001600160e01b03166312439b2f60e21b17905251610fc29190613bf2565b600060405180830381855af49150503d8060008114610ffd576040519150601f19603f3d011682016040523d82523d6000602084013e611002565b606091505b5091509150811561108f57600080600080848060200190518101906110279190613b94565b604080518581526020810185905290810183905260608101829052939750919550935091506001600160a01b038c169033907fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6339060800160405180910390a350505050611098565b61109881612b20565b50506007805460ff60e81b191690555050505050565b620100115460009081906001600160a01b031630146110cc57600080fd5b600754600160e81b900460ff16156110f65760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906111329088908890602401613e36565b60408051601f198184030181529181526020820180516001600160e01b0316634cd70e9160e01b179052516111679190613bf2565b600060405180830381855af49150503d80600081146111a2576040519150601f19603f3d011682016040523d82523d6000602084013e6111a7565b606091505b5091509150811561120f57600080828060200190518101906111c99190613af4565b60405193995091975093509150600289900b90339060008051602061441583398151915290611200908a9087908790600190613f57565b60405180910390a35050611218565b61121881612b20565b50506007805460ff60e81b1916905590939092509050565b62010011546000906001600160a01b0316301461124c57600080fd5b600754600160e81b900460ff16156112765760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906112b490889088908890602401613e52565b60408051601f198184030181529181526020820180516001600160e01b031663544e705760e01b179052516112e99190613bf2565b600060405180830381855af49150503d8060008114611324576040519150601f19603f3d011682016040523d82523d6000602084013e611329565b606091505b5091509150811561134f57808060200190518101906113489190613a4c565b9250611358565b61135881612b20565b50506007805460ff60e81b191690559392505050565b620100115460009081906001600160a01b0316301461138c57600080fd5b600754600160e81b900460ff16156113b65760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100125460405160009182916001600160a01b03909116906113f8908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b0316632cee8a1b60e11b1790525161142d9190613bf2565b600060405180830381855af49150503d8060008114611468576040519150601f19603f3d011682016040523d82523d6000602084013e61146d565b606091505b50915091508115610ad0578080602001905181019061148c9190613b71565b60035460028054600754604051959950939750600160a01b80840462ffffff16956001600160a01b0394851695949092169360008051602061443583398151915293610d46936001938d938d93919004900b90613e16565b620100115460009081906001600160a01b0316301461150257600080fd5b600754600160e81b900460ff161561152c5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906115689088908890602401613e36565b60408051601f198184030181529181526020820180516001600160e01b0316633164a26560e11b1790525161159d9190613bf2565b600060405180830381855af49150503d80600081146115d8576040519150601f19603f3d011682016040523d82523d6000602084013e6115dd565b606091505b5091509150811561120f57600080828060200190518101906115ff9190613af4565b60405193995091975093509150600289900b90339060008051602061441583398151915290611200908a9087908790600090613f57565b620100115460009081906001600160a01b0316301461165457600080fd5b600754600160e81b900460ff161561167e5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905562010015546040516001600160a01b038981166024830152600289900b60448301526001600160801b0388811660648401528716608483015285151560a4830152600092839291169060c40160408051601f198184030181529181526020820180516001600160e01b0316636ad1718f60e01b179052516117129190613bf2565b600060405180830381855af49150503d806000811461174d576040519150601f19603f3d011682016040523d82523d6000602084013e611752565b606091505b50915091508115610ad057808060200190518101906117719190613a68565b604080516001600160a01b038d1681526001600160801b0384811660208301528316818301528815156060820152905192965090945060028a900b9133917f7d3d0e34c86e56b4dcd993c09bbbf1b04527ab27b4365dffca10e0ded914e071919081900360800190a3610ad9565b60608160020b8360020b126118065760405162461bcd60e51b815260040161099e90613ec8565b600054600290810b810b9084900b12156118325760405162461bcd60e51b815260040161099e90613f02565b60005463010000009004600290810b810b9083900b13156118655760405162461bcd60e51b815260040161099e90613f1e565b60035461187c90600160b81b900460020b84614305565b60020b1561189c5760405162461bcd60e51b815260040161099e90613ee5565b6003546118b390600160b81b900460020b83614305565b60020b156118d35760405162461bcd60e51b815260040161099e90613eab565b600354600090600160b81b900460020b6118ed85856141d0565b6118f7919061409d565b60020b9050806001600160401b0381111561192257634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561198257816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a082015282526000199092019101816119405790505b5091506000845b8460020b8160020b1215611a66576040805160c081018252600283810b900b6000818152600d602081815285832080546001600160801b038082168852600160801b91829004811684890152600183015498880198909852600382015404871660608701526004810154909616608086015292909152905260059091015460a08201528451859084908110611a2e57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508180611a44906142ea565b600354909350611a5f9150600160b81b900460020b82613fb4565b9050611989565b50505092915050565b620100115460009081906001600160a01b03163014611a8d57600080fd5b600754600160e81b900460ff1615611ab75760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100125460405160009182916001600160a01b0390911690611af9908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b031663857f812f60e01b1790525161142d9190613bf2565b620100115460009081906001600160a01b03163014611b4c57600080fd5b600754600160e81b900460ff1615611b765760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905562010014546040516001600160a01b038981166024830152600289810b604484015288900b60648301526084820187905260a48201869052600092839291169060c40160408051601f198184030181529181526020820180516001600160e01b031663872d1f1560e01b17905251611c019190613bf2565b600060405180830381855af49150503d8060008114611c3c576040519150601f19603f3d011682016040523d82523d6000602084013e611c41565b606091505b50915091508115610ad05780806020019051810190611c609190613b71565b604080516001600160a01b038d168152602081018490529081018290529195509350600288810b91908a900b9033907ff69135213cd78fa4cffb855edf80272133f69bd8a6fb3236340a69b4d6e248e390606001610d46565b62010011546060906001600160a01b03163014611cd557600080fd5b611d394284848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600754601094939250600160a01b810460020b915061ffff600160b81b8204811691600160c81b900416612c71565b9392505050565b620100115460009081906001600160a01b03163014611d5e57600080fd5b600754600160e81b900460ff1615611d885760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b1790556201001454604051600287810b602483015286900b60448201526001600160801b038516606482015260009182916001600160a01b039091169060840160408051601f198184030181529181526020820180516001600160e01b031663a34123a760e01b17905251611e0d9190613bf2565b600060405180830381855af49150503d8060008114611e48576040519150601f19603f3d011682016040523d82523d6000602084013e611e4d565b606091505b50915091508115611ecd5780806020019051810190611e6c9190613b71565b604080516001600160801b0389168152602081018490529081018290529195509350600287810b919089900b9033907f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c9060600160405180910390a4611ed6565b611ed681612b20565b50506007805460ff60e81b191690559094909350915050565b60608160020b8360020b12611f165760405162461bcd60e51b815260040161099e90613ec8565b600054600290810b810b9084900b1215611f425760405162461bcd60e51b815260040161099e90613f02565b60005463010000009004600290810b810b9083900b1315611f755760405162461bcd60e51b815260040161099e90613f1e565b600354611f8c90600160b81b900460020b84614305565b60020b15611fac5760405162461bcd60e51b815260040161099e90613ee5565b600354611fc390600160b81b900460020b83614305565b60020b15611fe35760405162461bcd60e51b815260040161099e90613eab565b600354600090600160b81b900460020b611ffd85856141d0565b612007919061409d565b60020b9050806001600160401b0381111561203257634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561205b578160200160208202803683370190505b5091506000845b8460020b8160020b1215611a6657600281810b900b6000908152600b60205260409020548451600160801b909104600f0b908590849081106120b457634e487b7160e01b600052603260045260246000fd5b6020026020010190600f0b9081600f0b8152505081806120d3906142ea565b6003549093506120ee9150600160b81b900460020b82613fb4565b9050612062565b62010011546001600160a01b0316301461210e57600080fd5b600754600160e81b900460ff16156121385760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905560015460408051636c66a87160e11b815290516001600160a01b039092169163d8cd50e291600480820192602092909190829003018186803b15801561219057600080fd5b505afa1580156121a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c89190613573565b6001600160a01b0316336001600160a01b03161461220d5760405162461bcd60e51b8152602060048201526002602482015261272960f11b604482015260640161099e565b6002546201000f5461222a916001600160a01b0316903390612d91565b6003546201001054612247916001600160a01b0316903390612d91565b60006201000f81905562010010556007805460ff60e81b19169055565b62010011546001600160a01b0316301461227d57600080fd5b600754600160e81b900460ff16156122a75760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b17905560015460408051638da5cb5b60e01b815290516001600160a01b0390921691638da5cb5b91600480820192602092909190829003018186803b1580156122ff57600080fd5b505afa158015612313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123379190613573565b6001600160a01b0316336001600160a01b03161461237d5760405162461bcd60e51b81526020600482015260036024820152622727a760e91b604482015260640161099e565b60648162ffffff1611156123b95760405162461bcd60e51b815260206004820152600360248201526204650360ec1b604482015260640161099e565b62010016805462ffffff909216600160a01b0262ffffff60a01b199092169190911790556007805460ff60e81b19169055565b62010011546000906001600160a01b0316301461240857600080fd5b600754600160e81b900460ff16156124325760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b039091169061247090889088908890602401613e52565b60408051601f198184030181529181526020820180516001600160e01b0316633c058fbd60e21b179052516112e99190613bf2565b620100115460009081906001600160a01b031630146124c357600080fd5b600754600160e81b900460ff16156124ed5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100135460405160009182916001600160a01b039091169061252f908b908b908b908b908b90602401613c9e565b60408051601f198184030181529181526020820180516001600160e01b031663784a342d60e11b17905251610c8f9190613bf2565b620100115460009081906001600160a01b0316301461258257600080fd5b600754600160e81b900460ff16156125ac5760405162461bcd60e51b815260040161099e90613f3a565b6007805460ff60e81b1916600160e81b179055620100155460405160009182916001600160a01b03909116906125ee908b908b908b908b908b90602401613c60565b60408051601f198184030181529181526020820180516001600160e01b031660016276d7d960e11b0319179052516126269190613bf2565b600060405180830381855af49150503d8060008114612661576040519150601f19603f3d011682016040523d82523d6000602084013e612666565b606091505b50915091508115610ad057600080828060200190518101906126889190613a96565b6040519399509197509350915060028b900b906001600160a01b038d169060008051602061445583398151915290610ac1908a908a9088908890600190613f81565b60008060008360020b126126e1578260020b6126ee565b8260020b6126ee9061437d565b90506126fd620d89e71961435c565b60020b8111156127335760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640161099e565b60006001821661274757600160801b612759565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561278e576080612789826ffff97272373d413259a46990580e213a6141b1565b901c90505b60048216156127b85760806127b3826ffff2e50f5f656932ef12357cf3c7fdcc6141b1565b901c90505b60088216156127e25760806127dd826fffe5caca7e10e4e61c3624eaa0941cd06141b1565b901c90505b601082161561280c576080612807826fffcb9843d60f6159c9db58835c9266446141b1565b901c90505b6020821615612836576080612831826fff973b41fa98c081472e6896dfb254c06141b1565b901c90505b604082161561286057608061285b826fff2ea16466c96a3843ec78b326b528616141b1565b901c90505b608082161561288a576080612885826ffe5dee046a99a2a811c461f1969c30536141b1565b901c90505b6101008216156128b55760806128b0826ffcbe86c7900a88aedcffc83b479aa3a46141b1565b901c90505b6102008216156128e05760806128db826ff987a7253ac413176f2b074cf7815e546141b1565b901c90505b61040082161561290b576080612906826ff3392b0822b70005940c7a398e4b70f36141b1565b901c90505b610800821615612936576080612931826fe7159475a2c29b7443b29c7fa6e889d96141b1565b901c90505b61100082161561296157608061295c826fd097f3bdfd2022b8845ad8f792aa58256141b1565b901c90505b61200082161561298c576080612987826fa9f746462d870fdf8a65dc1f90e061e56141b1565b901c90505b6140008216156129b75760806129b2826f70d869a156d2a1b890bb3df62baf32f76141b1565b901c90505b6180008216156129e25760806129dd826f31be135f97d08fd981231505542fcfa66141b1565b901c90505b62010000821615612a0e576080612a09826f09aa508b5b7a84e1c677de54f3e99bc96141b1565b901c90505b62020000821615612a39576080612a34826e5d6af8dedb81196699c329225ee6046141b1565b901c90505b62040000821615612a63576080612a5e826d2216e584f5fa1ea926041bedfe986141b1565b901c90505b62080000821615612a8b576080612a86826b048a170391f7dc42444e8fa26141b1565b901c90505b60008460020b1315612aa657612aa38160001961410c565b90505b612ab4600160201b82614348565b15612ac0576001612ac3565b60005b612ad49060ff16602083901c614065565b949350505050565b6040805160608101825263ffffffff83168082526000602083015260019190920181905283546001600160601b031916909117600160581b178355805b9250929050565b8051604014612b9357604481511015612b605760405162461bcd60e51b8152602060048201526002602482015261646360f01b604482015260640161099e565b60048101905080806020019051810190612b7a91906139a4565b60405162461bcd60e51b815260040161099e9190613e78565b602081019050805160405181815260208301519150816020820152604081fd5b6000808361ffff1611612bee5760405162461bcd60e51b81526020600482015260036024820152622622a760e91b604482015260640161099e565b8261ffff168261ffff1611612c04575081611d39565b825b8261ffff168161ffff161015612c68576001858261ffff1661ffff8110612c3d57634e487b7160e01b600052603260045260246000fd5b01805463ffffffff191663ffffffff9290921691909117905580612c60816142c8565b915050612c06565b50909392505050565b606060008261ffff1611612cab5760405162461bcd60e51b81526020600482015260016024820152604960f81b604482015260640161099e565b84516001600160401b03811115612cd257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612cfb578160200160208202803683370190505b50905060005b8551811015612d8657612d3f8888888481518110612d2f57634e487b7160e01b600052603260045260246000fd5b6020026020010151888888612e92565b828281518110612d5f57634e487b7160e01b600052603260045260246000fd5b602002602001019060060b908160060b815250508080612d7e906142ea565b915050612d01565b509695505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612ded9190613bf2565b6000604051808303816000865af19150503d8060008114612e2a576040519150601f19603f3d011682016040523d82523d6000602084013e612e2f565b606091505b5091509150818015612e59575080511580612e59575080806020019051810190612e59919061384a565b612e8b5760405162461bcd60e51b8152602060048201526003602482015262544e5360e81b604482015260640161099e565b5050505050565b600063ffffffff8516612f2d576000878461ffff1661ffff8110612ec657634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b90920460ff1615159383019390935290925090881614612f2257612f1f818887613013565b90505b602001519050613009565b6000612f398688614273565b9050600080612f4c8a8a858a8a8a61307d565b91509150816000015163ffffffff168363ffffffff161415612f7657506020015191506130099050565b805163ffffffff84811691161415612f9657602001519250613009915050565b81518151600091612fa691614273565b63ffffffff1690506000836000015185612fc09190614273565b63ffffffff169050808285602001518560200151612fde9190614217565b612fe891906140d7565b612ff29190614120565b84602001516130019190613ffa565b955050505050505b9695505050505050565b61301b6134fd565b835160009061302a9085614273565b63ffffffff16905060405180606001604052808563ffffffff168152602001828560020b6130589190614120565b87602001516130679190613ffa565b60060b8152600160209091015295945050505050565b6130856134fd565b61308d6134fd565b878461ffff1661ffff81106130b257634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b90910460ff16151592820192909252925061310290889088613258565b1561313b578563ffffffff16826000015163ffffffff16141561312657508061324d565b81613132838888613013565b9150915061324d565b878361314886600161403f565b6131529190614327565b61ffff1661ffff811061317557634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff16151591810182905292506131fa5760408051606081018252895463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff1615159181019190915291505b61320987836000015188613258565b61323b5760405162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015260640161099e565b6132488888888787613327565b915091505b965096945050505050565b60008363ffffffff168363ffffffff161115801561328257508363ffffffff168263ffffffff1611155b1561329e578163ffffffff168363ffffffff1611159050611d39565b60008463ffffffff168463ffffffff16116132cc576132c763ffffffff8516600160201b61407d565b6132d4565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff161161330b5761330663ffffffff8516600160201b61407d565b613313565b8363ffffffff165b64ffffffffff169091111595945050505050565b61332f6134fd565b6133376134fd565b60008361334586600161403f565b61334f9190614327565b61ffff169050600060018561ffff16836133699190614065565b613373919061425c565b905060005b60026133848385614065565b61338e919061410c565b90508961339f61ffff881683614348565b61ffff81106133be57634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff16151591810182905295506134155761340e816001614065565b9250613378565b8961ffff8716613426836001614065565b6134309190614348565b61ffff811061344f57634e487b7160e01b600052603260045260246000fd5b60408051606081018252929091015463ffffffff81168352600160201b8104600690810b810b900b602084015260ff600160581b9091041615159082015285519094506000906134a1908b908b613258565b90508080156134ba57506134ba8a8a8760000151613258565b156134c557506134f0565b806134dc576134d560018361425c565b92506134ea565b6134e7826001614065565b93505b50613378565b5050509550959350505050565b604080516060810182526000808252602082018190529181019190915290565b60008083601f84011261352e578182fd5b5081356001600160401b03811115613544578182fd5b602083019150836020828501011115612b1957600080fd5b8035600281900b811461356e57600080fd5b919050565b600060208284031215613584578081fd5b8151611d39816143d9565b60008060008060008060a087890312156135a7578182fd5b86356135b2816143d9565b95506135c06020880161355c565b94506135ce6040880161355c565b935060608701356135de816143ff565b925060808701356001600160401b038111156135f8578283fd5b61360489828a0161351d565b979a9699509497509295939492505050565b600080600080600060a0868803121561362d578081fd5b8535613638816143d9565b94506136466020870161355c565b93506136546040870161355c565b94979396509394606081013594506080013592915050565b600080600080600060808688031215613683578081fd5b853561368e816143d9565b945061369c6020870161355c565b935060408601356136ac816143ff565b925060608601356001600160401b038111156136c6578182fd5b6136d28882890161351d565b969995985093965092949392505050565b600080600080600060a086880312156136fa578081fd5b8535613705816143d9565b94506137136020870161355c565b93506040860135613723816143ff565b92506060860135613733816143ff565b91506080860135613743816143f1565b809150509295509295909350565b600080600080600060808688031215613768578081fd5b8535613773816143d9565b94506020860135613783816143ff565b93506136ac6040870161355c565b6000806000806000608086880312156137a8578283fd5b85356137b3816143d9565b9450602086013593506040860135925060608601356001600160401b038111156136c6578182fd5b600080602083850312156137ed578182fd5b82356001600160401b0380821115613803578384fd5b818501915085601f830112613816578384fd5b813581811115613824578485fd5b8660208260051b8501011115613838578485fd5b60209290920196919550909350505050565b60006020828403121561385b578081fd5b8151611d39816143f1565b600060208284031215613877578081fd5b5035919050565b60006020828403121561388f578081fd5b81358060010b8114611d39578182fd5b6000602082840312156138b0578081fd5b611d398261355c565b600080604083850312156138cb578182fd5b6138d48361355c565b91506138e26020840161355c565b90509250929050565b6000806000606084860312156138ff578081fd5b6139088461355c565b92506139166020850161355c565b91506040840135613926816143ff565b809150509250925092565b60008060408385031215613943578182fd5b61394c8361355c565b9150602083013561395c816143ff565b809150509250929050565b60008060006060848603121561397b578081fd5b6139848461355c565b92506020840135613994816143ff565b91506040840135613926816143f1565b6000602082840312156139b5578081fd5b81516001600160401b03808211156139cb578283fd5b818401915084601f8301126139de578283fd5b8151818111156139f0576139f06143c3565b604051601f8201601f19908116603f01168101908382118183101715613a1857613a186143c3565b81604052828152876020848701011115613a30578586fd5b613a41836020830160208801614298565b979650505050505050565b600060208284031215613a5d578081fd5b8151611d39816143ff565b60008060408385031215613a7a578182fd5b8251613a85816143ff565b602084015190925061395c816143ff565b60008060008060808587031215613aab578182fd5b8451613ab6816143ff565b6020860151909450613ac7816143ff565b6040860151909350613ad8816143ff565b6060860151909250613ae9816143ff565b939692955090935050565b60008060008060808587031215613b09578182fd5b8451613b14816143ff565b602086015160408701519195509350613ad8816143ff565b600060208284031215613b3d578081fd5b813561ffff81168114611d39578182fd5b600060208284031215613b5f578081fd5b813562ffffff81168114611d39578182fd5b60008060408385031215613b83578182fd5b505080516020909101519092909150565b60008060008060808587031215613ba9578182fd5b505082516020840151604085015160609095015191969095509092509050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008251613c04818460208701614298565b9190910192915050565b6001600160a01b0387168152600286810b602083015285900b60408201526001600160801b038416606082015260a060808201819052600090613c549083018486613bc9565b98975050505050505050565b6001600160a01b0386168152600285900b60208201526001600160801b0384166040820152608060608201819052600090613a419083018486613bc9565b6001600160a01b03861681526001600160801b0385166020820152600284900b6040820152608060608201819052600090613a419083018486613bc9565b60018060a01b0386168152846020820152836040820152608060608201526000613a41608083018486613bc9565b6020808252825182820181905260009190848201906040850190845b81811015613d45578351600f0b83529284019291840191600101613d26565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613d4557835160060b83529284019291840191600101613d6d565b602080825282518282018190526000919060409081850190868401855b82811015613e0957815180516001600160801b0390811686528782015181168887015286820151878701526060808301518216908701526080808301519091169086015260a0908101519085015260c09093019290850190600101613da9565b5091979650505050505050565b93151584526020840192909252604083015260020b606082015260800190565b60029290920b82526001600160801b0316602082015260400190565b60029390930b83526001600160801b039190911660208301521515604082015260600190565b6020815260008251806020840152613e97816040850160208701614298565b601f01601f19169190910160400192915050565b60208082526003908201526205244360ec1b604082015260600190565b602080825260039082015262261e2960e91b604082015260600190565b60208082526003908201526204c44360ec1b604082015260600190565b6020808252600290820152614c4f60f01b604082015260600190565b602080825260029082015261524f60f01b604082015260600190565b6020808252600390820152621312d160ea1b604082015260600190565b6001600160801b039485168152928416602084015292166040820152901515606082015260800190565b6001600160801b039586168152938516602085015291841660408401529092166060820152901515608082015260a00190565b60008160020b8360020b82821282627fffff03821381151615613fd957613fd9614397565b82627fffff19038212811615613ff157613ff1614397565b50019392505050565b60008160060b8360060b82821282667fffffffffffff0382138115161561402357614023614397565b82667fffffffffffff19038212811615613ff157613ff1614397565b600061ffff80831681851680830382111561405c5761405c614397565b01949350505050565b6000821982111561407857614078614397565b500190565b600064ffffffffff80831681851680830382111561405c5761405c614397565b60008160020b8360020b806140b4576140b46143ad565b627fffff198214600019821416156140ce576140ce614397565b90059392505050565b60008160060b8360060b806140ee576140ee6143ad565b667fffffffffffff198214600019821416156140ce576140ce614397565b60008261411b5761411b6143ad565b500490565b60008160060b8360060b667fffffffffffff8382138484138383048511828216161561414e5761414e614397565b667fffffffffffff198685128281168783058712161561417057614170614397565b87871292508582058712848416161561418b5761418b614397565b858505871281841616156141a1576141a1614397565b5050509290910295945050505050565b60008160001904831182151516156141cb576141cb614397565b500290565b60008160020b8360020b82811281627fffff19018312811516156141f6576141f6614397565b81627fffff01831381161561420d5761420d614397565b5090039392505050565b60008160060b8360060b82811281667fffffffffffff190183128115161561424157614241614397565b81667fffffffffffff01831381161561420d5761420d614397565b60008282101561426e5761426e614397565b500390565b600063ffffffff8381169083168181101561429057614290614397565b039392505050565b60005b838110156142b357818101518382015260200161429b565b838111156142c2576000848401525b50505050565b600061ffff808316818114156142e0576142e0614397565b6001019392505050565b60006000198214156142fe576142fe614397565b5060010190565b60008260020b80614318576143186143ad565b808360020b0791505092915050565b600061ffff8084168061433c5761433c6143ad565b92169190910692915050565b600082614357576143576143ad565b500690565b60008160020b627fffff1981141561437657614376614397565b9003919050565b6000600160ff1b82141561439357614393614397565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146143ee57600080fd5b50565b80151581146143ee57600080fd5b6001600160801b03811681146143ee57600080fdfe3736ba81d13006f6ea2012ba3e287f087169b55d90a9defb5966fe9eb830d7ea0fe977d619f8172f7fdbe8bb8928ef80952817d96936509f67d66346bc4cd10f4f4658280ee6d0e8f09b5e436dacaca69ec5dd7c2ba05fb010d5145a3567cdada2646970667358221220336d80b132feef86c529f37d3371b115ca9f1c5a659c38276dc7fea0925be6ab64736f6c63430008040033a2646970667358221220fd6c1c1024883547ca324d1953c0ef5fc39a77827739eb3830ec962476b3091c64736f6c63430008040033" + }, + { + "address": "0xc577018b3518cd7763d143d7699b280d6e50fdb6", + "nonce": 3, + "balance": "0x000000000000000000000000000000000000000000000000000346913e95630c", + "code": "0x608060405260043610620001a75760003560e01c80636a8b5a3011620000e9578063ab0331a61162000090578063ab0331a61462000506578063c174097a146200052b578063d6d23f90146200054d578063e9868fd21462000564578063e9fbde1d1462000589578063f2fde38b14620005ae578063f488275814620005d3578063f927a62614620005f857600080fd5b80636a8b5a3014620004115780636f5db0b5146200044557806370245bdc146200045d578063715018a6146200047557806382bd4ebf146200048d5780638da5cb5b14620004b25780638f226e1f14620004d257600080fd5b8063552164ee116200014e578063552164ee14620002fd5780635604c0251462000322578063584e20dc14620003565780635da264db146200037b5780636050c04614620003a0578063618ca59f14620003c55780636930fd2a14620003ec57600080fd5b8063080eb32c14620001b45780630d1df8d014620001f15780631626ba7e14620002255780632faf3ea6146200025b57806333607bda14620002805780633d5bc64014620002a75780634d152a3714620002d857600080fd5b36620001af57005b600080fd5b348015620001c157600080fd5b50620001d9620001d336600462002049565b6200060f565b604051620001e8919062002076565b60405180910390f35b348015620001fe57600080fd5b506200021662000210366004620020d9565b6200069d565b604051908152602001620001e8565b3480156200023257600080fd5b506200024a62000244366004620021ed565b62000714565b6040519015158152602001620001e8565b3480156200026857600080fd5b506200024a6200027a36600462002259565b6200074d565b3480156200028d57600080fd5b50620002a56200029f366004620021ed565b620008f5565b005b348015620002b457600080fd5b50600254620002c9906001600160a01b031681565b604051620001e891906200228c565b348015620002e557600080fd5b50620002a5620002f7366004620022c3565b6200096f565b3480156200030a57600080fd5b50620002166200031c366004620020d9565b6200099b565b3480156200032f57600080fd5b506200034762000341366004620020d9565b620009e6565b604051620001e8919062002320565b3480156200036357600080fd5b50620002c962000375366004620020d9565b62000a5b565b3480156200038857600080fd5b50620003476200039a366004620023c8565b62000a86565b348015620003ad57600080fd5b50620002a5620003bf36600462002450565b62000d4f565b348015620003d257600080fd5b50620003dd62000d92565b604051620001e8919062002473565b348015620003f957600080fd5b50620002a56200040b366004620020d9565b62000df6565b3480156200041e57600080fd5b50620004366200043036600462002450565b62000f22565b604051620001e89190620024c2565b3480156200045257600080fd5b506200021660035481565b3480156200046a57600080fd5b50620002a562000fb9565b3480156200048257600080fd5b50620002a562000fc6565b3480156200049a57600080fd5b50620002a5620004ac366004620024e3565b62000fdc565b348015620004bf57600080fd5b506000546001600160a01b0316620002c9565b348015620004df57600080fd5b50620004f7620004f136600462002259565b62001212565b604051620001e8919062002674565b3480156200051357600080fd5b506200024a62000525366004620020d9565b620012d7565b3480156200053857600080fd5b50600154620002c9906001600160a01b031681565b620002a56200055e366004620026ee565b62001348565b3480156200057157600080fd5b50620002a562000583366004620020d9565b620016ab565b3480156200059657600080fd5b50620002a5620005a8366004620020d9565b6200170d565b348015620005bb57600080fd5b50620002a5620005cd366004620022c3565b62001753565b348015620005e057600080fd5b50620002a5620005f2366004620021ed565b620017d2565b620002a56200060936600462002791565b62001814565b60606200061c84620019dd565b60405163207ec7ed60e21b815260048101859052602481018490526001600160a01b0391909116906381fb1fb490604401600060405180830381865afa1580156200066b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200069591908101906200297c565b949350505050565b6000620006aa82620019dd565b6001600160a01b031663362f04c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070e919062002a17565b92915050565b60008062000723848462001a90565b9050620007386000546001600160a01b031690565b6001600160a01b039182169116149392505050565b6000806200075b84620019dd565b905060006200076b858562001212565b60a081015190915015620007bf5760405162461bcd60e51b8152602060048201526016602482015275149155d0549108105314915051164810d3105253515160521b60448201526064015b60405180910390fd5b60c08101516001600160a01b0316331480620007e557506000546001600160a01b031633145b620008245760405162461bcd60e51b815260206004820152600e60248201526d2737ba103a3432903bb4b73732b960911b6044820152606401620007b6565b6040516395d4063f60e01b815260ff851660048201526001600160a01b038316906395d4063f906024016020604051808303816000875af11580156200086e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000894919062002a3e565b5060c08101516001600160a01b031615620008ea5780604051620008b9919062002a5e565b604051908190038120907fb3daa1e04ae40c2417cdf8741a26c8fe6cdc1de8d2ccd0bf0bae1bf10051358d90600090a25b506001949350505050565b620008ff62001ab8565b6200090a82620019dd565b6001600160a01b031663c75ff55a826040518263ffffffff1660e01b815260040162000937919062002ad8565b600060405180830381600087803b1580156200095257600080fd5b505af115801562000967573d6000803e3d6000fd5b505050505050565b6200097962001ab8565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000620009a882620019dd565b6001600160a01b031663e627f2db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006e8573d6000803e3d6000fd5b6060620009f382620019dd565b6001600160a01b031663e722a8d76040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a31573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200070e919081019062002aed565b6004818154811062000a6c57600080fd5b6000918252602090912001546001600160a01b0316905081565b8151604051606085811b6bffffffffffffffffffffffff1916602083015260348201929092524660548201526074810186905260009062000b0d90609401604051602081830303815290604052805190602001207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b905062000b1b818462000714565b62000b5f5760405162461bcd60e51b815260206004820152601360248201527226b4b9b6b0ba31b41039b4b3b730ba3ab9329760691b6044820152606401620007b6565b600062000b6c87620019dd565b905042816001600160a01b031663a6a913f66040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bae573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bd4919062002b7b565b64ffffffffff161162000c1a5760405162461bcd60e51b815260206004820152600d60248201526c14d95cdcda5bdb88195b991959609a1b6044820152606401620007b6565b60405163185bf1c160e21b81526000906001600160a01b0383169063616fc7049062000c4d908a908a9060040162002ba4565b6000604051808303816000875af115801562000c6d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000c97919081019062002aed565b905060005b815181101562000d385786818151811062000cbb5762000cbb62002bca565b602002602001015182828151811062000cd85762000cd862002bca565b6020026020010151846001600160a01b03167f9e2e1fb226b8300034774ad5136d5a451b8855c14ac7072e6aa8ec8fdd84a1df8b60405162000d1b91906200228c565b60405180910390a48062000d2f8162002bf6565b91505062000c9c565b5062000d448762001b14565b979650505050505050565b62000d5962001ab8565b62000d6482620019dd565b6001600160a01b03166302a57a45826040518263ffffffff1660e01b81526004016200093791815260200190565b6060600480548060200260200160405190810160405280929190818152602001828054801562000dec57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000dcd575b5050505050905090565b62000e0062001ab8565b600062000e0d82620019dd565b905060005b62000e1d836200099b565b81101562000f1d576040516395d4063f60e01b815260ff821660048201526001600160a01b038316906395d4063f906024016020604051808303816000875af192505050801562000e8d575060408051601f3d908101601f1916820190925262000e8a9181019062002a3e565b60015b62000f06577fc9ca94d52e4fce3d31317c73b7c89a615a8d71821431fdad4a5ceaa16a4777e962000ebe8462001c13565b62000ec98362001c13565b60405160200162000edc92919062002c12565b60408051601f198184030181529082905262000ef89162002ad8565b60405180910390a162000f08565b505b8062000f148162002bf6565b91505062000e12565b505050565b604080518082019091526000808252602082015262000f4183620019dd565b6001600160a01b0316634b07954a836040518263ffffffff1660e01b815260040162000f6f91815260200190565b6040805180830381865afa15801562000f8c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fb2919062002c98565b9392505050565b62000fc43362001b14565b565b62000fd062001ab8565b62000fc4600062001cac565b62000fe662001ab8565b600062000ff386620019dd565b90506000816001600160a01b0316633a0277d9868887876040518563ffffffff1660e01b81526004016200102b949392919062002cb7565b6000604051808303816000875af11580156200104b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001075919081019062002d56565b905060005b815181101562001208576040516395d4063f60e01b815260ff821660048201526001600160a01b038416906395d4063f906024016020604051808303816000875af1925050508015620010ec575060408051601f3d908101601f19168201909252620010e99181019062002a3e565b60015b62001165577fc9ca94d52e4fce3d31317c73b7c89a615a8d71821431fdad4a5ceaa16a4777e96200111d8962001c13565b620011288362001c13565b6040516020016200113b92919062002c12565b60408051601f1981840301815290829052620011579162002ad8565b60405180910390a162001167565b505b60006001600160a01b031682828151811062001187576200118762002bca565b60200260200101516001600160a01b031614620011f35780828281518110620011b457620011b462002bca565b60200260200101516001600160a01b0316897f58014c7f942c3a5f96e2fd9d2b0d23eb1acd3bd1c9f574b6ea2206931ab0ab4f60405160405180910390a45b80620011ff8162002bf6565b9150506200107a565b5050505050505050565b6040805160e081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c08101829052906200125684620019dd565b60405163269a8c9f60e21b815260ff851660048201529091506000906001600160a01b03831690639a6a327c90602401600060405180830381865afa158015620012a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620012ce919081019062002e48565b95945050505050565b6000620012e482620019dd565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070e919062002a3e565b6200135262001ab8565b60006200135f87620019dd565b90508160ff166000036200145f5760003411620013bf5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742076616c756520746f206465706f7369740000006044820152606401620007b6565b6000816001600160a01b03168660405160006040518083038185875af1925050503d80600081146200140e576040519150601f19603f3d011682016040523d82523d6000602084013e62001413565b606091505b5050905080620014585760405162461bcd60e51b815260206004820152600f60248201526e2232b837b9b4ba103330b4b632b21760891b6044820152606401620007b6565b50620015e5565b8160ff16600103620014f2576040516323b872dd60e01b81523360048201526001600160a01b038281166024830152604482018790528491908216906323b872dd906064016020604051808303816000875af1158015620014c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014ea919062002a3e565b5050620015e5565b8160ff166002036200156d57604051635c46a7ef60e11b815283906001600160a01b0382169063b88d4fde906200153290339086908a9060040162002f40565b600060405180830381600087803b1580156200154d57600080fd5b505af115801562001562573d6000803e3d6000fd5b5050505050620015e5565b8160ff16600303620015e557604051637921219560e11b815283906001600160a01b0382169063f242432a90620015af90339086908a908c9060040162002f74565b600060405180830381600087803b158015620015ca57600080fd5b505af1158015620015df573d6000803e3d6000fd5b50505050505b60006001826001600160a01b031663af2f13e289898989896040518663ffffffff1660e01b81526004016200161f95949392919062002fb9565b6020604051808303816000875af11580156200163f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001665919062002a17565b62001671919062002ffe565b905080887f60900166e3974c824772352e5e3fcca9c44cbfe10085cf509731e4d94df8a60060405160405180910390a35050505050505050565b620016b681620019dd565b6001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620016f157600080fd5b505af115801562001706573d6000803e3d6000fd5b5050505050565b6200171881620019dd565b6001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620016f157600080fd5b6200175d62001ab8565b6001600160a01b038116620017c45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620007b6565b620017cf8162001cac565b50565b620017dc62001ab8565b620017e782620019dd565b6001600160a01b0316637bd67868826040518263ffffffff1660e01b815260040162000937919062002ad8565b6200181e62001ab8565b6001546040516000916001600160a01b03169084906200183e906200203b565b6200184b92919062003014565b604051809103906000f08015801562001868573d6000803e3d6000fd5b506004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0384161790559091505b8251811015620019885762001973600354848381518110620018dd57620018dd62002bca565b602002602001015160000151858481518110620018fe57620018fe62002bca565b6020026020010151602001518685815181106200191f576200191f62002bca565b60200260200101516040015187868151811062001940576200194062002bca565b60200260200101516060015188878151811062001961576200196162002bca565b60200260200101516080015162001348565b806200197f8162002bf6565b915050620018b7565b506003546040516001600160a01b03831691907fa13bff89598467097c4f278b6cade17d34f8ce25cdb2935e8b3444657948a93590600090a360038054906000620019d38362002bf6565b9190505550505050565b6000806001600160a01b031660048381548110620019ff57620019ff62002bca565b6000918252602090912001546001600160a01b03160362001a5c5760405162461bcd60e51b815260206004820152601660248201527553657373696f6e20646f65736e27742065786973747360501b6044820152606401620007b6565b60006004838154811062001a745762001a7462002bca565b6000918252602090912001546001600160a01b03169392505050565b600080600062001aa1858562001cfc565b9150915062001ab08162001d45565b509392505050565b6000546001600160a01b0316331462000fc45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b6565b6002546001600160a01b03161580159062001b4557506001600160a01b038116600090815260056020526040902054155b15620017cf576002546040516245ce9d60e21b81526001600160a01b039091169060009082906301173a749062001b819086906004016200228c565b6020604051808303816000875af115801562001ba1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bc7919062002a17565b6001600160a01b03841660008181526005602052604080822084905551929350909183917f36ca4e9416fa274298d517b255dec248743b8f248c1e0e44e8f944181e618a7991a3505050565b6060600062001c228362001e9d565b60010190506000816001600160401b0381111562001c445762001c44620020f3565b6040519080825280601f01601f19166020018201604052801562001c6f576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508462001c7957509392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080825160410362001d365760208301516040840151606085015160001a62001d298782858562001f7c565b9450945050505062001d3e565b506000905060025b9250929050565b600081600481111562001d5c5762001d5c6200303a565b0362001d655750565b600181600481111562001d7c5762001d7c6200303a565b0362001dc65760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401620007b6565b600281600481111562001ddd5762001ddd6200303a565b0362001e2c5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401620007b6565b600381600481111562001e435762001e436200303a565b03620017cf5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401620007b6565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831062001edd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831062001f0a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831062001f2957662386f26fc10000830492506010015b6305f5e100831062001f42576305f5e100830492506008015b612710831062001f5757612710830492506004015b6064831062001f6a576064830492506002015b600a83106200070e5760010192915050565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0383111562001fab575060009050600362002032565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801562002000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166200202b5760006001925092505062002032565b9150600090505b94509492505050565b6104e1806200305183390190565b6000806000606084860312156200205f57600080fd5b505081359360208301359350604090920135919050565b602080825282518282018190526000919060409081850190868401855b82811015620020cc57620020bb84835180516001600160a01b03168252602090810151910152565b928401929085019060010162002093565b5091979650505050505050565b600060208284031215620020ec57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b03811182821017156200212e576200212e620020f3565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200215f576200215f620020f3565b604052919050565b60006001600160401b03821115620021835762002183620020f3565b50601f01601f191660200190565b600082601f830112620021a357600080fd5b8135620021ba620021b48262002167565b62002134565b818152846020838601011115620021d057600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156200220157600080fd5b8235915060208301356001600160401b038111156200221f57600080fd5b6200222d8582860162002191565b9150509250929050565b60ff81168114620017cf57600080fd5b8035620022548162002237565b919050565b600080604083850312156200226d57600080fd5b823591506020830135620022818162002237565b809150509250929050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114620017cf57600080fd5b80356200225481620022a0565b600060208284031215620022d657600080fd5b813562000fb281620022a0565b600081518084526020808501945080840160005b838110156200231557815187529582019590820190600101620022f7565b509495945050505050565b60208152600062000fb26020830184620022e3565b60006001600160401b03821115620023515762002351620020f3565b5060051b60200190565b600082601f8301126200236d57600080fd5b8135602062002380620021b48362002335565b82815260059290921b84018101918181019086841115620023a057600080fd5b8286015b84811015620023bd5780358352918301918301620023a4565b509695505050505050565b60008060008060808587031215620023df57600080fd5b843593506020850135620023f381620022a0565b925060408501356001600160401b03808211156200241057600080fd5b6200241e888389016200235b565b935060608701359150808211156200243557600080fd5b50620024448782880162002191565b91505092959194509250565b600080604083850312156200246457600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015620024b65783516001600160a01b0316835292840192918401916001016200248f565b50909695505050505050565b81516001600160a01b0316815260208083015190820152604081016200070e565b600080600080600060a08688031215620024fc57600080fd5b853594506020808701356001600160401b03808211156200251c57600080fd5b6200252a8a838b016200235b565b965060408901359150808211156200254157600080fd5b818901915089601f8301126200255657600080fd5b813562002567620021b48262002335565b81815260059190911b8301840190848101908c8311156200258757600080fd5b8585015b83811015620025c457803585811115620025a55760008081fd5b620025b58f89838a01016200235b565b8452509186019186016200258b565b50975050506060890135925080831115620025de57600080fd5b620025ec8a848b016200235b565b945060808901359250808311156200260357600080fd5b505062002613888289016200235b565b9150509295509295909350565b60005b838110156200263d57818101518382015260200162002623565b50506000910152565b600081518084526200266081602086016020860162002620565b601f01601f19169290920160200192915050565b602081526000825160e060208401526200269361010084018262002646565b90506020840151604084015260408401516060840152606084015160018060a01b03808216608086015260ff60808701511660a086015260a0860151151560c08601528060c08701511660e086015250508091505092915050565b60008060008060008060c087890312156200270857600080fd5b8635955060208701356001600160401b038111156200272657600080fd5b6200273489828a0162002191565b955050604087013593506060870135925060808701356200275581620022a0565b915060a0870135620027678162002237565b809150509295509295509295565b8015158114620017cf57600080fd5b8035620022548162002775565b60008060408385031215620027a557600080fd5b82356001600160401b0380821115620027bd57600080fd5b620027cb8683870162002191565b9350602091508185013581811115620027e357600080fd5b8501601f81018713620027f557600080fd5b803562002806620021b48262002335565b81815260059190911b820184019084810190898311156200282657600080fd5b8584015b83811015620028fe57803586811115620028445760008081fd5b850160e0818d03601f19018113156200285d5760008081fd5b6200286762002109565b89830135898111156200287a5760008081fd5b6200288a8f8c8387010162002191565b82525060408301358a82015260608084013560408301526080620028b0818601620022b6565b8284015260a09150620028c582860162002247565b9083015260c0620028d885820162002784565b82840152620028e9848601620022b6565b9083015250855250509186019186016200282a565b508096505050505050509250929050565b80516200225481620022a0565b6000604082840312156200292f57600080fd5b604051604081018181106001600160401b0382111715620029545762002954620020f3565b806040525080915082516200296981620022a0565b8152602092830151920191909152919050565b600060208083850312156200299057600080fd5b82516001600160401b03811115620029a757600080fd5b8301601f81018513620029b957600080fd5b8051620029ca620021b48262002335565b81815260069190911b82018301908381019087831115620029ea57600080fd5b928401925b8284101562000d445762002a0488856200291c565b82528482019150604084019350620029ef565b60006020828403121562002a2a57600080fd5b5051919050565b8051620022548162002775565b60006020828403121562002a5157600080fd5b815162000fb28162002775565b60008251805162002a7481856020850162002620565b601f19601f8201168401915050602084015181526040840151602082015260018060a01b0380606086015116604083015260ff608086015116606083015260a0850151151560808301528060c08601511660a08301525060c0810191505092915050565b60208152600062000fb2602083018462002646565b6000602080838503121562002b0157600080fd5b82516001600160401b0381111562002b1857600080fd5b8301601f8101851362002b2a57600080fd5b805162002b3b620021b48262002335565b81815260059190911b8201830190838101908783111562002b5b57600080fd5b928401925b8284101562000d445783518252928401929084019062002b60565b60006020828403121562002b8e57600080fd5b815164ffffffffff8116811462000fb257600080fd5b6001600160a01b03831681526040602082018190526000906200069590830184620022e3565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162002c0b5762002c0b62002be0565b5060010190565b7f4c6f67457863657074696f6e3a20636c61696d20726577617264206661696c6581526b032171029b2b9b9b4b7b71d160a51b60208201526000835162002c6181602c85016020880162002620565b680102932bbb0b9321d160bd1b602c91840191820152835162002c8c81603584016020880162002620565b01603501949350505050565b60006040828403121562002cab57600080fd5b62000fb283836200291c565b6000608082016080835280875180835260a08501915060a08160051b86010192506020808a0160005b8381101562002d1257609f1988870301855262002cff868351620022e3565b9550938201939082019060010162002ce0565b50508584038187015250505062002d2a8187620022e3565b9050828103604084015262002d408186620022e3565b9050828103606084015262000d448185620022e3565b6000602080838503121562002d6a57600080fd5b82516001600160401b0381111562002d8157600080fd5b8301601f8101851362002d9357600080fd5b805162002da4620021b48262002335565b81815260059190911b8201830190838101908783111562002dc457600080fd5b928401925b8284101562000d4457835162002ddf81620022a0565b8252928401929084019062002dc9565b600082601f83011262002e0157600080fd5b815162002e12620021b48262002167565b81815284602083860101111562002e2857600080fd5b6200069582602083016020870162002620565b8051620022548162002237565b60006020828403121562002e5b57600080fd5b81516001600160401b038082111562002e7357600080fd5b9083019060e0828603121562002e8857600080fd5b62002e9262002109565b82518281111562002ea257600080fd5b62002eb08782860162002def565b825250602083015160208201526040830151604082015262002ed5606084016200290f565b606082015262002ee86080840162002e3b565b608082015262002efb60a0840162002a31565b60a082015262002f0e60c084016200290f565b60c082015295945050505050565b601181527024b73a32b93730b6103a3930b739b332b960791b602082015260400190565b6001600160a01b0384811682528316602082015260408101829052608060608201819052600090620012ce90830162002f1c565b6001600160a01b03858116825284166020820152604081018390526060810182905260a06080820181905260009062002faf90830162002f1c565b9695505050505050565b60a08152600062002fce60a083018862002646565b60208301969096525060408101939093526001600160a01b0391909116606083015260ff16608090910152919050565b818103818111156200070e576200070e62002be0565b6001600160a01b0383168152604060208201819052600090620006959083018462002646565b634e487b7160e01b600052602160045260246000fdfe60806040526040516104e13803806104e1833981016040819052610022916102de565b61002e82826000610035565b50506103fb565b61003e83610061565b60008251118061004b5750805b1561005c5761005a83836100a1565b505b505050565b61006a816100cd565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100c683836040518060600160405280602781526020016104ba60279139610180565b9392505050565b6001600160a01b0381163b61013f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b03168560405161019d91906103ac565b600060405180830381855af49150503d80600081146101d8576040519150601f19603f3d011682016040523d82523d6000602084013e6101dd565b606091505b5090925090506101ef868383876101f9565b9695505050505050565b60608315610268578251600003610261576001600160a01b0385163b6102615760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610136565b5081610272565b610272838361027a565b949350505050565b81511561028a5781518083602001fd5b8060405162461bcd60e51b815260040161013691906103c8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102d55781810151838201526020016102bd565b50506000910152565b600080604083850312156102f157600080fd5b82516001600160a01b038116811461030857600080fd5b60208401519092506001600160401b038082111561032557600080fd5b818501915085601f83011261033957600080fd5b81518181111561034b5761034b6102a4565b604051601f8201601f19908116603f01168101908382118183101715610373576103736102a4565b8160405282815288602084870101111561038c57600080fd5b61039d8360208301602088016102ba565b80955050505050509250929050565b600082516103be8184602087016102ba565b9190910192915050565b60208152600082518060208401526103e78160408501602087016102ba565b601f01601f19169190910160400192915050565b60b1806104096000396000f3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6058565b565b600060537f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156076573d6000f35b3d6000fdfea2646970667358221220cd192a3c3833c82a19c4e89c6a3770f270ec5751497edd1c0d260a060b06fa3464736f6c63430008130033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200eeaeb16afe545dea23e8989e6fd958c2a861c9b28f8481fb8df766d6b667a2764736f6c63430008130033" + }, + { + "address": "0x30d64908e2ac75cda712cf0075f3ed5a9d22bf3a", + "nonce": 3, + "balance": "0x000000000000000000000000000000000000000000000000003442f9860b9b84", + "code": "0x" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106105815760003560e01c8063724e78da116102e5578063cabac30d1161018d578063de2ea948116100f4578063efa10a6e116100ad578063f255527811610087578063f255527814610ec0578063f3ae241514610ed3578063f8d9365714610ef6578063fce28c1014610bbe57600080fd5b8063efa10a6e14610e87578063f073658a14610e9a578063f07bbf7714610ead57600080fd5b8063de2ea94814610dfa578063de56bd9d14610e0d578063e468baf014610e2d578063e5b727ec14610e40578063e75a4a2c14610e60578063ef9465c014610e7357600080fd5b8063d5d3a3f111610146578063d5d3a3f114610d5b578063d663d69614610d7b578063d8f897c314610d8e578063d9ac422514610dae578063daa2cb1c14610db7578063daf9c21014610dd757600080fd5b8063cabac30d14610cdc578063ce41329b14610cef578063cfad57a214610d02578063d1c7e11514610d15578063d2fa635e14610d28578063d4e4d92e14610d3b57600080fd5b80639060b1ca1161024c5780639f392eb311610205578063a7aa0ec0116101df578063a7aa0ec014610c74578063b5b38b7114610c89578063bfbd421b14610ca9578063c038661114610cbc57600080fd5b80639f392eb314610c41578063a5e90eee14610c4e578063a6b63eb814610c6157600080fd5b80639060b1ca14610bb157806390eb88e614610bbe57806394f510cd14610bc657806395082d2514610be95780639687640814610bfd578063982f7e6014610c1257600080fd5b8063818fe3801161029e578063818fe38014610b1557806385ec027814610b1e57806388b1fbdf14610b3e5780638a78daa814610b5e5780638ee573ac14610b7e5780638f80ed8414610b9e57600080fd5b8063724e78da14610a5e578063741bef1a14610a715780637619bc5714610a845780637795549a14610ace578063795c9a0214610aee5780637f38ce0f14610b0157600080fd5b80633a5a34e311610448578063504781f7116103af5780635688be7f116103685780635f7bc119116103425780635f7bc11914610a1057806361dbc8c514610a235780636274980314610a2b5780636995350114610a4b57600080fd5b80635688be7f146109c5578063576e4035146109e55780635a29638d146109f857600080fd5b8063504781f71461086957806350dab35a1461087c578063514ea4bf1461088f578063523fba7f14610962578063529a356f1461098257806352f55eed146109a557600080fd5b806348d91abf1161040157806348d91abf146107f15780634a3f088d146108045780634befe2ca146108245780634d47b3041461082d5780634ea8b57414610836578063500060011461085657600080fd5b80633a5a34e31461076d5780633de39c111461078c578063423347961461079557806342b60b03146107a85780634453a374146107cb57806348621657146107de57600080fd5b80631ce9cb8f116104ec578063318bc689116104a5578063318bc6891461071b5780633436ce0e1461072457806334c1557d14610604578063352ade5514610744578063363856461461074d578063392e53cd1461076057600080fd5b80631ce9cb8f1461068c5780631e3451e3146106ac578063227f03eb146106cf57806324b0c04d146106e257806325f80956146106f55780632d4b05761461070857600080fd5b806312cbe9e81161053e57806312cbe9e81461060d57806312d43a511461062057806313f1e7361461064b578063174d26941461065e578063181e210e146106675780631b5ac4b51461067957600080fd5b806301beb39b1461058657806307c587521461059b5780630842b076146105b65780630f0a3aba146105be578063114c58a6146105f1578063126082cf14610604575b600080fd5b610599610594366004615608565b610f09565b005b6105a3610f2f565b6040519081526020015b60405180910390f35b6014546105a3565b6105e16105cc366004615641565b60026020526000908152604090205460ff1681565b60405190151581526020016105ad565b6105a36105ff36600461565c565b610f4a565b6105a361271081565b61059961061b36600461568f565b6112d5565b600554610633906001600160a01b031681565b6040516001600160a01b0390911681526020016105ad565b610599610659366004615641565b6112f9565b6105a360065481565b600e546105e190610100900460ff1681565b6105a36106873660046156b9565b611453565b6105a361069a366004615641565b60276020526000908152604090205481565b6105e16106ba366004615641565b60166020526000908152604090205460ff1681565b6105996106dd3660046156d2565b61146b565b6105996106f0366004615608565b6114fe565b6105996107033660046156b9565b611519565b6105a361071636600461570b565b611526565b6105a360095481565b6105a3610732366004615641565b602e6020526000908152604090205481565b6105a360075481565b6105a361075b366004615641565b611581565b6001546105e19060ff1681565b6105a361077b366004615641565b602080526000908152604090205481565b6105a3600f5481565b6105996107a3366004615641565b6115f1565b6105e16107b6366004615641565b601a6020526000908152604090205460ff1681565b6105996107d9366004615761565b611731565b6105996107ec366004615641565b611764565b6105996107ff366004615798565b61178e565b61081761081236600461570b565b612087565b6040516105ad919061589b565b6105a36101f481565b6105a360085481565b6105a3610844366004615641565b602c6020526000908152604090205481565b6105a361086436600461565c565b612148565b61059961087736600461568f565b612552565b6105a361088a366004615641565b612576565b6108fe61089d3660046156b9565b60246020526000908152604090208054600182015460028301546003840154600485015460058601546006870154600788015460088901546009909901546001600160a01b039889169997891698871697600160a01b90970460ff1696908b565b604080516001600160a01b039c8d1681529a8c1660208c015298909a16978901979097529415156060880152608087019390935260a086019190915260c085015260e0840152610100830152610120820152610140810191909152610160016105ad565b6105a3610970366004615641565b601c6020526000908152604090205481565b6105e1610990366004615641565b60126020526000908152604090205460ff1681565b6105a36109b3366004615641565b601d6020526000908152604090205481565b6105a36109d3366004615641565b60296020526000908152604090205481565b6105996109f33660046158aa565b6125a9565b6001546106339061010090046001600160a01b031681565b610599610a1e366004615641565b6126a0565b6105a3601281565b6105a3610a39366004615641565b602a6020526000908152604090205481565b610599610a59366004615641565b61279e565b610599610a6c366004615641565b6127ce565b600354610633906001600160a01b031681565b610ab3610a92366004615641565b600c6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016105ad565b6105a3610adc366004615641565b60216020526000908152604090205481565b6105a3610afc3660046158ff565b6127f8565b6005546105e190600160a81b900460ff1681565b6105a360105481565b6105a3610b2c366004615641565b60226020526000908152604090205481565b6105a3610b4c366004615641565b60196020526000908152604090205481565b6105a3610b6c366004615641565b60286020526000908152604090205481565b6105a3610b8c366004615641565b60186020526000908152604090205481565b610599610bac366004615761565b612883565b600e546105e19060ff1681565b6105a3600181565b6105e1610bd4366004615641565b60176020526000908152604090205460ff1681565b6105a36c0c9f2c9cd04674edea4000000081565b610c056128b6565b6040516105ad919061596e565b610ab3610c20366004615641565b600d6020526000908152604090208054600182015460029092015490919083565b600b546105e19060ff1681565b610599610c5c366004615761565b6128c7565b610599610c6f3660046159b2565b6128fa565b610c7c6129ab565b6040516105ad9190615a07565b6105a3610c97366004615641565b601f6020526000908152604090205481565b610599610cb7366004615a4a565b612b09565b6105a3610cca366004615641565b601b6020526000908152604090205481565b610599610cea366004615a6d565b612b67565b610599610cfd366004615608565b612cea565b610599610d10366004615641565b612d10565b610599610d233660046156d2565b612d3a565b610599610d363660046156b9565b612dcd565b6105a3610d49366004615641565b602d6020526000908152604090205481565b6105a3610d69366004615641565b601e6020526000908152604090205481565b610599610d8936600461568f565b612dda565b6105a3610d9c366004615641565b60236020526000908152604090205481565b6105a3600a5481565b6105a3610dc5366004615641565b602b6020526000908152604090205481565b6105e1610de5366004615641565b60156020526000908152604090205460ff1681565b610599610e08366004615ae6565b612dfe565b6105a3610e1b366004615641565b60116020526000908152604090205481565b610633610e3b3660046156b9565b612e20565b6105a3610e4e366004615641565b602f6020526000908152604090205481565b610599610e6e366004615a4a565b612e4a565b6005546105e190600160a01b900460ff1681565b610599610e9536600461568f565b61354d565b600454610633906001600160a01b031681565b610599610ebb366004615608565b613571565b6105a3610ece36600461565c565b613593565b6105e1610ee1366004615641565b60136020526000908152604090205460ff1681565b610599610f0436600461568f565b6135f3565b610f11613617565b60058054911515600160a81b0260ff60a81b19909216919091179055565b610f476c0c9f2c9cd04674edea400000006064615b63565b81565b6000610f5461364e565b60055460408051808201909152601b81527f563a204c502061637469766974792069732073757370656e64656400000000006020820152610fa091600160a81b900460ff161590613678565b610fa86136a5565b6001600160a01b038316600090815260156020908152604091829020548251808401909352601a8352792b1d102737ba1030903bb434ba32b634b9ba32b2103a37b5b2b760311b918301919091526110059160ff90911690613678565b60045460009061101d906001600160a01b03166136f8565b90506110596000821160405180604001604052806015815260200174563a207573646c416d6f756e7420746f6f206c6f7760581b815250613678565b600154604051632c668ec160e01b815260009161010090046001600160a01b031690632c668ec1906110919088908690600401615b7a565b602060405180830381865afa1580156110ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d29190615b93565b9050611116600082116040518060400160405280601b81526020017f563a20726564656d7074696f6e416d6f756e7420746f6f206c6f770000000000815250613678565b61112085826137a4565b60048054604051632770a7eb60e21b81526001600160a01b0390911691639dc29fac91611151913091879101615b7a565b600060405180830381600087803b15801561116b57600080fd5b505af115801561117f573d6000803e3d6000fd5b505060045461119992506001600160a01b03169050613887565b60015460405163cb212f1560e01b815260009161010090046001600160a01b03169063cb212f15906111d19089908790600401615b7a565b602060405180830381865afa1580156111ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112129190615b93565b90506000611221878484613912565b905061125c6000821160405180604001604052806014815260200173563a20616d6f756e744f757420746f6f206c6f7760601b815250613678565b611267878288613a3d565b604080516001600160a01b0380891682528916602082015290810185905260608101829052608081018390527fc5810385352ebbf76085b88c0225dd113d4b38640b39242b0a570680bf47284f9060a00160405180910390a193505050506112cf6001600055565b92915050565b6112dd613617565b6001600160a01b039091166000908152602e6020526040902055565b6001546001600160a01b03828116600090815260236020526040808220549051630401682160e51b8152919384938493610100909204169163802d042091611345918891600401615b7a565b6060604051808303816000875af1158015611364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113889190615bac565b6001600160a01b038716600090815260208052604090205492955090935091506113b3908390615bda565b6001600160a01b038516600090815260208080526040808320939093556021905220546113e1908290615bda565b6001600160a01b0385166000908152602160208181526040808420948555602382528084208890558180529283902054919052915490517f454813793b9193359f5f0de75461b64bc6db09c6504a467c228fb27a2c0f4f2192611445928892615c02565b60405180910390a150505050565b600080821261146257816112cf565b6112cf82615c23565b611473613617565b6114b660018410156040518060400160405280601b81526020017f563a2066756e64696e6720696e74657276616c20746f6f206c6f770000000000815250613678565b6040805160608101825292835260208084019485528382019283526001600160a01b039095166000908152600c90955290932090518155905160018201559051600290910155565b611506613617565b600e805460ff1916911515919091179055565b611521613617565b601055565b604080516bffffffffffffffffffffffff19606096871b811660208084019190915295871b811660348301529390951b9092166048850152151560f81b605c8401528051808403603d018152605d9093019052815191012090565b600354604051631b1c2b2360e11b81526001600160a01b03838116600483015260009216906336385646906024015b602060405180830381865afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf9190615b93565b600154604051632119a3cb60e11b81526001600160a01b0383811660048301526000928392839261010090920490911690634233479690602401606060405180830381865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c9190615bac565b6001600160a01b0387166000908152602260209081526040808320869055601e90915290205492955090935091506116a5908390615c3f565b6001600160a01b0385166000908152601e6020908152604080832093909355601f905220546116d5908290615c3f565b6001600160a01b0385166000908152601f60208181526040808420859055601e8252928390205491905290517fd646764487c81bccdf0bbb117da68f5de5c6db91eae18fb16d8bd9eed4b0737f92611445928892909190615c02565b611739613617565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b61176c613617565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b61179661364e565b60055460408051808201909152601f81527f563a2074726164652061637469766974792069732073757370656e646564210060208201526117e291600160a01b900460ff161590613678565b6117ea613ada565b6117f385613b22565b6117fd8484613b91565b600154604051634eae147d60e11b81526001600160a01b0387811660048301528681166024830152858116604483015260648201859052831515608483015261010090920490911690639d5c28fa9060a40160006040518083038186803b15801561186757600080fd5b505afa15801561187b573d6000803e3d6000fd5b50505050611888836115f1565b611891836112f9565b600061189f86868685611526565b6000818152602460205260408120919250836118c3576118be86611581565b6118cc565b6118cc86612576565b90508160030154600003611942576005820181905581546001600160a01b03199081166001600160a01b038a8116919091178455600184018054909216898216179091556002830180549188166001600160a81b031990921691909117600160a01b86151502179055611940602584613c49565b505b600082600301541180156119565750600085115b15611a0d5760015460038301546005840154600985015460405163db97495f60e01b81526001600160a01b038b811660048301526024820194909452604481019290925287151560648301526084820185905260a4820189905260c4820152610100909204169063db97495f9060e401602060405180830381865afa1580156119e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a079190615b93565b60058301555b6000611a2b898989888a886003015489600601548a60070154613c55565b90506000611a38896136f8565b600154604051630a48d5a960e01b81529192506000916101009091046001600160a01b031690630a48d5a990611a74908d908690600401615b7a565b602060405180830381865afa158015611a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab59190615b93565b9050808560040154611ac79190615c3f565b60048601556000831315611b3557611b1b83866004015410156040518060400160405280601a81526020017f563a20696e73756666696369656e7420636f6c6c61746572616c000000000000815250613678565b828560040154611b2b9190615c52565b6004860155611b53565b611b3e83615c23565b8560040154611b4d9190615c3f565b60048601555b600154604051630df875e160e01b81526101009091046001600160a01b031690630df875e190611b8b908d908d908c90600401615c65565b602060405180830381865afa158015611ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcc9190615b93565b600686015560015460405163b1cc53ab60e01b81526101009091046001600160a01b03169063b1cc53ab90611c09908d908d908c90600401615c65565b602060405180830381865afa158015611c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4a9190615b93565b60078601556003850154611c5f908990615c3f565b600386018190554260098701556040805180820190915260158152740563a2073697a652073686f756c64206265203e203605c1b6020820152611ca491151590613678565b600154600386015460048088015460405163726098bb60e01b81529182019290925260248101919091526101009091046001600160a01b03169063726098bb9060440160006040518083038186803b158015611cff57600080fd5b505afa158015611d13573d6000803e3d6000fd5b5050600180546040516361a085f760e01b81526101009091046001600160a01b031693506361a085f79250611d55918f918f918f918e91908c90600401615c89565b6040805180830381865afa158015611d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d959190615cc4565b50508615611e92576001600160a01b0389166000908152602960205260408120549003611ddc576001600160a01b0389166000908152602b60205260409020849055611e83565b60018054906101000a90046001600160a01b03166001600160a01b031663504dd9598c8c8c888d6001806040518863ffffffff1660e01b8152600401611e289796959493929190615ce8565b602060405180830381865afa158015611e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e699190615b93565b6001600160a01b038a166000908152602b60205260409020555b611e8d8989613d20565b611f83565b6001600160a01b0389166000908152602860205260408120549003611ed1576001600160a01b0389166000908152602a60205260409020849055611f79565b60018054906101000a90046001600160a01b03166001600160a01b031663504dd9598c8c8c888d600060016040518863ffffffff1660e01b8152600401611f1e9796959493929190615ce8565b602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190615b93565b6001600160a01b038a166000908152602a60205260409020555b611f838989613ee2565b611f8b6140a6565b604080518781526020810183905290810189905287151560608201526080810185905260a081018490526001600160a01b03808b16918c8216918e16907fe37b583214337170f5a1c0ee6752f71fef48b734013d2a9af5fe01b3d347e6f69060c00160405180910390a4886001600160a01b03168a6001600160a01b03168c6001600160a01b03167f500594c4a849c05c6605f2b7a1b05e75cff8edde16c4beb8af6779aa411cae0b8a89600301548a600401548b600501548c600601548d600701548e600801548e604051612068989796959493929190615d29565b60405180910390a45050505050506120806001600055565b5050505050565b61208f615583565b600061209d86868686611526565b60009081526024602090815260409182902082516101608101845281546001600160a01b0390811682526001830154811693820193909352600282015492831693810193909352600160a01b90910460ff161515606083015260038101546080830152600481015460a0830152600581015460c0830152600681015460e083015260078101546101008301526008810154610120830152600901546101408201529695505050505050565b600061215261364e565b61215a6136a5565b60055460408051808201909152601b81527f563a204c502061637469766974792069732073757370656e646564000000000060208201526121a691600160a81b900460ff161590613678565b6001600160a01b038316600090815260156020908152604091829020548251808401909352601a8352792b1d102737ba1030903bb434ba32b634b9ba32b2103a37b5b2b760311b918301919091526122039160ff90911690613678565b600061220e846136f8565b905061224b6000821160405180604001604052806016815260200175563a20746f6b656e416d6f756e7420746f6f206c6f7760501b815250613678565b600061225685611581565b905060006c0c9f2c9cd04674edea400000006122728385615b63565b61227c9190615d61565b60015460048054604051634215287360e01b81529182018490526001600160a01b038a81166024840152908116604483015292935061010090910490911690634215287390606401602060405180830381865afa1580156122e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123059190615b93565b90506123416000821160405180604001604052806015815260200174563a207573646c416d6f756e7420746f6f206c6f7760581b815250613678565b600154604051634773bd1b60e01b815260009161010090046001600160a01b031690634773bd1b90612379908a908690600401615b7a565b602060405180830381865afa158015612396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ba9190615b93565b905060006123c9888684613912565b905060006c0c9f2c9cd04674edea400000006123e58684615b63565b6123ef9190615d61565b60015460048054604051634215287360e01b81529182018490526001600160a01b038d81166024840152908116604483015292935061010090910490911690634215287390606401602060405180830381865afa158015612454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124789190615b93565b905061248489836141f2565b600480546040516340c10f1960e01b81526001600160a01b03909116916340c10f19916124b5918c91869101615b7a565b600060405180830381600087803b1580156124cf57600080fd5b505af11580156124e3573d6000803e3d6000fd5b5050604080516001600160a01b03808d1682528d16602082015290810189905260608101849052608081018690527fb021847b8d9b06facf029c8c64ab263782363d31ecfa09ef120fa350d47931b5925060a001905060405180910390a1955050505050506112cf6001600055565b61255a613617565b6001600160a01b039091166000908152602f6020526040902055565b60035460405163286d59ad60e11b81526001600160a01b03838116600483015260009216906350dab35a906024016115b0565b6125b1613617565b6125d86101f4871115604051806060016040528060228152602001615f7060229139613678565b61261c6101f48611156040518060400160405280602081526020017f563a206d617267696e4665654261736973506f696e747320746f6f2068696768815250613678565b6126756126376c0c9f2c9cd04674edea400000006064615b63565b8511156040518060400160405280601d81526020017f563a206c69717569646174696f6e46656555736420746f6f2068696768000000815250613678565b600895909555600993909355600691909155600755600a55600b805460ff1916911515919091179055565b6126a861364e565b6001600160a01b038116600090815260176020908152604091829020548251808401909352601a8352792b1d102737ba1030903bb434ba32b634b9ba32b2103a37b5b2b760311b918301919091526127059160ff90911690613678565b6000612710826136f8565b905061274d6000821160405180604001604052806016815260200175158e88125b9d985b1a59081d1bdad95b905b5bdd5b9d60521b815250613678565b61275782826141f2565b7fa5a389190ebf6170a133bda5c769b77f4d6715b8aa172ec0ddf8473d0b4944bd8282604051612788929190615b7a565b60405180910390a15061279b6001600055565b50565b6127a6613617565b600180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6127d6613617565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600061280261364e565b60055460408051808201909152601f81527f563a2074726164652061637469766974792069732073757370656e6465642100602082015261284e91600160a01b900460ff161590613678565b612856613ada565b61285f87613b22565b61286d878787878787614336565b90506128796001600055565b9695505050505050565b61288b613617565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b60606128c260256149b6565b905090565b6128cf613617565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b612902613617565b60015460408051808201909152601781527f563a20416c726561647920496e697469616c697a65642100000000000000000060208201526129479160ff161590613678565b6001805460ff19908116821782556001600160a01b03968716600090815260026020526040902080549091169091179055600480546001600160a01b0319908116958716959095179055600380549094169290941691909117909155600655600755565b606060006129b960256149c3565b905060008167ffffffffffffffff8111156129d6576129d6615d83565b604051908082528060200260200182016040528015612a0f57816020015b6129fc615583565b8152602001906001900390816129f45790505b50905060005b82811015612b025760246000612a2c6025846149cd565b8152602080820192909252604090810160002081516101608101835281546001600160a01b0390811682526001830154811694820194909452600282015493841692810192909252600160a01b90920460ff161515606082015260038201546080820152600482015460a0820152600582015460c0820152600682015460e0820152600782015461010082015260088201546101208201526009909101546101408201528251839083908110612ae457612ae4615d99565b60200260200101819052508080612afa90615daf565b915050612a15565b5092915050565b612b11613617565b612b4d612710831160405180604001604052806016815260200175563a206d61784c6576657261676520746f6f206c6f7760501b815250613678565b6001600160a01b03166000908152601b6020526040902055565b612b6f613617565b612bf7876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd49190615dc8565b60ff1687146040518060600160405280603d8152602001615f33603d9139613678565b6001600160a01b03871660009081526015602052604090205460ff16612c6357601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b0389161790555b6001600160a01b039690961660009081526015602090815260408083208054600160ff199182161790915560188352818420989098556019825280832096909655601a8152858220805488169515159590951790945560178452848120805487169315159390931790925560168352838220805490951690151517909355601b9052902055565b612cf2613617565b60058054911515600160a01b0260ff60a01b19909216919091179055565b612d18613617565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b612d42613617565b612d8560018410156040518060400160405280601c81526020017f563a20626f72726f77696e67496e74657276616c20746f6f206c6f7700000000815250613678565b6040805160608101825292835260208084019485528382019283526001600160a01b039095166000908152600d90955290932090518155905160018201559051600290910155565b612dd5613617565b600f55565b612de2613617565b6001600160a01b03909116600090815260116020526040902055565b6000612e0c86868686611526565b9050612e188183612e4a565b505050505050565b60148181548110612e3057600080fd5b6000918252602090912001546001600160a01b0316905081565b612e5261364e565b600e54610100900460ff1615612ead573360009081526012602090815260409182902054825180840190935260118352702b1d103737ba103634b8bab4b230ba37b960791b91830191909152612ead9160ff90911690613678565b612eb5615583565b5060008281526024602090815260409182902082516101608101845281546001600160a01b0390811682526001830154811682850152600283015490811682860152600160a01b900460ff1615156060820152600382015460808201819052600483015460a0830152600583015460c0830152600683015460e08301526007830154610100830152600883015461012083015260099092015461014082015283518085019094526014845273158e881b9bc81c1bdcda5d1a5bdb88199bdd5b9960621b928401929092529091612f8d91151590613678565b612f9a81604001516115f1565b612fa781604001516112f9565b60008160600151612fc457612fbf8260400151612576565b612fd1565b612fd18260400151611581565b9050600080600060018054906101000a90046001600160a01b03166001600160a01b03166361a085f7866000015187602001518860400151896060015160008a6040518763ffffffff1660e01b815260040161303296959493929190615c89565b6040805180830381865afa15801561304e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130729190615cc4565b915091506130b982600014156040518060400160405280601c81526020017f563a20706f736974696f6e206e6f74206c6971756964617461626c6500000000815250613678565b816002036130fc576130e7856000015186602001518760400151886080015189606001518a60000151614336565b506130f285876149d9565b505050505061353f565b80925050508260600151156131d05760018054845160208601516040808801516080890151915163504dd95960e01b81526101009095046001600160a01b03169563504dd959956131589594938a929091600090600401615ce8565b602060405180830381865afa158015613175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131999190615b93565b604080850180516001600160a01b03166000908152602b60205291909120919091555160808401516131cb9190614aeb565b613293565b600154835160208501516040808701516080880151915163504dd95960e01b81526101009095046001600160a01b03169463504dd959946132209490939092918991906000908190600401615ce8565b602060405180830381865afa15801561323d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132619190615b93565b604080850180516001600160a01b03166000908152602a60205291909120919091555160808401516132939190614b41565b80600081121561334e5760006132ad838660200151614b97565b602087015160015460a0890151604051634c4ce68160e11b81529496509294506133489391926101009091046001600160a01b031691639899cd02916132f891859190600401615b7a565b602060405180830381865afa158015613315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133399190615b93565b6133439084615c3f565b6141f2565b5061340c565b8360a0015182116133f4576000828560a0015161336b9190615c52565b6020860151600154604051634c4ce68160e11b81529293506133ee926101009091046001600160a01b031690639899cd02906133ad9084908790600401615b7a565b602060405180830381865afa1580156133ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133439190615b93565b506133fb565b5060a08301515b613409818560200151614b97565b50505b6001151584604001516001600160a01b031685600001516001600160a01b03167fd4bab212cac6d662f93bee548766bf247ab2729ee812be02f215973f8e1111ed87602001518860800151896060015189888c61012001516040516134a4969594939291906001600160a01b03969096168652602086019490945291151560408501526060840152608083015260a082015260c00190565b60405180910390a483604001516001600160a01b031684602001516001600160a01b031685600001516001600160a01b03167f500594c4a849c05c6605f2b7a1b05e75cff8edde16c4beb8af6779aa411cae0b876060015160008060008060008d61012001518d60405161351f989796959493929190615d29565b60405180910390a45061353185614d5b565b61353b83856149d9565b5050505b6135496001600055565b5050565b613555613617565b6001600160a01b039091166000908152602c6020526040902055565b613579613617565b600e80549115156101000261ff0019909216919091179055565b600061359d613617565b6001600160a01b038316600090815260276020526040812054908190036135c85760009150506112cf565b6001600160a01b0384166000908152602760205260408120556135ec848285613a3d565b9392505050565b6135fb613617565b6001600160a01b039091166000908152602d6020526040902055565b600554604080518082019091526006815265158e880d0c0d60d21b602082015261364c916001600160a01b0316331490613678565b565b60026000540361367157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b80826136a05760405162461bcd60e51b81526004016136979190615e0f565b60405180910390fd5b505050565b600e5460ff161561364c5733600090815260136020908152604091829020548251808401909352600e83526d2b1d103737ba1036b0b730b3b2b960911b9183019190915261364c9160ff90911690613678565b6001600160a01b0381166000818152601c60205260408082205490516370a0823160e01b8152306004820152919290918391906370a0823190602401602060405180830381865afa158015613751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137759190615b93565b6001600160a01b0385166000908152601c60205260409020819055905061379c8282615c52565b949350505050565b6001600160a01b0382166000908152601d60205260409020548111156138055760405162461bcd60e51b8152602060048201526016602482015275158e881c1bdbdb105b5bdd5b9d08195e18d95959195960521b6044820152606401613697565b6001600160a01b0382166000908152601d6020526040902054613829908290615c52565b6001600160a01b0383166000908152601d602052604090205561384a6140a6565b7f112726233fbeaeed0f5b1dba5cb0b2b81883dee49fb35ff99fd98ed9f6d31eb0828260405161387b929190615b7a565b60405180910390a15050565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156138ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f29190615b93565b6001600160a01b039092166000908152601c602052604090209190915550565b6000806127106139228482615c52565b61392c9086615b63565b6139369190615d61565b905060006139448286615c52565b6001600160a01b03871660009081526027602052604090205490915061396b908290615c3f565b6001600160a01b0380881660009081526027602052604090819020929092556001549151630a48d5a960e01b81527f47cd9dda0e50ce30bcaaacd0488452b596221c07ac402a581cfae4d3933cac2b9289926101009091041690630a48d5a9906139db9084908790600401615b7a565b602060405180830381865afa1580156139f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1c9190615b93565b83604051613a2c93929190615c02565b60405180910390a150949350505050565b613a516001600160a01b0384168284614dd2565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015613a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab99190615b93565b6001600160a01b039093166000908152601c60205260409020929092555050565b600f54600003613ae657565b61364c600f543a1115604051806040016040528060158152602001740ac7440cec2e640e0e4d2c6ca40e8dede40d0d2ced605b1b815250613678565b6001600160a01b0381163303613b355750565b33600090815260026020908152604091829020548251808401909352601c83527f563a204f726465724d616e61676572206e6f7420617070726f766564000000009183019190915261279b9160ff909116151560011490613678565b6001600160a01b038216600090815260176020908152604091829020548251808401909352601a83527f563a20496e76616c696420636f6c6c61746572616c546f6b656e00000000000091830191909152613bf19160ff90911690613678565b6001600160a01b03811660009081526016602090815260409182902054825180840190935260158352742b1d1024b73b30b634b21034b73232bc2a37b5b2b760591b918301919091526135499160ff90911690613678565b60006135ec8383614e28565b600154604051630845f61f60e31b81526001600160a01b038a811660048301528981166024830152888116604483015287151560648301526084820187905260a4820186905260c4820185905260e4820184905260009283926101009091049091169063422fb0f890610104016020604051808303816000875af1158015613ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d059190615b93565b9050613d11818a614b97565b509a9950505050505050505050565b60018054604051632207194f60e11b81526001600160a01b038581166004830152602482019390935260009284926101009004169063440e329e90604401602060405180830381865afa158015613d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9f9190615b93565b613da99190615c3f565b9050600061271060018054906101000a90046001600160a01b03166001600160a01b031663ddf40d446040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e259190615b93565b6001600160a01b0386166000908152602f6020526040902054613e489190615b63565b613e529190615d61565b905080821115613e9c5760405162461bcd60e51b8152602060048201526015602482015274158e881b585e081b1bdb99dcc8195e18d959591959605a1b6044820152606401613697565b6001600160a01b038416600090815260296020526040902054613ec0908490615c3f565b6001600160a01b03909416600090815260296020526040902093909355505050565b600154604051632207194f60e11b81526001600160a01b0384811660048301526000602483018190529284926101009091049091169063440e329e90604401602060405180830381865afa158015613f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f629190615b93565b613f6c9190615c3f565b9050600061271060018054906101000a90046001600160a01b03166001600160a01b031663ddf40d446040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fe89190615b93565b6001600160a01b0386166000908152602e602052604090205461400b9190615b63565b6140159190615d61565b9050808211156140605760405162461bcd60e51b8152602060048201526016602482015275158e881b585e081cda1bdc9d1cc8195e18d95959195960521b6044820152606401613697565b6001600160a01b038416600090815260286020526040902054614084908490615c3f565b6001600160a01b03909416600090815260286020526040902093909355505050565b600060018054906101000a90046001600160a01b03166001600160a01b031663e6a9d5ff6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411d9190615b93565b9050600060018054906101000a90046001600160a01b03166001600160a01b031663ddf40d446040518163ffffffff1660e01b8152600401602060405180830381865afa158015614172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141969190615b93565b9050613549601054826141a99190615b63565b6141b561271085615b63565b11156040518060400160405280601e81526020017f563a20706f6f6c2073616665747920666163746f722062726561636865640000815250613678565b6001600160a01b0382166000908152601d6020526040902054614216908290615c3f565b6001600160a01b0383166000818152601d60205260408082209390935591516370a0823160e01b81523060048201526370a0823190602401602060405180830381865afa15801561426b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428f9190615b93565b90506142f881601d6000866001600160a01b03166001600160a01b031681526020019081526020016000205411156040518060400160405280601e81526020017f563a20706f6f6c416d6f756e742065786365656465732062616c616e63650000815250613678565b7f976177fbe09a15e5e43f848844963a42b41ef919ef17ff21a17a5421de8f47378383604051614329929190615b7a565b60405180910390a1505050565b600154604051636c4d8b7560e11b81526001600160a01b0388811660048301528781166024830152868116604483015260648201869052841515608483015283811660a48301526000926101009004169063d89b16ea9060c40160006040518083038186803b1580156143a857600080fd5b505afa1580156143bc573d6000803e3d6000fd5b505050506143c9856115f1565b6143d2856112f9565b6000806143e189898988611526565b905060246000828152602001908152602001600020915050614436600082600301541160405180604001604052806014815260200173158e881b9bc81c1bdcda5d1a5bdb88199bdd5b9960621b815250613678565b61445f8582600301541015604051806060016040528060238152602001615f1060239139613678565b6000846144745761446f87612576565b61447d565b61447d87611581565b90506000806000806144948d8d8d60008e8e614e77565b91945092509050811561452557600154604051634c4ce68160e11b81526101009091046001600160a01b031690639899cd02906144d7908f908690600401615b7a565b602060405180830381865afa1580156144f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145189190615b93565b93506145258c858a613a3d565b600015158b6001600160a01b03168e6001600160a01b03167fd4bab212cac6d662f93bee548766bf247ab2729ee812be02f215973f8e1111ed8f8e8e8b8a896040516145a4969594939291906001600160a01b03969096168652602086019490945291151560408501526060840152608083015260a082015260c00190565b60405180910390a4505050851561465e576001805460405163504dd95960e01b81526101009091046001600160a01b03169163504dd959916145f5918e918e918e9189918f91600090600401615ce8565b602060405180830381865afa158015614612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146369190615b93565b6001600160a01b0389166000908152602b60205260409020556146598888614aeb565b614703565b60015460405163504dd95960e01b81526101009091046001600160a01b03169063504dd9599061469f908d908d908d9088908e906000908190600401615ce8565b602060405180830381865afa1580156146bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e09190615b93565b6001600160a01b0389166000908152602a60205260409020556147038888614b41565b8683600301541461491357600154604051630df875e160e01b81526101009091046001600160a01b031690630df875e190614746908c908c908b90600401615c65565b602060405180830381865afa158015614763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147879190615b93565b600684015560015460405163b1cc53ab60e01b81526101009091046001600160a01b03169063b1cc53ab906147c4908c908c908b90600401615c65565b602060405180830381865afa1580156147e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148059190615b93565b6007840155600383015461481a908890615c52565b6003840181905560015460048086015460405163726098bb60e01b815291820193909352602481019290925261010090046001600160a01b03169063726098bb9060440160006040518083038186803b15801561487657600080fd5b505afa15801561488a573d6000803e3d6000fd5b5050600180546040516361a085f760e01b81526101009091046001600160a01b031693506361a085f792506148cc918e918e918e918d91908a90600401615c89565b6040805180830381865afa1580156148e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061490c9190615cc4565b505061492e565b60006149218b8b8b8a611526565b905061492c81614d5b565b505b876001600160a01b0316896001600160a01b03168b6001600160a01b03167f500594c4a849c05c6605f2b7a1b05e75cff8edde16c4beb8af6779aa411cae0b898760030154886004015489600501548a600601548b600701548c600801548c6040516149a1989796959493929190615d29565b60405180910390a49998505050505050505050565b606060006135ec83615221565b60006112cf825490565b60006135ec838361527d565b60015460208301516080840151604080860151905163400698ed60e01b815260048101929092526001600160a01b03908116602483015260009361010090041691639899cd0291839063400698ed906044016020604051808303816000875af1158015614a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a6e9190615b93565b6040518363ffffffff1660e01b8152600401614a8b929190615b7a565b602060405180830381865afa158015614aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614acc9190615b93565b9050614adc8360200151826137a4565b6136a083602001518284613a3d565b6001600160a01b03821660009081526029602052604090205480821115614b1457506000614b21565b614b1e8282615c52565b90505b6001600160a01b0390921660009081526029602052604090209190915550565b6001600160a01b03821660009081526028602052604090205480821115614b6a57506000614b77565b614b748282615c52565b90505b6001600160a01b0390921660009081526028602052604090209190915550565b6001600160a01b0380821660009081526027602052604081205460015491928392839161010090910416639899cd0286614bd089611453565b6040518363ffffffff1660e01b8152600401614bed929190615b7a565b602060405180830381865afa158015614c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c2e9190615b93565b90508560008112614c6157614c438284615c3f565b6001600160a01b038716600090815260276020526040902055614d15565b81831015614c6d578291505b614c778284615c52565b6001600160a01b0380881660009081526027602052604090819020929092556001549151630a48d5a960e01b81526101009092041690630a48d5a990614cc39089908690600401615b7a565b602060405180830381865afa158015614ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d049190615b93565b9050614d1281600019615e42565b90505b7f961898db74abfdb8b86c1d9fc0e641a3f5e7b694edd9cb4bb5d8fc8f5b13608c868284604051614d4893929190615c02565b60405180910390a1969095509350505050565b614d666025826152a7565b50600090815260246020526040812080546001600160a01b0319908116825560018201805490911690556002810180546001600160a81b031916905560038101829055600481018290556005810182905560068101829055600781018290556008810182905560090155565b6136a08363a9059cbb60e01b8484604051602401614df1929190615b7a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526152b3565b6000818152600183016020526040812054614e6f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556112cf565b5060006112cf565b6000806000806000614e8b8b8b8b89611526565b9050602460008281526020019081526020016000209150506000614ec18b8b8b898b876003015488600601548960070154613c55565b9050600080600088614edb57614ed68c612576565b614ee4565b614ee48c611581565b905060008c905060008a905060008060018054906101000a90046001600160a01b03166001600160a01b031663b9ca0bf1858b600301548c6005015489888f600901546040518763ffffffff1660e01b8152600401614f78969594939291906001600160a01b039690961686526020860194909452604085019290925260608401521515608083015260a082015260c00190565b6040805180830381865afa158015614f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fb89190615e72565b915091508196508860030154818f614fd09190615b63565b614fda9190615d61565b955050505050506000808d9050831561508c578291508286600801546150009190615bda565b6008870155600154604051634c4ce68160e11b815260009161010090046001600160a01b031690639899cd029061503d9085908890600401615b7a565b602060405180830381865afa15801561505a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061507e9190615b93565b905061508a82826137a4565b505b83615145578286600401546150a19190615c52565b600487810191909155600154604051634c4ce68160e11b81526000926101009092046001600160a01b031691639899cd02916150e1918691899101615b7a565b602060405180830381865afa1580156150fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151229190615b93565b905061512e82826141f2565b83876008015461513e9190615ea0565b6008880155505b508a1561516e576151568b82615c3f565b90508a85600401546151689190615c52565b60048601555b898560030154036151925760048501546151889082615c3f565b6000600487015590505b6000808512156151b6576151a585611453565b6151af9083615c3f565b90506151ed565b848211156151c8576151af8583615c52565b60006151d48387615c52565b90508087600401546151e69190615c52565b6004880155505b6000846152055761520084600019615e42565b615207565b835b959950909750939550505050505096509650969350505050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561527157602002820191906000526020600020905b81548152602001906001019080831161525d575b50505050509050919050565b600082600001828154811061529457615294615d99565b9060005260206000200154905092915050565b60006135ec8383615385565b6000615308826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166154789092919063ffffffff16565b8051909150156136a057808060200190518101906153269190615ec0565b6136a05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401613697565b6000818152600183016020526040812054801561546e5760006153a9600183615c52565b85549091506000906153bd90600190615c52565b90508181146154225760008660000182815481106153dd576153dd615d99565b906000526020600020015490508087600001848154811061540057615400615d99565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061543357615433615edd565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506112cf565b60009150506112cf565b606061379c848460008585843b6154d15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401613697565b600080866001600160a01b031685876040516154ed9190615ef3565b60006040518083038185875af1925050503d806000811461552a576040519150601f19603f3d011682016040523d82523d6000602084013e61552f565b606091505b509150915061553f82828661554a565b979650505050505050565b606083156155595750816135ec565b8251156155695782518084602001fd5b8160405162461bcd60e51b81526004016136979190615e0f565b60405180610160016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b801515811461279b57600080fd5b60006020828403121561561a57600080fd5b81356135ec816155fa565b80356001600160a01b038116811461563c57600080fd5b919050565b60006020828403121561565357600080fd5b6135ec82615625565b6000806040838503121561566f57600080fd5b61567883615625565b915061568660208401615625565b90509250929050565b600080604083850312156156a257600080fd5b6156ab83615625565b946020939093013593505050565b6000602082840312156156cb57600080fd5b5035919050565b600080600080608085870312156156e857600080fd5b6156f185615625565b966020860135965060408601359560600135945092505050565b6000806000806080858703121561572157600080fd5b61572a85615625565b935061573860208601615625565b925061574660408601615625565b91506060850135615756816155fa565b939692955090935050565b6000806040838503121561577457600080fd5b61577d83615625565b9150602083013561578d816155fa565b809150509250929050565b600080600080600060a086880312156157b057600080fd5b6157b986615625565b94506157c760208701615625565b93506157d560408701615625565b92506060860135915060808601356157ec816155fa565b809150509295509295909350565b80516001600160a01b03168252602081015161582160208401826001600160a01b03169052565b50604081015161583c60408401826001600160a01b03169052565b506060810151615850606084018215159052565b506080818101519083015260a0808201519083015260c0808201519083015260e080820151908301526101008082015190830152610120808201519083015261014090810151910152565b61016081016112cf82846157fa565b60008060008060008060c087890312156158c357600080fd5b863595506020870135945060408701359350606087013592506080870135915060a08701356158f1816155fa565b809150509295509295509295565b60008060008060008060c0878903121561591857600080fd5b61592187615625565b955061592f60208801615625565b945061593d60408801615625565b9350606087013592506080870135615954816155fa565b915061596260a08801615625565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156159a65783518352928401929184019160010161598a565b50909695505050505050565b600080600080600060a086880312156159ca57600080fd5b6159d386615625565b94506159e160208701615625565b93506159ef60408701615625565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b818110156159a657615a368385516157fa565b928401926101609290920191600101615a23565b60008060408385031215615a5d57600080fd5b8235915061568660208401615625565b600080600080600080600060e0888a031215615a8857600080fd5b615a9188615625565b965060208801359550604088013594506060880135615aaf816155fa565b93506080880135615abf816155fa565b925060a0880135615acf816155fa565b8092505060c0880135905092959891949750929550565b600080600080600060a08688031215615afe57600080fd5b615b0786615625565b9450615b1560208701615625565b9350615b2360408701615625565b92506060860135615b33816155fa565b9150615b4160808701615625565b90509295509295909350565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176112cf576112cf615b4d565b6001600160a01b03929092168252602082015260400190565b600060208284031215615ba557600080fd5b5051919050565b600080600060608486031215615bc157600080fd5b8351925060208401519150604084015190509250925092565b8082018281126000831280158216821582161715615bfa57615bfa615b4d565b505092915050565b6001600160a01b039390931683526020830191909152604082015260600190565b6000600160ff1b8201615c3857615c38615b4d565b5060000390565b808201808211156112cf576112cf615b4d565b818103818111156112cf576112cf615b4d565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b039687168152948616602086015292909416604084015215156060830152911515608082015260a081019190915260c00190565b60008060408385031215615cd757600080fd5b505080516020909101519092909150565b6001600160a01b03978816815295871660208701529390951660408501526060840191909152608083015291151560a082015290151560c082015260e00190565b9715158852602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000190565b600082615d7e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060018201615dc157615dc1615b4d565b5060010190565b600060208284031215615dda57600080fd5b815160ff811681146135ec57600080fd5b60005b83811015615e06578181015183820152602001615dee565b50506000910152565b6020815260008251806020840152615e2e816040850160208701615deb565b601f01601f19169190910160400192915050565b80820260008212600160ff1b84141615615e5e57615e5e615b4d565b81810583148215176112cf576112cf615b4d565b60008060408385031215615e8557600080fd5b8251615e90816155fa565b6020939093015192949293505050565b8181036000831280158383131683831282161715612b0257612b02615b4d565b600060208284031215615ed257600080fd5b81516135ec816155fa565b634e487b7160e01b600052603160045260246000fd5b60008251615f05818460208701615deb565b919091019291505056fe563a20646563726561736520706f736974696f6e2073697a6520746f6f206c61726765563a20746f6b656e20646563696d616c7320646f206e6f74206d6174636820646563696d616c7320696e2069747320455243323020636f6e7472616374563a206d696e744275726e4665654261736973506f696e747320746f6f2068696768a26469706673582212208e1821ec40a2e56df304f2043601fc1b7ad763296ae27a5a4f01f6b485f66dd464736f6c63430008130033" + }, + { + "address": "0x36825bf3fbdf5a29e2d5148bfe7dcf7b5639e320", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106102e75760003560e01c80638881016f11610184578063b6ed701e116100d6578063d82d58a51161008a578063e3795cc111610064578063e3795cc11461096b578063ef9e5e2814610982578063f2fde38b1461099557600080fd5b8063d82d58a5146108fd578063e17efd4814610936578063e18910a31461095657600080fd5b8063caaf43f1116100bb578063caaf43f11461089b578063cb718a9b146108c8578063d47eed45146108dd57600080fd5b8063b6ed701e14610868578063b9256d281461088857600080fd5b80639a8a059211610138578063aac4129211610112578063aac41292146106ef578063b5dcc9111461080f578063b5ec02611461082f57600080fd5b80639a8a0592146107a5578063a38d81c6146107cd578063a4ae35e0146107ef57600080fd5b80638da5cb5b116101695780638da5cb5b146107475780639474f45b1461076557806396834ad31461078557600080fd5b80638881016f146106ef57806389a5bb4d1461072757600080fd5b806352d1902d1161023d5780636c72f51b116101f15780637b72bcae116101cb5780637b72bcae1461065b57806384acd1bb1461069057806387c5bd1b146106c257600080fd5b80636c72f51b146105fa578063711a2e2814610626578063715018a61461064657600080fd5b8063586d3cf811610222578063586d3cf81461058e57806358c67635146105ad5780636b7f53ca146105cd57600080fd5b806352d1902d1461052d57806354fd4d501461054257600080fd5b8063437209a71161029f5780634c469d8c116102795780634c469d8c146104aa5780634d7a734e146104fa5780634f1ef2861461051a57600080fd5b8063437209a7146103d55780634716e9c51461046b57806348b6404d1461048b57600080fd5b806331d98b3f116102d057806331d98b3f146103425780633659cfe61461036f578063426234e41461038f57600080fd5b8063146faf77146102ec57806314dd317f1461030e575b600080fd5b3480156102f857600080fd5b5061030c6103073660046152ff565b6109b5565b005b34801561031a57600080fd5b5061032e610329366004615632565b610b06565b604051905181526020015b60405180910390f35b34801561034e57600080fd5b5061036261035d366004615574565b610b61565b6040516103399190615b80565b34801561037b57600080fd5b5061030c61038a3660046152e5565b610b97565b34801561039b57600080fd5b506040805180820182526000808252602091820152815180830190925260d05461ffff16825260d154908201526040516103399190615af5565b3480156103e157600080fd5b5061045b6103f0366004615846565b6040805160f09390931b7fffff000000000000000000000000000000000000000000000000000000000000166020808501919091526022808501939093528151808503909301835260429093018152815191830191909120600090815260cd90925290205460ff1690565b6040519015158152602001610339565b61047e6104793660046154e2565b610d52565b6040516103399190615a49565b34801561049757600080fd5b5060ce545b604051908152602001610339565b3480156104b657600080fd5b506104e16104c5366004615574565b600090815260d5602052604090205467ffffffffffffffff1690565b60405167ffffffffffffffff9091168152602001610339565b34801561050657600080fd5b5061032e610515366004615632565b61128b565b61030c6105283660046153c0565b611325565b34801561053957600080fd5b5061049c6114b4565b34801561054e57600080fd5b50604080518082018252600581527f312e332e30000000000000000000000000000000000000000000000000000000602082015290516103399190615ac7565b34801561059a57600080fd5b5060d25467ffffffffffffffff166104e1565b3480156105b957600080fd5b5061045b6105c8366004615846565b611579565b3480156105d957600080fd5b506105ed6105e8366004615632565b61159c565b6040516103399190615b10565b34801561060657600080fd5b5060d45463ffffffff165b60405163ffffffff9091168152602001610339565b34801561063257600080fd5b506103626106413660046155a4565b6117a0565b34801561065257600080fd5b5061030c611816565b34801561066757600080fd5b5061067b610676366004615632565b61182a565b604051905163ffffffff168152602001610339565b34801561069c57600080fd5b5060c9546001600160a01b03165b6040516001600160a01b039091168152602001610339565b3480156106ce57600080fd5b506106e26106dd366004615632565b611858565b6040516103399190615bbb565b3480156106fb57600080fd5b5061070f61070a366004615632565b6119d5565b60405190516001600160a01b03168152602001610339565b34801561073357600080fd5b5061049c610742366004615665565b611a06565b34801561075357600080fd5b506033546001600160a01b03166106aa565b34801561077157600080fd5b50610362610780366004615574565b611a70565b34801561079157600080fd5b506103626107a0366004615574565b611b03565b3480156107b157600080fd5b506107ba611ba5565b60405161ffff9091168152602001610339565b3480156107d957600080fd5b506107e2611c2e565b6040516103399190615a11565b3480156107fb57600080fd5b5061036261080a3660046155a4565b611ca1565b34801561081b57600080fd5b5061036261082a366004615574565b611cce565b34801561083b57600080fd5b5061045b61084a366004615574565b600090815260d5602052604090205467ffffffffffffffff16151590565b34801561087457600080fd5b5061030c6108833660046155c5565b611cfe565b61030c61089636600461544c565b612018565b3480156108a757600080fd5b506108bb6108b6366004615574565b61212b565b6040516103399190615b71565b3480156108d457600080fd5b5060cf5461049c565b3480156108e957600080fd5b5061049c6108f836600461540c565b612308565b34801561090957600080fd5b50610929610918366004615632565b604080516020810190915290815290565b6040516103399190615ada565b34801561094257600080fd5b5061049c610951366004615574565b612473565b34801561096257600080fd5b5061049c612489565b34801561097757600080fd5b506397a6f304610611565b61030c61099036600461540c565b612494565b3480156109a157600080fd5b5061030c6109b03660046152e5565b6125f9565b600054610100900460ff16158080156109d55750600054600160ff909116105b806109ef5750303b1580156109ef575060005460ff166001145b610a665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610a89576000805461ff0019166101001790555b610a91612695565b610a9961271a565b610aab8b8b8b8b8b8b8b8b8b8b612797565b610ab3611816565b8015610af9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b6040805160208101909152600081526000610b218382612a0b565b67ffffffffffffffff168252610b38600882615d07565b905080835114610b5b576040516397363b3560e01b815260040160405180910390fd5b50919050565b604080516080810182526000808252602082018190529181018290526060810191909152610b918261080a612489565b92915050565b306001600160a01b037f00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e320161415610c365760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610a5d565b7f00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e3206001600160a01b0316610c917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610d0d5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610a5d565b610d1681612a71565b610d4f8160005b6040519080825280601f01601f191660200182016040528015610d47576020820181803683370190505b506000612a79565b50565b60606000610d608888612308565b905080341015610d9c576040517f025dbdd400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b508367ffffffffffffffff811115610dc457634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610e5457816020015b610e41604080516060808201835260008083528351608081018552818152602081810183905294810182905291820152909182019081526040805160808101825260008082526020828101829052928201819052606082015291015290565b815260200190600190039081610de25790505b50905060005b8681101561120a576004888883818110610e8457634e487b7160e01b600052603260045260246000fd5b9050602002810190610e969190615bd6565b9050118015610eea575063504e4155610ee2898984818110610ec857634e487b7160e01b600052603260045260246000fd5b9050602002810190610eda9190615bd6565b503560e01c90565b63ffffffff16145b156110d757600080610f2c8a8a85818110610f1557634e487b7160e01b600052603260045260246000fd5b9050602002810190610f279190615bd6565b612c2d565b90925090506000818015610f5057634e487b7160e01b600052602160045260246000fd5b14610f6e5760405163734fff6760e11b815260040160405180910390fd5b50600080366000610fb08d8d88818110610f9857634e487b7160e01b600052603260045260246000fd5b9050602002810190610faa9190615bd6565b87612cf4565b93985091965094509250905060005b8360ff168110156110ac576040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052906110088786868b612e3f565b91995092509050600061101c8f8f84612f54565b90508d81148061105657508a818151811061104757634e487b7160e01b600052603260045260246000fd5b60209081029190910101515115155b15611063575050506110a4565b825167ffffffffffffffff908116908e16811080159061108d57508c67ffffffffffffffff168111155b1561109f5761109f8c83858785612fa5565b505050505b600101610fbf565b508481146110cd5760405163734fff6760e11b815260040160405180910390fd5b5050505050611202565b606060006111158a8a858181106110fe57634e487b7160e01b600052603260045260246000fd5b90506020028101906111109190615bd6565b6131e9565b60e00151915060009050808061112a8461333a565b92509250925060005b828110156111fc576040848601015160209060006111528e8e84612f54565b90508c81148061118c575089818151811061117d57634e487b7160e01b600052603260045260246000fd5b60209081029190910101515115155b1561119d57505050928101926111f4565b60006111aa898988613469565b50805190915067ffffffffffffffff908116908e1681108015906111d857508c67ffffffffffffffff168111155b156111ea576111ea8c84868585612fa5565b5050509483019450505b600101611133565b50505050505b600101610e5a565b5060005b848110156112805781818151811061123657634e487b7160e01b600052603260045260246000fd5b602090810291909101015151611278576040517f45805f5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60010161120e565b509695505050505050565b6040805160208101909152600081526000806112a78482612a0b565b90506112b4600883615d07565b915060006112c28584612a0b565b90506112cf600884615d07565b92506112e667ffffffffffffffff8216600a615d62565b6112fa9067ffffffffffffffff8416615e0a565b84528451831461131d576040516397363b3560e01b815260040160405180910390fd5b505050919050565b306001600160a01b037f00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e3201614156113c45760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610a5d565b7f00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e3206001600160a01b031661141f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b03161461149b5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610a5d565b6114a482612a71565b6114b082826001612a79565b5050565b6000306001600160a01b037f00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e32016146115545760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a5d565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b60d05460009061ffff8481169116148015611595575060d15482145b9392505050565b6115c8604080516080810190915280600081526020016000815260006020820152606060409091015290565b6000806115d58482613579565b905063ffffffff8116635054474d14611601576040516397363b3560e01b815260040160405180910390fd5b61160c600483615d07565b9150600061161a85846135df565b90508060ff16600181111561163f57634e487b7160e01b600052602160045260246000fd5b8490600181111561166057634e487b7160e01b600052602160045260246000fd5b9081600181111561168157634e487b7160e01b600052602160045260246000fd5b90525061168f600184615d07565b92506001845160018111156116b457634e487b7160e01b600052602160045260246000fd5b146116d2576040516363daeb7760e01b815260040160405180910390fd5b60006116de86856135df565b90508060ff16600681111561170357634e487b7160e01b600052602160045260246000fd5b8560200190600681111561172757634e487b7160e01b600052602160045260246000fd5b9081600681111561174857634e487b7160e01b600052602160045260246000fd5b905250611756600185615d07565b93506117628685613645565b61ffff166040860152611776600285615d07565b9350611791848588516117899190615e29565b8891906136ab565b60608601525092949350505050565b6040805160808101825260008082526020820181905291810182905260608101919091526117cd83611a70565b9050816117de4283606001516137d3565b1115610b91576040517f19abf40e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61181e6137f8565b6118286000613852565b565b60408051602081019091526000815260006118458382613579565b63ffffffff168252610b38600482615d07565b60408051602081019091526060815260008061187484826135df565b9050611881600183615d07565b91508060ff1667ffffffffffffffff8111156118ad57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156118f257816020015b60408051808201909152600080825260208201528152602001906001900390816118cb5790505b50835260005b8160ff168110156119ac5761190d8584613645565b845180518390811061192f57634e487b7160e01b600052603260045260246000fd5b602090810291909101015161ffff909116905261194d600284615d07565b925061195985846138b1565b845180518390811061197b57634e487b7160e01b600052603260045260246000fd5b602002602001015160200181815250506020836119989190615d07565b9250806119a481615e6c565b9150506118f8565b50818451146119ce576040516397363b3560e01b815260040160405180910390fd5b5050919050565b60408051602081019091526000815260006119f08382613917565b6001600160a01b03168252610b38601482615d07565b600081600001518260200151604051602001611a5392919060f09290921b7fffff000000000000000000000000000000000000000000000000000000000000168252600282015260220190565b604051602081830303815290604052805190602001209050919050565b60408051608081018252600080825260208083018281528385018381526060850184815287855260d590935294909220805467ffffffffffffffff808216938490526801000000000000000091829004600390810b810b900b9096526001820154600781810b810b900b865204909416909152909190610b5b57604051630295d7cd60e31b815260040160405180910390fd5b60408051608081018252600080825260208083018281528385018381526060850184815287855260d590935294909220805467ffffffffffffffff80821693849052680100000000000000008204600390810b810b900b9096526c010000000000000000000000008104600790810b810b900b8552600160a01b9004909416909152909190610b5b57604051630295d7cd60e31b815260040160405180910390fd5b6000611bb960c9546001600160a01b031690565b6001600160a01b0316639a8a05926040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf157600080fd5b505afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061582a565b905090565b606060c9600301805480602002602001604051908101604052809291908181526020016000905b82821015611c985760008481526020908190206040805180820190915260028502909101805461ffff168252600190810154828401529083529092019101611c55565b50505050905090565b6040805160808101825260008082526020820181905291810182905260608101919091526117cd83611b03565b604080516080810182526000808252602082018190529181018290526060810191909152610b9182610641612489565b6000611d3f83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061398d92505050565b90506000611d508260e0015161159c565b9050611d5a611ba5565b61ffff16816040015161ffff1614158015611d7c5750604081015161ffff1615155b15611d9a576040516363daeb7760e01b815260040160405180910390fd5b600081602001516006811115611dc057634e487b7160e01b600052602160045260246000fd5b1415611e0657604081015161ffff16611dec576040516363daeb7760e01b815260040160405180910390fd5b611e01611dfc82606001516119d5565b613b6e565b612012565b600181602001516006811115611e2c57634e487b7160e01b600052602160045260246000fd5b1415611e5357611e01611e4e8260600151604080516020810190915290815290565b613b77565b600281602001516006811115611e7957634e487b7160e01b600052602160045260246000fd5b1415611e9457611e01611e8f8260600151611858565b613eaa565b600381602001516006811115611eba57634e487b7160e01b600052602160045260246000fd5b1415611ed557611e01611ed0826060015161128b565b614053565b600481602001516006811115611efb57634e487b7160e01b600052602160045260246000fd5b1415611f1657611e01611f118260600151610b06565b6140a5565b600581602001516006811115611f3c57634e487b7160e01b600052602160045260246000fd5b1415611f5b576040516397363b3560e01b815260040160405180910390fd5b600681602001516006811115611f8157634e487b7160e01b600052602160045260246000fd5b1415611ff957604081015161ffff16611fad576040516363daeb7760e01b815260040160405180910390fd5b611e01611fbd82606001516119d5565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140e292505050565b6040516397363b3560e01b815260040160405180910390fd5b50505050565b8281146120385760405163a9cb9e0d60e01b815260040160405180910390fd5b60005b838110156120f05782828281811061206357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612078919061588b565b67ffffffffffffffff166120c88686848181106120a557634e487b7160e01b600052603260045260246000fd5b90506020020135600090815260d5602052604090205467ffffffffffffffff1690565b67ffffffffffffffff1610156120e8576120e28787612494565b50612123565b60010161203b565b506040517fde2c57fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b61218a604080516060808201835260008083528351608081018552818152602081810183905294810182905291820152909182019081526040805160808101825260008082526020828101829052928201819052606082015291015290565b6040805160c08082018352600080835260208084018290528385018290526060808501839052608080860184905260a095860184905288845260d5835286842087519586018852805467ffffffffffffffff808216885268010000000000000000808304600390810b810b900b968901969096526c010000000000000000000000008204600790810b810b810b9a89019a909a52600160a01b9091048116938701939093526001015480880b880b90970b90850152940490931691810191909152805190915067ffffffffffffffff1661227757604051630295d7cd60e31b815260040160405180910390fd5b91815260408083015160208084018051600793840b840b9052606080870151825167ffffffffffffffff9182169085015283880180518451600391820b820b9089015289519451948316948401949094526080890151878901805191880b90970b905260a089015186519083169501949094529251845190830b90920b919094015293519051931692019190915290565b600080805b8381101561246157600485858381811061233757634e487b7160e01b600052603260045260246000fd5b90506020028101906123499190615bd6565b9050118015612383575063504e415561237b868684818110610ec857634e487b7160e01b600052603260045260246000fd5b63ffffffff16145b15612441576000806123ae878785818110610f1557634e487b7160e01b600052603260045260246000fd5b909250905060008180156123d257634e487b7160e01b600052602160045260246000fd5b146123f05760405163734fff6760e11b815260040160405180910390fd5b61242b87878581811061241357634e487b7160e01b600052603260045260246000fd5b90506020028101906124259190615bd6565b8461433a565b6124389060ff1685615d07565b9350505061244f565b61244c600183615d07565b91505b8061245981615e6c565b91505061230d565b5061246b81614371565b949350505050565b60008161247f60ce5490565b610b919190615e0a565b6000611c2960cf5490565b6000805b828110156125b15760048484838181106124c257634e487b7160e01b600052603260045260246000fd5b90506020028101906124d49190615bd6565b905011801561250e575063504e4155612506858584818110610ec857634e487b7160e01b600052603260045260246000fd5b63ffffffff16145b156125615761254d84848381811061253657634e487b7160e01b600052603260045260246000fd5b90506020028101906125489190615bd6565b614386565b61255a9060ff1683615d07565b91506125a9565b61259b84848381811061258457634e487b7160e01b600052603260045260246000fd5b90506020028101906125969190615bd6565b614604565b6125a6600183615d07565b91505b600101612498565b5060006125bd82614371565b905080341015612012576040517f025dbdd400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126016137f8565b6001600160a01b03811661267d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a5d565b610d4f81613852565b6001600160a01b03163b151590565b600054610100900460ff166127125760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a5d565b611828614616565b600054610100900460ff166118285760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a5d565b60c9805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038c161790558786146127df5760405163a9cb9e0d60e01b815260040160405180910390fd5b60005b888110156129a257600060405180604001604052808c8c8581811061281757634e487b7160e01b600052603260045260246000fd5b905060200201602081019061282c919061580e565b61ffff1681526020018a8a8581811061285557634e487b7160e01b600052603260045260246000fd5b602090810292909201359092528251838201516040805160f09390931b7fffff00000000000000000000000000000000000000000000000000000000000016838501526022808401929092528051808403909201825260429092018252805190830120600090815260cd9092529020549192505060ff16156128ea5760405163a9cb9e0d60e01b815260040160405180910390fd5b600160cd60006128f984611a06565b81526020808201929092526040016000908120805460ff19169315159390931790925560cc8054600181018255925282517f47197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe6002909302928301805461ffff191661ffff90921691909117905591909101517f47197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebf909101558061299a81615e6c565b9150506127e2565b506040805180820190915261ffff86168082526020820186905260d0805461ffff1916909117905560d185905560d2805467ffffffffffffffff191667ffffffffffffffff8616179055506129f68260cf55565b6129ff8160ce55565b50505050505050505050565b6000612a18826008615d07565b83511015612a685760405162461bcd60e51b815260206004820152601460248201527f746f55696e7436345f6f75744f66426f756e64730000000000000000000000006044820152606401610a5d565b50016008015190565b610d4f6137f8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612ab157612aac8361469c565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612aea57600080fd5b505afa925050508015612b1a575060408051601f3d908101601f19168201909252612b179181019061558c565b60015b612b8c5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610a5d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612c215760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610a5d565b50612aac838383614767565b60046000833560e01c63504e41558114612c5a5760405163734fff6760e11b815260040160405180910390fd5b60018084019386013560f81c908114612c865760405163734fff6760e11b815260040160405180910390fd5b50508184016001013560f890811c9092016002818101939186010135901c60ff168015612cc357634e487b7160e01b600052602160045260246000fd5b60019290920191905081831015612ced5760405163734fff6760e11b815260040160405180910390fd5b9250929050565b600080803681612d0888888880820361478c565b600296509092509050813560f01c60606000612d2e612d2986868b8761478c565b6147b6565b60e0015160048082015161ffff86169a909a01999193509150634155575663ffffffff821614612d715760405163734fff6760e11b815260040160405180910390fd5b8183016001015160009060ff168015612d9a57634e487b7160e01b600052602160045260246000fd5b60019093019290506000818015612dc157634e487b7160e01b600052602160045260246000fd5b14612ddf5760405163734fff6760e11b815260040160405180910390fd5b602c848401015184516c0100000000000000000000000090910460601b9950602090930192831115612e245760405163734fff6760e11b815260040160405180910390fd5b5050600188019b969a505050509381013560f81c9550935050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052600283019282903690829088013560f01c612e8d8989898461478c565b925092508061ffff16870196506000612eaa8a8a8a8e8888614940565b9750905080612ecc5760405163734fff6760e11b815260040160405180910390fd5b6000843560f81c8015612eef57634e487b7160e01b600052602160045260246000fd5b90506000818015612f1057634e487b7160e01b600052602160045260246000fd5b1415612f2c57612f22858560016149f2565b9097509550612f45565b60405163734fff6760e11b815260040160405180910390fd5b50505050509450945094915050565b6000805b8381101561246b5782858583818110612f8157634e487b7160e01b600052603260045260246000fd5b905060200201351415612f935761246b565b80612f9d81615e6c565b915050612f58565b82858581518110612fc657634e487b7160e01b600052603260045260246000fd5b602002602001015160000181815250508160400151858581518110612ffb57634e487b7160e01b600052603260045260246000fd5b6020026020010151602001516000019060070b908160070b81525050816060015185858151811061303c57634e487b7160e01b600052603260045260246000fd5b6020026020010151602001516020019067ffffffffffffffff16908167ffffffffffffffff1681525050816020015185858151811061308b57634e487b7160e01b600052603260045260246000fd5b6020026020010151602001516040019060030b908160030b81525050808585815181106130c857634e487b7160e01b600052603260045260246000fd5b6020026020010151602001516060018181525050816080015185858151811061310157634e487b7160e01b600052603260045260246000fd5b6020026020010151604001516000019060070b908160070b815250508160a0015185858151811061314257634e487b7160e01b600052603260045260246000fd5b6020026020010151604001516020019067ffffffffffffffff16908167ffffffffffffffff1681525050816020015185858151811061319157634e487b7160e01b600052603260045260246000fd5b6020026020010151604001516040019060030b908160030b81525050808585815181106131ce57634e487b7160e01b600052603260045260246000fd5b60200260200101516040015160600181815250505050505050565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e082018190526101008201839052610120820152610140810191909152600061325560c9546001600160a01b031690565b6001600160a01b031663c0fd8bde85856040518363ffffffff1660e01b8152600401613282929190615a98565b60006040518083038186803b15801561329a57600080fd5b505afa1580156132ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132d691908101906156bc565b509092509050806132fa57604051632acbe91560e01b815260040160405180910390fd5b5061330481614a8c565b610b91576040517fe60dce7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080808061334d858260049101015190565b90506004840193508063ffffffff1663503257481461337f5760405163734fff6760e11b815260040160405180910390fd5b6002858501810151940193600361ffff8216146133af5760405163734fff6760e11b815260040160405180910390fd5b60028501945060006133c5878760029101015190565b905060028601955060006133dd888860019101015190565b90508161ffff16870196508060ff1660021461340c5760405163734fff6760e11b815260040160405180910390fd5b505050508284016002015161ffff169150600283019250613431848460029101015190565b61ffff16905060028301925081810283018451146134625760405163734fff6760e11b815260040160405180910390fd5b9193909250565b6040805160c081018252600080825260208201818152828401828152606084018381526080850184815260a08601948552888a01968701516048880151600790810b810b909452605088015167ffffffffffffffff9081169093526054880151600390810b900b909452605c870151830b90920b909152606485015181169092526065840151607d94850151909216835291929060ff8116600114156135145760188201915061354e565b8582018701600881015167ffffffffffffffff90811686526010820151600790810b900b6040870152601891820151166060860152909101905b50838111156135705760405163734fff6760e11b815260040160405180910390fd5b50935093915050565b6000613586826004615d07565b835110156135d65760405162461bcd60e51b815260206004820152601460248201527f746f55696e7433325f6f75744f66426f756e64730000000000000000000000006044820152606401610a5d565b50016004015190565b60006135ec826001615d07565b8351101561363c5760405162461bcd60e51b815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610a5d565b50016001015190565b6000613652826002615d07565b835110156136a25760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610a5d565b50016002015190565b6060816136b981601f615d07565b10156137075760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610a5d565b6137118284615d07565b845110156137615760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610a5d565b60608215801561378057604051915060008252602082016040526137ca565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156137b95780518352602092830192016137a1565b5050858452601f01601f1916604052505b50949350505050565b6000818311156137ee576137e78284615e29565b9050610b91565b6137e78383615e29565b6033546001600160a01b031633146118285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5d565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006138be826020615d07565b8351101561390e5760405162461bcd60e51b815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e647300000000000000000000006044820152606401610a5d565b50016020015190565b6000613924826014615d07565b835110156139745760405162461bcd60e51b815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e647300000000000000000000006044820152606401610a5d565b5001602001516c01000000000000000000000000900490565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820181905261010082018390526101208201526101408101919091526000806139fa60c9546001600160a01b031690565b6001600160a01b031663c0fd8bde856040518263ffffffff1660e01b8152600401613a259190615ac7565b60006040518083038186803b158015613a3d57600080fd5b505afa158015613a51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a7991908101906156bc565b509150915080613a9c57604051632acbe91560e01b815260040160405180910390fd5b613aae82606001518360800151611579565b613ae4576040517f360f2d8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d25467ffffffffffffffff1667ffffffffffffffff168260a0015167ffffffffffffffff1611613b41576040517f88d1b84700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a082015160d2805467ffffffffffffffff191667ffffffffffffffff9092169190911790555092915050565b610d4f81614b06565b6000613bab6040805180820182526000808252602091820152815180830190925260d05461ffff16825260d1549082015290565b9050600080613bc260c9546001600160a01b031690565b84516040517fc0fd8bde0000000000000000000000000000000000000000000000000000000081526001600160a01b03929092169163c0fd8bde91613c0991600401615ac7565b60006040518083038186803b158015613c2157600080fd5b505afa158015613c35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c5d91908101906156bc565b509150915080613c8057604051632acbe91560e01b815260040160405180910390fd5b6000613c8f8360e0015161159c565b9050613c99611ba5565b61ffff16816040015161ffff1614158015613cbb5750604081015161ffff1615155b15613cd9576040516363daeb7760e01b815260040160405180910390fd5b600581602001516006811115613cff57634e487b7160e01b600052602160045260246000fd5b14613d1d576040516397363b3560e01b815260040160405180910390fd5b6000613d2c826060015161182a565b805190915063ffffffff16613d4660d45463ffffffff1690565b63ffffffff1610613d83576040517f88d1b84700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160d480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff909216919091179055604080518082018252606086015161ffff168082526080870151602080840182905260d0805461ffff19168417905560d182905560a089015160d2805467ffffffffffffffff191667ffffffffffffffff90921691909117905584518086018652600080825290820152845180860190955291845290830152907f6bce23ef3d34e51710fe4700b43ba5f1733a6215c883f384671a4ece3ea8aa2090879060d25460408051845161ffff908116825260209586015186830152845116918101919091529290910151606083015267ffffffffffffffff16608082015260a0015b60405180910390a150505050505050565b6000613eb4611c2e565b905060005b8151811015613f2c57600060c96004016000613efb858581518110613eee57634e487b7160e01b600052603260045260246000fd5b6020026020010151611a06565b81526020810191909152604001600020805460ff1916911515919091179055613f25600182615d07565b9050613eb9565b50613f3960cc600061509d565b60005b82515181101561400e578251805160cc919083908110613f6c57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182546001808201855560009485528385208351600290930201805461ffff191661ffff90931692909217825591909201519181019190915584518051919260cd929091613fdd9186908110613eee57634e487b7160e01b600052603260045260246000fd5b81526020810191909152604001600020805460ff19169115159190911790558061400681615e6c565b915050613f3c565b507fd451e0fcb7c5b9e13de533604d158069dad159841c45f39f09d379bfc423080d81614039611c2e565b604051614047929190615a24565b60405180910390a15050565b600061405e60ce5490565b825160ce5590507f74dbbbe280ef27b79a8a0c449d5ae2ba7a31849103241d0f98df70bbc9d03e378161409060ce5490565b60408051928352602083019190915201614047565b60006140b060cf5490565b825160cf5590507fcdb88a22f82ddd76115ab7c66cf08eb1e40afe80c9b31017eb2cbdb1570b33ae8161409060cf5490565b60006140f660c9546001600160a01b031690565b835160c9805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390921691821790556040517fc0fd8bde00000000000000000000000000000000000000000000000000000000815291925060009182919063c0fd8bde90614166908790600401615ac7565b60006040518083038186803b15801561417e57600080fd5b505afa158015614192573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141ba91908101906156bc565b5091509150806141dd576040516397363b3560e01b815260040160405180910390fd5b6141ef82606001518360800151611579565b61420c576040516397363b3560e01b815260040160405180910390fd5b60d25467ffffffffffffffff1667ffffffffffffffff168260a0015167ffffffffffffffff1614614250576040516309e9f6c160e11b815260040160405180910390fd5b600061425f8360e0015161159c565b905060068160200151600681111561428757634e487b7160e01b600052602160045260246000fd5b146142a5576040516309e9f6c160e11b815260040160405180910390fd5b60006142b482606001516119d5565b875181519192506001600160a01b039182169116146142e6576040516309e9f6c160e11b815260040160405180910390fd5b7fd495c4e5b386d59bccca38a2277b5d70a0f5e47d7b6587a45a6f5aca221a31258561431a60c9546001600160a01b031690565b604080516001600160a01b03938416815292909116602083015201613e99565b60008382013560f01c61434e600284615d07565b925061435e61ffff821684615d07565b92508483013560f81c5b95945050505050565b600061437c60ce5490565b610b919083615e0a565b60008060006143958585612c2d565b909250905060008180156143b957634e487b7160e01b600052602160045260246000fd5b146143d75760405163734fff6760e11b815260040160405180910390fd5b6000803660006143e8898988612cf4565b919a50929650909450909250905060005b8760ff168110156145d7576040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052906144428686868a612e3f565b600081815260d560205260409020548251939a50919450925067ffffffffffffffff90811691168110156145cc57600082815260d560209081526040918290208551815487840151888601516060808b015167ffffffffffffffff9586166bffffffffffffffffffffffff1990951685176801000000000000000063ffffffff60039690960b959095168502177fffffffff00000000000000000000000000000000ffffffffffffffffffffffff166c01000000000000000000000000600794850b808916919091027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff1691909117600160a01b92881692830217885560808d01516001909801805460a08f01519990950b88167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090951694909417979096169093029590951790558551918252938101919091529283019190915283917fd06a6b7f4918494b3719217d1802786c1f5112a6c1d88fe2cfec00b4584f6aec910160405180910390a25b5050506001016143f9565b508381146145f85760405163734fff6760e11b815260040160405180910390fd5b50505050505092915050565b6114b061461183836131e9565b614c56565b600054610100900460ff166146935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a5d565b61182833613852565b6001600160a01b0381163b6147195760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610a5d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61477083614e78565b60008251118061477d5750805b15612aac576120128383614eb8565b36600085848661479c8683615d07565b926147a993929190615cdf565b9150915094509492505050565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e082018190526101008201839052610120820152610140810191909152600061482260c9546001600160a01b031690565b6001600160a01b031663c0fd8bde85856040518363ffffffff1660e01b815260040161484f929190615a98565b60006040518083038186803b15801561486757600080fd5b505afa15801561487b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148a391908101906156bc565b509092509050806148c757604051632acbe91560e01b815260040160405180910390fd5b50613304816060015182608001516040805160f09390931b7fffff000000000000000000000000000000000000000000000000000000000000166020808501919091526022808501939093528151808503909301835260429093018152815191830191909120600090815260cd90925290205460ff1690565b600080600061498485858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250614fba92505050565b600188019790915089013560f81c60005b8160ff168110156149cc5760148901988b01356bffffffffffffffffffffffff19166149c18482614fed565b935050600101614995565b50506bffffffffffffffffffffffff199081169516949094149794965093945050505050565b6040805160c08082018352838601602081810135831c600790810b810b958501959095526028820135831c6060850152603082013560e01c600390810b900b908401526034810135821c83526044810135821c840b90930b6080830152604c830135901c60a0820152605490920191903583831115614a845760405163734fff6760e11b815260040160405180910390fd5b935093915050565b6000610b91826060015183608001516040805160f09390931b7fffff000000000000000000000000000000000000000000000000000000000000166020808501919091526022808501939093528151808503909301835260429093018152815191830191909120600090815260cd90925290205460ff1690565b6000614b397f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b8251909150614b49906000610d1d565b306001600160a01b031663e3795cc16040518163ffffffff1660e01b815260040160206040518083038186803b158015614b8257600080fd5b505afa158015614b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bba9190615871565b63ffffffff166397a6f30414614be3576040516397363b3560e01b815260040160405180910390fd5b7f2e4cc16c100f0b55e2df82ab0b1a7e294aa9cbd01b48fbaf622683fbc0507a4981614c367f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b604080516001600160a01b03938416815292909116602083015201614047565b60e081015160008080614c688461333a565b92509250925060005b82811015614e1e57600080614c87878786613469565b600081815260d5602052604090205482519887019892945090925067ffffffffffffffff9081169116811015614e1357600082815260d560209081526040918290208551815487840151888601516060808b015167ffffffffffffffff9586166bffffffffffffffffffffffff1990951685176801000000000000000063ffffffff60039690960b959095168502177fffffffff00000000000000000000000000000000ffffffffffffffffffffffff166c01000000000000000000000000600794850b808916919091027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff1691909117600160a01b92881692830217885560808d01516001909801805460a08f01519990950b88167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090951694909417979096169093029590951790558551918252938101919091529283019190915283917fd06a6b7f4918494b3719217d1802786c1f5112a6c1d88fe2cfec00b4584f6aec910160405180910390a25b505050600101614c71565b50606085015160a08601516040805161ffff909316835267ffffffffffffffff90911660208301527f943f0e8a16c19895fb87cbeb1a349ed86d7f31923089dd36c1a1ed5e300f267b910160405180910390a15050505050565b614e818161469c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b614f375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610a5d565b600080846001600160a01b031684604051614f5291906159aa565b600060405180830381855af49150503d8060008114614f8d576040519150601f19603f3d011682016040523d82523d6000602084013e614f92565b606091505b50915091506143688282604051806060016040528060278152602001615ef06027913961505f565b6000610b91600083604051602001614fd39291906159c6565b604051602081830303815290604052805160209091012090565b60006bffffffffffffffffffffffff19808316908416111561500d579091905b6040517f010000000000000000000000000000000000000000000000000000000000000060208201526bffffffffffffffffffffffff1980851660218301528316603582015261159590604901614fd3565b6060831561506e575081611595565b61159583838151156150835781518083602001fd5b8060405162461bcd60e51b8152600401610a5d9190615ac7565b5080546000825560020290600052602060002090810190610d4f91905b808211156150da57805461ffff19168155600060018201556002016150ba565b5090565b80356001600160a01b03811681146150f557600080fd5b919050565b60008083601f84011261510b578182fd5b50813567ffffffffffffffff811115615122578182fd5b6020830191508360208260051b8501011115612ced57600080fd5b600082601f83011261514d578081fd5b8151602067ffffffffffffffff82111561516957615169615eb3565b615177818360051b01615c86565b80838252828201915082860187848660071b8901011115615196578586fd5b855b858110156151f957608080838b0312156151b0578788fd5b6151b8615c39565b83518152868401518782015260406151d18186016152d4565b9082015260606151e28582016152d4565b908201528552938501939190910190600101615198565b5090979650505050505050565b805180151581146150f557600080fd5b600082601f830112615226578081fd5b813561523961523482615cb7565b615c86565b81815284602083860101111561524d578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112615277578081fd5b815161528561523482615cb7565b818152846020838601011115615299578283fd5b61246b826020830160208701615e40565b80516150f581615ec9565b805163ffffffff811681146150f557600080fd5b80516150f581615ed9565b805160ff811681146150f557600080fd5b6000602082840312156152f6578081fd5b611595826150de565b6000806000806000806000806000806101008b8d03121561531e578586fd5b6153278b6150de565b995060208b013567ffffffffffffffff80821115615343578788fd5b61534f8e838f016150fa565b909b50995060408d0135915080821115615367578788fd5b506153748d828e016150fa565b90985096505060608b013561538881615ec9565b945060808b0135935060a08b013561539f81615ed9565b8093505060c08b0135915060e08b013590509295989b9194979a5092959850565b600080604083850312156153d2578182fd5b6153db836150de565b9150602083013567ffffffffffffffff8111156153f6578182fd5b61540285828601615216565b9150509250929050565b6000806020838503121561541e578182fd5b823567ffffffffffffffff811115615434578283fd5b615440858286016150fa565b90969095509350505050565b60008060008060008060608789031215615464578384fd5b863567ffffffffffffffff8082111561547b578586fd5b6154878a838b016150fa565b9098509650602089013591508082111561549f578586fd5b6154ab8a838b016150fa565b909650945060408901359150808211156154c3578384fd5b506154d089828a016150fa565b979a9699509497509295939492505050565b600080600080600080608087890312156154fa578384fd5b863567ffffffffffffffff80821115615511578586fd5b61551d8a838b016150fa565b90985096506020890135915080821115615535578586fd5b5061554289828a016150fa565b909550935050604087013561555681615ed9565b9150606087013561556681615ed9565b809150509295509295509295565b600060208284031215615585578081fd5b5035919050565b60006020828403121561559d578081fd5b5051919050565b600080604083850312156155b6578182fd5b50508035926020909101359150565b600080602083850312156155d7578182fd5b823567ffffffffffffffff808211156155ee578384fd5b818501915085601f830112615601578384fd5b81358181111561560f578485fd5b866020828501011115615620578485fd5b60209290920196919550909350505050565b600060208284031215615643578081fd5b813567ffffffffffffffff811115615659578182fd5b61246b84828501615216565b600060408284031215615676578081fd5b6040516040810181811067ffffffffffffffff8211171561569957615699615eb3565b60405282356156a781615ec9565b81526020928301359281019290925250919050565b6000806000606084860312156156d0578081fd5b835167ffffffffffffffff808211156156e7578283fd5b9085019061016082880312156156fb578283fd5b615703615c62565b61570c836152d4565b815261571a602084016152b5565b602082015261572b604084016152b5565b604082015261573c606084016152aa565b60608201526080830151608082015261575760a084016152c9565b60a082015261576860c084016152d4565b60c082015260e08301518281111561577e578485fd5b61578a89828601615267565b60e08301525061010061579e8185016152b5565b9082015261012083810151838111156157b5578586fd5b6157c18a82870161513d565b9183019190915250610140838101519082015294506157e260208701615206565b935060408601519150808211156157f7578283fd5b5061580486828701615267565b9150509250925092565b60006020828403121561581f578081fd5b813561159581615ec9565b60006020828403121561583b578081fd5b815161159581615ec9565b60008060408385031215615858578182fd5b823561586381615ec9565b946020939093013593505050565b600060208284031215615882578081fd5b611595826152b5565b60006020828403121561589c578081fd5b813561159581615ed9565b6000815180845260208085019450808401835b838110156158ee576158db878351805161ffff168252602090810151910152565b60409690960195908201906001016158ba565b509495945050505050565b60008151808452615911816020860160208601615e40565b601f01601f19169290920160200192915050565b80518252602081015161596c6020840182805160070b825267ffffffffffffffff6020820151166020830152604081015160030b6040830152606081015160608301525050565b50604090810151805160070b60a0840152602081015167ffffffffffffffff1660c08401529081015160030b60e08301526060015161010090910152565b600082516159bc818460208701615e40565b9190910192915050565b7fff000000000000000000000000000000000000000000000000000000000000008360f81b16815260008251615a03816001850160208701615e40565b919091016001019392505050565b60208152600061159560208301846158a7565b604081526000615a3760408301856158a7565b828103602084015261436881856158a7565b6020808252825182820181905260009190848201906040850190845b81811015615a8c57615a78838551615925565b928401926101209290920191600101615a65565b50909695505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208152600061159560208301846158f9565b602081526000825160208084015261246b60408401826158f9565b815161ffff1681526020808301519082015260408101610b91565b602081526000825160028110615b2857615b28615e9d565b80602084015250602083015160078110615b4457615b44615e9d565b8060408401525061ffff6040840151166060830152606083015160808084015261246b60a08401826158f9565b6101208101610b918284615925565b815160070b815260208083015167ffffffffffffffff169082015260408083015160030b908201526060808301519082015260808101610b91565b602081526000825160208084015261246b60408401826158a7565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c0a578283fd5b83018035915067ffffffffffffffff821115615c24578283fd5b602001915036819003821315612ced57600080fd5b6040516080810167ffffffffffffffff81118282101715615c5c57615c5c615eb3565b60405290565b604051610160810167ffffffffffffffff81118282101715615c5c57615c5c615eb3565b604051601f8201601f1916810167ffffffffffffffff81118282101715615caf57615caf615eb3565b604052919050565b600067ffffffffffffffff821115615cd157615cd1615eb3565b50601f01601f191660200190565b60008085851115615cee578182fd5b83861115615cfa578182fd5b5050820193919092039150565b60008219821115615d1a57615d1a615e87565b500190565b600181815b80851115615d5a578160001904821115615d4057615d40615e87565b80851615615d4d57918102915b93841c9390800290615d24565b509250929050565b60006115958383600082615d7857506001610b91565b81615d8557506000610b91565b8160018114615d9b5760028114615da557615dc1565b6001915050610b91565b60ff841115615db657615db6615e87565b50506001821b610b91565b5060208310610133831016604e8410600b8410161715615de4575081810a610b91565b615dee8383615d1f565b8060001904821115615e0257615e02615e87565b029392505050565b6000816000190483118215151615615e2457615e24615e87565b500290565b600082821015615e3b57615e3b615e87565b500390565b60005b83811015615e5b578181015183820152602001615e43565b838111156120125750506000910152565b6000600019821415615e8057615e80615e87565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61ffff81168114610d4f57600080fd5b67ffffffffffffffff81168114610d4f57600080fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122099b939a0e68f7cf23dd87f1d08ae171925bb84265dfec2ec4a23e360576bf68364736f6c63430008040033" + }, + { + "address": "0x94bd35fa9dba31e354a85d1753fdd1f6b0b9a827", + "nonce": 28, + "balance": "0x000000000000000000000000000000000000000000000000002408823c56afa3", + "code": "0x" + }, + { + "address": "0x6cd20be8914a9be48f2a35e56354490b80522856", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061020f5760003560e01c806378ce903511610118578063b88d4fde116100a0578063e985e9c51161006f578063e985e9c514610758578063ebf0c71714610795578063f173f78e146107c0578063f2fde38b146107e9578063f4a0a528146108125761020f565b8063b88d4fde1461069e578063b9a2092d146106c7578063c87b56dd146106de578063d1b6dd301461071b5761020f565b80638da5cb5b116100e75780638da5cb5b146105c957806395d89b41146105f45780639fd6db121461061f578063a22cb4651461064a578063ab632857146106735761020f565b806378ce9035146105355780637cb64759146105605780637e5cd5c114610589578063819b25ba146105a05761020f565b80633ccfd60b1161019b5780636817c76c1161016a5780636817c76c1461044e57806370a0823114610479578063715018a6146104b657806373b2e80e146104cd57806376c71ca11461050a5761020f565b80633ccfd60b146103a857806342842e0e146103bf57806353223ab0146103e85780636352211e146104115761020f565b80631249c58b116101e25780631249c58b146102e257806318160ddd146102ec57806323b872dd1461031757806332cb6b0c1461034057806338e21cce1461036b5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b6004803603810190610236919061250c565b61083b565b6040516102489190612554565b60405180910390f35b34801561025d57600080fd5b5061026661091d565b60405161027391906125ff565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612657565b6109af565b6040516102b091906126c5565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db919061270c565b6109cb565b005b6102ea6109e1565b005b3480156102f857600080fd5b50610301610c80565b60405161030e919061275b565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190612776565b610c86565b005b34801561034c57600080fd5b50610355610d88565b604051610362919061275b565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d91906127c9565b610d8e565b60405161039f9190612554565b60405180910390f35b3480156103b457600080fd5b506103bd610dae565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190612776565b610ec5565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190612974565b610ee5565b005b34801561041d57600080fd5b5061043860048036038101906104339190612657565b61111c565b60405161044591906126c5565b60405180910390f35b34801561045a57600080fd5b5061046361112e565b604051610470919061275b565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b91906127c9565b611134565b6040516104ad919061275b565b60405180910390f35b3480156104c257600080fd5b506104cb6111ee565b005b3480156104d957600080fd5b506104f460048036038101906104ef91906127c9565b611202565b6040516105019190612554565b60405180910390f35b34801561051657600080fd5b5061051f611222565b60405161052c919061275b565b60405180910390f35b34801561054157600080fd5b5061054a611228565b60405161055791906125ff565b60405180910390f35b34801561056c57600080fd5b50610587600480360381019061058291906129bd565b611244565b005b34801561059557600080fd5b5061059e611256565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190612657565b6112a7565b005b3480156105d557600080fd5b506105de611391565b6040516105eb91906126c5565b60405180910390f35b34801561060057600080fd5b506106096113bb565b60405161061691906125ff565b60405180910390f35b34801561062b57600080fd5b5061063461144d565b6040516106419190612554565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c9190612a16565b611460565b005b34801561067f57600080fd5b50610688611476565b604051610695919061275b565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c09190612b0b565b61147c565b005b3480156106d357600080fd5b506106dc611499565b005b3480156106ea57600080fd5b5061070560048036038101906107009190612657565b6114e7565b60405161071291906125ff565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d91906127c9565b611502565b60405161074f9190612554565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190612b8e565b611522565b60405161078c9190612554565b60405180910390f35b3480156107a157600080fd5b506107aa6115b6565b6040516107b79190612bdd565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190612657565b6115bc565b005b3480156107f557600080fd5b50610810600480360381019061080b91906127c9565b611628565b005b34801561081e57600080fd5b5061083960048036038101906108349190612657565b6116ae565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061090657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109165750610915826116f7565b5b9050919050565b60606000805461092c90612c27565b80601f016020809104026020016040519081016040528092919081815260200182805461095890612c27565b80156109a55780601f1061097a576101008083540402835291602001916109a5565b820191906000526020600020905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b60006109ba82611761565b506109c4826117e9565b9050919050565b6109dd82826109d8611826565b61182e565b5050565b6109e9611840565b600760149054906101000a900460ff16610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90612ca4565b60405180910390fd5b600954600a5410610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7590612d10565b60405180910390fd5b6152086001600b54610a909190612d5f565b1115610ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac890612ddf565b60405180910390fd5b600854341015610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d90612e4b565b60405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90612eb7565b60405180910390fd5b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a6000815480929190610c0e90612ed7565b9190505550600b6000815480929190610c2690612ed7565b91905055506000600b549050610c3c3382611886565b7f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe3382604051610c6d929190612f1f565b60405180910390a150610c7e6118a4565b565b600b5481565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cf85760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610cef91906126c5565b60405180910390fd5b6000610d0c8383610d07611826565b6118ae565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d82578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610d7993929190612f48565b60405180910390fd5b50505050565b61520881565b600d6020528060005260406000206000915054906101000a900460ff1681565b610db6611ac8565b610dbe611840565b600047905060008111610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90612fcb565b60405180910390fd5b6000610e10611391565b73ffffffffffffffffffffffffffffffffffffffff1682604051610e339061301c565b60006040518083038185875af1925050503d8060008114610e70576040519150601f19603f3d011682016040523d82523d6000602084013e610e75565b606091505b5050905080610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb09061307d565b60405180910390fd5b5050610ec36118a4565b565b610ee08383836040518060200160405280600081525061147c565b505050565b610eed611840565b600760149054906101000a900460ff1615610f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f34906130e9565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190613155565b60405180910390fd5b6152086001600b54610fdc9190612d5f565b111561101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490612ddf565b60405180910390fd5b60003360405160200161103091906131bd565b60405160208183030381529060405280519060200120905061105582600c5483611b4f565b611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90613224565b60405180910390fd5b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b60008154809291906110ff90612ed7565b919050555061111033600b54611886565b506111196118a4565b50565b600061112782611761565b9050919050565b60085481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111a75760006040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161119e91906126c5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111f6611ac8565b6112006000611b66565b565b600e6020528060005260406000206000915054906101000a900460ff1681565b60095481565b6040518060600160405280603581526020016133c36035913981565b61124c611ac8565b80600c8190555050565b61125e611ac8565b6000600760146101000a81548160ff0219169083151502179055507faf79b4370f6af9d950564bbe6b81f7f0834c003c455db9248f4e55e6bf865eb760405160405180910390a1565b6112af611ac8565b61520881600b546112c09190612d5f565b1115611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890612ddf565b60405180910390fd5b6000600190505b81811161134d57600b600081548092919061132290612ed7565b919050555061133a611332611391565b600b54611886565b808061134590612ed7565b915050611308565b507f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe611377611391565b82604051611386929190612f1f565b60405180910390a150565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113ca90612c27565b80601f01602080910402602001604051908101604052809291908181526020018280546113f690612c27565b80156114435780601f1061141857610100808354040283529160200191611443565b820191906000526020600020905b81548152906001019060200180831161142657829003601f168201915b5050505050905090565b600760149054906101000a900460ff1681565b61147261146b611826565b8383611c2c565b5050565b600a5481565b611487848484610c86565b61149384848484611d9b565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff167f845f38efe8bd2a3a720f0571099a52e2258548daffe38bd3c857ebb1c9cf2fb16040516114dd90613290565b60405180910390a2565b60606114f282611761565b506114fb611f52565b9050919050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c5481565b6115c4611ac8565b6000600a81905550806009819055506001600760146101000a81548160ff0219169083151502179055507f03efd3ebbc5ed12643b571b325fc9a3eb76c8789615f51b623d8e5bf5116b82f8160405161161d919061275b565b60405180910390a150565b611630611ac8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116a25760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161169991906126c5565b60405180910390fd5b6116ab81611b66565b50565b6116b6611ac8565b806008819055507f25b1f9f6b6e61dfca5575239769e4450ed2e49176670837f5d1a82a9a2fc693f816040516116ec919061275b565b60405180910390a150565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008061176d83611f72565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117e057826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016117d7919061275b565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b61183b8383836001611faf565b505050565b60026006540361187c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600681905550565b6118a0828260405180602001604052806000815250612174565b5050565b6001600681905550565b6000806118ba84611f72565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118fc576118fb818486612190565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461198d5761193e600085600080611faf565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611a10576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b611ad0611826565b73ffffffffffffffffffffffffffffffffffffffff16611aee611391565b73ffffffffffffffffffffffffffffffffffffffff1614611b4d57611b11611826565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611b4491906126c5565b60405180910390fd5b565b600082611b5c8584612254565b1490509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c9d57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611c9491906126c5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d8e9190612554565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611f4c578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ddf611826565b8685856040518563ffffffff1660e01b8152600401611e019493929190613305565b6020604051808303816000875af1925050508015611e3d57506040513d601f19601f82011682018060405250810190611e3a9190613366565b60015b611ec1573d8060008114611e6d576040519150601f19603f3d011682016040523d82523d6000602084013e611e72565b606091505b506000815103611eb957836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611eb091906126c5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f4a57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611f4191906126c5565b60405180910390fd5b505b50505050565b60606040518060600160405280603581526020016133c360359139905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611fe85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561211c576000611ff884611761565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561206357508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561207657506120748184611522565b155b156120b857826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016120af91906126c5565b60405180910390fd5b811561211a57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61217e83836122a4565b61218b6000848484611d9b565b505050565b61219b83838361239d565b61224f57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221057806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612207919061275b565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401612246929190612f1f565b60405180910390fd5b505050565b60008082905060005b84518110156122995761228a8286838151811061227d5761227c613393565b5b602002602001015161245e565b9150808060010191505061225d565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123165760006040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161230d91906126c5565b60405180910390fd5b6000612324838360006118ae565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123985760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161238f91906126c5565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561245557508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061241657506124158484611522565b5b8061245457508273ffffffffffffffffffffffffffffffffffffffff1661243c836117e9565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000818310612476576124718284612489565b612481565b6124808383612489565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124e9816124b4565b81146124f457600080fd5b50565b600081359050612506816124e0565b92915050565b600060208284031215612522576125216124aa565b5b6000612530848285016124f7565b91505092915050565b60008115159050919050565b61254e81612539565b82525050565b60006020820190506125696000830184612545565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125a957808201518184015260208101905061258e565b60008484015250505050565b6000601f19601f8301169050919050565b60006125d18261256f565b6125db818561257a565b93506125eb81856020860161258b565b6125f4816125b5565b840191505092915050565b6000602082019050818103600083015261261981846125c6565b905092915050565b6000819050919050565b61263481612621565b811461263f57600080fd5b50565b6000813590506126518161262b565b92915050565b60006020828403121561266d5761266c6124aa565b5b600061267b84828501612642565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006126af82612684565b9050919050565b6126bf816126a4565b82525050565b60006020820190506126da60008301846126b6565b92915050565b6126e9816126a4565b81146126f457600080fd5b50565b600081359050612706816126e0565b92915050565b60008060408385031215612723576127226124aa565b5b6000612731858286016126f7565b925050602061274285828601612642565b9150509250929050565b61275581612621565b82525050565b6000602082019050612770600083018461274c565b92915050565b60008060006060848603121561278f5761278e6124aa565b5b600061279d868287016126f7565b93505060206127ae868287016126f7565b92505060406127bf86828701612642565b9150509250925092565b6000602082840312156127df576127de6124aa565b5b60006127ed848285016126f7565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612833826125b5565b810181811067ffffffffffffffff82111715612852576128516127fb565b5b80604052505050565b60006128656124a0565b9050612871828261282a565b919050565b600067ffffffffffffffff821115612891576128906127fb565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b6128ba816128a7565b81146128c557600080fd5b50565b6000813590506128d7816128b1565b92915050565b60006128f06128eb84612876565b61285b565b90508083825260208201905060208402830185811115612913576129126128a2565b5b835b8181101561293c578061292888826128c8565b845260208401935050602081019050612915565b5050509392505050565b600082601f83011261295b5761295a6127f6565b5b813561296b8482602086016128dd565b91505092915050565b60006020828403121561298a576129896124aa565b5b600082013567ffffffffffffffff8111156129a8576129a76124af565b5b6129b484828501612946565b91505092915050565b6000602082840312156129d3576129d26124aa565b5b60006129e1848285016128c8565b91505092915050565b6129f381612539565b81146129fe57600080fd5b50565b600081359050612a10816129ea565b92915050565b60008060408385031215612a2d57612a2c6124aa565b5b6000612a3b858286016126f7565b9250506020612a4c85828601612a01565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612a7657612a756127fb565b5b612a7f826125b5565b9050602081019050919050565b82818337600083830152505050565b6000612aae612aa984612a5b565b61285b565b905082815260208101848484011115612aca57612ac9612a56565b5b612ad5848285612a8c565b509392505050565b600082601f830112612af257612af16127f6565b5b8135612b02848260208601612a9b565b91505092915050565b60008060008060808587031215612b2557612b246124aa565b5b6000612b33878288016126f7565b9450506020612b44878288016126f7565b9350506040612b5587828801612642565b925050606085013567ffffffffffffffff811115612b7657612b756124af565b5b612b8287828801612add565b91505092959194509250565b60008060408385031215612ba557612ba46124aa565b5b6000612bb3858286016126f7565b9250506020612bc4858286016126f7565b9150509250929050565b612bd7816128a7565b82525050565b6000602082019050612bf26000830184612bce565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c3f57607f821691505b602082108103612c5257612c51612bf8565b5b50919050565b7f4d696e74696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b6000612c8e60168361257a565b9150612c9982612c58565b602082019050919050565b60006020820190508181036000830152612cbd81612c81565b9050919050565b7f45786365656473206d696e742063617000000000000000000000000000000000600082015250565b6000612cfa60108361257a565b9150612d0582612cc4565b602082019050919050565b60006020820190508181036000830152612d2981612ced565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d6a82612621565b9150612d7583612621565b9250828201905080821115612d8d57612d8c612d30565b5b92915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000612dc960128361257a565b9150612dd482612d93565b602082019050919050565b60006020820190508181036000830152612df881612dbc565b9050919050565b7f496e636f72726563742045746865722076616c75650000000000000000000000600082015250565b6000612e3560158361257a565b9150612e4082612dff565b602082019050919050565b60006020820190508181036000830152612e6481612e28565b9050919050565b7f416464726573732068617320616c7265616479206d696e746564000000000000600082015250565b6000612ea1601a8361257a565b9150612eac82612e6b565b602082019050919050565b60006020820190508181036000830152612ed081612e94565b9050919050565b6000612ee282612621565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f1457612f13612d30565b5b600182019050919050565b6000604082019050612f3460008301856126b6565b612f41602083018461274c565b9392505050565b6000606082019050612f5d60008301866126b6565b612f6a602083018561274c565b612f7760408301846126b6565b949350505050565b7f4e6f2066756e647320746f207769746864726177000000000000000000000000600082015250565b6000612fb560148361257a565b9150612fc082612f7f565b602082019050919050565b60006020820190508181036000830152612fe481612fa8565b9050919050565b600081905092915050565b50565b6000613006600083612feb565b915061301182612ff6565b600082019050919050565b600061302782612ff9565b9150819050919050565b7f5769746864726177616c206661696c6564000000000000000000000000000000600082015250565b600061306760118361257a565b915061307282613031565b602082019050919050565b600060208201905081810360008301526130968161305a565b9050919050565b7f4e46542073616c6520696e2070726f6772657373000000000000000000000000600082015250565b60006130d360148361257a565b91506130de8261309d565b602082019050919050565b60006020820190508181036000830152613102816130c6565b9050919050565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b600061313f600e8361257a565b915061314a82613109565b602082019050919050565b6000602082019050818103600083015261316e81613132565b9050919050565b60008160601b9050919050565b600061318d82613175565b9050919050565b600061319f82613182565b9050919050565b6131b76131b2826126a4565b613194565b82525050565b60006131c982846131a6565b60148201915081905092915050565b7f496e76616c6964204d65726b6c652050726f6f66000000000000000000000000600082015250565b600061320e60148361257a565b9150613219826131d8565b602082019050919050565b6000602082019050818103600083015261323d81613201565b9050919050565b7f4d6520427261766520426f6f6d65722100000000000000000000000000000000600082015250565b600061327a60108361257a565b915061328582613244565b602082019050919050565b600060208201905081810360008301526132a98161326d565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006132d7826132b0565b6132e181856132bb565b93506132f181856020860161258b565b6132fa816125b5565b840191505092915050565b600060808201905061331a60008301876126b6565b61332760208301866126b6565b613334604083018561274c565b818103606083015261334681846132cc565b905095945050505050565b600081519050613360816124e0565b92915050565b60006020828403121561337c5761337b6124aa565b5b600061338a84828501613351565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfe697066733a2f2f516d5255636d594a486833736f587369366e41623376726970514267486d596473714655486b7a4b583846736a64a264697066735822122002e3e484c1707e5ae1b20659fb8191abf85fca9208627c4bb62bd406771517ea64736f6c63430008160033" + }, + { + "address": "0xe0526e812e4b739562747dd1423a0d70e0aefca5", + "nonce": 9, + "balance": "0x0000000000000000000000000000000000000000000000000010047aa870fe93", + "code": "0x" + }, + { + "address": "0xa658742d33ebd2ce2f0bdff73515aa797fd161d9", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000ce0f07f78d86", + "code": "0x6080604052600436106100435760003560e01c80633659cfe61461005a5780634f1ef2861461007a5780635c60da1b1461008d578063f851a440146100cb57610052565b36610052576100506100e0565b005b6100506100e0565b34801561006657600080fd5b5061005061007536600461076c565b6100fa565b610050610088366004610787565b61015e565b34801561009957600080fd5b506100a26101ec565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d757600080fd5b506100a2610244565b6100e86102f1565b6100f86100f36103e2565b610422565b565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000fe7c30860d01e28371d40434806f4a8fcdd3a0981614156101565761015381604051806020016040528060008152506000610446565b50565b6101536100e0565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000fe7c30860d01e28371d40434806f4a8fcdd3a0981614156101e4576101df8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610446915050565b505050565b6101df6100e0565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000fe7c30860d01e28371d40434806f4a8fcdd3a098161415610239576102346103e2565b905090565b6102416100e0565b90565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000fe7c30860d01e28371d40434806f4a8fcdd3a09816141561023957507f000000000000000000000000fe7c30860d01e28371d40434806f4a8fcdd3a09890565b60606102ce83836040518060600160405280602781526020016108a460279139610471565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000fe7c30860d01e28371d40434806f4a8fcdd3a0981614156100f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006102347f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b3660008037600080366000845af43d6000803e808015610441573d6000f35b3d6000fd5b61044f83610599565b60008251118061045c5750805b156101df5761046b83836102a9565b50505050565b606073ffffffffffffffffffffffffffffffffffffffff84163b610517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016103d9565b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161053f9190610836565b600060405180830381855af49150503d806000811461057a576040519150601f19603f3d011682016040523d82523d6000602084013e61057f565b606091505b509150915061058f8282866105e6565b9695505050505050565b6105a281610639565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606083156105f55750816102ce565b8251156106055782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d99190610852565b73ffffffffffffffffffffffffffffffffffffffff81163b6106dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016103d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b803573ffffffffffffffffffffffffffffffffffffffff8116811461076757600080fd5b919050565b60006020828403121561077e57600080fd5b6102ce82610743565b60008060006040848603121561079c57600080fd5b6107a584610743565b9250602084013567ffffffffffffffff808211156107c257600080fd5b818601915086601f8301126107d657600080fd5b8135818111156107e557600080fd5b8760208285010111156107f757600080fd5b6020830194508093505050509250925092565b60005b8381101561082557818101518382015260200161080d565b8381111561046b5750506000910152565b6000825161084881846020870161080a565b9190910192915050565b602081526000825180602084015261087181604085016020870161080a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206f70214c51cdd41c05ba0ffeb72b309ca3c8be178fd6e73c12162330799984f364736f6c634300080a0033" + }, + { + "address": "0x39311f0a39334e488492608282593fc76d825d99", + "nonce": 15, + "balance": "0x0000000000000000000000000000000000000000000000000032b1071680b637", + "code": "0x" + }, + { + "address": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000266fb6948bca0fc", + "code": "0x6080604052600436106100bc5760003560e01c806322a66bfd146100c85780632e4a33cb1461010857806337de81061461012a5780633ccfd60b1461014a57806349dd68da1461015f57806369fe0e2d1461017f5780636a7467981461019f5780636fdad5ef146101bf5780638310e9f8146101e957806391792d5b14610216578063a22a2d411461022c578063b20d550b14610259578063bedb86fb1461026f578063f648253d1461028f578063ff219cde146102a257600080fd5b366100c357005b600080fd5b3480156100d457600080fd5b506100f56100e3366004610f98565b60046020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561011457600080fd5b50610128610123366004610f98565b6102b8565b005b34801561013657600080fd5b50610128610145366004610fbc565b6102f7565b34801561015657600080fd5b50610128610313565b34801561016b57600080fd5b5061012861017a366004610fe3565b6103ba565b34801561018b57600080fd5b5061012861019a366004610fbc565b610417565b3480156101ab57600080fd5b506101286101ba366004611025565b610441565b3480156101cb57600080fd5b506007546101d99060ff1681565b60405190151581526020016100ff565b3480156101f557600080fd5b506100f5610204366004610f98565b60056020526000908152604090205481565b34801561022257600080fd5b506100f560015481565b34801561023857600080fd5b5060035461024c906001600160a01b031681565b6040516100ff919061105a565b34801561026557600080fd5b506100f560025481565b34801561027b57600080fd5b5061012861028a36600461106e565b6107db565b61012861029d36600461108b565b610810565b3480156102ae57600080fd5b506100f560065481565b6008546001600160a01b031633146102cf57600080fd5b600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6008546001600160a01b0316331461030e57600080fd5b600155565b6008546001600160a01b0316331461032a57600080fd5b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610377576040519150601f19603f3d011682016040523d82523d6000602084013e61037c565b606091505b50509050806103b75760405162461bcd60e51b8152602060048201526002602482015261021760f41b60448201526064015b60405180910390fd5b50565b6008546001600160a01b031633146103d157600080fd5b6003546001600160a01b03166103fd57600380546001600160a01b0319166001600160a01b0385161790555b6006919091556007805460ff191691151591909117905550565b6008546001600160a01b0316331461042e57600080fd5b601481111561043c57600080fd5b600255565b60075460ff1680156104d057506009546040516309833d6d60e31b81526001600160a01b0390911690634c19eb689061047e90869060040161105a565b602060405180830381600087803b15801561049857600080fd5b505af11580156104ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d091906110c5565b6104d957600080fd5b6000821180156104e95750600081115b6104f257600080fd5b6001600160a01b03831660009081526004602052604090205460065461051884836110f8565b101561052357600080fd5b60008111801561054b57506001600160a01b0384166000908152600560205260409020548214155b156105e5576000849050806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561058e57600080fd5b505afa1580156105a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c69190611110565b6001600160a01b0316336001600160a01b0316146105e357600080fd5b505b600060646105f485605f61112d565b6105fe919061114c565b9050600061060c828661116e565b6003546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd9061064190339030908790600401611185565b602060405180830381600087803b15801561065b57600080fd5b505af115801561066f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069391906110c5565b61069c57600080fd5b6003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906106d290339061dead908690600401611185565b602060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072491906110c5565b61072d57600080fd5b6001600160a01b038616600090815260046020526040812080548492906107559084906110f8565b90915550506001600160a01b0386166000908152600460205260409020548411156107b85760405162461bcd60e51b81526020600482015260136024820152721f37b9b2b0a0b6b7bab73a2832b92a37b5b2b760691b60448201526064016103ae565b5050506001600160a01b0390921660009081526005602052604090209190915550565b6008546001600160a01b031633146107f257600080fd5b60088054911515600160a01b0260ff60a01b19909216919091179055565b600260005414156108635760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103ae565b6002600055600854600160a01b900460ff161561087f57600080fd5b6009546001600160a01b0316634c19eb686108a06040840160208501610f98565b6040518263ffffffff1660e01b81526004016108bc919061105a565b602060405180830381600087803b1580156108d657600080fd5b505af11580156108ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090e91906110c5565b61091757600080fd5b60006109296040830160208401610f98565b9050600061093a6020840184610f98565b905060006001600160a01b038316638147ef3761095d60a08701608088016111a9565b6040516001600160e01b031960e084901b16815260ff909116600482015260240160206040518083038186803b15801561099657600080fd5b505afa1580156109aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ce91906111cc565b905060006109e260608601604087016111e5565b6109f19062ffffff168361112d565b905060015481610a0191906110f8565b3414610a395760405162461bcd60e51b8152602060048201526007602482015266213d707269636560c81b60448201526064016103ae565b6000600481610a4e6040890160208a01610f98565b6001600160a01b031681526020810191909152604001600020546002546007549192509060ff168015610a815750600082115b15610bc65750600080610a9a6060890160408a016111e5565b62ffffff1660056000610ab360408c0160208d01610f98565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610ade919061112d565b90506000818411610aef5783610af1565b815b60035460405163a9059cbb60e01b81526001600160a01b038a811660048301526024820184905292935091169063a9059cbb90604401602060405180830381600087803b158015610b4157600080fd5b505af1158015610b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7991906110c5565b508060046000610b8f60408d0160208e01610f98565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610bbe919061116e565b909155505050505b8215610d875760006064610bda838261116e565b610be4908661112d565b610bee919061114c565b90506000876001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2b57600080fd5b505afa158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190611110565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610cad576040519150601f19603f3d011682016040523d82523d6000602084013e610cb2565b606091505b5050905080610ce95760405162461bcd60e51b815260206004820152600360248201526221703160e81b60448201526064016103ae565b60075460009061010090046001600160a01b0316610d07843461116e565b604051600081818185875af1925050503d8060008114610d43576040519150601f19603f3d011682016040523d82523d6000602084013e610d48565b606091505b5050905080610d7f5760405162461bcd60e51b815260206004820152600360248201526210b81960e91b60448201526064016103ae565b505050610e17565b60075460405160009161010090046001600160a01b03169034908381818185875af1925050503d8060008114610dd9576040519150601f19603f3d011682016040523d82523d6000602084013e610dde565b606091505b5050905080610e155760405162461bcd60e51b815260206004820152600360248201526221703360e81b60448201526064016103ae565b505b60006001600160a01b03871663d112fe3387610e3960608c0160408d016111e5565b610e4660608d018d61120a565b8d6080016020810190610e5991906111a9565b6040518663ffffffff1660e01b8152600401610e7995949392919061125a565b602060405180830381600087803b158015610e9357600080fd5b505af1158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb91906111cc565b90506000610edc60a08a018a6112c3565b90501115610f74576001600160a01b038616638bdbab16610f0360408b0160208c01610f98565b610f1360608c0160408d016111e5565b84610f2160a08e018e6112c3565b6040518663ffffffff1660e01b8152600401610f41959493929190611309565b600060405180830381600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b505050505b50506001600055505050505050565b6001600160a01b03811681146103b757600080fd5b600060208284031215610faa57600080fd5b8135610fb581610f83565b9392505050565b600060208284031215610fce57600080fd5b5035919050565b80151581146103b757600080fd5b600080600060608486031215610ff857600080fd5b833561100381610f83565b925060208401359150604084013561101a81610fd5565b809150509250925092565b60008060006060848603121561103a57600080fd5b833561104581610f83565b95602085013595506040909401359392505050565b6001600160a01b0391909116815260200190565b60006020828403121561108057600080fd5b8135610fb581610fd5565b60006020828403121561109d57600080fd5b81356001600160401b038111156110b357600080fd5b820160c08185031215610fb557600080fd5b6000602082840312156110d757600080fd5b8151610fb581610fd5565b634e487b7160e01b600052601160045260246000fd5b6000821982111561110b5761110b6110e2565b500190565b60006020828403121561112257600080fd5b8151610fb581610f83565b6000816000190483118215151615611147576111476110e2565b500290565b60008261116957634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611180576111806110e2565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000602082840312156111bb57600080fd5b813560ff81168114610fb557600080fd5b6000602082840312156111de57600080fd5b5051919050565b6000602082840312156111f757600080fd5b813562ffffff81168114610fb557600080fd5b6000808335601e1984360301811261122157600080fd5b8301803591506001600160401b0382111561123b57600080fd5b6020019150600581901b360382131561125357600080fd5b9250929050565b6001600160a01b038616815262ffffff85166020820152608060408201819052810183905260006001600160fb1b0384111561129557600080fd5b8360051b808660a085013760a0818401019050600081528091505060ff831660608301529695505050505050565b6000808335601e198436030181126112da57600080fd5b8301803591506001600160401b038211156112f457600080fd5b60200191503681900382131561125357600080fd5b6001600160a01b038616815262ffffff85166020820152604081018490526080606082018190528101829052818360a0830137600081830160a090810191909152601f909201601f1916010194935050505056fea264697066735822122097d23234e2f0ef24cd391981cd1d2d89a4bd365cb6872f9a934d70971447820e64736f6c63430008090033" + }, + { + "address": "0xd5d61e4ecdf6d46a63bfdc262af92544dfc19083", + "nonce": 8, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033" + }, + { + "address": "0x51f069bbe2aca62440f6205a21d26c9b7472b3d5", + "nonce": 24, + "balance": "0x0000000000000000000000000000000000000000000000000021783aea7739fa", + "code": "0x" + }, + { + "address": "0xd4f8e1d2d67e46d4dea058f5391ea772a9b755da", + "nonce": 31, + "balance": "0x000000000000000000000000000000000000000000000000007c4f4aa11fe339", + "code": "0x" + }, + { + "address": "0x64164ca5172f802acb51f18ec2bdc847c3847057", + "nonce": 63, + "balance": "0x0000000000000000000000000000000000000000000000000008156b14d6abb6", + "code": "0x" + }, + { + "address": "0xcd6ded926130e82924007460541e0040354f37d8", + "nonce": 9, + "balance": "0x000000000000000000000000000000000000000000000000004f025f69febc10", + "code": "0x" + }, + { + "address": "0x04e53b29277a6552a7107021ec373fdfd4eecf49", + "nonce": 24, + "balance": "0x00000000000000000000000000000000000000000000000000267b347b2df6a6", + "code": "0x" + }, + { + "address": "0xa2aa501b19aff244d90cc15a4cf739d2725b5729", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000000000003b9b738f", + "code": "0x60806040523661001357610011610017565b005b6100115b61002761002261005e565b610096565b565b606061004e838360405180606001604052806027815260200161024c602791396100ba565b9392505050565b3b151590565b90565b60006100917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100b5573d6000f35b3d6000fd5b6060833b61011e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161013991906101fc565b600060405180830381855af49150503d8060008114610174576040519150601f19603f3d011682016040523d82523d6000602084013e610179565b606091505b5091509150610189828286610193565b9695505050505050565b606083156101a257508161004e565b8251156101b25782518084602001fd5b8160405162461bcd60e51b81526004016101159190610218565b60005b838110156101e75781810151838201526020016101cf565b838111156101f6576000848401525b50505050565b6000825161020e8184602087016101cc565b9190910192915050565b60208152600082518060208401526102378160408501602087016101cc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122041f64d2ff908c9983923017ed36c949dd92697a1f359295e2ea2f809da86127664736f6c63430008090033" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033" + }, + { + "address": "0xc690549e0215192d1ffb527bb3ca4d4ba638cad2", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063715018a61161005b578063715018a61461013e5780638da5cb5b14610146578063b81688161461016a578063f2fde38b1461019957610088565b8063158ef93e1461008d57806315f24053146100a957806360a2da44146100e45780636e71e2d814610115575b600080fd5b6100956101bf565b604080519115158252519081900360200190f35b6100d2600480360360608110156100bf57600080fd5b50803590602081013590604001356101c8565b60408051918252519081900360200190f35b610113600480360360808110156100fa57600080fd5b50803590602081013590604081013590606001356102c5565b005b6100d26004803603606081101561012b57600080fd5b50803590602081013590604001356103a7565b610113610403565b61014e6104c1565b604080516001600160a01b039092168252519081900360200190f35b6100d26004803603608081101561018057600080fd5b50803590602081013590604081013590606001356104d0565b610113600480360360208110156101af57600080fd5b50356001600160a01b0316610537565b60055460ff1681565b6000806101d68585856103a7565b905060006004541180156101eb575060045481105b1561022d576102256301e1338061021661021c6004546102166002548761064b90919063ffffffff16565b906106ad565b60015490610714565b9150506102be565b600061027661024f600454670de0b6b3a764000061076e90919063ffffffff16565b610216670de0b6b3a76400006102706004548761076e90919063ffffffff16565b9061064b565b90506102b96301e133806102166102a4670de0b6b3a76400006102166003548761064b90919063ffffffff16565b6002546001546102b391610714565b90610714565b925050505b9392505050565b6102cd6107cb565b6001600160a01b03166102de6104c1565b6001600160a01b031614610339576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60055460ff1615610387576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b60019384556002929092556003556004556005805460ff19169091179055565b60006103b38484610714565b82106103c1575060006102be565b6103fb6103ed6103db846103d58888610714565b9061076e565b61021686670de0b6b3a764000061064b565b670de0b6b3a76400006107cf565b949350505050565b61040b6107cb565b6001600160a01b031661041c6104c1565b6001600160a01b031614610477576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6000806104e5670de0b6b3a76400008461076e565b905060006104f48787876101c8565b9050600061050e670de0b6b3a7640000610216848661064b565b905061052b670de0b6b3a7640000610216836102708c8c8c6103a7565b98975050505050505050565b61053f6107cb565b6001600160a01b03166105506104c1565b6001600160a01b0316146105ab576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166105f05760405162461bcd60e51b81526004018080602001828103825260268152602001806107e66026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008261065a575060006106a7565b8282028284828161066757fe5b04146106a45760405162461bcd60e51b815260040180806020018281038252602181526020018061080c6021913960400191505060405180910390fd5b90505b92915050565b6000808211610703576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161070c57fe5b049392505050565b6000828201838110156106a4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000828211156107c5576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3390565b60008183106107de57816106a4565b509091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122091c8c21e8248d43d8e40acb589dbdf0113b35d7ec16da33aea905026b26b13aa64736f6c634300060c0033" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "nonce": 1, + "balance": "0x00000000000000000000000000000000000000000000000000217553cf9d4ceb", + "code": "0x6080604052600436106101b75760003560e01c8063715018a6116100ec578063b66a0e5d1161008a578063d9d6165511610064578063d9d61655146104b4578063e7f7ac64146104d4578063e985e9c5146104f4578063f2fde38b1461053d57600080fd5b8063b66a0e5d1461045f578063b88d4fde14610474578063c87b56dd1461049457600080fd5b8063a035b1fe116100c6578063a035b1fe146103dc578063a22cb465146103f2578063a5b39cfb14610412578063a694fc3a1461043f57600080fd5b8063715018a6146103945780638da5cb5b146103a957806395d89b41146103c757600080fd5b80632e17de78116101595780634f6ccce7116101335780634f6ccce71461031457806355f804b3146103345780636352211e1461035457806370a082311461037457600080fd5b80632e17de78146102b45780632f745c59146102d457806342842e0e146102f457600080fd5b8063095ea7b311610195578063095ea7b31461024b57806314f710fe1461026d57806318160ddd1461027557806323b872dd1461029457600080fd5b806301ffc9a7146101bc57806306fdde03146101f1578063081812fc14610213575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004611d32565b61055d565b60405190151581526020015b60405180910390f35b3480156101fd57600080fd5b5061020661056e565b6040516101e89190611d9c565b34801561021f57600080fd5b5061023361022e366004611daf565b610600565b6040516001600160a01b0390911681526020016101e8565b34801561025757600080fd5b5061026b610266366004611de4565b610627565b005b61026b610741565b34801561028157600080fd5b506008545b6040519081526020016101e8565b3480156102a057600080fd5b5061026b6102af366004611e0e565b610808565b3480156102c057600080fd5b5061026b6102cf366004611daf565b610839565b3480156102e057600080fd5b506102866102ef366004611de4565b610a5e565b34801561030057600080fd5b5061026b61030f366004611e0e565b610af4565b34801561032057600080fd5b5061028661032f366004611daf565b610b0f565b34801561034057600080fd5b5061026b61034f366004611ed6565b610ba2565b34801561036057600080fd5b5061023361036f366004611daf565b610bba565b34801561038057600080fd5b5061028661038f366004611f1f565b610c1a565b3480156103a057600080fd5b5061026b610ca0565b3480156103b557600080fd5b50600a546001600160a01b0316610233565b3480156103d357600080fd5b50610206610cb4565b3480156103e857600080fd5b50610286600d5481565b3480156103fe57600080fd5b5061026b61040d366004611f3a565b610cc3565b34801561041e57600080fd5b5061043261042d366004611f1f565b610cce565b6040516101e89190611f76565b34801561044b57600080fd5b5061026b61045a366004611daf565b610d3a565b34801561046b57600080fd5b5061026b610e85565b34801561048057600080fd5b5061026b61048f366004611fba565b610e9c565b3480156104a057600080fd5b506102066104af366004611daf565b610ed4565b3480156104c057600080fd5b506104326104cf366004611f1f565b610ef5565b3480156104e057600080fd5b506104326104ef366004612036565b610fdf565b34801561050057600080fd5b506101dc61050f366004612069565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561054957600080fd5b5061026b610558366004611f1f565b611122565b600061056882611198565b92915050565b60606000805461057d9061209c565b80601f01602080910402602001604051908101604052809291908181526020018280546105a99061209c565b80156105f65780601f106105cb576101008083540402835291602001916105f6565b820191906000526020600020905b8154815290600101906020018083116105d957829003601f168201915b5050505050905090565b600061060b826111bd565b506000908152600460205260409020546001600160a01b031690565b600061063282610bba565b9050806001600160a01b0316836001600160a01b0316036106a45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806106c057506106c0813361050f565b6107325760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161069b565b61073c838361121c565b505050565b600f5460ff166107935760405162461bcd60e51b815260206004820152601d60248201527f4d696e74696e672069732063757272656e746c792064697361626c6564000000604482015260640161069b565b61079c33610c1a565b156107e05760405162461bcd60e51b81526020600482015260146024820152731059191c995cdcc81a185d99481d1a19481b999d60621b604482015260640161069b565b60006107eb600c5490565b90506107fb600c80546001019055565b610805338261128a565b50565b61081233826112a4565b61082e5760405162461bcd60e51b815260040161069b906120d6565b61073c838383611323565b610841611494565b60008181526012602052604090205460ff166108955760405162461bcd60e51b8152602060048201526013602482015272151bdad95b881a5cc81b9bdd081cdd185ad959606a1b604482015260640161069b565b3361089f82610bba565b6001600160a01b0316146109005760405162461bcd60e51b815260206004820152602260248201527f546f6b656e206d757374206265207374616b6564206279207468652063616c6c60448201526132b960f11b606482015260840161069b565b3360009081526010602052604081205461091c90600190612139565b6000838152601160205260408120549192509061093b90600190612139565b90508181146109d1573360009081526010602052604081208054849081106109655761096561214c565b906000526020600020015490508060106000336001600160a01b03166001600160a01b0316815260200190815260200160002083815481106109a9576109a961214c565b6000918252602090912001556109c0826001612162565b600091825260116020526040909120555b3360009081526010602052604090208054806109ef576109ef612175565b6000828152602080822083016000199081018390559092019092558482526011815260408083208390556012909152808220805460ff1916905551849133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f759190a350506108056001600b55565b6000610a6983610c1a565b8210610acb5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161069b565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61073c83838360405180602001604052806000815250610e9c565b6000610b1a60085490565b8210610b7d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161069b565b60088281548110610b9057610b9061214c565b90600052602060002001549050919050565b610baa6114ed565b600e610bb682826121d9565b5050565b6000818152600260205260408120546001600160a01b0316806105685760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161069b565b60006001600160a01b038216610c845760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161069b565b506001600160a01b031660009081526003602052604090205490565b610ca86114ed565b610cb26000611547565b565b60606001805461057d9061209c565b610bb6338383611599565b6001600160a01b038116600090815260106020908152604091829020805483518184028101840190945280845260609392830182828015610d2e57602002820191906000526020600020905b815481526020019060010190808311610d1a575b50505050509050919050565b610d42611494565b33610d4c82610bba565b6001600160a01b031614610dad5760405162461bcd60e51b815260206004820152602260248201527f596f75206d757374206f776e2074686520746f6b656e20746f207374616b65206044820152611a5d60f21b606482015260840161069b565b60008181526012602052604090205460ff1615610e0c5760405162461bcd60e51b815260206004820152601760248201527f546f6b656e20697320616c7265616479207374616b6564000000000000000000604482015260640161069b565b336000818152601060209081526040808320805460018181018355828652848620909101879055905486855260118452828520556012909252808320805460ff1916909217909155518392917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d91a36108056001600b55565b610e8d6114ed565b600f805460ff19166001179055565b610ea633836112a4565b610ec25760405162461bcd60e51b815260040161069b906120d6565b610ece84848484611667565b50505050565b60606040518060600160405280603781526020016123a46037913992915050565b60606000610f0283610c1a565b67ffffffffffffffff811115610f1a57610f1a611e4a565b604051908082528060200260200182016040528015610f43578160200160208202803683370190505b5090506000805b600854811015610fd6576000818152600260205260409020546001600160a01b031615158015610f935750846001600160a01b0316610f8882610bba565b6001600160a01b0316145b15610fc45780838381518110610fab57610fab61214c565b602090810291909101015281610fc081612299565b9250505b80610fce81612299565b915050610f4a565b50909392505050565b6060818311158015610ff357506008548211155b61102f5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b604482015260640161069b565b600061103b8484612139565b611046906001612162565b67ffffffffffffffff81111561105e5761105e611e4a565b604051908082528060200260200182016040528015611087578160200160208202803683370190505b5090506000845b848111611117576000818152600260205260409020546001600160a01b0316151580156110d45750866001600160a01b03166110c982610bba565b6001600160a01b0316145b1561110557808383815181106110ec576110ec61214c565b60209081029190910101528161110181612299565b9250505b8061110f81612299565b91505061108e565b509095945050505050565b61112a6114ed565b6001600160a01b03811661118f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161069b565b61080581611547565b60006001600160e01b0319821663780e9d6360e01b148061056857506105688261169a565b6000818152600260205260409020546001600160a01b03166108055760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161069b565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061125182610bba565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610bb68282604051806020016040528060008152506116ea565b6000806112b083610bba565b9050806001600160a01b0316846001600160a01b031614806112f757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061131b5750836001600160a01b031661131084610600565b6001600160a01b0316145b949350505050565b826001600160a01b031661133682610bba565b6001600160a01b03161461135c5760405162461bcd60e51b815260040161069b906122b2565b6001600160a01b0382166113be5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161069b565b6113cb838383600161171d565b826001600160a01b03166113de82610bba565b6001600160a01b0316146114045760405162461bcd60e51b815260040161069b906122b2565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6002600b54036114e65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161069b565b6002600b55565b600a546001600160a01b03163314610cb25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161069b565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036115fa5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161069b565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611672848484611323565b61167e848484846117c5565b610ece5760405162461bcd60e51b815260040161069b906122f7565b60006001600160e01b031982166380ac58cd60e01b14806116cb57506001600160e01b03198216635b5e139f60e01b145b8061056857506301ffc9a760e01b6001600160e01b0319831614610568565b6116f483836118c6565b61170160008484846117c5565b61073c5760405162461bcd60e51b815260040161069b906122f7565b61172984848484611a5f565b60005b818110156117be5760006117408285612162565b600081815260116020526040902054909150156117ab5760405162461bcd60e51b815260206004820152602360248201527f5374616b656420746f6b656e732063616e6e6f74206265207472616e736665726044820152621c995960ea1b606482015260840161069b565b50806117b681612299565b91505061172c565b5050505050565b60006001600160a01b0384163b156118bb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611809903390899088908890600401612349565b6020604051808303816000875af1925050508015611844575060408051601f3d908101601f1916820190925261184191810190612386565b60015b6118a1573d808015611872576040519150601f19603f3d011682016040523d82523d6000602084013e611877565b606091505b5080516000036118995760405162461bcd60e51b815260040161069b906122f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061131b565b506001949350505050565b6001600160a01b03821661191c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161069b565b6000818152600260205260409020546001600160a01b0316156119815760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161069b565b61198f60008383600161171d565b6000818152600260205260409020546001600160a01b0316156119f45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161069b565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001811115611ace5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b606482015260840161069b565b816001600160a01b038516611b2a57611b2581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611b4d565b836001600160a01b0316856001600160a01b031614611b4d57611b4d8582611b8c565b6001600160a01b038416611b6957611b6481611c29565b6117be565b846001600160a01b0316846001600160a01b0316146117be576117be8482611cd8565b60006001611b9984610c1a565b611ba39190612139565b600083815260076020526040902054909150808214611bf6576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611c3b90600190612139565b60008381526009602052604081205460088054939450909284908110611c6357611c6361214c565b906000526020600020015490508060088381548110611c8457611c8461214c565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611cbc57611cbc612175565b6001900381819060005260206000200160009055905550505050565b6000611ce383610c1a565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b03198116811461080557600080fd5b600060208284031215611d4457600080fd5b8135611d4f81611d1c565b9392505050565b6000815180845260005b81811015611d7c57602081850181015186830182015201611d60565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611d4f6020830184611d56565b600060208284031215611dc157600080fd5b5035919050565b80356001600160a01b0381168114611ddf57600080fd5b919050565b60008060408385031215611df757600080fd5b611e0083611dc8565b946020939093013593505050565b600080600060608486031215611e2357600080fd5b611e2c84611dc8565b9250611e3a60208501611dc8565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611e7b57611e7b611e4a565b604051601f8501601f19908116603f01168101908282118183101715611ea357611ea3611e4a565b81604052809350858152868686011115611ebc57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611ee857600080fd5b813567ffffffffffffffff811115611eff57600080fd5b8201601f81018413611f1057600080fd5b61131b84823560208401611e60565b600060208284031215611f3157600080fd5b611d4f82611dc8565b60008060408385031215611f4d57600080fd5b611f5683611dc8565b915060208301358015158114611f6b57600080fd5b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611fae57835183529284019291840191600101611f92565b50909695505050505050565b60008060008060808587031215611fd057600080fd5b611fd985611dc8565b9350611fe760208601611dc8565b925060408501359150606085013567ffffffffffffffff81111561200a57600080fd5b8501601f8101871361201b57600080fd5b61202a87823560208401611e60565b91505092959194509250565b60008060006060848603121561204b57600080fd5b61205484611dc8565b95602085013595506040909401359392505050565b6000806040838503121561207c57600080fd5b61208583611dc8565b915061209360208401611dc8565b90509250929050565b600181811c908216806120b057607f821691505b6020821081036120d057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561056857610568612123565b634e487b7160e01b600052603260045260246000fd5b8082018082111561056857610568612123565b634e487b7160e01b600052603160045260246000fd5b601f82111561073c57600081815260208120601f850160051c810160208610156121b25750805b601f850160051c820191505b818110156121d1578281556001016121be565b505050505050565b815167ffffffffffffffff8111156121f3576121f3611e4a565b61220781612201845461209c565b8461218b565b602080601f83116001811461223c57600084156122245750858301515b600019600386901b1c1916600185901b1785556121d1565b600085815260208120601f198616915b8281101561226b5788860151825594840194600190910190840161224c565b50858210156122895787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000600182016122ab576122ab612123565b5060010190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061237c90830184611d56565b9695505050505050565b60006020828403121561239857600080fd5b8151611d4f81611d1c56fe697066733a2f2f516d647a5655534558447164555836736d6b6f4b67516e5243724d37714d3451704b764e6a6648474c687a4169322f31a2646970667358221220816e751c6600e1f2620030832f5bf72ba955bb956f3a454609a608850656e8ec64736f6c63430008140033" + }, + { + "address": "0xcf62df0148574e0b33598178491d965327e29b8c", + "nonce": 15, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100fe5760003560e01c80638da5cb5b11610095578063c8cc2fc211610064578063c8cc2fc214610259578063d9caed1214610279578063e231454114610299578063f160d369146102b9578063f2fde38b146102d9576100fe565b80638da5cb5b146101ed5780638f32d59b14610202578063ab1be68614610224578063ac2c9c0f14610239576100fe565b806367d31752116100d157806367d3175214610178578063715018a61461018b57806378ad0369146101a057806389b08f11146101cd576100fe565b80631519b837146101035780631fd9afa514610118578063469048401461014e5780635c60da1b14610163575b600080fd5b610116610111366004610ad3565b6102f9565b005b34801561012457600080fd5b50610138610133366004610a70565b610317565b6040516101459190610c1e565b60405180910390f35b34801561015a57600080fd5b50610138610347565b34801561016f57600080fd5b50610138610356565b610116610186366004610ad3565b610365565b34801561019757600080fd5b506101166103cc565b3480156101ac57600080fd5b506101c06101bb366004610a70565b610443565b6040516101459190610c70565b3480156101d957600080fd5b506101386101e8366004610a70565b610458565b3480156101f957600080fd5b50610138610473565b34801561020e57600080fd5b50610217610482565b6040516101459190610c65565b34801561023057600080fd5b50610138610493565b34801561024557600080fd5b50610217610254366004610a70565b6104ab565b34801561026557600080fd5b50610138610274366004610a70565b6104c0565b34801561028557600080fd5b50610116610294366004610a93565b61063d565b3480156102a557600080fd5b506101c06102b4366004610b46565b610784565b3480156102c557600080fd5b506101166102d4366004610a70565b6107ba565b3480156102e557600080fd5b506101166102f4366004610a70565b61085a565b6000610304846104c0565b9050610311818484610365565b50505050565b60008061032383610443565b60015490915060009061033f906001600160a01b03168361088a565b949350505050565b6004546001600160a01b031681565b6001546001600160a01b031681565b60405163104d653760e01b81526001600160a01b0384169063104d65379034906103959086908690600401610c79565b6000604051808303818588803b1580156103ae57600080fd5b505af11580156103c2573d6000803e3d6000fd5b5050505050505050565b6103d4610482565b6103f95760405162461bcd60e51b81526004016103f090610d54565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60601b6bffffffffffffffffffffffff191690565b6002602052600090815260409020546001600160a01b031681565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90565b60036020526000908152604090205460ff1681565b6001600160a01b03818116600090815260026020526040812054909116156104fa5760405162461bcd60e51b81526004016103f090610daf565b6001600160a01b0382166105205760405162461bcd60e51b81526004016103f090610d89565b600061052b83610443565b600154909150610544906001600160a01b0316826108a0565b6001600160a01b03848116600090815260026020908152604080832080546001600160a01b0319169486169485179055838352600390915290819020805460ff191660011790555163485cc95560e01b81529193509063485cc955906105b09030908790600401610c4b565b602060405180830381600087803b1580156105ca57600080fd5b505af11580156105de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106029190610b93565b506040516001600160a01b038316907f1449abf21e49fd025f33495e77f7b1461caefdd3d4bb646424a3f445c4576a5b90600090a250919050565b610645610482565b6106615760405162461bcd60e51b81526004016103f090610d54565b6001600160a01b0383161580159061068157506001600160a01b03821615155b61069d5760405162461bcd60e51b81526004016103f090610d89565b6106a5610493565b6001600160a01b0316836001600160a01b031614156106fa576040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156106f4573d6000803e3d6000fd5b5061077f565b60405163a9059cbb60e01b815283906001600160a01b0382169063a9059cbb9061072a9086908690600401610c32565b602060405180830381600087803b15801561074457600080fd5b505af1158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190610b93565b50505b505050565b600083838360405160200161079b93929190610bdf565b6040516020818303038152906040528051906020012090509392505050565b6107c2610482565b6107de5760405162461bcd60e51b81526004016103f090610d54565b6001600160a01b0381166108045760405162461bcd60e51b81526004016103f090610ca7565b600480546001600160a01b0319166001600160a01b0383161790556040517f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc29061084f908390610c1e565b60405180910390a150565b610862610482565b61087e5760405162461bcd60e51b81526004016103f090610d54565b61088781610910565b50565b6000610897838330610991565b90505b92915050565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b03811661089a5760405162461bcd60e51b81526004016103f090610d1d565b6001600160a01b0381166109365760405162461bcd60e51b81526004016103f090610cd7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b8152606093841b60148201526f5af43d82803e903d91602b57fd5bf3ff60801b6028820152921b6038830152604c8201526037808220606c830152605591012090565b600082601f8301126109ff578081fd5b813567ffffffffffffffff80821115610a1a57610a1a610e1e565b604051601f8301601f191681016020018281118282101715610a3e57610a3e610e1e565b604052828152848301602001861015610a55578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215610a81578081fd5b8135610a8c81610e34565b9392505050565b600080600060608486031215610aa7578182fd5b8335610ab281610e34565b92506020840135610ac281610e34565b929592945050506040919091013590565b600080600060608486031215610ae7578283fd5b8335610af281610e34565b9250602084013567ffffffffffffffff80821115610b0e578384fd5b610b1a878388016109ef565b93506040860135915080821115610b2f578283fd5b50610b3c868287016109ef565b9150509250925092565b600080600060608486031215610b5a578283fd5b8335610b6581610e34565b925060208401359150604084013567ffffffffffffffff811115610b87578182fd5b610b3c868287016109ef565b600060208284031215610ba4578081fd5b81518015158114610a8c578182fd5b60008151808452610bcb816020860160208601610df2565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff198560601b1682528360148301528251610c0f816034850160208701610df2565b91909101603401949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b90815260200190565b600060408252610c8c6040830185610bb3565b8281036020840152610c9e8185610bb3565b95945050505050565b60208082526016908201527543414e4e4f54204245205a45524f204144445245535360501b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526017908201527f455243313136373a2063726561746532206661696c6564000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600c908201526b5a45524f204144445245535360a01b604082015260600190565b60208082526023908201527f6d756c7469706c652d70726f78792d7065722d757365722d6e6f742d616c6c6f6040820152621dd95960ea1b606082015260800190565b60005b83811015610e0d578181015183820152602001610df5565b838111156103115750506000910152565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461088757600080fdfea26469706673582212206590e7ce68cacdf6a5efc0ff2ca9584723e01328638982b2da63e9daedd3a51a64736f6c63430008000033" + }, + { + "address": "0x7f7d66252569b76be93d842540a6b4811ad0fae6", + "nonce": 20, + "balance": "0x000000000000000000000000000000000000000000000000001ce4b5497b7d2e", + "code": "0x" + }, + { + "address": "0x3a42e975cd9a88c7577f8f3f58d401942b588da3", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000001ae9a31cd1725c", + "code": "0x" + }, + { + "address": "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "nonce": 12816, + "balance": "0x00000000000000000000000000000000000000000000000f45f533c50a01e964", + "code": "0x" + }, + { + "address": "0x38de71124f7a447a01d67945a51edce9ff491251", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000a355c3d212f034a6", + "code": "0x6080604052600436106102e75760003560e01c80638317814a11610184578063d543c774116100d6578063ed28580a1161008a578063f47a5feb11610064578063f47a5feb146107f6578063f58589a21461080b578063f8e1734c1461082b576102e7565b8063ed28580a14610796578063f0f44260146107b6578063f2fde38b146107d6576102e7565b8063ddfdef5a116100bb578063ddfdef5a14610736578063ea216c2114610756578063eb0d4c3114610776576102e7565b8063d543c774146106e9578063db00719b14610716576102e7565b8063959f594311610138578063b77d22ad11610112578063b77d22ad14610687578063b8e7e3e01461069c578063b9a99bed146106bc576102e7565b8063959f59431461061a578063987fa2d51461063a578063a46622221461065a576102e7565b806387078f9f1161016957806387078f9f146105d05780638da5cb5b146105f0578063904d3b8d14610605576102e7565b80638317814a146105905780638525b711146105b0576102e7565b806352d2871f1161023d5780636a14ac82116101f1578063759c5b3b116101cb578063759c5b3b1461053b5780638140666e1461055b5780638207f79d14610570576102e7565b80636a14ac82146104e6578063704316e514610506578063715018a614610526576102e7565b80635b056da5116102225780635b056da51461048f5780635e280f11146104b157806369412bfa146104c6576102e7565b806352d2871f1461044f57806352d3b5001461046f576102e7565b80632cfacb061161029f57806340a7bb101161027957806340a7bb10146103f957806349148c37146104275780634d3a0f7c1461043c576102e7565b80632cfacb06146103905780632f813464146103b257806331bd2430146103e4576102e7565b806307b9ca7c116102d057806307b9ca7c1461033957806318da00111461034e5780632a819bbf14610363576102e7565b806302bd9743146102ec57806307b18bde14610317575b600080fd5b3480156102f857600080fd5b5061030161084b565b60405161030e919061448c565b60405180910390f35b34801561032357600080fd5b50610337610332366004613c3a565b61086f565b005b34801561034557600080fd5b506103016109f9565b34801561035a57600080fd5b50610301610a08565b34801561036f57600080fd5b5061038361037e366004614180565b610a17565b60405161030e9190614521565b34801561039c57600080fd5b506103a5610ad9565b60405161030e91906144c3565b3480156103be57600080fd5b506103d26103cd366004613ec0565b610ade565b60405161030e96959493929190615117565b3480156103f057600080fd5b506103a5610b62565b34801561040557600080fd5b50610419610414366004613f09565b610b67565b60405161030e929190615160565b34801561043357600080fd5b506103a5610e97565b61033761044a366004613cf4565b610e9c565b34801561045b57600080fd5b5061038361046a366004613fb4565b6112e8565b34801561047b57600080fd5b5061033761048a366004613c1e565b611652565b34801561049b57600080fd5b506104a461174e565b60405161030e9190614fe2565b3480156104bd57600080fd5b50610301611772565b3480156104d257600080fd5b506103a56104e1366004613c1e565b611796565b3480156104f257600080fd5b50610337610501366004614200565b6117b5565b34801561051257600080fd5b506103376105213660046140f3565b611b17565b34801561053257600080fd5b50610337611bdc565b34801561054757600080fd5b506103a5610556366004613c9d565b611cb2565b34801561056757600080fd5b506103a5611cde565b34801561057c57600080fd5b5061033761058b366004613edc565b611ce3565b34801561059c57600080fd5b506103376105ab36600461419d565b611e7c565b3480156105bc57600080fd5b506103376105cb366004613ce2565b611f65565b3480156105dc57600080fd5b506103376105eb3660046140d6565b612067565b3480156105fc57600080fd5b5061030161215e565b34801561061157600080fd5b506103a561216d565b34801561062657600080fd5b506103a5610635366004613ec0565b612172565b34801561064657600080fd5b50610337610655366004613ff4565b612184565b34801561066657600080fd5b5061067a610675366004613edc565b612618565b60405161030e9190614f76565b34801561069357600080fd5b506103a561262a565b3480156106a857600080fd5b506104a46106b7366004613ec0565b61262f565b3480156106c857600080fd5b506106dc6106d736600461412d565b612645565b60405161030e919061516e565b3480156106f557600080fd5b50610709610704366004614180565b612709565b60405161030e91906144a0565b34801561072257600080fd5b50610301610731366004614180565b612729565b34801561074257600080fd5b506103d2610751366004613c65565b61274f565b34801561076257600080fd5b506103a5610771366004613ec0565b6127de565b34801561078257600080fd5b50610337610791366004614180565b6127f0565b3480156107a257600080fd5b506103376107b13660046140d6565b6128de565b3480156107c257600080fd5b506103376107d1366004613c1e565b6129c9565b3480156107e257600080fd5b506103376107f1366004613c1e565b612ac5565b34801561080257600080fd5b506103a5612bf2565b34801561081757600080fd5b506103a5610826366004613c1e565b612bf8565b34801561083757600080fd5b50610337610846366004614065565b612c0a565b7f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67581565b600260005414156108c7576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556001600160a01b0382166108fb5760405162461bcd60e51b81526004016108f290614745565b60405180910390fd5b336000908152600460205260409020546109159082612f71565b336000908152600460205260408082209290925590516001600160a01b038416908390610941906143c1565b60006040518083038185875af1925050503d806000811461097e576040519150601f19603f3d011682016040523d82523d6000602084013e610983565b606091505b50509050806109a45760405162461bcd60e51b81526004016108f2906146b1565b826001600160a01b0316336001600160a01b03167f3bfd26201736b5cb14a562ab3cfc2bef76901726e3a78483d6288af47131e1d9846040516109e791906144c3565b60405180910390a35050600160005550565b6002546001600160a01b031681565b6003546001600160a01b031681565b60086020908152600092835260408084208252918352918190208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f810185900485028201850190935282815292909190830182828015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b505050505081565b600381565b6007602052600090815260409020805460019091015461ffff8083169267ffffffffffffffff6201000082048116936001600160a01b036a010000000000000000000084048116947e010000000000000000000000000000000000000000000000000000000000009094049093169291811691680100000000000000009091041686565b600681565b6000806000610b768a8a612fce565b905060608415610bbf5785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929350610c8e92505050565b61ffff808c166000908152600860209081526040808320606087015190941683529281529082902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018616150201909316929092049182018490048402810184019094528084529091830182828015610c865780601f10610c5b57610100808354040283529160200191610c86565b820191906000526020600020905b815481529060010190602001808311610c6957829003601f168201915b505050505090505b600082604001516001600160a01b031663c03f15298d85606001518e8e8e9050876040518663ffffffff1660e01b8152600401610ccf9594939291906150a5565b60206040518083038186803b158015610ce757600080fd5b505afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f9190614295565b905060008b905060008460a001516001600160a01b0316635553fb8e8f87606001518860800151866040518563ffffffff1660e01b8152600401610d6694939291906150e1565b60206040518083038186803b158015610d7e57600080fd5b505afa158015610d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db69190614295565b6003546040517f5cbbbd750000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b0390911690635cbbbd7590610e09908e90889087906004016144ab565b60206040518083038186803b158015610e2157600080fd5b505afa158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e599190614295565b90508a610e695780975087610e6e565b809650865b50610e8382610e7d8a87613199565b90613199565b975050505050505097509795505050505050565b600281565b7f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd76001600160a01b03163314610ee45760405162461bcd60e51b81526004016108f290614d6e565b61ffff89166000908152600e60205260409020548b908a90610f185760405162461bcd60e51b81526004016108f2906145e6565b61ffff81166000908152600c6020526040812054606091908015801590610f415750601481018c145b610f5d5760405162461bcd60e51b81526004016108f290614e02565b6000808e8e8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505083810160140151925090506001600160a01b0387811690831614610fcc5760405162461bcd60e51b81526004016108f290614a4f565b8e8e6000908592610fdf939291906151a7565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040517f6fe7b673000000000000000000000000000000000000000000000000000000008152929750506001600160a01b037f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6751691636fe7b673915061107f9089908b908690600401614ff1565b602060405180830381600087803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d191906142c9565b935050505060008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093945061111d9250879150889050612fce565b9050600061116586838986518d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506131f392505050565b9050600061117487848a6133cd565b9050600061118483838b8f613487565b9050600061119682610e7d8686613199565b9050348111156111b85760405162461bcd60e51b81526004016108f2906146e8565b60006111c43483612f71565b9050801561124a5760008f6001600160a01b0316826040516111e5906143c1565b60006040518083038185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b50509050806112485760405162461bcd60e51b81526004016108f29061485c565b505b6000887f00000000000000000000000000000000000000000000000000000000000000b78d8d8d8c604051602001611287969594939291906143c4565b60405160208183030381529060405290507fe9bded5f24a4168e4f3bf44e00298c993b22376aad8c58c7dda9718a54cbea82816040516112c79190614521565b60405180910390a15050505050505050505050505050505050505050505050565b6001600160a01b038216600090815260066020908152604080832061ffff871684529091529020606090600183141561137c57805461ffff166113665761ffff80861660009081526007602090815260409182902054915161134f93929092169101614fe2565b60405160208183030381529060405291505061164b565b805460405161134f9161ffff1690602001614fe2565b60028314156113f257805462010000900467ffffffffffffffff166113d05761ffff851660009081526007602090815260409182902054915161134f9262010000900467ffffffffffffffff16910161516e565b805460405161134f9162010000900467ffffffffffffffff169060200161516e565b600383141561147d5780546a010000000000000000000090046001600160a01b03166114545761ffff851660009081526007602090815260409182902054915161134f926a010000000000000000000090046001600160a01b0316910161448c565b805460405161134f916a010000000000000000000090046001600160a01b03169060200161448c565b60048314156115365780547e01000000000000000000000000000000000000000000000000000000000000900461ffff166114fe5761ffff80861660009081526007602090815260409182902054915161134f937e010000000000000000000000000000000000000000000000000000000000009093049092169101614fe2565b805460405161134f917e01000000000000000000000000000000000000000000000000000000000000900461ffff1690602001614fe2565b60058314156115a357600181015467ffffffffffffffff166115845761ffff851660009081526007602090815260409182902060010154915161134f9267ffffffffffffffff16910161516e565b600181015460405161134f9167ffffffffffffffff169060200161516e565b60068314156116315760018101546801000000000000000090046001600160a01b03166116075761ffff851660009081526007602090815260409182902060010154915161134f926801000000000000000090046001600160a01b0316910161448c565b600181015460405161134f916801000000000000000090046001600160a01b03169060200161448c565b60405162461bcd60e51b81526004016108f29061467a565b505b9392505050565b61165a6135f1565b6001600160a01b031661166b61215e565b6001600160a01b0316146116c6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166116ec5760405162461bcd60e51b81526004016108f2906147a2565b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f33d644987381deff4408951d55afa136f124e22a7810b163b2aaa3ebef770f6490600090a250565b7f00000000000000000000000000000000000000000000000000000000000000b781565b7f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd781565b6001600160a01b0381166000908152600460205260409020545b919050565b6117bd6135f1565b6001600160a01b03166117ce61215e565b6001600160a01b031614611829576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61ffff8088166000908152600a6020526040902054811690871611801590611855575060008661ffff16115b6118715760405162461bcd60e51b81526004016108f290614b9d565b60008567ffffffffffffffff161161189b5760405162461bcd60e51b81526004016108f290614ebc565b6001600160a01b0384166118c15760405162461bcd60e51b81526004016108f2906147ff565b61ffff8088166000908152600b602090815260408083209387168352929052205460ff166119015760405162461bcd60e51b81526004016108f290614589565b60008267ffffffffffffffff161161192b5760405162461bcd60e51b81526004016108f290614da5565b6001600160a01b0381166119515760405162461bcd60e51b81526004016108f290614927565b6040518060c001604052808761ffff1681526020018667ffffffffffffffff168152602001856001600160a01b031681526020018461ffff1681526020018367ffffffffffffffff168152602001826001600160a01b0316815250600760008961ffff1661ffff16815260200190815260200160002060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550604082015181600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600001601e6101000a81548161ffff021916908361ffff16021790555060808201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060a08201518160010160086101000a8154816001600160a01b0302191690836001600160a01b031602179055509050508661ffff167f5a76432853a0871c4e780def7f3ffc7912339b53f022ac31127fe5ff84a36fa1878787878787604051611b0696959493929190615117565b60405180910390a250505050505050565b336000908152600d6020908152604080832061ffff8816845282528083208684528252808320848452909152902054828110611b655760405162461bcd60e51b81526004016108f290614ae3565b336000818152600d6020908152604080832061ffff8a1680855290835281842089855283528184208785529092529182902086905590517f74bbc026808dcba59692d6a8bb20596849ca718e10e2432c6cdf48af865bc5d990611bcd908890879089906144cc565b60405180910390a35050505050565b611be46135f1565b6001600160a01b0316611bf561215e565b6001600160a01b031614611c50576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600d60209081526000948552604080862082529385528385208152918452828420909152825290205481565b600481565b611ceb6135f1565b6001600160a01b0316611cfc61215e565b6001600160a01b031614611d57576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116611d7d5760405162461bcd60e51b81526004016108f290614a86565b61ffff8083166000908152600a60205260409020548116908110611db35760405162461bcd60e51b81526004016108f290614d11565b61ffff8381166000818152600a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660019790970195861696871790556009825280832095835294905283902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861617905591519091907f802d55279d51813cb7a9a98e8fd2d7bec5346cb830901c11b85d1650cb857e9a90611e6f90859061448c565b60405180910390a2505050565b611e846135f1565b6001600160a01b0316611e9561215e565b6001600160a01b031614611ef0576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61ffff8085166000908152600860209081526040808320938716835292905220611f1b9083836139e9565b508261ffff168461ffff167f4a5695eee2a74d548d5f5c485a3de99ace99e3b664c8e30a90f49be6ebb549328484604051611f5792919061450d565b60405180910390a350505050565b60026000541415611fbd576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556003546001600160a01b03163314611fec5760405162461bcd60e51b81526004016108f290614643565b600554611ff99082612f71565b600555600254612013906001600160a01b031683836135f5565b816001600160a01b0316336001600160a01b03167f3a20c8c3cd1848485ae8261a52398bb9b26f195b717306b3cf7f058e62c095d58360405161205691906144c3565b60405180910390a350506001600055565b61206f6135f1565b6001600160a01b031661208061215e565b6001600160a01b0316146120db576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61ffff82166000908152600c60205260409020541561210c5760405162461bcd60e51b81526004016108f290614e5f565b61ffff82166000818152600c602052604090819020839055517f0611bb2107e385b79ec826fff8ecc1c1248a7aae3c875c96668f8cfbf1734220906121529084906144c3565b60405180910390a25050565b6001546001600160a01b031690565b600581565b600c6020526000908152604090205481565b60006121908888612fce565b60408101519091506001600160a01b031633146121bf5760405162461bcd60e51b81526004016108f290614a18565b6121c7613a93565b61ffff89166000908152600c6020526040902054806121f85760405162461bcd60e51b81526004016108f290614e02565b60a08301516001600160a01b03166000908152600d6020908152604080832061ffff8e16845282528083208a8452825280832089845290915290205480158015906122515750836020015167ffffffffffffffff168110155b61226d5760405162461bcd60e51b81526004016108f290614f19565b61ffff808c166000908152600960209081526040808320885190941683529290528190205490517fb71e0f710000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690819063b71e0f71906122df908b908b908b9089906004016144e2565b600060405180830381600087803b1580156122f957600080fd5b505af115801561230d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526123539190810190613de4565b60a081015161ffff8e166000908152600e6020526040902054919550149150508015612382575060a082015115155b61239e5760405162461bcd60e51b81526004016108f290614984565b8961ffff16826000015161ffff16146123c95760405162461bcd60e51b81526004016108f2906149e1565b80826080015151146123ed5760405162461bcd60e51b81526004016108f290614bfa565b7f00000000000000000000000000000000000000000000000000000000000000b761ffff16826020015161ffff16146124385760405162461bcd60e51b81526004016108f290614b66565b886001600160a01b031682606001516001600160a01b03161461246d5760405162461bcd60e51b81526004016108f2906148f0565b6124768961367a565b6124e75781606001516001600160a01b0316826000015161ffff167fa2786598bd84ae4a299103996359e6cb4333404583256079dfc279386baf5832846080015185604001518660c00151805190602001206040516124d79392919061455a565b60405180910390a350505061260f565b600082608001518360600151604051602001612504929190614377565b604051602081830303815290604052905082606001516001600160a01b0316836000015161ffff167f2bd2d8a84b748439fd50d79a49502b4eb5faa25b864da6a9ab5c150704be9a4d856080015186604001518760c00151805190602001206040516125729392919061455a565b60405180910390a37f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd76001600160a01b031663c2fa48138c838d87604001518e8960c001516040518763ffffffff1660e01b81526004016125d896959493929190615044565b600060405180830381600087803b1580156125f257600080fd5b505af1158015612606573d6000803e3d6000fd5b50505050505050505b50505050505050565b612620613ad1565b61164b8383612fce565b600181565b600a6020526000908152604090205461ffff1681565b6040517fc533338f0000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675169063c533338f906126b190879087908790600401615026565b60206040518083038186803b1580156126c957600080fd5b505afa1580156126dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270191906142c9565b949350505050565b600b60209081526000928352604080842090915290825290205460ff1681565b60096020908152600092835260408084209091529082529020546001600160a01b031681565b60066020908152600092835260408084209091529082529020805460019091015461ffff8083169267ffffffffffffffff6201000082048116936001600160a01b036a010000000000000000000084048116947e010000000000000000000000000000000000000000000000000000000000009094049093169291811691680100000000000000009091041686565b600e6020526000908152604090205481565b6127f86135f1565b6001600160a01b031661280961215e565b6001600160a01b031614612864576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61ffff8083166000818152600b60209081526040808320948616835293905282902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517fec23bee6f88cfecebb09d6aaaed66f0ce110debc1f61117c8270a7116597df9a90612152908490614fe2565b6128e66135f1565b6001600160a01b03166128f761215e565b6001600160a01b031614612952576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61ffff82166000908152600e6020526040902054156129835760405162461bcd60e51b81526004016108f290614cb4565b61ffff82166000818152600e602052604090819020839055517f0dad975e1d2fbe771c95cdcc7be9a1e61181de7173abe0a32b8f8f83140873e5906121529084906144c3565b6129d16135f1565b6001600160a01b03166129e261215e565b6001600160a01b031614612a3d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116612a635760405162461bcd60e51b81526004016108f290614c57565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fcb7ef3e545f5cdb893f5c568ba710fe08f336375a2d9fd66e161033f8fc09ef390600090a250565b612acd6135f1565b6001600160a01b0316612ade61215e565b6001600160a01b031614612b39576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116612b7e5760405162461bcd60e51b815260040180806020018281038252602681526020018061523a6026913960400191505060405180910390fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60055481565b60046020526000908152604090205481565b7f000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd76001600160a01b03163314612c525760405162461bcd60e51b81526004016108f290614d6e565b6001600160a01b038416600090815260066020908152604080832061ffff8916845290915290206001841415612cff576000612c9083850185613ec0565b61ffff8089166000908152600a60205260409020549192509081169082161115612ccc5760405162461bcd60e51b81526004016108f290614b9d565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff91909116178155612f25565b6002841415612d56576000612d16838501856142ad565b825467ffffffffffffffff90911662010000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffff90911617825550612f25565b6003841415612db4576000612d6d83850185613c1e565b82546001600160a01b039091166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff90911617825550612f25565b6004841415612e6e576000612dcb83850185613ec0565b61ffff8089166000908152600b602090815260408083209385168352929052205490915060ff1680612dff575061ffff8116155b612e1b5760405162461bcd60e51b81526004016108f290614589565b815461ffff9091167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116178155612f25565b6005841415612ec6576000612e85838501856142ad565b6001830180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff9290921691909117905550612f25565b6006841415611631576000612edd83850185613c1e565b6001830180546001600160a01b0390921668010000000000000000027fffffffff0000000000000000000000000000000000000000ffffffffffffffff909216919091179055505b83856001600160a01b03167ffc01bf86212a14151d51d1be5c2ac64d67d5ec823dfc6f53298d7ce3f3d3d2528585604051612f6192919061450d565b60405180910390a3505050505050565b600082821115612fc8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b612fd6613ad1565b6001600160a01b03808316600090815260066020908152604080832061ffff808916808652918452828520835160c0810185528154808416825267ffffffffffffffff6201000082048116838901526a010000000000000000000082048a16838801527e010000000000000000000000000000000000000000000000000000000000009091048416606083015260019092015491821660808201526801000000000000000090910490961660a0870152908452600790925290912082519091166130a357805461ffff1682525b602082015167ffffffffffffffff166130ce57805462010000900467ffffffffffffffff1660208301525b60408201516001600160a01b03166130ff5780546a010000000000000000000090046001600160a01b031660408301525b606082015161ffff1661313a5780547e01000000000000000000000000000000000000000000000000000000000000900461ffff1660608301525b608082015167ffffffffffffffff1661316257600181015467ffffffffffffffff1660808301525b60a08201516001600160a01b031661164957600101546801000000000000000090046001600160a01b031660a08201529392505050565b60008282018381101561164b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008151600014156132ce5761ffff808716600090815260086020908152604080832060608a015190941683529281529082902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600186161502019093169290920491820184900484028101840190945280845290918301828280156132c65780601f1061329b576101008083540402835291602001916132c6565b820191906000526020600020905b8154815290600101906020018083116132a957829003601f168201915b505050505091505b604080860151606087015191517f5886ea65000000000000000000000000000000000000000000000000000000008152909182916001600160a01b03831691635886ea6591613327918c918b908b908b906004016150a5565b602060405180830381600087803b15801561334157600080fd5b505af1158015613355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133799190614295565b92506133858284613680565b7fb0c632f55f1e1b3b2c3d82f41ee4716bb4c00f0f5d84cdafc141581bb8757a4f8488606001516040516133ba929190614534565b60405180910390a1505095945050505050565b60a0820151606083015160808401516040517fc5e193cd000000000000000000000000000000000000000000000000000000008152600093926001600160a01b0384169263c5e193cd92613429928a92909189906004016150e1565b602060405180830381600087803b15801561344357600080fd5b505af1158015613457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347b9190614295565b91506116498183613680565b6000806001600160a01b03831615806134a957506002546001600160a01b0316155b6003546040517f5cbbbd750000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b0390911690635cbbbd75906134fd908515908b908b906004016144ab565b60206040518083038186803b15801561351557600080fd5b505afa158015613529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061354d9190614295565b905080156135e757811561357a576003546001600160a01b03166135718183613680565b819350506135e7565b846001600160a01b0316846001600160a01b031614806135a257506001600160a01b03841632145b6135be5760405162461bcd60e51b81526004016108f290614893565b6002546135d6906001600160a01b03168530846136c3565b6005546135e39082613199565b6005555b5050949350505050565b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052613675908490613751565b505050565b3b151590565b6001600160a01b0382166000908152600460205260409020546136a39082613199565b6001600160a01b0390921660009081526004602052604090209190915550565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261374b908590613751565b50505050565b60006137a6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138029092919063ffffffff16565b805190915015613675578080602001905160208110156137c557600080fd5b50516136755760405162461bcd60e51b815260040180806020018281038252602a815260200180615260602a913960400191505060405180910390fd5b60606127018484600085856138168561367a565b613867576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106138c357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613886565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613925576040519150601f19603f3d011682016040523d82523d6000602084013e61392a565b606091505b509150915061393a828286613945565b979650505050505050565b6060831561395457508161164b565b8251156139645782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139ae578181015183820152602001613996565b50505050905090810190601f1680156139db5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613a1f5760008555613a83565b82601f10613a56578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555613a83565b82800160010185558215613a83579182015b82811115613a83578235825591602001919060010190613a68565b50613a8f929150613b06565b5090565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820181905260a082019290925260c081019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b5b80821115613a8f5760008155600101613b07565b80356117b0816151fb565b80516117b0816151fb565b60008083601f840112613b42578182fd5b50813567ffffffffffffffff811115613b59578182fd5b602083019150836020828501011115613b7157600080fd5b9250929050565b600082601f830112613b88578081fd5b815167ffffffffffffffff811115613b9c57fe5b613bcd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615183565b818152846020838601011115613be1578283fd5b6127018260208301602087016151cf565b80356117b081615213565b80516117b081615213565b80356117b081615223565b80516117b081615223565b600060208284031215613c2f578081fd5b813561164b816151fb565b60008060408385031215613c4c578081fd5b8235613c57816151fb565b946020939093013593505050565b60008060408385031215613c77578182fd5b8235613c82816151fb565b91506020830135613c9281615213565b809150509250929050565b60008060008060808587031215613cb2578182fd5b8435613cbd816151fb565b93506020850135613ccd81615213565b93969395505050506040820135916060013590565b60008060408385031215613c4c578182fd5b60008060008060008060008060008060006101008c8e031215613d15578687fd5b613d1e8c613b1b565b9a50613d2c60208d01613c08565b9950613d3a60408d01613bf2565b985067ffffffffffffffff8060608e01351115613d55578788fd5b613d658e60608f01358f01613b31565b909950975060808d0135811015613d7a578687fd5b613d8a8e60808f01358f01613b31565b9097509550613d9b60a08e01613b1b565b9450613da960c08e01613b1b565b93508060e08e01351115613dbb578283fd5b50613dcc8d60e08e01358e01613b31565b81935080925050509295989b509295989b9093969950565b600060208284031215613df5578081fd5b815167ffffffffffffffff80821115613e0c578283fd5b9083019060e08286031215613e1f578283fd5b613e2960e0615183565b613e3283613bfd565b8152613e4060208401613bfd565b6020820152613e5160408401613c13565b6040820152613e6260608401613b26565b6060820152608083015182811115613e78578485fd5b613e8487828601613b78565b60808301525060a083015160a082015260c083015182811115613ea5578485fd5b613eb187828601613b78565b60c08301525095945050505050565b600060208284031215613ed1578081fd5b813561164b81615213565b60008060408385031215613eee578182fd5b8235613ef981615213565b91506020830135613c92816151fb565b600080600080600080600060a0888a031215613f23578081fd5b8735613f2e81615213565b96506020880135613f3e816151fb565b9550604088013567ffffffffffffffff80821115613f5a578283fd5b613f668b838c01613b31565b909750955060608a013591508115158214613f7f578283fd5b90935060808901359080821115613f94578283fd5b50613fa18a828b01613b31565b989b979a50959850939692959293505050565b600080600060608486031215613fc8578081fd5b8335613fd381615213565b92506020840135613fe3816151fb565b929592945050506040919091013590565b600080600080600080600060c0888a03121561400e578081fd5b873561401981615213565b96506020880135614029816151fb565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115614059578182fd5b613fa18a828b01613b31565b60008060008060006080868803121561407c578283fd5b853561408781615213565b94506020860135614097816151fb565b935060408601359250606086013567ffffffffffffffff8111156140b9578182fd5b6140c588828901613b31565b969995985093965092949392505050565b600080604083850312156140e8578182fd5b8235613c5781615213565b60008060008060808587031215614108578182fd5b843561411381615213565b966020860135965060408601359560600135945092505050565b600080600060408486031215614141578081fd5b833561414c81615213565b9250602084013567ffffffffffffffff811115614167578182fd5b61417386828701613b31565b9497909650939450505050565b60008060408385031215614192578182fd5b8235613c8281615213565b600080600080606085870312156141b2578182fd5b84356141bd81615213565b935060208501356141cd81615213565b9250604085013567ffffffffffffffff8111156141e8578283fd5b6141f487828801613b31565b95989497509550505050565b600080600080600080600060e0888a03121561421a578081fd5b873561422581615213565b9650602088013561423581615213565b9550604088013561424581615223565b94506060880135614255816151fb565b9350608088013561426581615213565b925060a088013561427581615223565b915060c0880135614285816151fb565b8091505092959891949750929550565b6000602082840312156142a6578081fd5b5051919050565b6000602082840312156142be578081fd5b813561164b81615223565b6000602082840312156142da578081fd5b815161164b81615223565b600082845282826020860137806020848601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011685010190509392505050565b600081518084526143458160208601602086016151cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600083516143898184602088016151cf565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b90565b60007fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1682527fffff000000000000000000000000000000000000000000000000000000000000808860f01b1660088401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008760601b16600a840152808660f01b16601e8401525083516144648160208501602088016151cf565b8083019050835161447c8160208401602088016151cf565b0160200198975050505050505050565b6001600160a01b0391909116815260200190565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b6000858252606060208301526144fc6060830185876142e5565b905082604083015295945050505050565b6000602082526127016020830184866142e5565b60006020825261164b602083018461432d565b600060408252614547604083018561432d565b905061ffff831660208301529392505050565b60006060825261456d606083018661432d565b67ffffffffffffffff9490941660208301525060400152919050565b60208082526026908201527f4c617965725a65726f3a20696e76616c6964206f7574626f756e642070726f6f60408201527f6620747970650000000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f4c617965725a65726f3a20647374436861696e496420646f6573206e6f74206560408201527f7869737400000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526018908201527f4c617965725a65726f3a206f6e6c792074726561737572790000000000000000604082015260600190565b6020808252601e908201527f4c617965725a65726f3a20496e76616c696420636f6e66696720747970650000604082015260600190565b6020808252601a908201527f4c617965725a65726f3a207769746864726177206661696c6564000000000000604082015260600190565b60208082526025908201527f4c617965725a65726f3a206e6f7420656e6f756768206e617469766520666f7260408201527f2066656573000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526025908201527f4c617965725a65726f3a205f746f2063616e6e6f74206265207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526031908201527f4c617965725a65726f3a205f6c617965725a65726f546f6b656e2063616e6e6f60408201527f74206265207a65726f2061646472657373000000000000000000000000000000606082015260800190565b60208082526022908201527f4c617965725a65726f3a20696e76616c69642072656c6179657220616464726560408201527f7373000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601b908201527f4c617965725a65726f3a206661696c656420746f20726566756e640000000000604082015260600190565b6020808252602b908201527f4c617965725a65726f3a206d75737420626520706169642062792073656e646560408201527f72206f72206f726967696e000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f4c617965725a65726f3a20696e76616c69642064737441646472657373000000604082015260600190565b60208082526021908201527f4c617965725a65726f3a20696e76616c6964206f7261636c652061646472657360408201527f7300000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526025908201527f4c617965725a65726f3a20696e76616c6964205f7061636b65742e756c6e416460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f4c617965725a65726f3a20696e76616c696420737263436861696e2049640000604082015260600190565b6020808252601a908201527f4c617965725a65726f3a20696e76616c69642072656c61796572000000000000604082015260600190565b6020808252601a908201527f4c617965725a65726f3a2077726f6e6720706174682064617461000000000000604082015260600190565b60208082526029908201527f4c617965725a65726f3a206c6962726172792063616e6e6f74206265207a657260408201527f6f20616464726573730000000000000000000000000000000000000000000000606082015260800190565b60208082526043908201527f4c617965725a65726f3a206f7261636c6520646174612063616e206f6e6c792060408201527f75706461746520696620697420686173206d6f726520636f6e6669726d61746960608201527f6f6e730000000000000000000000000000000000000000000000000000000000608082015260a00190565b6020808252601e908201527f4c617965725a65726f3a20696e76616c696420647374436861696e2049640000604082015260600190565b60208082526030908201527f4c617965725a65726f3a20696e76616c696420696e626f756e642070726f6f6660408201527f206c6962726172792076657273696f6e00000000000000000000000000000000606082015260800190565b60208082526022908201527f4c617965725a65726f3a20696e76616c6964207372634164647265737320736960408201527f7a65000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f4c617965725a65726f3a2074726561737572792063616e6e6f74206265207a6560408201527f726f206164647265737300000000000000000000000000000000000000000000606082015260800190565b60208082526021908201527f4c617965725a65726f3a2072656d6f746520756c6e20616c726561647920736560408201527f7400000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f4c617965725a65726f3a2063616e206e6f7420616464206e6577206c6962726160408201527f7279000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526018908201527f4c617965725a65726f3a206f6e6c7920656e64706f696e740000000000000000604082015260600190565b6020808252602e908201527f4c617965725a65726f3a20696e76616c6964206f7574626f756e6420626c6f6360408201527f6b20636f6e6669726d6174696f6e000000000000000000000000000000000000606082015260800190565b60208082526028908201527f4c617965725a65726f3a20696e636f72726563742072656d6f7465206164647260408201527f6573732073697a65000000000000000000000000000000000000000000000000606082015260800190565b60208082526030908201527f4c617965725a65726f3a2072656d6f746520636861696e20616464726573732060408201527f73697a6520616c72656164792073657400000000000000000000000000000000606082015260800190565b6020808252602d908201527f4c617965725a65726f3a20696e76616c696420696e626f756e6420626c6f636b60408201527f20636f6e6669726d6174696f6e00000000000000000000000000000000000000606082015260800190565b60208082526029908201527f4c617965725a65726f3a206e6f7420656e6f75676820626c6f636b20636f6e6660408201527f69726d6174696f6e730000000000000000000000000000000000000000000000606082015260800190565b600060c08201905061ffff808451168352602084015167ffffffffffffffff8082166020860152604086015191506001600160a01b0380831660408701528360608801511660608701528160808801511660808701528060a08801511660a08701525050505092915050565b61ffff91909116815260200190565b600061ffff851682526001600160a01b03841660208301526060604083015261501d606083018461432d565b95945050505050565b600061ffff851682526040602083015261501d6040830184866142e5565b600061ffff8816825260c0602083015261506160c083018861432d565b6001600160a01b038716604084015267ffffffffffffffff8616606084015284608084015282810360a0840152615098818561432d565b9998505050505050505050565b600061ffff80881683528087166020840152506001600160a01b038516604083015283606083015260a0608083015261393a60a083018461432d565b61ffff948516815292909316602083015267ffffffffffffffff1660408201526001600160a01b03909116606082015260800190565b61ffff968716815267ffffffffffffffff95861660208201526001600160a01b03948516604082015292909516606083015290921660808301529190911660a082015260c00190565b918252602082015260400190565b67ffffffffffffffff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561519f57fe5b604052919050565b600080858511156151b6578182fd5b838611156151c2578182fd5b5050820193919092039150565b60005b838110156151ea5781810151838201526020016151d2565b8381111561374b5750506000910152565b6001600160a01b038116811461521057600080fd5b50565b61ffff8116811461521057600080fd5b67ffffffffffffffff8116811461521057600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220dc6fc63e061b7f8d887a5dcc9daf06630498d5f3c9e5ed30999f3b436f801b0664736f6c63430007060033" + }, + { + "address": "0x967035b7cc9a323c6019fb0b9c53a308d2ca551c", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101b85760003560e01c80636c0360eb116100f9578063a217fddf11610097578063d81d0a1511610071578063d81d0a1514610417578063e8a3d4851461042a578063e985e9c514610432578063f242432a1461046057600080fd5b8063a217fddf146103e9578063a22cb465146103f1578063d547741f1461040457600080fd5b8063885c2f35116100d3578063885c2f351461038257806391d1485414610395578063938e3d7b146103ce57806395d89b41146103e157600080fd5b80636c0360eb1461032c5780637bc8e14c146103345780637f3457101461035b57600080fd5b80631dd319cb116101665780632eb2c2d6116101405780632eb2c2d6146102d35780632f2ff15d146102e657806336568abe146102f95780634e1273f41461030c57600080fd5b80631dd319cb1461026b578063248a9ca31461027e5780632a55205a146102a157600080fd5b806306fdde031161019757806306fdde03146102305780630e89341c14610245578063156e29f61461025857600080fd5b8062fdd58e146101bd57806301ffc9a7146101f857806302fe53051461021b575b600080fd5b6101e56101cb3660046113b9565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b61020b6102063660046113f9565b61046e565b60405190151581526020016101ef565b61022e610229366004611433565b61047f565b005b6102386104ba565b6040516101ef9190611534565b610238610253366004611547565b610548565b61022e610266366004611560565b6105a6565b61022e6102793660046113b9565b6105f1565b6101e561028c366004611547565b60009081526002602052604090206001015490565b6102b46102af366004611593565b610627565b604080516001600160a01b0390931683526020830191909152016101ef565b61022e6102e136600461163c565b6106e4565b61022e6102f43660046116f7565b610731565b61022e6103073660046116f7565b610756565b61031f61031a366004611723565b610789565b6040516101ef91906117ca565b6102386108be565b6101e57fbc1f3f7c406085be62d227092f4fd5af86922a19f3a87e6199f14015341eb9d981565b6101e57f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c81565b61022e6103903660046117dd565b6108cb565b61020b6103a33660046116f7565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61022e6103dc366004611433565b61096b565b6102386109a1565b6101e5600081565b61022e6103ff36600461185e565b6109ae565b61022e6104123660046116f7565b610a1a565b61022e6104253660046117dd565b610a3f565b610238610ae5565b61020b61044036600461189a565b600160209081526000928352604080842090915290825290205460ff1681565b61022e6102e13660046118c4565b600061047982610af2565b92915050565b7f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c6104a981610b17565b60086104b583826119bc565b505050565b600580546104c79061193c565b80601f01602080910402602001604051908101604052809291908181526020018280546104f39061193c565b80156105405780601f1061051557610100808354040283529160200191610540565b820191906000526020600020905b81548152906001019060200180831161052357829003601f168201915b505050505081565b60606000600880546105599061193c565b9050116105755760405180602001604052806000815250610479565b600861058083610b24565b604051602001610591929190611a7c565b60405160208183030381529060405292915050565b7fbc1f3f7c406085be62d227092f4fd5af86922a19f3a87e6199f14015341eb9d96105d081610b17565b6105eb84848460405180602001604052806000815250610bc4565b50505050565b7fbc1f3f7c406085be62d227092f4fd5af86922a19f3a87e6199f14015341eb9d961061b81610b17565b6104b583836001610d29565b60008281526004602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff169282019290925282916106a65750604080518082019091526003546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b6020810151600090612710906106ca906bffffffffffffffffffffffff1687611b19565b6106d49190611b30565b91519350909150505b9250929050565b60405162461bcd60e51b815260206004820152601b60248201527f53424e4654732063616e2774206265207472616e7366657265642e000000000060448201526064015b60405180910390fd5b60008281526002602052604090206001015461074c81610b17565b6105eb8383610dad565b6001600160a01b038116331461077f5760405163334bd91960e11b815260040160405180910390fd5b6104b58282610e5b565b60608382146107cc5760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610728565b8367ffffffffffffffff8111156107e5576107e561141d565b60405190808252806020026020018201604052801561080e578160200160208202803683370190505b50905060005b848110156108b55760008087878481811061083157610831611b52565b90506020020160208101906108469190611b68565b6001600160a01b03166001600160a01b03168152602001908152602001600020600085858481811061087a5761087a611b52565b905060200201358152602001908152602001600020548282815181106108a2576108a2611b52565b6020908102919091010152600101610814565b50949350505050565b600880546104c79061193c565b7fbc1f3f7c406085be62d227092f4fd5af86922a19f3a87e6199f14015341eb9d96108f581610b17565b6109638686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092019190915250610ee292505050565b505050505050565b7f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c61099581610b17565b60076104b583826119bc565b600680546104c79061193c565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600082815260026020526040902060010154610a3581610b17565b6105eb8383610e5b565b7fbc1f3f7c406085be62d227092f4fd5af86922a19f3a87e6199f14015341eb9d9610a6981610b17565b6109638686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092018290525060408051602081019091529081529250611014915050565b600780546104c79061193c565b60006001600160e01b0319821663152a902d60e11b148061047957506104798261122d565b610b218133611262565b50565b60606000610b31836112bb565b600101905060008167ffffffffffffffff811115610b5157610b5161141d565b6040519080825280601f01601f191660200182016040528015610b7b576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610b8557509392505050565b6001600160a01b03841660009081526020818152604080832086845290915281208054849290610bf5908490611b83565b909155505060408051848152602081018490526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b15610cdd5760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e6190610c8a903390600090899089908990600401611b96565b6020604051808303816000875af1158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611bd9565b6001600160e01b03191614610cea565b6001600160a01b03841615155b6105eb5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610728565b6001600160a01b03831660009081526020818152604080832085845290915281208054839290610d5a908490611bf6565b909155505060408051838152602081018390526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610e535760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610e0b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610479565b506000610479565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610e535760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610479565b815181518114610f265760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610728565b60005b81811015610fb557828181518110610f4357610f43611b52565b6020026020010151600080876001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110610f8357610f83611b52565b602002602001015181526020019081526020016000206000828254610fa89190611bf6565b9091555050600101610f29565b5060006001600160a01b0316846001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611006929190611c09565b60405180910390a450505050565b8251825181146110585760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610728565b60005b818110156110e75783818151811061107557611075611b52565b6020026020010151600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008784815181106110b5576110b5611b52565b6020026020010151815260200190815260200160002060008282546110da9190611b83565b909155505060010161105b565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611138929190611c09565b60405180910390a46001600160a01b0385163b156111da5760405163bc197c8160e01b808252906001600160a01b0387169063bc197c81906111879033906000908a908a908a90600401611c37565b6020604051808303816000875af11580156111a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ca9190611bd9565b6001600160e01b031916146111e7565b6001600160a01b03851615155b6112265760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610728565b5050505050565b60006001600160e01b03198216637965db0b60e01b148061047957506301ffc9a760e01b6001600160e01b0319831614610479565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff166112b75760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610728565b5050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611304577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611330576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061134e57662386f26fc10000830492506010015b6305f5e1008310611366576305f5e100830492506008015b612710831061137a57612710830492506004015b6064831061138c576064830492506002015b600a83106104795760010192915050565b80356001600160a01b03811681146113b457600080fd5b919050565b600080604083850312156113cc57600080fd5b6113d58361139d565b946020939093013593505050565b6001600160e01b031981168114610b2157600080fd5b60006020828403121561140b57600080fd5b8135611416816113e3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561144557600080fd5b813567ffffffffffffffff8082111561145d57600080fd5b818401915084601f83011261147157600080fd5b8135818111156114835761148361141d565b604051601f8201601f19908116603f011681019083821181831017156114ab576114ab61141d565b816040528281528760208487010111156114c457600080fd5b826020860160208301376000928101602001929092525095945050505050565b60005b838110156114ff5781810151838201526020016114e7565b50506000910152565b600081518084526115208160208601602086016114e4565b601f01601f19169290920160200192915050565b6020815260006114166020830184611508565b60006020828403121561155957600080fd5b5035919050565b60008060006060848603121561157557600080fd5b61157e8461139d565b95602085013595506040909401359392505050565b600080604083850312156115a657600080fd5b50508035926020909101359150565b60008083601f8401126115c757600080fd5b50813567ffffffffffffffff8111156115df57600080fd5b6020830191508360208260051b85010111156106dd57600080fd5b60008083601f84011261160c57600080fd5b50813567ffffffffffffffff81111561162457600080fd5b6020830191508360208285010111156106dd57600080fd5b60008060008060008060008060a0898b03121561165857600080fd5b6116618961139d565b975061166f60208a0161139d565b9650604089013567ffffffffffffffff8082111561168c57600080fd5b6116988c838d016115b5565b909850965060608b01359150808211156116b157600080fd5b6116bd8c838d016115b5565b909650945060808b01359150808211156116d657600080fd5b506116e38b828c016115fa565b999c989b5096995094979396929594505050565b6000806040838503121561170a57600080fd5b8235915061171a6020840161139d565b90509250929050565b6000806000806040858703121561173957600080fd5b843567ffffffffffffffff8082111561175157600080fd5b61175d888389016115b5565b9096509450602087013591508082111561177657600080fd5b50611783878288016115b5565b95989497509550505050565b600081518084526020808501945080840160005b838110156117bf578151875295820195908201906001016117a3565b509495945050505050565b602081526000611416602083018461178f565b6000806000806000606086880312156117f557600080fd5b6117fe8661139d565b9450602086013567ffffffffffffffff8082111561181b57600080fd5b61182789838a016115b5565b9096509450604088013591508082111561184057600080fd5b5061184d888289016115b5565b969995985093965092949392505050565b6000806040838503121561187157600080fd5b61187a8361139d565b91506020830135801515811461188f57600080fd5b809150509250929050565b600080604083850312156118ad57600080fd5b6118b68361139d565b915061171a6020840161139d565b60008060008060008060a087890312156118dd57600080fd5b6118e68761139d565b95506118f46020880161139d565b94506040870135935060608701359250608087013567ffffffffffffffff81111561191e57600080fd5b61192a89828a016115fa565b979a9699509497509295939492505050565b600181811c9082168061195057607f821691505b60208210810361197057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104b557600081815260208120601f850160051c8101602086101561199d5750805b601f850160051c820191505b81811015610963578281556001016119a9565b815167ffffffffffffffff8111156119d6576119d661141d565b6119ea816119e4845461193c565b84611976565b602080601f831160018114611a1f5760008415611a075750858301515b600019600386901b1c1916600185901b178555610963565b600085815260208120601f198616915b82811015611a4e57888601518255948401946001909101908401611a2f565b5085821015611a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808454611a8a8161193c565b60018281168015611aa25760018114611ab757611ae6565b60ff1984168752821515830287019450611ae6565b8860005260208060002060005b85811015611add5781548a820152908401908201611ac4565b50505082870194505b505050508351611afa8183602088016114e4565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761047957610479611b03565b600082611b4d57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b7a57600080fd5b6114168261139d565b8082018082111561047957610479611b03565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152611bce60a0830184611508565b979650505050505050565b600060208284031215611beb57600080fd5b8151611416816113e3565b8181038181111561047957610479611b03565b604081526000611c1c604083018561178f565b8281036020840152611c2e818561178f565b95945050505050565b60006001600160a01b03808816835280871660208401525060a06040830152611c6360a083018661178f565b8281036060840152611c75818661178f565b90508281036080840152611c898185611508565b9897505050505050505056fea164736f6c6343000814000a" + }, + { + "address": "0xe6813139e10fa162aafd52c1aca081d544d3443b", + "nonce": 11, + "balance": "0x000000000000000000000000000000000000000000000000002ef2a67c243b8b", + "code": "0x" + }, + { + "address": "0x68d96d49a939f88fad14ef16ae538ab042451634", + "nonce": 1, + "balance": "0x00000000000000000000000000000000000000000000000000000000000000bd", + "code": "0x608080604052600436101561001357600080fd5b600090813560e01c9081631848effa1461177857508063313ce5671461043c57806332343cec1461165057806339653099146115575780633a5bb0991461151357806341976e09146114665780634bb341531461136f5780635f9c467b1461130a578063631a316c14610fa25780636deca46614610e70578063791a61b61461094b5780637f6728371461091257806387ad4478146107995780639b9e50c41461072c578063afe1020c146106f9578063c302122c146106dc578063c34c08e5146106b3578063cc527382146105f2578063cfb1d08714610441578063f1a640f81461043c578063f98d06f0146104135763fcfeed5c1461011357600080fd5b34610410576040366003190112610410576004356001600160401b0380821161040c573660238301121561040c57816004013591610150836118dd565b9261015e60405194856118bc565b8084526020918285016024809360051b830101913683116103e0578301905b8282106103e85750505080359283116103e457366023840112156103e4578260040135926101aa846118dd565b936101b860405195866118bc565b808552828486019160051b830101913683116103e05783859101915b8383106103d057505060405162435da560e01b81526001600160a01b03939250905083816004817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503787165afa908115610398578391859189916103a3575b508360405180948193637be53ca160e01b8352336004840152165afa80156103985761026591889161036b575b5061192b565b84518451036103285750845b8451811015610324578061028861031f9286611b07565b51836102948389611b07565b51168852600385526040882055826102ac8288611b07565b51166102b88287611b07565b5188526004855260408820906001600160601b0360a01b8254161790557f4e238d651cf72bd1ff4800414dc07a8a4ef83b6b46d015fb5abf7aefc824488c604084610303848a611b07565b511661030f8489611b07565b51825191825287820152a1611a28565b610271565b8580f35b82601a6064926040519262461bcd60e51b845260048401528201527f696e636f6e73697374656e7420706172616d73206c656e6774680000000000006044820152fd5b61038b9150853d8711610391575b61038381836118bc565b810190611913565b3861025f565b503d610379565b6040513d89823e3d90fd5b6103c39150823d84116103c9575b6103bb81836118bc565b8101906118f4565b38610232565b503d6103b1565b82358152918101918591016101d4565b8780fd5b8480fd5b81356001600160a01b038116810361040757815290840190840161017d565b600080fd5b8280fd5b80fd5b50346104105780600319360112610410576001546040516001600160a01b039091168152602090f35b6117bb565b50346104105760403660031901126104105761045b61188b565b6001600160401b03906024358281116105ee5761047c90369060040161185b565b600254909391926001600160a01b03916104999083163314611b63565b60405190632b47bb3d60e21b82526020938483600481877f00000000000000000000000034df93f37f327757684ae502b47c787c38465037165afa9283156105c657849386918a916105d1575b50600460405180968193636cf38c4960e01b8352165afa9081156105c65761051c61055c92610561958b916105a9575b50611b9f565b61054e6040519384924216888401906010926001600160401b0360c01b809260c01b16835260c01b1660088201520190565b03601f1981018352826118bc565b611c37565b93855b81811061056f578680f35b6105a49086885260058552604088208461059261058d84878b611a4d565b611a73565b16600052855287604060002055611a28565b610564565b6105c09150883d8a116103915761038381836118bc565b38610516565b6040513d8a823e3d90fd5b6105e89150823d84116103c9576103bb81836118bc565b386104e6565b8380fd5b50346104105760203660031901126104105761061d61060f6117f6565b610617611c5a565b50611c7f565b6001546040516331d98b3f60e01b81526004810192909252608090829060249082906001600160a01b03165afa9081156106a857829161066a575b604051806106668482611822565b0390f35b905060803d81116106a1575b61068081836118bc565b81019160808284031261041057506106669161069b91611bdf565b38610658565b503d610676565b6040513d84823e3d90fd5b50346104105780600319360112610410576002546040516001600160a01b039091168152602090f35b503461041057806003193601126104105760209054604051908152f35b503461041057602036600319011261041057602090600435815260048252604060018060a01b0391205416604051908152f35b50346104105760403660031901126104105761074961060f6117f6565b60015460405163052571af60e51b815260048101929092526024803590830152608090829060449082906001600160a01b03165afa9081156106a857829161066a57604051806106668482611822565b5034610410576040366003190112610410576107b361188b565b906107bc61180c565b604051632b47bb3d60e21b815260209391926001600160a01b0392909185816004817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503788165afa9081156108ea578491879185916108f5575b50600460405180948193636cf38c4960e01b8352165afa9081156108ea5761055c849361085161087c9461054e94604098916108d35750611b9f565b85516001600160c01b03194260c090811b82168c840190815293901b16600883015292839160100190565b8152600585522091166000528152604060002054801561089e57604051908152f35b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420707269636560981b6044820152606490fd5b6105c091508b3d8d116103915761038381836118bc565b6040513d85823e3d90fd5b61090c9150823d84116103c9576103bb81836118bc565b38610815565b5034610410576020366003190112610410576020906040906001600160a01b0361093a6117f6565b168152600383522054604051908152f35b506060366003190112610410576004356001600160401b038111610e6c5761097790369060040161185b565b906024356001600160401b0381116105ee5761099790369060040161185b565b6001600160401b036044351660443503610407576109c060018060a01b03600254163314611b63565b604051632b47bb3d60e21b81526020816004817f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03165afa908115610e44576004916020918891610e4f575b50604051636cf38c4960e01b815292839182906001600160a01b03165afa8015610e4457610a47918791610e2b5750611b9f565b60015460405163d47eed4560e01b81526020600482018190526001600160a01b0390921694918180610a7d60248201878961195d565b0381885afa908115610398578791610df9575b503410610dc1579290918592610aa5866119f6565b95845b818110610d2a575050604051634716e9c560e01b81526080600482015295939450859384928392610af49291610ae291608486019161195d565b83810360031901602485015290611b2f565b604480356001600160401b03169083018190526064830152039134905af1829181610c01575b50610b595760405162461bcd60e51b81526020600482015260126024820152711c185c9cd9481c1c9a58d94819985a5b195960721b6044820152606490fd5b90806001600160401b034216915b8351811015610bfd5780610b7e610bf89286611b07565b5180518452600460205260018060a01b03604085205416610bda6020610bd260405161055c8161054e6044358d878401906010926001600160401b0360c01b809260c01b16835260c01b1660088201520190565b930151611caf565b91855260056020526040852090600052602052604060002055611a28565b610b67565b5080f35b9091503d908184823e610c1482826118bc565b60208183810103126105ee578051916001600160401b0383116103e457808201601f8484010112156103e4578282015190610c4e826118dd565b93610c5c60405195866118bc565b8285526020850190828501602061012086028388010101116103e05790602082860101915b6020610120860282880101018310610ca0575050505050509038610b1a565b610120838588010312610d26576040518060608101106001600160401b03606083011117610d10576101206020809483606084950160405287518152610cea898c01848a01611bdf565b83820152610cfd898c0160a08a01611bdf565b6040820152815201940193925050610c81565b634e487b7160e01b600052604160045260246000fd5b8880fd5b93959294509092610db590610d566001600160a01b03610d4e61058d848789611a4d565b161515611a87565b6001600160a01b03610d6c61058d838688611a4d565b168952600380602052610d8460408b20541515611ac8565b6001600160a01b03610d9a61058d848789611a4d565b168a526020526040892054610daf828a611b07565b52611a28565b90879492959391610aa8565b60405162461bcd60e51b815260206004820152601060248201526f696e73756666696369656e742066656560801b6044820152606490fd5b90506020813d602011610e23575b81610e14602093836118bc565b81010312610407575138610a90565b3d9150610e07565b6105c0915060203d6020116103915761038381836118bc565b6040513d88823e3d90fd5b610e669150823d84116103c9576103bb81836118bc565b38610a13565b5080fd5b503461041057602080600319360112610e6c576001600160a01b039060043582811691908290036105ee5760405162435da560e01b81529080826004817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503788165afa918215610f7a57849282918791610f85575b50602460405180978193637be53ca160e01b8352336004840152165afa928315610f7a57610f3c6040947f8c525fc2cf35fe844e121e8dca416898e83527db53785ddc04ea064b82df055d968891610f63575061192b565b85600154826001600160601b0360a01b82161760015585519481168552161790820152a180f35b61038b9150843d86116103915761038381836118bc565b6040513d87823e3d90fd5b610f9c9150823d84116103c9576103bb81836118bc565b38610ee4565b506060366003190112610410576004356001600160401b038111610e6c57610fce90369060040161185b565b6024356001600160401b0381116105ee57610fed90369060040161185b565b9290916044356001600160401b0381116113065761100f90369060040161185b565b909160018060a01b0360015416946040519463d47eed4560e01b86526020600487015260208680611044602482018c8761195d565b03818a5afa9586156112fb5789966112c7575b50853410610dc157611068836119f6565b9289918a5b898c84831061117a57505050505080611170575b611089578780f35b853b156103e05795939160206110d2899795936110c06040519a8b99631724ada560e31b8b52606060048c015260648b019161195d565b8881036003190160248a015290611b2f565b86810360031901604488015282815201919086905b808210611139575050509083809203925af180156106a85761110e575b8080808080808780f35b6001600160401b0381116111255760405238611104565b634e487b7160e01b82526041600452602482fd5b92919496509294508335906001600160401b038216809203610d2657602081600193829352019401920191869492889694926110e7565b5081511515611081565b6020906040906111996001600160a01b03610d4e61058d888b8b611a4d565b6001600160a01b036111af61058d878a8a611a4d565b16815260038084526111c5838320541515611ac8565b6001600160a01b036111db61058d888b8b611a4d565b168252808452828220546111ef878d611b07565b526001600160a01b0361120661058d888b8b611a4d565b16825283522054602460405180948193631311a76360e21b835260048301525afa9081156112bc578d9161127e575b5061124182898b611a4d565b35906001600160401b03821680920361127a576001600160401b031610611271575b61126c90611a28565b61106d565b60019350611263565b8d80fd5b90506020813d6020116112b4575b81611299602093836118bc565b810103126112b0576112aa90611b1b565b38611235565b8c80fd5b3d915061128c565b6040513d8f823e3d90fd5b9095506020813d6020116112f3575b816112e3602093836118bc565b81010312610d2657519438611057565b3d91506112d6565b6040513d8b823e3d90fd5b8580fd5b50346104105760203660031901126104105761132761060f6117f6565b6001546040516396834ad360e01b81526004810192909252608090829060249082906001600160a01b03165afa9081156106a857829161066a57604051806106668482611822565b50346104105760203660031901126104105761139161138c6117f6565b611c7f565b611399611c5a565b50600154825460405163052571af60e51b815260048101939093526024830152608090829060449082906001600160a01b03165afa90829082611428575b50506114155760405162461bcd60e51b815260206004820152601060248201526f19d95d081c1c9a58d94819985a5b195960821b6044820152606490fd5b611420602091611caf565b604051908152f35b90925060803d811161145f575b61143f81836118bc565b8101906080818303126105ee57611457929350611bdf565b9038806113d7565b503d611435565b50346104105760203660031901126104105761148361138c6117f6565b90608060018060a01b0360015416926024604051809581936396834ad360e01b835260048301525afa9182156115065781926114c5575b602061142084611caf565b90915060803d81116114ff575b6114dc81836118bc565b81019160808284031261041057506114f960209261142092611bdf565b916114ba565b503d6114d2565b50604051903d90823e3d90fd5b503461041057604036600319011261041057604060209161153261180c565b6004358252600584528282206001600160a01b03909116825283522054604051908152f35b503461041057602080600319360112610e6c5760405162435da560e01b81526001600160a01b039160048035929082908290817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503788165afa8015610f7a5782918691611633575b50602460405180968193637be53ca160e01b8352336004840152165afa918215611628576116166040937faddc57ffb204f0a63992db2b663f55d1a23d3d090f594395b6957d802b11fd38958791610f63575061192b565b8454918186558351928352820152a180f35b6040513d86823e3d90fd5b61164a9150823d84116103c9576103bb81836118bc565b386115be565b503461041057602080600319360112610e6c5761166b6117f6565b60405162435da560e01b81526001600160a01b0392919082816004817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503788165afa908115610f7a5784918491879161175b575b50602460405180978193637be53ca160e01b8352336004840152165afa928315610f7a576117166060947f89d318a4ea5827b09463b8b0c6d18d133d328f7ad98c2716abd5c09d3a86ee31968891611744575061192b565b81600254931691826001600160601b0360a01b8516176002556040519333855216908301526040820152a180f35b61038b9150833d85116103915761038381836118bc565b6117729150823d84116103c9576103bb81836118bc565b386116be565b905034610e6c5781600319360112610e6c577f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03168152602090f35b346104075760003660031901126104075760206040517f000000000000000000000000000000000000000000000000000000000000001e8152f35b600435906001600160a01b038216820361040757565b602435906001600160a01b038216820361040757565b9190916060806080830194805160070b84526001600160401b036020820151166020850152604081015160030b60408501520151910152565b9181601f84011215610407578235916001600160401b038311610407576020808501948460051b01011161040757565b600435906001600160401b038216820361040757565b608081019081106001600160401b03821117610d1057604052565b90601f801991011681019081106001600160401b03821117610d1057604052565b6001600160401b038111610d105760051b60200190565b9081602091031261040757516001600160a01b03811681036104075790565b90816020910312610407575180151581036104075790565b1561193257565b60405162461bcd60e51b81526020600482015260036024820152626f706160e81b6044820152606490fd5b8183526020600583901b84018101939192906000818401855b848310611987575050505050505090565b90919293949596601f19808883030184528835601e198436030181121561040757830186810190356001600160401b03811161040757803603821361040757838893601f83808796879660019a5286860137600085828601015201160101990193019301919594939290611976565b90611a00826118dd565b611a0d60405191826118bc565b8281528092611a1e601f19916118dd565b0190602036910137565b6000198114611a375760010190565b634e487b7160e01b600052601160045260246000fd5b9190811015611a5d5760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160a01b03811681036104075790565b15611a8e57565b60405162461bcd60e51b81526020600482015260126024820152717a65726f20746f6b656e206164647265737360701b6044820152606490fd5b15611acf57565b60405162461bcd60e51b815260206004820152601060248201526f1d5b9adb9bdddb881c1c9a58d9481a5960821b6044820152606490fd5b8051821015611a5d5760209160051b010190565b51906001600160401b038216820361040757565b90815180825260208080930193019160005b828110611b4f575050505090565b835185529381019392810192600101611b41565b15611b6a57565b60405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606490fd5b15611ba657565b60405162461bcd60e51b81526020600482015260116024820152706f6e6c79206261636b747261636b696e6760781b6044820152606490fd5b919082608091031261040757604051611bf7816118a1565b809280518060070b8103610407578252611c1360208201611b1b565b602083015260408101518060030b8103610407576040830152606090810151910152565b602081519101519060208110611c4b575090565b6000199060200360031b1b1690565b60405190611c67826118a1565b60006060838281528260208201528260408201520152565b6001600160a01b0316611c93811515611a87565b6000526003602052604060002054611cac811515611ac8565b90565b600080825160070b131561089e5760408201518060030b90828212600014611d675750637fffffff198114611d535763ffffffff6001600160401b0391830316925b5116917f000000000000000000000000000000000000000000000000000000000000001e908103908111611d5357604d8111611d5357600a0a91828102928184041490151715611d3f575090565b634e487b7160e01b81526011600452602490fd5b634e487b7160e01b82526011600452602482fd5b6001600160401b03915063ffffffff1692611cf156fea2646970667358221220dfec5eeb71b7f2d21f0ca23371d9d49373e30bffb04fd1b4b6f9abc47c1cca7664736f6c63430008130033" + }, + { + "address": "0xab838fe7d492c621a5b1b23952af99cc37a2e0d3", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106103365760003560e01c80637f2eecc3116101b2578063b2118a8d116100f9578063e3ee160e116100a2578063ef55bec61161007c578063ef55bec614610cc1578063f2fde38b14610d2d578063f9f92be414610d60578063fe575a8714610d9357610336565b8063e3ee160e14610c14578063e5a6b10f14610c80578063e94a010214610c8857610336565b8063d608ea64116100d3578063d608ea6414610b61578063d916948714610bd1578063dd62ed3e14610bd957610336565b8063b2118a8d14610ab8578063bd10243014610afb578063d505accf14610b0357610336565b8063a0cc6a681161015b578063aa20e1e411610135578063aa20e1e414610a1f578063aa271e1a14610a52578063ad38bf2214610a8557610336565b8063a0cc6a68146109a5578063a457c2d7146109ad578063a9059cbb146109e657610336565b80638da5cb5b1161018c5780638da5cb5b1461098d57806395d89b41146109955780639fd0506d1461099d57610336565b80637f2eecc31461094a5780638456cb59146109525780638a6db9c31461095a57610336565b80633644e515116102815780634e44d9561161022a5780635a049a70116102045780635a049a701461088e5780635c975abb146108dc57806370a08231146108e45780637ecebe001461091757610336565b80634e44d9561461081a57806354fd4d5014610853578063554bab3c1461085b57610336565b80633f4ba83a1161025b5780633f4ba83a146107bc57806340c10f19146107c457806342966c68146107fd57610336565b80633644e5151461077357806338a631831461077b578063395093511461078357610336565b80632fc81e09116102e3578063313ce567116102bd578063313ce567146105385780633357162b1461055657806335d99f351461074257610336565b80632fc81e09146104ca5780633092afd5146104fd57806330adf81f1461053057610336565b80631a895266116103145780631a8952661461041f57806323b872dd146104545780632ab600451461049757610336565b806306fdde031461033b578063095ea7b3146103b857806318160ddd14610405575b600080fd5b610343610dc6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037d578181015183820152602001610365565b50505050905090810190601f1680156103aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103f1600480360360408110156103ce57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e72565b604080519115158252519081900360200190f35b61040d610fff565b60408051918252519081900360200190f35b6104526004803603602081101561043557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611005565b005b6103f16004803603606081101561046a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356110e9565b610452600480360360208110156104ad57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113ef565b610452600480360360208110156104e057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611550565b6103f16004803603602081101561051357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115ce565b61040d6116c7565b6105406116eb565b6040805160ff9092168252519081900360200190f35b610452600480360361010081101561056d57600080fd5b81019060208101813564010000000081111561058857600080fd5b82018360208201111561059a57600080fd5b803590602001918460018302840111640100000000831117156105bc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184600183028401116401000000008311171561064357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561069657600080fd5b8201836020820111156106a857600080fd5b803590602001918460018302840111640100000000831117156106ca57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff16925050602081013573ffffffffffffffffffffffffffffffffffffffff908116916040810135821691606082013581169160800135166116f4565b61074a611a36565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61040d611a52565b61074a611a58565b6103f16004803603604081101561079957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611a74565b610452611bf6565b6103f1600480360360408110156107da57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611cb9565b6104526004803603602081101561081357600080fd5b50356120ee565b6103f16004803603604081101561083057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356123a8565b61034361253b565b6104526004803603602081101561087157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612572565b610452600480360360a08110156108a457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060ff60408201351690606081013590608001356126d9565b6103f1612777565b61040d600480360360208110156108fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612798565b61040d6004803603602081101561092d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166127c0565b61040d6127e8565b61045261280c565b61040d6004803603602081101561097057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166128e6565b61074a61290e565b61034361292a565b61074a6129a3565b61040d6129bf565b6103f1600480360360408110156109c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356129e3565b6103f1600480360360408110156109fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612b65565b61045260048036036020811015610a3557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612ce7565b6103f160048036036020811015610a6857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612e4e565b61045260048036036020811015610a9b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612e79565b61045260048036036060811015610ace57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135612fe0565b61074a613076565b610452600480360360e0811015610b1957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135613092565b61045260048036036020811015610b7757600080fd5b810190602081018135640100000000811115610b9257600080fd5b820183602082011115610ba457600080fd5b80359060200191846001830284011164010000000083111715610bc657600080fd5b509092509050613238565b61040d613321565b61040d60048036036040811015610bef57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516613345565b6104526004803603610120811015610c2b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e081013590610100013561337d565b610343613527565b6103f160048036036040811015610c9e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356135a0565b6104526004803603610120811015610cd857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e08101359061010001356135d8565b61045260048036036020811015610d4357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613775565b61045260048036036020811015610d7657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166138c8565b6103f160048036036020811015610da957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166139af565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b820191906000526020600020905b815481529060010190602001808311610e4d57829003601f168201915b505050505081565b60015460009074010000000000000000000000000000000000000000900460ff1615610eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615610f68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615610fe9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff43386866139da565b506001949350505050565b600b5490565b60025473ffffffffffffffffffffffffffffffffffffffff163314611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061506b602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f117e3210bb9aa7d9baff172026820255c6f6c30ba8999d1c2fd88e2848137c4e9190a250565b60015460009074010000000000000000000000000000000000000000900460ff161561117657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff16156111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859060ff1615611260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859060ff16156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152600a6020908152604080832033845290915290205485111561136a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151316028913960400191505060405180910390fd5b611375878787613b21565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600a602090815260408083203384529091529020546113b09086613d4c565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600a60209081526040808320338452909152902055600193505050509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461147557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614fc9602a913960400191505060405180910390fd5b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe475e580d85111348e40d8ca33cfdd74c30fe1655c2d8537a13abc10065ffa5a90600090a250565b60125460ff1660011461156257600080fd5b30600090815260096020526040902054801561158357611583308383613b21565b505030600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00908116600117909155601280549091166002179055565b60085460009073ffffffffffffffffffffffffffffffffffffffff163314611641576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150426029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000818152600c6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600d909152808220829055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a2506001919050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60065460ff1681565b60085474010000000000000000000000000000000000000000900460ff1615611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806151ac602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806150de602f913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611840576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614fa06029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166118ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615159602e913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116611918576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806152bf6028913960400191505060405180910390fd5b875161192b9060049060208b0190614d50565b50865161193f9060059060208a0190614d50565b508551611953906007906020890190614d50565b50600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8716179055600880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff87811691909117909255600180548216868416179055600280549091169184169190911790556119ed81613d95565b5050600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600e5473ffffffffffffffffffffffffffffffffffffffff1690565b60015460009074010000000000000000000000000000000000000000900460ff1615611b0157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615611b6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615611beb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff4338686613ddc565b60015473ffffffffffffffffffffffffffffffffffffffff163314611c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061524d6022913960400191505060405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60015460009074010000000000000000000000000000000000000000900460ff1615611d4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b336000908152600c602052604090205460ff16611dae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806150bd6021913960400191505060405180910390fd5b3360008181526003602052604090205460ff1615611e17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615611e98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614f0f6023913960400191505060405180910390fd5b60008411611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614ff36029913960400191505060405180910390fd5b336000908152600d602052604090205480851115611fc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061521f602e913960400191505060405180910390fd5b600b54611fd39086613e26565b600b5573ffffffffffffffffffffffffffffffffffffffff86166000908152600960205260409020546120069086613e26565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600960205260409020556120368186613d4c565b336000818152600d6020908152604091829020939093558051888152905173ffffffffffffffffffffffffffffffffffffffff8a16937fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8928290030190a360408051868152905173ffffffffffffffffffffffffffffffffffffffff8816916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350600195945050505050565b60015474010000000000000000000000000000000000000000900460ff161561217857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b336000908152600c602052604090205460ff166121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806150bd6021913960400191505060405180910390fd5b3360008181526003602052604090205460ff1615612249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b33600090815260096020526040902054826122af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614ee66029913960400191505060405180910390fd5b82811015612308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150976026913960400191505060405180910390fd5b600b546123159084613d4c565b600b556123228184613d4c565b33600081815260096020908152604091829020939093558051868152905191927fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca592918290030190a260408051848152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b60015460009074010000000000000000000000000000000000000000900460ff161561243557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b60085473ffffffffffffffffffffffffffffffffffffffff1633146124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150426029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000818152600c6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055600d825291829020859055815185815291517f46980fca912ef9bcdbd36877427b6b90e860769f604e89c0e67720cece530d209281900390910190a250600192915050565b60408051808201909152600181527f3200000000000000000000000000000000000000000000000000000000000000602082015290565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125f857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612664576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614e936028913960400191505060405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a250565b60015474010000000000000000000000000000000000000000900460ff161561276357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6127708585858585613e9a565b5050505050565b60015474010000000000000000000000000000000000000000900460ff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526009602052604090205490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526011602052604090205490565b7fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de881565b60015473ffffffffffffffffffffffffffffffffffffffff16331461287c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061524d6022913960400191505060405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b73ffffffffffffffffffffffffffffffffffffffff166000908152600d602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226781565b60015460009074010000000000000000000000000000000000000000900460ff1615612a7057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615612ad9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615612b5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff4338686614023565b60015460009074010000000000000000000000000000000000000000900460ff1615612bf257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615612c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615612cdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff4338686613b21565b60005473ffffffffffffffffffffffffffffffffffffffff163314612d6d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806150de602f913960400191505060405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fdb66dfa9c6b8f5226fe9aac7e51897ae8ee94ac31dc70bb6c9900b2574b707e690600090a250565b73ffffffffffffffffffffffffffffffffffffffff166000908152600c602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314612eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806153156032913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fc67398012c111ce95ecb7429b933096c977380ee6c421175a71a4a4c6c88c06e90600090a250565b600e5473ffffffffffffffffffffffffffffffffffffffff163314613050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061510d6024913960400191505060405180910390fd5b61307173ffffffffffffffffffffffffffffffffffffffff8416838361407f565b505050565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff161561311c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8716600090815260036020526040902054879060ff161561319d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716600090815260036020526040902054879060ff161561321e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b61322d8989898989898961410c565b505050505050505050565b60085474010000000000000000000000000000000000000000900460ff168015613265575060125460ff16155b61326e57600080fd5b61327a60048383614dce565b506132ef82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600181527f3200000000000000000000000000000000000000000000000000000000000000602082015291506142b59050565b600f555050601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b7f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a159742981565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600a6020908152604080832093909416825291909152205490565b60015474010000000000000000000000000000000000000000900460ff161561340757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b61351a8b8b8b8b8b8b8b8b8b614327565b5050505050505050505050565b6007805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152601060209081526040808320938352929052205460ff1690565b60015474010000000000000000000000000000000000000000900460ff161561366257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff16156136e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b61351a8b8b8b8b8b8b8b8b8b614469565b60005473ffffffffffffffffffffffffffffffffffffffff1633146137fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116613867576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f586026913960400191505060405180910390fd5b6000546040805173ffffffffffffffffffffffffffffffffffffffff9283168152918316602083015280517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09281900390910190a16138c581613d95565b50565b60025473ffffffffffffffffffffffffffffffffffffffff163314613938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061506b602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b8559190a250565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8316613a46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806151fb6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614f7e6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8084166000818152600a6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316613b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806151d66025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614e706023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040902054811115613c77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061501c6026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040902054613ca79082613d4c565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600960205260408082209390935590841681522054613ce39082613e26565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526009602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000613d8e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614576565b9392505050565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600a60209081526040808320938616835292905220546130719084908490613e219085613e26565b6139da565b600082820183811015613d8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b613ea48585614627565b604080517f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a1597429602082015273ffffffffffffffffffffffffffffffffffffffff87168183018190526060828101889052835180840390910181526080909201909252600f54909190613f1890868686866146b5565b73ffffffffffffffffffffffffffffffffffffffff1614613f9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8616600081815260106020908152604080832089845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518792917f1cdd46ff242716cdaa72d159d339a485b3438398348d68f09d7c8c0a59353d8191a3505050505050565b6130718383613e21846040518060600160405280602581526020016153916025913973ffffffffffffffffffffffffffffffffffffffff808a166000908152600a60209081526040808320938c16835292905220549190614576565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052613071908490614727565b4284101561417b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a207065726d697420697320657870697265640000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80881660008181526011602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c992810192909252818301849052938a1660608201526080810189905260a081019390935260c08084018890528151808503909101815260e09093019052600f5461421e90868686866146b5565b73ffffffffffffffffffffffffffffffffffffffff16146142a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f454950323631323a20696e76616c6964207369676e6174757265000000000000604482015290519081900360640190fd5b6142ab8888886139da565b5050505050505050565b8151602092830120815191830191909120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818601528082019390935260608301919091524660808301523060a0808401919091528151808403909101815260c09092019052805191012090565b614333898588886147ff565b604080517f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a2267602082015273ffffffffffffffffffffffffffffffffffffffff808c16828401819052908b166060830152608082018a905260a0820189905260c0820188905260e080830188905283518084039091018152610100909201909252600f549091906143c690868686866146b5565b73ffffffffffffffffffffffffffffffffffffffff161461444857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6144528a866148bf565b61445d8a8a8a613b21565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff881633146144d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806151876025913960400191505060405180910390fd5b6144e3898588886147ff565b604080517fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de8602082015273ffffffffffffffffffffffffffffffffffffffff808c16828401819052908b166060830152608082018a905260a0820189905260c0820188905260e080830188905283518084039091018152610100909201909252600f549091906143c690868686866146b5565b6000818484111561461f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145e45781810151838201526020016145cc565b50505050905090810190601f1680156146115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260106020908152604080832084845290915290205460ff16156146b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806152e7602e913960400191505060405180910390fd5b5050565b8051602080830191909120604080517f19010000000000000000000000000000000000000000000000000000000000008185015260228101899052604280820193909352815180820390930183526062019052805191012060009061471c81878787614944565b979650505050505050565b6060614789826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614b419092919063ffffffff16565b805190915015613071578080602001905160208110156147a857600080fd5b5051613071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615295602a913960400191505060405180910390fd5b814211614857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614ebb602b913960400191505060405180910390fd5b8042106148af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061536c6025913960400191505060405180910390fd5b6148b98484614627565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260106020908152604080832085845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518392917f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a591a35050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156149bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061526f6026913960400191505060405180910390fd5b8360ff16601b141580156149d757508360ff16601c14155b15614a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f326026913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614a89573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116614b3657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45435265636f7665723a20696e76616c6964207369676e617475726500000000604482015290519081900360640190fd5b90505b949350505050565b6060614b3984846000856060614b5685614d17565b614bc157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614c2b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614bee565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614c8d576040519150601f19603f3d011682016040523d82523d6000602084013e614c92565b606091505b50915091508115614ca6579150614b399050565b805115614cb65780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528651602484015286518793919283926044019190850190808383600083156145e45781810151838201526020016145cc565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590614b39575050151592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614d9157805160ff1916838001178555614dbe565b82800160010185558215614dbe579182015b82811115614dbe578251825591602001919060010190614da3565b50614dca929150614e5a565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614e2d578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555614dbe565b82800160010185558215614dbe579182015b82811115614dbe578235825591602001919060010190614e3f565b5b80821115614dca5760008155600101614e5b56fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735061757361626c653a206e65772070617573657220697320746865207a65726f206164647265737346696174546f6b656e56323a20617574686f72697a6174696f6e206973206e6f74207965742076616c696446696174546f6b656e3a206275726e20616d6f756e74206e6f742067726561746572207468616e203046696174546f6b656e3a206d696e7420746f20746865207a65726f206164647265737345435265636f7665723a20696e76616c6964207369676e6174757265202776272076616c75654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737346696174546f6b656e3a206e65772070617573657220697320746865207a65726f2061646472657373526573637561626c653a206e6577207265736375657220697320746865207a65726f206164647265737346696174546f6b656e3a206d696e7420616d6f756e74206e6f742067726561746572207468616e203045524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636546696174546f6b656e3a2063616c6c6572206973206e6f7420746865206d61737465724d696e746572426c61636b6c69737461626c653a2063616c6c6572206973206e6f742074686520626c61636b6c697374657246696174546f6b656e3a206275726e20616d6f756e7420657863656564732062616c616e636546696174546f6b656e3a2063616c6c6572206973206e6f742061206d696e74657246696174546f6b656e3a206e6577206d61737465724d696e74657220697320746865207a65726f2061646472657373526573637561626c653a2063616c6c6572206973206e6f7420746865207265736375657245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636546696174546f6b656e3a206e657720626c61636b6c697374657220697320746865207a65726f206164647265737346696174546f6b656e56323a2063616c6c6572206d7573742062652074686520706179656546696174546f6b656e3a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737346696174546f6b656e3a206d696e7420616d6f756e742065786365656473206d696e746572416c6c6f77616e63655061757361626c653a2063616c6c6572206973206e6f74207468652070617573657245435265636f7665723a20696e76616c6964207369676e6174757265202773272076616c75655361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656446696174546f6b656e3a206e6577206f776e657220697320746865207a65726f206164647265737346696174546f6b656e56323a20617574686f72697a6174696f6e2069732075736564206f722063616e63656c6564426c61636b6c69737461626c653a206e657720626c61636b6c697374657220697320746865207a65726f2061646472657373426c61636b6c69737461626c653a206163636f756e7420697320626c61636b6c697374656446696174546f6b656e56323a20617574686f72697a6174696f6e206973206578706972656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201cefeebb89ed4a059ad02678f68798f31e3f23a3f50bce2da30539c811cb582864736f6c634300060c0033" + }, + { + "address": "0xe8b0532428c49daac6df99b542b515d023a20fef", + "nonce": 6, + "balance": "0x000000000000000000000000000000000000000000000000000b5bb3dcfd478d", + "code": "0x" + }, + { + "address": "0x24fb76cec8a5bc50409dbfeee5605109bb23e7d3", + "nonce": 11, + "balance": "0x000000000000000000000000000000000000000000000000004e90aa0ace140a", + "code": "0x" + }, + { + "address": "0x666a8f155e5c0316b0867f6ef5d410ae0fbcfbd8", + "nonce": 3, + "balance": "0x000000000000000000000000000000000000000000000000000221b262dd8000", + "code": "0x6080604052600436106100c35760003560e01c806301ffc9a7146100c8578063248a9ca3146100fd5780632f2ff15d1461012b578063331f87bd1461014d57806334aedecd1461016d57806336568abe1461018f5780635c975abb146101af5780635fd8c710146101c75780636c8f4d91146101dc5780637373531e146101dc5780637eb1ddd2146101e457806391d1485414610216578063a217fddf14610236578063ab64d2e61461024b578063d547741f1461026b578063ee438cc81461028b575b600080fd5b3480156100d457600080fd5b506100e86100e336600461078b565b6102ab565b60405190151581526020015b60405180910390f35b34801561010957600080fd5b5061011d6101183660046107bc565b6102e2565b6040519081526020016100f4565b34801561013757600080fd5b5061014b6101463660046107f1565b6102f7565b005b34801561015957600080fd5b5061014b610168366004610833565b610319565b34801561017957600080fd5b5061011d60008051602061094983398151915281565b34801561019b57600080fd5b5061014b6101aa3660046107f1565b6103e1565b3480156101bb57600080fd5b5060025460ff166100e8565b3480156101d357600080fd5b5061014b610414565b61014b6104fa565b3480156101f057600080fd5b506002546102099061010090046001600160a01b031681565b6040516100f491906108f7565b34801561022257600080fd5b506100e86102313660046107f1565b61054c565b34801561024257600080fd5b5061011d600081565b34801561025757600080fd5b50600354610209906001600160a01b031681565b34801561027757600080fd5b5061014b6102863660046107f1565b610575565b34801561029757600080fd5b5061014b6102a6366004610833565b610591565b60006001600160e01b03198216637965db0b60e01b14806102dc57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526020819052604090206001015490565b610300826102e2565b61030981610647565b6103138383610651565b50505050565b60008051602061094983398151915261033181610647565b60005b82518110156103dc57600260019054906101000a90046001600160a01b03166001600160a01b0316636a6278428483815181106103735761037361090b565b60200260200101516040518263ffffffff1660e01b815260040161039791906108f7565b600060405180830381600087803b1580156103b157600080fd5b505af11580156103c5573d6000803e3d6000fd5b5050505080806103d490610921565b915050610334565b505050565b6001600160a01b038116331461040a5760405163334bd91960e11b815260040160405180910390fd5b6103dc82826106e3565b600061041f81610647565b478061046b5760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b60448201526064015b60405180910390fd5b604051600090339083908381818185875af1925050503d80600081146104ad576040519150601f19603f3d011682016040523d82523d6000602084013e6104b2565b606091505b50509050806103dc5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610462565b660110d9316ec0003481146105495760405162461bcd60e51b8152602060048201526015602482015274125b98dbdc9c9958dd08185b5bdd5b9d081cd95b9d605a1b6044820152606401610462565b50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61057e826102e2565b61058781610647565b61031383836106e3565b6000805160206109498339815191526105a981610647565b60005b82518110156103dc5760035483516001600160a01b0390911690636a627842908590849081106105de576105de61090b565b60200260200101516040518263ffffffff1660e01b815260040161060291906108f7565b600060405180830381600087803b15801561061c57600080fd5b505af1158015610630573d6000803e3d6000fd5b50505050808061063f90610921565b9150506105ac565b610549813361074e565b600061065d838361054c565b6106db576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106933390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102dc565b5060006102dc565b60006106ef838361054c565b156106db576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102dc565b610758828261054c565b6107875760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610462565b5050565b60006020828403121561079d57600080fd5b81356001600160e01b0319811681146107b557600080fd5b9392505050565b6000602082840312156107ce57600080fd5b5035919050565b80356001600160a01b03811681146107ec57600080fd5b919050565b6000806040838503121561080457600080fd5b82359150610814602084016107d5565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561084657600080fd5b82356001600160401b038082111561085d57600080fd5b818501915085601f83011261087157600080fd5b8135818111156108835761088361081d565b8060051b604051601f19603f830116810181811085821117156108a8576108a861081d565b6040529182528482019250838101850191888311156108c657600080fd5b938501935b828510156108eb576108dc856107d5565b845293850193928501926108cb565b98975050505050505050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052603260045260246000fd5b60006001820161094157634e487b7160e01b600052601160045260246000fd5b506001019056fe0914bb97ca83e85ef385857d9d418f187ff630589e0c9f44db92976d8e4519cba264697066735822122047e9953d9b9ab145a81743eab0fad6ef84dd5768ed9d8858ad0b9a5c42dd248d64736f6c63430008140033" + }, + { + "address": "0xdc38c5af436b9652225f92c370a011c673fa7ba5", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a457c2d711610066578063a457c2d71461036b578063a9059cbb146103a4578063dd62ed3e146103dd578063f2fde38b1461041857610100565b8063715018a6146102f15780638da5cb5b146102f957806395d89b411461032a5780639dc29fac1461033257610100565b8063313ce567116100d3578063313ce5671461022c578063395093511461024a57806340c10f191461028357806370a08231146102be57610100565b806306fdde0314610105578063095ea7b31461018257806318160ddd146101cf57806323b872dd146101e9575b600080fd5b61010d61044b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101bb6004803603604081101561019857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104ff565b604080519115158252519081900360200190f35b6101d761051c565b60408051918252519081900360200190f35b6101bb600480360360608110156101ff57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610522565b6102346105c3565b6040805160ff9092168252519081900360200190f35b6101bb6004803603604081101561026057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105cc565b6102bc6004803603604081101561029957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610627565b005b6101d7600480360360208110156102d457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106dd565b6102bc610705565b610301610821565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61010d610842565b6102bc6004803603604081101561034857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108c1565b6101bb6004803603604081101561038157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610973565b6101bb600480360360408110156103ba57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109e8565b6101d7600480360360408110156103f357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166109fc565b6102bc6004803603602081101561042e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a34565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104f55780601f106104ca576101008083540402835291602001916104f5565b820191906000526020600020905b8154815290600101906020018083116104d857829003601f168201915b5050505050905090565b600061051361050c610be0565b8484610be4565b50600192915050565b60025490565b600061052f848484610d2b565b6105b98461053b610be0565b6105b4856040518060600160405280602881526020016113d26028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020526040812090610586610be0565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610efb565b610be4565b5060019392505050565b60055460ff1690565b60006105136105d9610be0565b846105b485600160006105ea610be0565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c168152925290205490610fac565b61062f610be0565b73ffffffffffffffffffffffffffffffffffffffff1661064d610821565b73ffffffffffffffffffffffffffffffffffffffff16146106cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106d98282611027565b5050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61070d610be0565b73ffffffffffffffffffffffffffffffffffffffff1661072b610821565b73ffffffffffffffffffffffffffffffffffffffff16146107ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600554604051600091610100900473ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff169055565b600554610100900473ffffffffffffffffffffffffffffffffffffffff1690565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104f55780601f106104ca576101008083540402835291602001916104f5565b6108c9610be0565b73ffffffffffffffffffffffffffffffffffffffff166108e7610821565b73ffffffffffffffffffffffffffffffffffffffff161461096957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106d98282611158565b6000610513610980610be0565b846105b48560405180606001604052806025815260200161146460259139600160006109aa610be0565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610efb565b60006105136109f5610be0565b8484610d2b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b610a3c610be0565b73ffffffffffffffffffffffffffffffffffffffff16610a5a610821565b73ffffffffffffffffffffffffffffffffffffffff1614610adc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806113646026913960400191505060405180910390fd5b60055460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610c50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806114406024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061141b6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061131f6023913960400191505060405180910390fd5b610e0e8383836112a2565b610e58816040518060600160405280602681526020016113ac6026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610efb565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610e949082610fac565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610fa4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f69578181015183820152602001610f51565b50505050905090810190601f168015610f965780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561102057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166110a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6110b5600083836112a2565b6002546110c29082610fac565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020546110f59082610fac565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806113fa6021913960400191505060405180910390fd5b6111d0826000836112a2565b61121a816040518060600160405280602281526020016113426022913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610efb565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205560025461124d90826112a7565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b505050565b60008282111561131857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dc0b3783223eeab2eb0fda514e03bff9f5ae07b96cb39eb0c6a9a44f0a1e4d7064736f6c634300060c0033" + }, + { + "address": "0x95c1a4db2008d38abd9fcfec67b33a9eeeae2fda", + "nonce": 14, + "balance": "0x000000000000000000000000000000000000000000000000000bf36ee13c9225", + "code": "0x" + }, + { + "address": "0x9e2d2b19c0bcf1f68b0d922f7c5dd844c0c9e382", + "nonce": 32, + "balance": "0x0000000000000000000000000000000000000000000000000018e61996fd7df8", + "code": "0x" + }, + { + "address": "0x8a12743ea754fe9cdfb72b17e2f2806648337ea1", + "nonce": 65, + "balance": "0x000000000000000000000000000000000000000000000000000980f0f72f7805", + "code": "0x" + }, + { + "address": "0x678aa4bf4e210cf2166753e054d5b7c31cc7fa86", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061021c5760003560e01c806304e45aaf1461029157806309b81346146102ba57806311ed56c9146102cd57806312210e8a146102ed5780631c58db4f146102f55780631f0464d11461030857806323a69e751461032857806324dec034146103485780633068c5541461036857806342712a671461037b5780634659a4941461038e578063472b43f3146103a157806349404b7c146103b45780634aa4a4fc146103c75780635023b4df146103e9578063571ac8b0146103fc57806357c799611461040f5780635ae401dc14610424578063639d71a91461043757806368e0d4e11461044a578063715018a61461045f578063791b98bc146104745780638da5cb5b146104895780639b2c0a371461049e578063a4a78f0c146104b1578063ab3fdd50146104c4578063ac9650d8146104d7578063b3a2af13146104ea578063b4554231146104fd578063b4c4e55514610510578063b858183f14610523578063b85aa7af14610536578063c2e3140a1461054b578063c45a01551461055e578063cab372ce14610573578063d4ef38de14610586578063d5f3948814610599578063dee00f35146105ae578063df2ab5bb146105db578063e0e189a0146105ee578063e90a182f14610601578063efdeed8e14610614578063f100b20514610634578063f25801a714610647578063f2d5d56b14610667578063f2fde38b1461067a578063f3995c671461069a5761028c565b3661028c57336001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f161461028a576040805162461bcd60e51b81526020600482015260096024820152684e6f7420574554483960b81b604482015290519081900360640190fd5b005b600080fd5b6102a461029f36600461545e565b6106ad565b6040516102b19190615cd2565b60405180910390f35b6102a46102c83660046154f8565b610819565b6102e06102db366004615551565b6108fd565b6040516102b19190615b6d565b61028a610a60565b61028a6103033660046156d3565b610a72565b61031b6103163660046151c8565b610ae9565b6040516102b19190615b0d565b34801561033457600080fd5b5061028a6103433660046152d6565b610b43565b34801561035457600080fd5b5061028a610363366004614da4565b610ce0565b61028a610376366004614ed4565b610dcf565b6102a46103893660046157bf565b610de2565b61028a61039c366004614f1d565b61107a565b6102a46103af3660046157bf565b611108565b61028a6103c2366004615703565b6114a4565b3480156103d357600080fd5b506103dc61161e565b6040516102b19190615962565b6102a46103f736600461552f565b611642565b61028a61040a366004614d65565b61173c565b34801561041b57600080fd5b506103dc611754565b61031b6104323660046151c8565b611763565b61028a610445366004614d65565b6117b8565b34801561045657600080fd5b506103dc6117cc565b34801561046b57600080fd5b5061028a6117f0565b34801561048057600080fd5b506103dc61188a565b34801561049557600080fd5b506103dc6118ae565b61028a6104ac366004615727565b6118bd565b61028a6104bf366004614f1d565b611a87565b61028a6104d2366004614d65565b611b18565b61031b6104e5366004615010565b611b38565b6102e06104f8366004615211565b611c80565b6102a461050b366004614f7d565b611d37565b6102a461051e366004614f7d565b611fc1565b6102a46105313660046153b9565b6121f1565b34801561054257600080fd5b506103dc6123a1565b61028a610559366004614f1d565b6123b0565b34801561056a57600080fd5b506103dc61243f565b61028a610581366004614d65565b611b2c565b61028a610594366004615765565b612463565b3480156105a557600080fd5b506103dc61246f565b3480156105ba57600080fd5b506105ce6105c9366004614e0a565b612493565b6040516102b19190615b80565b61028a6105e9366004614e35565b6125bb565b61028a6105fc366004614e76565b612693565b61028a61060f366004614e0a565b6127ba565b34801561062057600080fd5b5061028a61062f36600461504f565b6127c9565b6102e0610642366004615540565b6127ee565b34801561065357600080fd5b5061028a610662366004615243565b612870565b61028a610675366004614e0a565b612894565b34801561068657600080fd5b5061028a610695366004614d65565b6128a0565b61028a6106a8366004614f1d565b612990565b6000600260015414156106f5576040805162461bcd60e51b815260206004820152601f6024820152600080516020615e41833981519152604482015290519081900360640190fd5b6002600155608082015160009061078d575081516040516370a0823160e01b81526001916001600160a01b0316906370a0823190610737903090600401615962565b60206040518083038186803b15801561074f57600080fd5b505afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906156eb565b60808401525b6107fc836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107cb93929190615900565b6040516020818303038152906040528152602001866107ea57336107ec565b305b6001600160a01b03169052612a02565b91508260a0015182101561080f57600080fd5b5060018055919050565b600060026001541415610861576040805162461bcd60e51b815260206004820152601f6024820152600080516020615e41833981519152604482015290519081900360640190fd5b60026001556108d86040830180359061087d9060208601614d65565b60408051808201909152600090806108958880615d39565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152612c1d565b505060025460608201358111156108ee57600080fd5b60001960025560018055919050565b604080516101608101909152606090610a5890634418b22b60e11b90806109276020870187614d65565b6001600160a01b031681526020018560200160208101906109489190614d65565b6001600160a01b0316815260200161096660608701604088016156b9565b62ffffff1681526020016109806080870160608801615297565b60020b815260200161099860a0870160808801615297565b60020b81526020908101906109b8906109b390880188614d65565b612e61565b81526020016109d38660200160208101906109b39190614d65565b815260a0860135602082015260c086013560408201526060016109fd610100870160e08801614d65565b6001600160a01b03168152602001600019815250604051602401610a219190615bd8565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611c80565b90505b919050565b4715610a7057610a703347612ee0565b565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610acd57600080fd5b505af1158015610ae1573d6000803e3d6000fd5b505050505050565b60608380600143034014610b30576040805162461bcd60e51b8152602060048201526009602482015268084d8dec6d6d0c2e6d60bb1b604482015290519081900360640190fd5b610b3a8484611b38565b95945050505050565b6000841380610b525750600083135b610b5b57600080fd5b6000610b6982840184615563565b90506000806000610b7d8460000151612fcf565b9250925092507313f4ea83d0bd40e75c8222255bc855a974568dd4638bdb19257f00000000000000000000000041ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c98585856040518563ffffffff1660e01b8152600401610be094939291906159b3565b60206040518083038186803b158015610bf857600080fd5b505af4158015610c0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c309190614d88565b5060008060008a13610c5757846001600160a01b0316846001600160a01b03161089610c6e565b836001600160a01b0316856001600160a01b0316108a5b915091508115610c8d57610c888587602001513384613000565b610cd4565b8551610c9890613190565b15610cbd578551610ca890613198565b8652610cb78133600089612c1d565b50610cd4565b80600281905550610cd48487602001513384613000565b50505050505050505050565b610ce86131af565b6001600160a01b0316610cf96118ae565b6001600160a01b031614610d42576040805162461bcd60e51b81526020600482018190526024820152600080516020615e87833981519152604482015290519081900360640190fd5b6001600160a01b03821615801590610d6257506001600160a01b03811615155b610d6b57600080fd5b600380546001600160a01b038085166001600160a01b0319928316179283905560048054858316931692909217918290556040519181169216907f26e41379222b54b0470031bc11852ad23058ffb8983f7cc0e18257d6f7afca9d90600090a35050565b610ddc8484338585612693565b50505050565b600060026001541415610e2a576040805162461bcd60e51b815260206004820152601f6024820152600080516020615e41833981519152604482015290519081900360640190fd5b6002600155600084848281610e3b57fe5b9050602002016020810190610e509190614d65565b604051630c90945960e11b81529091507313f4ea83d0bd40e75c8222255bc855a974568dd49063192128b290610eb0907f00000000000000000000000002a84c1b3bbd7401a5f7fa98a384ebc70bb5749e908b908a908a90600401615adb565b60006040518083038186803b158015610ec857600080fd5b505af4158015610edc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f04919081019061511f565b600081518110610f1057fe5b6020026020010151915085821115610f2757600080fd5b610ffe81337313f4ea83d0bd40e75c8222255bc855a974568dd4636d91c0e27f00000000000000000000000002a84c1b3bbd7401a5f7fa98a384ebc70bb5749e868b8b6001818110610f7557fe5b9050602002016020810190610f8a9190614d65565b6040518463ffffffff1660e01b8152600401610fa893929190615990565b60206040518083038186803b158015610fc057600080fd5b505af4158015610fd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff89190614d88565b85613000565b6001600160a01b038316600114156110185733925061102e565b6001600160a01b0383166002141561102e573092505b61106c8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792506131b3915050565b506001805595945050505050565b604080516323f2ebc360e21b815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b1580156110f457600080fd5b505af1158015610cd4573d6000803e3d6000fd5b600060026001541415611150576040805162461bcd60e51b815260206004820152601f6024820152600080516020615e41833981519152604482015290519081900360640190fd5b600260015560008484828161116157fe5b90506020020160208101906111769190614d65565b905060008585600019810181811061118a57fe5b905060200201602081019061119f9190614d65565b905060008861122b57506040516370a0823160e01b81526001906001600160a01b038416906370a08231906111d8903090600401615962565b60206040518083038186803b1580156111f057600080fd5b505afa158015611204573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122891906156eb565b98505b61130e838261123a573361123c565b305b7313f4ea83d0bd40e75c8222255bc855a974568dd4636d91c0e27f00000000000000000000000002a84c1b3bbd7401a5f7fa98a384ebc70bb5749e888d8d600181811061128557fe5b905060200201602081019061129a9190614d65565b6040518463ffffffff1660e01b81526004016112b893929190615990565b60206040518083038186803b1580156112d057600080fd5b505af41580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113089190614d88565b8c613000565b6001600160a01b038516600114156113285733945061133e565b6001600160a01b0385166002141561133e573094505b6040516370a0823160e01b81526000906001600160a01b038416906370a082319061136d908990600401615962565b60206040518083038186803b15801561138557600080fd5b505afa158015611399573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bd91906156eb565b90506113fd8888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a92506131b3915050565b61148381846001600160a01b03166370a08231896040518263ffffffff1660e01b815260040161142d9190615962565b60206040518083038186803b15801561144557600080fd5b505afa158015611459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147d91906156eb565b90613635565b94508885101561149257600080fd5b50506001805550909695505050505050565b60007f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561151357600080fd5b505afa158015611527573d6000803e3d6000fd5b505050506040513d602081101561153d57600080fd5b505190508281101561158b576040805162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e7420574554483960701b604482015290519081900360640190fd5b8015611619577f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156115f757600080fd5b505af115801561160b573d6000803e3d6000fd5b505050506116198282612ee0565b505050565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b60006002600154141561168a576040805162461bcd60e51b815260206004820152601f6024820152600080516020615e41833981519152604482015290519081900360640190fd5b6002600155611729608083018035906116a69060608601614d65565b6116b660e0860160c08701614d65565b60405180604001604052808760200160208101906116d49190614d65565b6116e460608a0160408b016156b9565b6116f160208b018b614d65565b60405160200161170393929190615900565b6040516020818303038152906040528152602001336001600160a01b0316815250612c1d565b90508160a001358111156108ee57600080fd5b61174881600019613645565b61175157600080fd5b50565b6003546001600160a01b031681565b6060838061176f613739565b1115610b30576040805162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b604482015290519081900360640190fd5b6117c3816000613645565b61173c57600080fd5b7f00000000000000000000000002a84c1b3bbd7401a5f7fa98a384ebc70bb5749e81565b6117f86131af565b6001600160a01b03166118096118ae565b6001600160a01b031614611852576040805162461bcd60e51b81526020600482018190526024820152600080516020615e87833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020615ea7833981519152908390a3600080546001600160a01b0319169055565b7f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f436481565b6000546001600160a01b031690565b6000821180156118ce575060648211155b6118d757600080fd5b60007f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561194657600080fd5b505afa15801561195a573d6000803e3d6000fd5b505050506040513d602081101561197057600080fd5b50519050848110156119be576040805162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e7420574554483960701b604482015290519081900360640190fd5b8015611a80577f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611a2a57600080fd5b505af1158015611a3e573d6000803e3d6000fd5b505050506000612710611a5a858461373d90919063ffffffff16565b81611a6157fe5b0490508015611a7457611a748382612ee0565b610ae185828403612ee0565b5050505050565b60408051636eb1769f60e11b81523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b158015611ad857600080fd5b505afa158015611aec573d6000803e3d6000fd5b505050506040513d6020811015611b0257600080fd5b50511015610ae157610ae186868686868661107a565b611b23816000613645565b611b2c57600080fd5b61174881600119613645565b6060816001600160401b0381118015611b5057600080fd5b50604051908082528060200260200182016040528015611b8457816020015b6060815260200190600190039081611b6f5790505b50905060005b82811015611c795760008030868685818110611ba257fe5b9050602002810190611bb49190615d39565b604051611bc2929190615936565b600060405180830381855af49150503d8060008114611bfd576040519150601f19603f3d011682016040523d82523d6000602084013e611c02565b606091505b509150915081611c5757604481511015611c1b57600080fd5b60048101905080806020019051810190611c359190615350565b60405162461bcd60e51b8152600401611c4e9190615b6d565b60405180910390fd5b80848481518110611c6457fe5b60209081029190910101525050600101611b8a565b5092915050565b606060007f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43646001600160a01b031683604051611cbc9190615946565b6000604051808303816000865af19150503d8060008114611cf9576040519150601f19603f3d011682016040523d82523d6000602084013e611cfe565b606091505b509250905080611d3157604482511015611d1757600080fd5b60048201915081806020019051810190611c359190615350565b50919050565b600060026001541415611d7f576040805162461bcd60e51b815260206004820152601f6024820152600080516020615e41833981519152604482015290519081900360640190fd5b6002600155600088888281611d9057fe5b9050602002016020810190611da59190614d65565b9050600089896000198101818110611db957fe5b9050602002016020810190611dce9190614d65565b9050600086611e5a57506040516370a0823160e01b81526001906001600160a01b038416906370a0823190611e07903090600401615962565b60206040518083038186803b158015611e1f57600080fd5b505afa158015611e33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5791906156eb565b96505b80611e6b57611e6b8333308a613000565b611ed88b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d91829185019084908082843760009201919091525061376192505050565b6040516370a0823160e01b81526001600160a01b038316906370a0823190611f04903090600401615962565b60206040518083038186803b158015611f1c57600080fd5b505afa158015611f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5491906156eb565b935085841015611f6357600080fd5b6001600160a01b03851660011415611f7d57339450611f93565b6001600160a01b03851660021415611f93573094505b6001600160a01b0385163014611faf57611faf82308787613000565b50506001805550979650505050505050565b600060026001541415612009576040805162461bcd60e51b815260206004820152601f6024820152600080516020615e41833981519152604482015290519081900360640190fd5b600260015560035460048054604051635923cab360e01b81527313f4ea83d0bd40e75c8222255bc855a974568dd493635923cab393612061936001600160a01b03928316939216918e918e918e918e918e9101615a0b565b60006040518083038186803b15801561207957600080fd5b505af415801561208d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120b5919081019061511f565b6000815181106120c157fe5b60200260200101519050828111156120d857600080fd5b612105888860008181106120e857fe5b90506020020160208101906120fd9190614d65565b333084613000565b61217288888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808c0282810182019093528b82529093508b92508a91829185019084908082843760009201919091525061376192505050565b6001600160a01b0382166001141561218c573391506121a2565b6001600160a01b038216600214156121a2573091505b6001600160a01b03821630146121e2576121e2888860001981018181106121c557fe5b90506020020160208101906121da9190614d65565b308487613000565b60018055979650505050505050565b600060026001541415612239576040805162461bcd60e51b815260206004820152601f6024820152600080516020615e41833981519152604482015290519081900360640190fd5b600260015560408201516000906122e55760019050600061225d8460000151612fcf565b50506040516370a0823160e01b81529091506001600160a01b038216906370a082319061228e903090600401615962565b60206040518083038186803b1580156122a657600080fd5b505afa1580156122ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122de91906156eb565b6040850152505b6000816122f257336122f4565b305b90505b60006123068560000151613190565b905061235285604001518261231f578660200151612321565b305b6000604051806040016040528061233b8b60000151613972565b8152602001876001600160a01b0316815250612a02565b6040860152801561237257845130925061236b90613198565b855261237f565b8460400151935050612385565b506122f7565b836060015183101561239657600080fd5b505060018055919050565b6004546001600160a01b031681565b60408051636eb1769f60e11b8152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156123ff57600080fd5b505afa158015612413573d6000803e3d6000fd5b505050506040513d602081101561242957600080fd5b50511015610ae157610ae1868686868686612990565b7f0000000000000000000000000bfbcf9fa4f9c56b0f40a671ad40e0805a09186581565b611619833384846118bd565b7f00000000000000000000000041ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c981565b600081836001600160a01b031663dd62ed3e307f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43646040518363ffffffff1660e01b81526004016124e4929190615976565b60206040518083038186803b1580156124fc57600080fd5b505afa158015612510573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253491906156eb565b10612541575060006125b5565b61254d83600019613645565b1561255a575060016125b5565b61256683600119613645565b15612573575060026125b5565b61257e836000613645565b61258757600080fd5b61259383600019613645565b156125a0575060036125b5565b6125ac83600119613645565b1561028c575060045b92915050565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561260a57600080fd5b505afa15801561261e573d6000803e3d6000fd5b505050506040513d602081101561263457600080fd5b5051905082811015612682576040805162461bcd60e51b815260206004820152601260248201527124b739bab33334b1b4b2b73a103a37b5b2b760711b604482015290519081900360640190fd5b8015610ddc57610ddc848383613981565b6000821180156126a4575060648211155b6126ad57600080fd5b6000856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156126fc57600080fd5b505afa158015612710573d6000803e3d6000fd5b505050506040513d602081101561272657600080fd5b5051905084811015612774576040805162461bcd60e51b815260206004820152601260248201527124b739bab33334b1b4b2b73a103a37b5b2b760711b604482015290519081900360640190fd5b8015610ae1576000612710612789838661373d565b8161279057fe5b04905080156127a4576127a4878483613981565b6127b18786838503613981565b50505050505050565b6127c58282336125bb565b5050565b6000806127d7868685613ac8565b915091508362ffffff1681830312610ae157600080fd5b6060610a5863219f5d1760e01b6040518060c00160405280856040013581526020016128268660000160208101906109b39190614d65565b81526020016128418660200160208101906109b39190614d65565b81526020018560600135815260200185608001358152602001600019815250604051602401610a219190615b94565b60008061287d8584613cbe565b915091508362ffffff1681830312611a8057600080fd5b6127c582333084613e95565b6128a86131af565b6001600160a01b03166128b96118ae565b6001600160a01b031614612902576040805162461bcd60e51b81526020600482018190526024820152600080516020615e87833981519152604482015290519081900360640190fd5b6001600160a01b0381166129475760405162461bcd60e51b8152600401808060200182810382526026815260200180615e616026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020615ea783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040805163d505accf60e01b8152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b1580156110f457600080fd5b60006001600160a01b03841660011415612a1e57339350612a34565b6001600160a01b03841660021415612a34573093505b6000806000612a468560000151612fcf565b9250925092506000826001600160a01b0316846001600160a01b03161090506000807313f4ea83d0bd40e75c8222255bc855a974568dd4634e6c8ed87f00000000000000000000000041ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c98888886040518563ffffffff1660e01b8152600401612ac594939291906159b3565b60206040518083038186803b158015612add57600080fd5b505af4158015612af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b159190614d88565b6001600160a01b031663128acb088b85612b2e8f613fe5565b6001600160a01b038e1615612b43578d612b69565b87612b625773fffd8963efd1fc6a506488495d951d5263988d25612b69565b6401000276a45b8d604051602001612b7a9190615c86565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612ba9959493929190615a7c565b6040805180830381600087803b158015612bc257600080fd5b505af1158015612bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfa91906152b3565b9150915082612c095781612c0b565b805b6000039b9a5050505050505050505050565b60006001600160a01b03841660011415612c3957339350612c4f565b6001600160a01b03841660021415612c4f573093505b6000806000612c618560000151612fcf565b9250925092506000836001600160a01b0316836001600160a01b03161090506000807313f4ea83d0bd40e75c8222255bc855a974568dd4634e6c8ed87f00000000000000000000000041ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c98789886040518563ffffffff1660e01b8152600401612ce094939291906159b3565b60206040518083038186803b158015612cf857600080fd5b505af4158015612d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d309190614d88565b6001600160a01b031663128acb088b85612d498f613fe5565b6000036001600160a01b038e1615612d61578d612d87565b87612d805773fffd8963efd1fc6a506488495d951d5263988d25612d87565b6401000276a45b8d604051602001612d989190615c86565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612dc7959493929190615a7c565b6040805180830381600087803b158015612de057600080fd5b505af1158015612df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1891906152b3565b91509150600083612e2d578183600003612e33565b82826000035b90985090506001600160a01b038a16612e52578b8114612e5257600080fd5b50505050505050949350505050565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190612e90903090600401615962565b60206040518083038186803b158015612ea857600080fd5b505afa158015612ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906156eb565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310612f2c5780518252601f199092019160209182019101612f0d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612f8e576040519150601f19603f3d011682016040523d82523d6000602084013e612f93565b606091505b5050905080611619576040805162461bcd60e51b815260206004820152600360248201526253544560e81b604482015290519081900360640190fd5b60008080612fdd8482613ffb565b9250612fea8460146140ab565b9050612ff7846017613ffb565b91509193909250565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316846001600160a01b03161480156130415750804710155b15613163577f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130a157600080fd5b505af11580156130b5573d6000803e3d6000fd5b50505050507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561313157600080fd5b505af1158015613145573d6000803e3d6000fd5b505050506040513d602081101561315b57600080fd5b50610ddc9050565b6001600160a01b0383163014156131845761317f848383613981565b610ddc565b610ddc84848484613e95565b516042111590565b8051606090610a5890839060179060161901614152565b3390565b60005b6001835103811015611619576000808483815181106131d157fe5b60200260200101518584600101815181106131e857fe5b60200260200101519150915060007313f4ea83d0bd40e75c8222255bc855a974568dd463544caa5684846040518363ffffffff1660e01b815260040161322f929190615976565b604080518083038186803b15801561324657600080fd5b505af415801561325a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327e9190614ddc565b50905060007313f4ea83d0bd40e75c8222255bc855a974568dd4636d91c0e27f00000000000000000000000002a84c1b3bbd7401a5f7fa98a384ebc70bb5749e86866040518463ffffffff1660e01b81526004016132de93929190615990565b60206040518083038186803b1580156132f657600080fd5b505af415801561330a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332e9190614d88565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561336f57600080fd5b505afa158015613383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a791906155f2565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b0316146133e15782846133e4565b83835b91509150613418828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040161142d9190615962565b604051630153543560e21b81529096507313f4ea83d0bd40e75c8222255bc855a974568dd49063054d50d49061345690899086908690600401615d08565b60206040518083038186803b15801561346e57600080fd5b505af4158015613482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a691906156eb565b945050505050600080856001600160a01b0316886001600160a01b0316146134d0578260006134d4565b6000835b91509150600060028c51038a106134eb578a6135ac565b7313f4ea83d0bd40e75c8222255bc855a974568dd4636d91c0e27f00000000000000000000000002a84c1b3bbd7401a5f7fa98a384ebc70bb5749e8a8f8e6002018151811061353657fe5b60200260200101516040518463ffffffff1660e01b815260040161355c93929190615990565b60206040518083038186803b15801561357457600080fd5b505af4158015613588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ac9190614d88565b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f906135ee9086908690869060248101615cdb565b600060405180830381600087803b15801561360857600080fd5b505af115801561361c573d6000803e3d6000fd5b50506001909b019a506131b69950505050505050505050565b808203828111156125b557600080fd5b6000806000846001600160a01b031663095ea7b360e01b7f00000000000000000000000046a15b0b27311cedf172ab29e4f4766fbe7f43648660405160240161368f929190615ac2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516136cd9190615946565b6000604051808303816000865af19150503d806000811461370a576040519150601f19603f3d011682016040523d82523d6000602084013e61370f565b606091505b5091509150818015610b3a575080511580610b3a575080806020019051810190610b3a91906151ae565b4290565b60008215806137585750508181028183828161375557fe5b04145b6125b557600080fd5b805160018351031461377257600080fd5b60005b81518110156116195760008084838151811061378d57fe5b60200260200101518584600101815181106137a457fe5b60200260200101519150915060008060007313f4ea83d0bd40e75c8222255bc855a974568dd463b735aecd600360009054906101000a90046001600160a01b031687878b8b815181106137f357fe5b60200260200101516040518563ffffffff1660e01b815260040161381a94939291906159e1565b60606040518083038186803b15801561383257600080fd5b505af4158015613846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386a9190615792565b9250925092506000856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161389e9190615962565b60206040518083038186803b1580156138b657600080fd5b505afa1580156138ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ee91906156eb565b90506138fb8683836142a3565b604051630b68372160e31b81526001600160a01b03831690635b41b9089061392e90879087908690600090600401615d1e565b600060405180830381600087803b15801561394857600080fd5b505af115801561395c573d6000803e3d6000fd5b5050600190980197506137759650505050505050565b6060610a58826000602b614152565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b602083106139fd5780518252601f1990920191602091820191016139de565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613a5f576040519150601f19603f3d011682016040523d82523d6000602084013e613a64565b606091505b5091509150818015613a92575080511580613a925750808060200190516020811015613a8f57600080fd5b50515b611a80576040805162461bcd60e51b815260206004820152600260248201526114d560f21b604482015290519081900360640190fd5b6000808351855114613ad957600080fd5b600085516001600160401b0381118015613af257600080fd5b50604051908082528060200260200182016040528015613b2c57816020015b613b19614bb8565b815260200190600190039081613b115790505b509050600086516001600160401b0381118015613b4857600080fd5b50604051908082528060200260200182016040528015613b8257816020015b613b6f614bb8565b815260200190600190039081613b675790505b50905060005b8751811015613c9757600080613bb18a8481518110613ba357fe5b602002602001015189613cbe565b91509150613bbe826143ea565b858481518110613bca57fe5b60200260200101516000019060020b908160020b81525050613beb816143ea565b848481518110613bf757fe5b60200260200101516000019060020b908160020b81525050888381518110613c1b57fe5b6020026020010151858481518110613c2f57fe5b6020026020010151602001906001600160801b031690816001600160801b031681525050888381518110613c5f57fe5b6020026020010151848481518110613c7357fe5b6020908102919091018101516001600160801b039092169101525050600101613b88565b50613ca1826143fb565b60020b9350613caf816143fb565b60020b92505050935093915050565b600080600080613ccd866144b7565b90506000805b82811015613e76576000806000613ce98b612fcf565b9250925092506000613cfc8484846144c4565b905060008063ffffffff8d16613d2557613d1583614502565b600291820b9350900b9050613dba565b613d2f838e614719565b8160020b91505080925050826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015613d7357600080fd5b505afa158015613d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dab919061562d565b50505060029290920b93505050505b60018903871415613de157846001600160a01b0316866001600160a01b0316109950613df0565b613dea8e613198565b9d508597505b6000871580613e435750866001600160a01b0316896001600160a01b031610613e2d57866001600160a01b0316866001600160a01b031610613e43565b856001600160a01b0316876001600160a01b0316105b90508015613e58579b82019b9a81019a613e63565b828d039c50818c039b505b505060019095019450613cd39350505050565b5082613e8b5760001985029450600019840293505b5050509250929050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b60208310613f195780518252601f199092019160209182019101613efa565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613f7b576040519150601f19603f3d011682016040523d82523d6000602084013e613f80565b606091505b5091509150818015613fae575080511580613fae5750808060200190516020811015613fab57600080fd5b50515b610ae1576040805162461bcd60e51b815260206004820152600360248201526229aa2360e91b604482015290519081900360640190fd5b6000600160ff1b8210613ff757600080fd5b5090565b60008182601401101561404a576040805162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b604482015290519081900360640190fd5b816014018351101561409b576040805162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b604482015290519081900360640190fd5b500160200151600160601b900490565b6000818260030110156140f9576040805162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b604482015290519081900360640190fd5b8160030183511015614149576040805162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b604482015290519081900360640190fd5b50016003015190565b60608182601f01101561419d576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b8282840110156141e5576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b81830184511015614231576040805162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015290519081900360640190fd5b606082158015614250576040519150600082526020820160405261429a565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614289578051835260209283019201614271565b5050858452601f01601f1916604052505b50949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1781529251825160009485949389169392918291908083835b6020831061431f5780518252601f199092019160209182019101614300565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614381576040519150601f19603f3d011682016040523d82523d6000602084013e614386565b606091505b50915091508180156143b45750805115806143b457508080602001905160208110156143b157600080fd5b50515b611a80576040805162461bcd60e51b8152602060048201526002602482015261534160f01b604482015290519081900360640190fd5b80600281900b8114610a5b57600080fd5b6000806000805b845181101561447e5784818151811061441757fe5b6020026020010151602001516001600160801b031685828151811061443857fe5b60200260200101516000015160020b028301925084818151811061445857fe5b6020026020010151602001516001600160801b0316820191508080600101915050614402565b5080828161448857fe5b0592506000821280156144a3575080828161449f57fe5b0715155b156144b057600019909201915b5050919050565b5160176013199091010490565b60006144fa7f00000000000000000000000041ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c96144f5868686614a83565b614ad9565b949350505050565b600080600080846001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561454157600080fd5b505afa158015614555573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614579919061562d565b50939750919550935050600161ffff8416119150614598905057600080fd5b600080866001600160a01b031663252c09d7856040518263ffffffff1660e01b81526004016145c79190615cc3565b60806040518083038186803b1580156145df57600080fd5b505afa1580156145f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146179190615819565b505091509150614625613739565b63ffffffff168263ffffffff161461463f57849550614710565b60008361ffff1660018561ffff168761ffff1601038161465b57fe5b06905060008060008a6001600160a01b031663252c09d7856040518263ffffffff1660e01b815260040161468f9190615cd2565b60806040518083038186803b1580156146a757600080fd5b505afa1580156146bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146df9190615819565b93505092509250806146f057600080fd5b82860363ffffffff811683870360060b8161470757fe5b059a5050505050505b50505050915091565b60008063ffffffff8316614759576040805162461bcd60e51b8152602060048201526002602482015261042560f41b604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061478857fe5b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106147b157fe5b63ffffffff90921660209283029190910182015260405163883bdbfd60e01b81526004810182815283516024830152835160009384936001600160a01b038b169363883bdbfd9388939192839260449091019185820191028083838b5b8381101561482657818101518382015260200161480e565b505050509050019250505060006040518083038186803b15801561484957600080fd5b505afa15801561485d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561488657600080fd5b8101908080516040519392919084600160201b8211156148a557600080fd5b9083019060208201858111156148ba57600080fd5b82518660208202830111600160201b821117156148d657600080fd5b82525081516020918201928201910280838360005b838110156149035781810151838201526020016148eb565b5050505090500160405260200180516040519392919084600160201b82111561492b57600080fd5b90830190602082018581111561494057600080fd5b82518660208202830111600160201b8211171561495c57600080fd5b82525081516020918201928201910280838360005b83811015614989578181015183820152602001614971565b50505050905001604052505050915091506000826000815181106149a957fe5b6020026020010151836001815181106149be57fe5b60200260200101510390506000826000815181106149d857fe5b6020026020010151836001815181106149ed57fe5b60200260200101510390508763ffffffff168260060b81614a0a57fe5b05965060008260060b128015614a3457508763ffffffff168260060b81614a2d57fe5b0760060b15155b15614a4157600019909601955b63ffffffff88166001600160a01b0302600160201b600160c01b03602083901b166001600160c01b03821681614a7357fe5b0496505050505050509250929050565b614a8b614bcf565b826001600160a01b0316846001600160a01b03161115614aa9579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600081602001516001600160a01b031682600001516001600160a01b031610614b0157600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301206001600160f81b031960a085015294901b6001600160601b03191660a183015260b58201939093527f6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e260d5808301919091528251808303909101815260f5909101909152805191012090565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610a5b81615e0a565b60008083601f840112614c0b578182fd5b5081356001600160401b03811115614c21578182fd5b6020830191508360208083028501011115614c3b57600080fd5b9250929050565b600082601f830112614c52578081fd5b81356020614c67614c6283615da0565b615d7d565b8281528181019085830183850287018401881015614c83578586fd5b855b85811015614cb55781356001600160801b0381168114614ca3578788fd5b84529284019290840190600101614c85565b5090979650505050505050565b80518015158114610a5b57600080fd5b600082601f830112614ce2578081fd5b8135614cf0614c6282615dbd565b818152846020838601011115614d04578283fd5b816020850160208301379081016020019190915292915050565b80516001600160701b0381168114610a5b57600080fd5b805161ffff81168114610a5b57600080fd5b803562ffffff81168114610a5b57600080fd5b8035610a5b81615e2e565b600060208284031215614d76578081fd5b8135614d8181615e0a565b9392505050565b600060208284031215614d99578081fd5b8151614d8181615e0a565b60008060408385031215614db6578081fd5b8235614dc181615e0a565b91506020830135614dd181615e0a565b809150509250929050565b60008060408385031215614dee578182fd5b8251614df981615e0a565b6020840151909250614dd181615e0a565b60008060408385031215614e1c578182fd5b8235614e2781615e0a565b946020939093013593505050565b600080600060608486031215614e49578081fd5b8335614e5481615e0a565b9250602084013591506040840135614e6b81615e0a565b809150509250925092565b600080600080600060a08688031215614e8d578283fd5b8535614e9881615e0a565b9450602086013593506040860135614eaf81615e0a565b9250606086013591506080860135614ec681615e0a565b809150509295509295909350565b60008060008060808587031215614ee9578182fd5b8435614ef481615e0a565b935060208501359250604085013591506060850135614f1281615e0a565b939692955090935050565b60008060008060008060c08789031215614f35578384fd5b8635614f4081615e0a565b95506020870135945060408701359350606087013560ff81168114614f63578182fd5b9598949750929560808101359460a0909101359350915050565b600080600080600080600060a0888a031215614f97578485fd5b87356001600160401b0380821115614fad578687fd5b614fb98b838c01614bfa565b909950975060208a0135915080821115614fd1578687fd5b50614fde8a828b01614bfa565b9096509450506040880135925060608801359150608088013561500081615e0a565b8091505092959891949750929550565b60008060208385031215615022578182fd5b82356001600160401b03811115615037578283fd5b61504385828601614bfa565b90969095509350505050565b60008060008060808587031215615064578182fd5b84356001600160401b038082111561507a578384fd5b818701915087601f83011261508d578384fd5b8135602061509d614c6283615da0565b82815281810190858301885b858110156150d2576150c08e8684358b0101614cd2565b845292840192908401906001016150a9565b509099505050880135925050808211156150ea578384fd5b506150f787828801614c42565b93505061510660408601614d47565b915061511460608601614d5a565b905092959194509250565b60006020808385031215615131578182fd5b82516001600160401b03811115615146578283fd5b8301601f81018513615156578283fd5b8051615164614c6282615da0565b8181528381019083850185840285018601891015615180578687fd5b8694505b838510156151a2578051835260019490940193918501918501615184565b50979650505050505050565b6000602082840312156151bf578081fd5b614d8182614cc2565b6000806000604084860312156151dc578081fd5b8335925060208401356001600160401b038111156151f8578182fd5b61520486828701614bfa565b9497909650939450505050565b600060208284031215615222578081fd5b81356001600160401b03811115615237578182fd5b6144fa84828501614cd2565b600080600060608486031215615257578081fd5b83356001600160401b0381111561526c578182fd5b61527886828701614cd2565b93505061528760208501614d47565b91506040840135614e6b81615e2e565b6000602082840312156152a8578081fd5b8135614d8181615e1f565b600080604083850312156152c5578182fd5b505080516020909101519092909150565b600080600080606085870312156152eb578182fd5b843593506020850135925060408501356001600160401b038082111561530f578384fd5b818701915087601f830112615322578384fd5b813581811115615330578485fd5b886020828501011115615341578485fd5b95989497505060200194505050565b600060208284031215615361578081fd5b81516001600160401b03811115615376578182fd5b8201601f81018413615386578182fd5b8051615394614c6282615dbd565b8181528560208385010111156153a8578384fd5b610b3a826020830160208601615dde565b6000602082840312156153ca578081fd5b81356001600160401b03808211156153e0578283fd5b90830190608082860312156153f3578283fd5b60405160808101818110838211171561540857fe5b604052823582811115615419578485fd5b61542587828601614cd2565b8252506020830135915061543882615e0a565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e0828403121561546f578081fd5b60405160e081016001600160401b038111828210171561548b57fe5b60405261549783614bef565b81526154a560208401614bef565b60208201526154b660408401614d47565b60408201526154c760608401614bef565b60608201526080830135608082015260a083013560a08201526154ec60c08401614bef565b60c08201529392505050565b600060208284031215615509578081fd5b81356001600160401b0381111561551e578182fd5b820160808185031215614d81578182fd5b600060e08284031215611d31578081fd5b600060a08284031215611d31578081fd5b60006101008284031215611d31578081fd5b600060208284031215615574578081fd5b81356001600160401b038082111561558a578283fd5b908301906040828603121561559d578283fd5b6040516040810181811083821117156155b257fe5b6040528235828111156155c3578485fd5b6155cf87828601614cd2565b825250602083013592506155e283615e0a565b6020810192909252509392505050565b600080600060608486031215615606578081fd5b61560f84614d1e565b925061561d60208501614d1e565b91506040840151614e6b81615e2e565b600080600080600080600060e0888a031215615647578081fd5b875161565281615e0a565b602089015190975061566381615e1f565b955061567160408901614d35565b945061567f60608901614d35565b935061568d60808901614d35565b925060a088015161569d81615e2e565b91506156ab60c08901614cc2565b905092959891949750929550565b6000602082840312156156ca578081fd5b614d8182614d47565b6000602082840312156156e4578081fd5b5035919050565b6000602082840312156156fc578081fd5b5051919050565b60008060408385031215615715578182fd5b823591506020830135614dd181615e0a565b6000806000806080858703121561573c578182fd5b84359350602085013561574e81615e0a565b9250604085013591506060850135614f1281615e0a565b600080600060608486031215615779578081fd5b83359250602084013591506040840135614e6b81615e0a565b6000806000606084860312156157a6578081fd5b83519250602084015191506040840151614e6b81615e0a565b6000806000806000608086880312156157d6578283fd5b853594506020860135935060408601356001600160401b038111156157f9578384fd5b61580588828901614bfa565b9094509250506060860135614ec681615e0a565b6000806000806080858703121561582e578182fd5b845161583981615e2e565b8094505060208501518060060b8114615850578283fd5b604086015190935061586181615e0a565b915061511460608601614cc2565b6001600160a01b03169052565b60008284526020808501945082825b858110156158b957813561589e81615e0a565b6001600160a01b03168752958201959082019060010161588b565b509495945050505050565b600081518084526158dc816020860160208601615dde565b601f01601f19169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b6001600160601b0319908116825260e89390931b6001600160e81b0319166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615958818460208701615dde565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b03948516815292841660208401529216604082015262ffffff909116606082015260800190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b0388811682528716602082015260a060408201819052600090615a38908301878961587c565b82810360608401528481526001600160fb1b03851115615a56578182fd5b602085028087602084013701602001908152608091909101919091529695505050505050565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090615ab7908301846158c4565b979650505050505050565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038616825284602083015260606040830152615b0360608301848661587c565b9695505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615b6057603f19888603018452615b4e8583516158c4565b94509285019290850190600101615b32565b5092979650505050505050565b600060208252614d8160208301846158c4565b6020810160058310615b8e57fe5b91905290565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615bec82845161586f565b6020830151615bfe602084018261586f565b506040830151615c1160408401826158f7565b506060830151615c2460608401826158f0565b506080830151615c3760808401826158f0565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615c758285018261586f565b505061014092830151919092015290565b600060208252825160406020840152615ca260608401826158c4565b602094909401516001600160a01b0316604093909301929092525090919050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015260018060a01b038416604083015260806060830152615b0360808301846158c4565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b6000808335601e19843603018112615d4f578283fd5b8301803591506001600160401b03821115615d68578283fd5b602001915036819003821315614c3b57600080fd5b6040518181016001600160401b0381118282101715615d9857fe5b604052919050565b60006001600160401b03821115615db357fe5b5060209081020190565b60006001600160401b03821115615dd057fe5b50601f01601f191660200190565b60005b83811015615df9578181015183820152602001615de1565b83811115610ddc5750506000910152565b6001600160a01b038116811461175157600080fd5b8060020b811461175157600080fd5b63ffffffff8116811461175157600080fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220fbd6d6a2fac7601efa5d04159d67bacc4a267da3aa285d7b367ed6b49e906ad064736f6c63430007060033" + }, + { + "address": "0x6c98070554315f62313dd1bdd934d3ed2849f319", + "nonce": 3, + "balance": "0x0000000000000000000000000000000000000000000000000032d72ae40a9ea4", + "code": "0x" + }, + { + "address": "0xfd83a44f6df860721d26aedbd2cbf8cf25f91718", + "nonce": 3, + "balance": "0x0000000000000000000000000000000000000000000000000014d35a8b7932e1", + "code": "0x" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000037ad325f7817f20", + "code": "0x60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e8383604051806060016040528060278152602001610268602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b6060600080856001600160a01b0316856040516100e09190610218565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091506101318683838761013b565b9695505050505050565b606083156101ac5782516101a5576001600160a01b0385163b6101a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b50816101b6565b6101b683836101be565b949350505050565b8151156101ce5781518083602001fd5b8060405162461bcd60e51b815260040161019c9190610234565b60005b838110156102035781810151838201526020016101eb565b83811115610212576000848401525b50505050565b6000825161022a8184602087016101e8565b9190910192915050565b60208152600082518060208401526102538160408501602087016101e8565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ff8e6f2d761d58b3bd984933269e01a7ff1f70a460b808056daa4cff1ee8ab6964736f6c63430008090033" + }, + { + "address": "0x9174695d8e014105f70fb489146923217288f2d7", + "nonce": 231, + "balance": "0x0000000000000000000000000000000000000000000000000003b1ca1457cf67", + "code": "0x" + }, + { + "address": "0x10ce6c28cc09c18340edb8b10ea303e2d06600e6", + "nonce": 8, + "balance": "0x0000000000000000000000000000000000000000000000000026e9e576636464", + "code": "0x" + }, + { + "address": "0x96836669d8bfa3f756fdf20c5b71367f9586fbd7", + "nonce": 19, + "balance": "0x000000000000000000000000000000000000000000000000003a973b6c443d1c", + "code": "0x" + }, + { + "address": "0x4d3a380a03f3a18a5dc44b01119839d8674a552e", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033" + }, + { + "address": "0xc180ee6429f8bd2e5a9ba98da21fcadb783786d2", + "nonce": 6, + "balance": "0x0000000000000000000000000000000000000000000000000032eb8042dfb9c3", + "code": "0x" + }, + { + "address": "0x6a1ff5f05ddaf8b61f1734daa6f9a42f16e3368e", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436101561001257600080fd5b60003560e01c806306fdde0314610277578063095ea7b3146102725780630b1150de1461026d578063165cad8d1461026857806318160ddd1461026357806319706b381461025e5780631f8d04dc1461025957806320e5fe3e1461025457806323b872dd1461024f578063282b4c861461024a578063313ce5671461024557806334c0b46b1461024057806336f2fa681461023b578063376fc5bf1461023657806338706d1f146102315780633a4b66f11461022c578063412330bc1461022757806348313a81146102225780634a3d6bda1461021d578063580f3ffd146102185780636b35b93d1461021357806370a082311461020e578063781c38001461020957806395d89b41146102045780639acaa0f4146101ff5780639c77ac51146101fa578063a5b39cfb146101f5578063a9059cbb146101f0578063a9c1f2f1146101eb578063cb629009146101e6578063ce98f8aa146101e1578063dd62ed3e146101dc578063e5a70ef7146101d7578063e8ef761c146101d2578063ec378808146101cd578063f032cb2a146101c8578063f38a02d0146101c35763ff7bd55b146101be57600080fd5b611f45565b611ed4565b611eb8565b6116aa565b61165a565b611630565b61158e565b61155e565b6114e1565b6114bd565b61142c565b6113e1565b6113ba565b611355565b611292565b611194565b61116d565b6110fe565b6110ae565b611092565b61106c565b611048565b61100d565b610ff1565b610eb3565b610d49565b610d0e565b610cd0565b610ca9565b610b33565b61088b565b610639565b6105a3565b610580565b61053b565b610502565b61042f565b61030d565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176102b457604052565b61027c565b919082519283825260005b8481106102e5575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102c4565b90602061030a9281815201906102b9565b90565b34610419576000806003193601126104165760405190806002549060019180831c9280821692831561040c575b60209283861085146103f85785885260208801949081156103d7575060011461037e575b61037a8761036e81890382610292565b604051918291826102f9565b0390f35b600260005294509192917f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b8386106103c6575050509101905061036e8261037a388061035e565b8054858701529482019481016103aa565b60ff191685525050505090151560051b01905061036e8261037a388061035e565b602482634e487b7160e01b81526022600452fd5b93607f169361033a565b80fd5b600080fd5b6001600160a01b0381160361041957565b346104195760403660031901126104195760043561044c8161041e565b6001600160a01b036024359133600052600560205282610483826040600020906001600160a01b0316600052602052604060002090565b5560405192835216907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b90815180825260208080930193019160005b8281106104dd575050505090565b8351855293810193928101926001016104cf565b90602061030a9281815201906104bd565b346104195760203660031901126104195730600435036104195761037a61052761419b565b6040519182916020835260208301906104bd565b3461041957600036600319011261041957602060005260016020527f0000000000000000000000006a1ff5f05ddaf8b61f1734daa6f9a42f16e3368e60405260606000f35b3461041957600036600319011261041957602061059b61215b565b604051908152f35b346104195760003660031901126104195763ffffffff60065460201c16633b9aca00908181029181830414901517156106125761037a9061036e6105e5613f06565b91610604604051938492602084015260408084015260608301906104bd565b03601f198101835282610292565b612125565b6020906003190112610419576004356001600160801b03811681036104195790565b346104195761064736610617565b6001600160a01b037f00000000000000000000000073fa525c642baaaecb304614fa38614845649ef8163303610419576106c9907fffffffff00000000000000000000000000000000ffffffffffffffffffffffff7bffffffffffffffffffffffffffffffff0000000000000000000000006006549260601b16911617600655565b600680546bffffffff000000000000000019164260401b6bffffffff000000000000000016179055005b005b67ffffffffffffffff81116102b45760051b60200190565b81601f8201121561041957803591610724836106f5565b926107326040519485610292565b808452602092838086019260051b820101928311610419578301905b82821061075c575050505090565b813580600f0b810361041957815290830190830161074e565b9181601f840112156104195782359167ffffffffffffffff8311610419576020838186019501011161041957565b6080600319820112610419576004356107bb8161041e565b916024359167ffffffffffffffff91828411610419578160238501121561041957836004013593838511610419578260248660051b8301011161041957602401939260443581811161041957836108149160040161070d565b926064359182116104195761082b91600401610775565b9091565b90815180825260208080930193019160005b82811061084f575050505090565b8351600f0b85529381019392810192600101610841565b909161087d61030a9360408452604084019061082f565b91602081840391015261082f565b3461041957610a7661089c366107a3565b50506108d86001600160a01b039593959492947f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc753516331461226c565b6108e18461231c565b93610a136109456108f18361231c565b9761091d7f0000000000000000000000006a1ff5f05ddaf8b61f1734daa6f9a42f16e3368e8583612443565b937f000000000000000000000000cc22f6aa610d1b2a0e89ef228079cb3e1831b1d191612443565b610a066109fd6109f76109eb6109d861099e6109696000546001600160801b031690565b6109906109898d6001600160a01b03166000526001602052604060002090565b5460801c90565b6001600160801b0391031690565b6109cb6109be8c6001600160a01b03166000526001602052604060002090565b546001600160801b031690565b026001600160801b031690565b6001600160801b03633b9aca0091160490565b6001600160801b031690565b600f0b90565b600003600f0b90565b90879060010160051b0152565b60018101610a85575b5050610a4d610a336000546001600160801b031690565b916001600160a01b03166000526001602052604060002090565b906001600160801b036fffffffffffffffffffffffffffffffff1983549260801b169116179055565b61037a60405192839283610866565b610b2c91610b1e610add610ad8610ad3610ab86109eb6109be8a6001600160a01b03166000526001602052604060002090565b946001870160051b0194610acd8651600f0b90565b9061234e565b6123f4565b6123db565b610afa866001600160a01b03166000526001602052604060002090565b906001600160801b03166fffffffffffffffffffffffffffffffff19825416179055565b5190859060010160051b0152565b3880610a1c565b3461041957606036600319011261041957600435610b508161041e565b602435610b5c8161041e565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef604435916001600160a01b0390817f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc7535163303610c21575b610bd1856001600160a01b03166000526004602052604060002090565b610bdc85825461214e565b9055610bfb816001600160a01b03166000526004602052604060002090565b805485019055604051938452811693169180602081015b0390a360405160018152602090f35b8185166000526005602052610c4d336040600020906001600160a01b0316600052602052604060002090565b548460018201610c5f575b5050610bb4565b610c689161214e565b610ca133610c89886001600160a01b03166000526005602052604060002090565b906001600160a01b0316600052602052604060002090565b553884610c58565b3461041957602036600319011261041957602061059b600435610ccb8161041e565b6124d7565b3461041957600036600319011261041957602060405160ff7f0000000000000000000000000000000000000000000000000000000000000012168152f35b346104195760003660031901126104195761037a610d2a6122f1565b30610d3482614279565b526040519182916020835260208301906104bd565b3461041957604036600319011261041957610e366020610d7f610d73610d73610d73610d736121b6565b6001600160a01b031690565b6040517f000000000000000000000000be6c6a389b82306e88d74d1692b67285a9db9a476001600160a01b03168382019081526000357fffffffff0000000000000000000000000000000000000000000000000000000016602082015290610dea8160248401610604565b5190206040517f9be2a884000000000000000000000000000000000000000000000000000000008152600481019190915233602482015230604482015292839190829081906064820190565b03915afa8015610eae57610e5291600091610e80575b50612590565b6006805467ffffffffffffffff191660043560201b67ffffffff00000000161763ffffffff60243516179055005b610ea1915060203d8111610ea7575b610e998183610292565b810190612578565b38610e4c565b503d610e8f565b61256c565b3461041957604036600319011261041957610f10600435610ed38161041e565b6001600160a01b03610f08817f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc753516331461226c565b1630146125db565b610fc7610f5a610f54610f47610f42602435610f3d610f3460065463ffffffff1690565b63ffffffff1690565b6129a1565b61213b565b610f4f61429c565b61275b565b60201c90565b61037a610f656122f1565b9130610f7084614279565b52610fe3610f7c6122f1565b610fd5610f876122f1565b91610fb3610fac610fa7610fa2610f9c6122f1565b98612877565b612865565b612798565b8460200152565b6040519788976080895260808901906104bd565b90878203602089015261082f565b90858203604087015261082f565b90838203606085015261082f565b346104195760003660031901126104195761037a610527613e17565b346104195760003660031901126104195760206040517f0000000000000000000000006a1ff5f05ddaf8b61f1734daa6f9a42f16e3368e8152f35b346104195760003660031901126104195761037a610527611067613e17565b612a3e565b3461041957600036600319011261041957602060065463ffffffff60405191831c168152f35b346104195760003660031901126104195761037a61052761419b565b34610419576110bc36610617565b6001600160a01b037f00000000000000000000000073fa525c642baaaecb304614fa38614845649ef8163303610419576001600160801b036106f3911661263b565b34610419576000366003190112610419576111436001600160a01b037f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc753516331461226c565b600680547fffffffff00000000000000000000000000000000ffffffff00000000ffffffff169055005b3461041957602036600319011261041957602061059b60043561118f8161041e565b612068565b34610419576020366003190112610419576004356111dc6001600160a01b037f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc753516331461226c565b806111e357005b61124761124161123c7f0000000000000000000000006a1ff5f05ddaf8b61f1734daa6f9a42f16e3368e6000527f20d5098a3c99e6b89aee8408e5c9d4848f880876c30649f160b0945802e1c862602052604060002090565b612221565b60801c90565b908115801561125257005b61128d57633b9aca006fffffffffffffffffffffffffffffffff1991600054936001600160801b039283920204168184160116911617600055005b6122b7565b34610419576000806003193601126104165760405190806003549060019180831c9280821692831561134b575b60209283861085146103f85785885260208801949081156103d757506001146112f25761037a8761036e81890382610292565b600360005294509192917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b83861061133a575050509101905061036e8261037a388061035e565b80548587015294820194810161131e565b93607f16936112bf565b34610419576020366003190112610419576004356113728161041e565b6000906001600160a01b031630036113b5575061138d61429c565b63ffffffff60065416640100000000030260201c5b6020600052600160205260405260606000f35b6113a2565b3461041957600036600319011261041957602060065463ffffffff6040519160401c168152f35b34610419576020366003190112610419576001600160a01b036004356114068161041e565b1660005260016020526001600160801b0360406000205416602060005260405260606000f35b34610419576040366003190112610419576004356114498161041e565b602435903360005260046020526040600020908154838103908111610612576001600160a01b039255169081600052600460205260406000208181540190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405180610c123394829190602083019252565b3461041957600036600319011261041957602063ffffffff60065416604051908152f35b346104195760003660031901126104195761154861123c7f0000000000000000000000006a1ff5f05ddaf8b61f1734daa6f9a42f16e3368e6000527f20d5098a3c99e6b89aee8408e5c9d4848f880876c30649f160b0945802e1c862602052604060002090565b60801c6020600052600160205260405260606000f35b346104195760203660031901126104195761157a60043561041e565b602060005260016020523060405260606000f35b34610419576040366003190112610419576004356115ab8161041e565b602435906115b88261041e565b6000916001600160a01b03918282167f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc753584160361160057505050506020600019604051908152f35b60209361162a936040921681526005855220906001600160a01b0316600052602052604060002090565b5461059b565b346104195760003660031901126104195760206001600160801b0360065460601c16604051908152f35b346104195761166836610617565b6001600160a01b037f00000000000000000000000073fa525c642baaaecb304614fa38614845649ef8163303610419576001600160801b036106f391166125e2565b34610419576116b8366107a3565b9193945050611c225760065463ffffffff808260201c169142828260401c1614611e9b575b50600019916116f0611067368689612695565b6116f98561231c565b966000905b868210611e185750506000908192670de0b6b3a764000090600019871415809a81809c611df2575b611cec575b908a9089670de0b6b3a7640000938c868b6000968a8c89978a965b8710611b375750505050505050509161178e670de0b6b3a764000092611796959484891015600014611af7575083925b8091611acc575b506117898115156125db565b61276e565b920204612cc7565b93909460005b8a811061196657505050505050508580610a76969790611950575b15611903575061183a91611834610ad8926001611888960160051b8901926117e86117e38551600f0b90565b61263b565b426117ff610f3460065463ffffffff9060401c1690565b0361188d575b5061182e61182682610f4f6109eb6006546001600160801b039060601c1690565b9351600f0b90565b9061214e565b906122e7565b7fffffffff00000000000000000000000000000000ffffffffffffffffffffffff7bffffffffffffffffffffffffffffffff0000000000000000000000006006549260601b16911617600655565b61231c565b6118fd906118d06f3b9aca000000000000000000000000007fffffffff00000000000000000000000000000000ffffffffffffffffffffffff6006541617600655565b42166bffffffff00000000000000006006549160401b16906bffffffff0000000000000000191617600655565b38611805565b9150508061193a575b611917575b5061231c565b61192f6109f76001611934930160051b860151612798565b6125e2565b38611911565b5060006001820160051b850151600f0b1261190c565b5060006001850160051b880151600f0b136117b7565b80868d8288888f898f8f8b906001611a3b9c0160051b946f7fffffffffffffffffffffffffffffff61199b878c0151600f0b90565b03611abc578814611a8c57505050611a1d611a18611a2a95610fa2956119d56119d0611a369c97611a2497019788519061275b565b6127e3565b90600092670de0b6b3a764000081119081600014611a6a578851915b15611a6357611a0890611a03856126f2565b612838565b818111611a40575b5050506127d6565b612877565b9151612877565b9061277f565b919060010160051b0152565b6126e3565b61179c565b611a59929394500391633b9aca00908103908302612838565b03908f3880611a10565b5082611a08565b611a86611a788a518361275b565b670de0b6b3a7640000900490565b916119f1565b611a369950611a2a9650610fa79550610fa29450611a24929350611a78611ab692611a189261275b565b91612877565b50505050505050505050506126e3565b90507f000000000000000000000000000000000000000000000000000000000000000290033861177d565b611b3190847f00000000000000000000000000000000000000000000000000000000000000020303633b9aca00898b8803020486036128f2565b92611776565b600191600593838901851b97611b5089880151600f0b90565b906f7fffffffffffffffffffffffffffffff8203611ba1575050505093505050508203611b92575b50611b82906126e3565b868f8f908f8c8f93918d92611746565b82015190940193611b82611b78565b90899f9a999291600093868c14600014611c3a5750505050505001901b0151611be291611bd291600f0b90036123f4565b8c670de0b6b3a7640000026122e7565b965b662386f26fc100008811801590611c27575b611c2257611c1a611a78611b8294611c14611a36948801518c6128f2565b9061275b565b9715156125db565b612c74565b5068056bc75e2d63100000881015611bf6565b939850945094509450611cae9650611c5d919a818b0151019a01928351016123f4565b938093670de0b6b3a7640000811180600014611cd7578451925b5015611cd057611c9190670de0b6b3a764000087026122e7565b818111611cb4575b505050519103670de0b6b3a7640000026122e7565b96611be4565b633b9aca00919003909102633b9ac9ff010491508b3880611c99565b5084611c91565b8451670de0b6b3a76400009083020492611c77565b9295509350611cf9614015565b9690959150868b8a8415611dd157505050600090815b8b8310611d4957611d4392507f000000000000000000000000000000000000000000000000000000000000000203906122e7565b9261172b565b908c611d5f6001850160051b80920151600f0b90565b6f7fffffffffffffffffffffffffffffff8114611daf5790611d9f60019392670de0b6b3a7640000611d96848d01928351016123f4565b029051906122e7565b908801510201925b019190611d0f565b508b84929403611dc3575b50600190611da7565b860151909101906001611dba565b60010160051b0151611d439290611dec90600f0b83036123f4565b026122e7565b60018a0160051b8c0151600f0b6f7fffffffffffffffffffffffffffffff149250611726565b909460058987821b840135308103611e6a5750505050611e5f7f0000000000000000000000000000000000000000000000000000000000000002868a9060010160051b0152565b6001855b01906116fe565b91611e80611e96928a611a2a6001979c96612b46565b828401901b85015183016001830160051b860152565b611e63565b916001600160801b03633b9aca00929360601c16020490386116dd565b346104195760003660031901126104195761037a610527613f06565b3461041957600036600319011261041957604051604081019080821067ffffffffffffffff8311176102b45761037a91604052600481527f63706d6d0000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906102b9565b346104195760008060031936011261041657604051907f4a3d6bda00000000000000000000000000000000000000000000000000000000825280826004816001600160a01b037f0000000000000000000000006a1ff5f05ddaf8b61f1734daa6f9a42f16e3368e165afa908115610eae578091611fcb575b6040518061037a84826104f1565b90503d8082843e611fdc8184610292565b820160209283818303126120605780519067ffffffffffffffff8211612064570181601f8201121561206057805190612014826106f5565b936120226040519586610292565b828552858086019360051b83010193841161041657508401905b8282106120515750505061037a915038611fbd565b8151815290840190840161203c565b8280fd5b8380fd5b6001600160a01b0390817f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc753516803314159081612119575b506120c6576120c291506001600160a01b03166000526004602052604060002090565b5490565b1660005260046020526040600020546001600160801b0361211361123c306000527f20d5098a3c99e6b89aee8408e5c9d4848f880876c30649f160b0945802e1c862602052604060002090565b16900390565b9050828216143861209f565b634e487b7160e01b600052601160045260246000fd5b9064010000000091820391821161061257565b9190820391821161061257565b6001600160801b0361219961123c306000527f20d5098a3c99e6b89aee8408e5c9d4848f880876c30649f160b0945802e1c862602052604060002090565b166dffffffffffffffffffffffffffff9081039081116106125790565b6000631c99585960e21b81527f0ebf818546cf436ba3e823ca878b84c3d55a00f566d51f4b07ec1ab90533db4e6004526020816024816001600160a01b037f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc7535165afa15610416575190565b600090631c99585960e21b82526004526020816024816001600160a01b037f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc7535165afa15610416575190565b1561227357565b606460405162461bcd60e51b815260206004820152600a60248201527f6f6e6c79207661756c74000000000000000000000000000000000000000000006044820152fd5b634e487b7160e01b600052601260045260246000fd5b801561128d576ec097ce7bc90715b34b9f10000000000490565b811561128d570490565b604051906040820182811067ffffffffffffffff8211176102b4576040526001825260203681840137565b90612326826106f5565b6123336040519182610292565b8281528092612344601f19916106f5565b0190602036910137565b9190916000838201938412911290801582169115161761061257565b1561237157565b608460405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152fd5b6001600160801b03906123f08282111561236a565b1690565b600081126123ff5790565b606460405162461bcd60e51b815260206004820152602060248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152fd5b909182156124ce57600090600019938481019081116106125793929193905b8185111561247257505050905090565b6001858303811c8601958660051b850135838114600014612497575050505050505090565b958381989394959697106000146124b5575050015b93929190612462565b9250935080156124c65701916124ac565b505050505090565b50505060001990565b61252d61123c7f0000000000000000000000006a1ff5f05ddaf8b61f1734daa6f9a42f16e3368e6000527f20d5098a3c99e6b89aee8408e5c9d4848f880876c30649f160b0945802e1c862602052604060002090565b60801c908115612565576001600160a01b03166000526001602052670de0b6b3a76400006001600160801b0360406000205416020490565b5050600090565b6040513d6000823e3d90fd5b90816020910312610419575180151581036104195790565b1561259757565b606460405162461bcd60e51b815260206004820152600c60248201527f756e617574686f72697a656400000000000000000000000000000000000000006044820152fd5b1561041957565b60405190815260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206001600160a01b037f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc75351693a3565b6000906040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206001600160a01b037f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc75351692a3565b92916126a0826106f5565b916126ae6040519384610292565b829481845260208094019160051b810192831161041957905b8282106126d45750505050565b813581529083019083016126c7565b60001981146106125760010190565b90670de0b6b3a76400009182810292818404149015171561061257565b90670de0b6b3a7640000918083029283040361061257565b906127109182810292818404149015171561061257565b90670de0b6b3a76586a09182810292818404149015171561061257565b8181029291811591840414171561061257565b600160ff1b81146106125760000390565b8181039291600013801582851316918412161761061257565b600f0b7fffffffffffffffffffffffffffffffff8000000000000000000000000000000081146106125760000390565b906001820180921161061257565b9190820180921161061257565b806127ee5750600090565b600019810190811161061257670de0b6b3a76400009004600181018091116106125790565b801561128d576ec097ce7bc90715b34b9f0fffffffff04600181018091116106125790565b80612844575050600090565b600019810190811161061257811561128d5704600181018091116106125790565b9061287582600f0b92831461236a565b565b6001600160ff1b0381116128885790565b608460405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e206160448201527f6e20696e743235360000000000000000000000000000000000000000000000006064820152fd5b90919080156129895760018381161561297a5781935b811c805b61291557505050565b8280029280840403610419576706f05b59d3b200009283810190811061041957670de0b6b3a764000080910493838316612954575b5050811c8061290c565b84879293970291858304141585151516610419578101908110610419570493388061294a565b670de0b6b3a764000093612908565b50901561299557600090565b670de0b6b3a764000090565b9091908015612a2957600183811615612a1d5781935b811c805b6129c457505050565b82800292808404036104195763800000009283810190811061041957602090811c938383166129f8575b5050811c806129bb565b848793970292858404141585151516610419578201918210610419571c9338806129ee565b640100000000936129b7565b509015612a3557600090565b64010000000090565b8051612a498161231c565b9160005b828110612ae357505081516372656164835260059080821b6020850181600401601c87016001600160a01b037f0000000000000000000000001d0188c4b276a09366d05d6be06af61a73bc7535165afa1561041957835260005b828110612ab45750505090565b80612add612ad16001809401851b8701516001600160801b031690565b6001830160051b870152565b01612aa7565b80612b24612ad1600180940160051b8501516000527f20d5098a3c99e6b89aee8408e5c9d4848f880876c30649f160b0945802e1c862602052604060002090565b01612a4d565b801561128d576ec097ce7bc90715b34b9f0fffffffff81010490565b7f000000000000000000000000b20116ee399f15647bb1eef9a74f6ef3b58bc9518103612b9257507f000000000000000000000000000000000000000000000000000000000000000190565b7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8103612bde57507f000000000000000000000000000000000000000000000000000000000000000190565b7f00000000000000000000000000000000000000000000000000000000000000008103612c2a57507f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000003610419577f000000000000000000000000000000000000000000000000000000000000000090565b366000604051376000806040513690826001600160a01b037f00000000000000000000000073fa525c642baaaecb304614fa38614845649ef8165af13d60006040513e612cc1573d604051fd5b3d604051f35b919080158015612de8575b612dd85760018114612dd3576000198114612dc05760028114612d95576001198114612d4e57612d16612d11612d0b612d1c9495612877565b92612f4b565b613001565b90613217565b9061030a612d34612d2f6119d085612727565b6127c8565b6000818510612d485750612d48818561214e565b936127d6565b50670de0b6b3a7640000612d69612d648461270f565b612df9565b92028280021015612d895761030a612d83600184016122cd565b92612813565b61030a612d83836122cd565b50670de0b6b3a7640000612dab612d648461270f565b920282800210612db9578190565b6001820190565b5061030a612dcd836122cd565b92612b2a565b508190565b50670de0b6b3a764000091508190565b50670de0b6b3a76400008314612cd2565b8015612f335780612ecc612ec5612ebb612eb1612ea7612e9d612e93612e89600161030a9a6000908b60801c80612f27575b508060401c80612f1a575b508060201c80612f0d575b508060101c80612f00575b508060081c80612ef3575b508060041c80612ee6575b508060021c80612ed9575b50821c612ed2575b811c1b612e82818b6122e7565b0160011c90565b612e82818a6122e7565b612e8281896122e7565b612e8281886122e7565b612e8281876122e7565b612e8281866122e7565b612e8281856122e7565b80926122e7565b90612f39565b8101612e75565b6002915091019038612e6d565b6004915091019038612e62565b6008915091019038612e57565b6010915091019038612e4c565b6020915091019038612e41565b6040915091019038612e36565b91505060809038612e2b565b50600090565b9080821015612f46575090565b905090565b7ffffffffffffffff6c6d11716de2a2f8c500cdd19dbc6030cd280cbb9b6b8f0708112612fd0577809392ee8e921d5d073aff322e62439fcf32d7f344649470f908113612f9f57670de0b6b3a76400000290565b602490604051907f9d5810910000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907f99474eeb0000000000000000000000000000000000000000000000000000000082526004820152fd5b600160ff1b811461307f57600081121561307657613021816000036122cd565b906001600160ff1b03821161305057600090600019670de0b6b3a7640000909118131561304c575090565b0390565b6044906040519063d49c26b360e01b8252670de0b6b3a764000060048301526024820152fd5b613021816122cd565b60046040517f9fe2b450000000000000000000000000000000000000000000000000000000008152fd5b90600160ff1b808314908115613136575b5061307f57600082121561312d576130e3826000035b6000831215613126578260000390613140565b916001600160ff1b038311613104576000916000199118131561304c575090565b60405163d49c26b360e01b815260048101919091526024810191909152604490fd5b8290613140565b6130e3826130d0565b90508114386130ba565b670de0b6b3a764000091600019838309928083029283808610950394808603951461320a57828510156131c057908291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b6040517f63a057780000000000000000000000000000000000000000000000000000000081526004810191909152670de0b6b3a76400006024820152604481019290925250606490fd5b50509061030a92506122e7565b80613231575060009061030a5750670de0b6b3a764000090565b90670de0b6b3a7640000808314613283575080613256575050670de0b6b3a764000090565b670de0b6b3a7640000811461327f5761327a9061327561030a93613b57565b613c8e565b6132a3565b5090565b91505090565b801561128d576ec097ce7bc90715b34b9f10000000000590565b60008112156132d25768033dd1780914b97114198112612f33576132c9906000036132a3565b61030a90613289565b680a688906bd8affffff8113613b2657670de0b6b3a764000080604092831b05907780000000000000000000000000000000000000000000000067ff000000000000008316613a09575b66ff0000000000008316613901575b65ff00000000008316613801575b64ff000000008316613709575b63ff0000008316613619575b62ff00008316613531575b61ff008316613451575b60ff831661337a575b02911c60bf031c90565b6080831661343f575b83831661342d575b6020831661341b575b60108316613409575b600883166133f7575b600483166133e5575b600283166133d3575b6001831615613370576801000000000000000102831c613370565b6801000000000000000102831c6133b8565b6801000000000000000302831c6133af565b6801000000000000000602831c6133a6565b6801000000000000000b02831c61339d565b6801000000000000001602831c613394565b6801000000000000002c02831c61338b565b6801000000000000005902831c613383565b618000831661351f575b614000831661350d575b61200083166134fb575b61100083166134e9575b61080083166134d7575b61040083166134c5575b61020083166134b3575b61010083161561336757680100000000000000b102831c613367565b6801000000000000016302831c613497565b680100000000000002c602831c61348d565b6801000000000000058c02831c613483565b68010000000000000b1702831c613479565b6801000000000000162e02831c61346f565b68010000000000002c5d02831c613465565b680100000000000058b902831c61345b565b628000008316613607575b6240000083166135f5575b6220000083166135e3575b6210000083166135d1575b6208000083166135bf575b6204000083166135ad575b62020000831661359b575b6201000083161561335d576801000000000000b17202831c61335d565b680100000000000162e402831c61357e565b6801000000000002c5c802831c613573565b68010000000000058b9102831c613568565b680100000000000b172102831c61355d565b68010000000000162e4302831c613552565b680100000000002c5c8602831c613547565b6801000000000058b90c02831c61353c565b638000000083166136f7575b634000000083166136e5575b632000000083166136d3575b631000000083166136c1575b630800000083166136af575b6304000000831661369d575b6302000000831661368b575b63010000008316156133525768010000000000b1721802831c613352565b6801000000000162e43002831c61366d565b68010000000002c5c86002831c613661565b680100000000058b90c002831c613655565b6801000000000b17217f02831c613649565b680100000000162e42ff02831c61363d565b6801000000002c5c85fe02831c613631565b68010000000058b90bfc02831c613625565b64800000000083166137ef575b64400000000083166137dd575b64200000000083166137cb575b64100000000083166137b9575b64080000000083166137a7575b6404000000008316613795575b6402000000008316613783575b64010000000083161561334657680100000000b17217f802831c613346565b68010000000162e42ff102831c613764565b680100000002c5c85fe302831c613757565b6801000000058b90bfce02831c61374a565b68010000000b17217fbb02831c61373d565b6801000000162e42fff002831c613730565b68010000002c5c8601cc02831c613723565b680100000058b90c0b4902831c613716565b6580000000000083166138ef575b6540000000000083166138dd575b6520000000000083166138cb575b6510000000000083166138b9575b6508000000000083166138a7575b650400000000008316613895575b650200000000008316613883575b65010000000000831615613339576801000000b17218355102831c613339565b680100000162e430e5a202831c613863565b6801000002c5c863b73f02831c613855565b68010000058b90cf1e6e02831c613847565b680100000b1721bcfc9a02831c613839565b68010000162e43f4f83102831c61382b565b680100002c5c89d5ec6d02831c61381d565b6801000058b91b5bc9ae02831c61380f565b668000000000000083166139f7575b664000000000000083166139e5575b662000000000000083166139d3575b661000000000000083166139c1575b660800000000000083166139af575b6604000000000000831661399d575b6602000000000000831661398b575b660100000000000083161561332b5768010000b17255775c0402831c61332b565b6801000162e525ee054702831c61396a565b68010002c5cc37da949202831c61395b565b680100058ba01fb9f96d02831c61394c565b6801000b175effdc76ba02831c61393d565b680100162f3904051fa102831c61392e565b6801002c605e2e8cec5002831c61391f565b68010058c86da1c09ea202831c613910565b6780000000000000008316613b07575b6740000000000000008316613af5575b6720000000000000008316613ae3575b6710000000000000008316613ad1575b6708000000000000008316613abf575b6704000000000000008316613aad575b6702000000000000008316613a9b575b67010000000000000083161561331c57680100b1afa5abcbed6102831c61331c565b68010163da9fb33356d802831c613a79565b680102c9a3e778060ee702831c613a69565b6801059b0d31585743ae02831c613a59565b68010b5586cf9890f62a02831c613a49565b6801172b83c7d517adce02831c613a39565b6801306fe0a31b7152df02831c613a29565b5077b504f333f9de648480000000000000000000000000000000613a19565b602490604051907f0360d0280000000000000000000000000000000000000000000000000000000082526004820152fd5b80600080831315613c5c57670de0b6b3a764000092838112613c4757506001925b613be58184056001600160801b03811160071b90811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c9060ff821160031b91821c92600f841160021b93841c94600160038711811b96871c11961717171717171790565b81810293811d90828214613c3c57506706f05b59d3b20000905b838213613c0e57505050500290565b808391020590671bc16d674ec80000821215613c2e575b60011d90613bff565b809194019360011d90613c25565b925050929150020290565b600019939250613c5690613289565b91613b78565b6040517f059b101b00000000000000000000000000000000000000000000000000000000815260048101849052602490fd5b90600160ff1b808314908115613d5e575b50613d34576000821215613d2b57613cc8826000035b6000831215613d24578260000390613d68565b916001600160ff1b038311613ce9576000916000199118131561304c575090565b6040517f120b5b4300000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152604490fd5b8290613d68565b613cc882613cb5565b60046040517fa6070c25000000000000000000000000000000000000000000000000000000008152fd5b9050811438613c9f565b90919060001983820983820291828083109203918083039214613e0657670de0b6b3a76400009081831015613dcf57947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a764000090049150565b7f00000000000000000000000000000000000000000000000000000000000000026001810180821161061257613e4e60039161231c565b913060208401527f000000000000000000000000b20116ee399f15647bb1eef9a74f6ef3b58bc95160408401527feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee606084015260028111613edb575b11613eb25790565b7f000000000000000000000000000000000000000000000000000000000000000060a082015290565b7f00000000000000000000000000000000000000000000000000000000000000006080840152613eaa565b7f00000000000000000000000000000000000000000000000000000000000000026001810180821161061257613f3d60039161231c565b917f000000000000000000000000000000000000000000000000000000000000000260208401527f000000000000000000000000000000000000000000000000000000000000000160408401527f0000000000000000000000000000000000000000000000000000000000000001606084015260028111613fea575b11613fc15790565b7f000000000000000000000000000000000000000000000000000000000000000060a082015290565b7f00000000000000000000000000000000000000000000000000000000000000006080840152613fb9565b614020611067613e17565b60027f00000000000000000000000000000000000000000000000000000000000000021480614152575b61410a57614056613f06565b60019160005b82518410156140a45761409c600191610acd83870160051b61409661408d61408887848a015101612f4b565b613b57565b91880151612f4b565b90613c8e565b93019261405c565b6140f49350610ad392506140e6915061327a906140e07f0000000000000000000000000000000000000000000000000000000000000002612f4b565b906130a9565b670de0b6b3a7640000900590565b90614104612d2f6119d08461273e565b60009291565b9060408201906001825101600180602061412c60608801948386510102612df9565b960151945101915101028380021060001461414b576001830191929190565b8291929190565b507f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000011461404a565b7f000000000000000000000000000000000000000000000000000000000000000260036141c78261231c565b917f000000000000000000000000b20116ee399f15647bb1eef9a74f6ef3b58bc95160208401527feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60408401526002811161424e575b116142255790565b7f0000000000000000000000000000000000000000000000000000000000000000608082015290565b7f0000000000000000000000000000000000000000000000000000000000000000606084015261421d565b8051156142865760200190565b634e487b7160e01b600052603260045260246000fd5b6142a461215b565b6142ac614015565b50919050808210156142bf575050600090565b8103908111610612579056fea26469706673582212208850ad90341bcdeb57fc714250dca4fb136e61a0ee9976a646beb82a09aeedea64736f6c63430008130033" + }, + { + "address": "0x79c309bdda16976b90f9f21a8dfbd11e719ed24c", + "nonce": 4, + "balance": "0x00000000000000000000000000000000000000000000000000048be6cf65aa54", + "code": "0x" + }, + { + "address": "0x8cd632d842154c4e1aff44cde01384cf73e4d2ae", + "nonce": 19, + "balance": "0x000000000000000000000000000000000000000000000000000902cac8809097", + "code": "0x" + }, + { + "address": "0xc253c51cf4204d7d5da9bec2b39bcbbf1c524bad", + "nonce": 55, + "balance": "0x0000000000000000000000000000000000000000000000000015f9be251e92e3", + "code": "0x" + }, + { + "address": "0x70bf27bbb562a9b21fe6eaf2b7832c476691a39f", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea2646970667358221220d0232cfa81216c3e4973e570f043b57ccb69ae4a81b8bc064338713721c87a9f64736f6c63430008140033" + }, + { + "address": "0x3de45ff59508bc0b0b8530f66c85b29f403f88b5", + "nonce": 8, + "balance": "0x000000000000000000000000000000000000000000000000001224badeb96200", + "code": "0x" + }, + { + "address": "0xf1eb13a3f3546452bd90a2e9efbe9b6c5125deb0", + "nonce": 18, + "balance": "0x00000000000000000000000000000000000000000000000000168f435a04ce0d", + "code": "0x" + }, + { + "address": "0x921c572b3fb08662e2f5cbbe36bad1fa681f20bf", + "nonce": 12, + "balance": "0x0000000000000000000000000000000000000000000000000071c90a8a46be60", + "code": "0x" + }, + { + "address": "0x03f3609c47302aeb45b7208d8dc1042af75e723b", + "nonce": 33, + "balance": "0x0000000000000000000000000000000000000000000000002af8950c135f7f62", + "code": "0x" + }, + { + "address": "0x95a921ec76cac8af162508e27f60eff4a2cf98a5", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523480156200001157600080fd5b5060043610620002d95760003560e01c806384795d8a1162000185578063b6d539b311620000df578063e985e9c51162000092578063e985e9c514620006e4578063f027853d1462000723578063f2fde38b146200073a578063fd83bf3e1462000751578063fe4b84df1462000768578063ff9b662c146200077f57600080fd5b8063b6d539b31462000661578063b88d4fde146200066c578063c87b56dd1462000683578063ca150dc5146200069a578063cca7a0c114620006a9578063e0678d1a14620006c057600080fd5b8063a17e27231162000138578063a17e272314620005d7578063a22cb46514620005ee578063a7310b581462000605578063a8a99ce8146200061c578063aa1b103f1462000633578063b1b6b775146200063d57600080fd5b806384795d8a146200054f5780638a616bc014620005665780638da5cb5b146200057d57806395d89b4114620005905780639859387b146200059a5780639b0e309514620005b157600080fd5b80633f4ba83a11620002375780635c975abb11620001ea5780635c975abb14620004ea57806362252bc314620004f65780636352211e146200050d57806370a082311462000524578063715018a6146200053b5780638456cb59146200054557600080fd5b80633f4ba83a146200046d57806342842e0e146200047757806342fac17f146200048e5780634f6ccce714620004a557806355f804b314620004bc5780635944c75314620004d357600080fd5b8063232e2cad1162000290578063232e2cad146200039657806323b872dd14620003bc5780632a55205a14620003d35780632f745c59146200040a5780633942877a14620004215780633e7d8f03146200045657600080fd5b806301ffc9a714620002de57806304634d8d146200030a57806306fdde031462000323578063081812fc146200033c578063095ea7b3146200036c57806318160ddd1462000383575b600080fd5b620002f5620002ef36600462002f3f565b62000796565b60405190151581526020015b60405180910390f35b620003216200031b36600462002f8f565b620007a9565b005b6200032d620007c3565b60405162000301919062003024565b620003536200034d36600462003039565b6200085d565b6040516001600160a01b03909116815260200162000301565b620003216200037d36600462003053565b62000886565b6099545b60405190815260200162000301565b620003ad620003a736600462003080565b620009ab565b6040516200030191906200309e565b62000321620003cd3660046200311c565b62000ae9565b620003ea620003e43660046200315d565b62000b54565b604080516001600160a01b03909316835260208301919091520162000301565b620003876200041b36600462003053565b62000c05565b620004386200043236600462003053565b62000c9f565b604080519283526001600160a01b0390911660208301520162000301565b620003216200046736600462003264565b62000da6565b6200032162000ee6565b62000321620004883660046200311c565b62000efc565b620003216200049f3660046200329d565b62000f4c565b62000387620004b636600462003039565b62000f9f565b62000321620004cd3660046200339e565b62001038565b62000321620004e4366004620033ec565b62001058565b60fb5460ff16620002f5565b620002f5620005073660046200311c565b6200106f565b620003536200051e36600462003039565b620010b9565b620003876200053536600462003080565b6200111b565b62000321620011a3565b62000321620011b9565b62000321620005603660046200342d565b620011cd565b620003216200057736600462003039565b62001384565b61012d546001600160a01b031662000353565b6200032d620013a2565b62000438620005ab36600462003080565b620013b3565b620005c8620005c236600462003039565b620014d9565b60405162000301919062003498565b62000321620005e8366004620034e5565b6200153b565b62000321620005ff36600462003503565b62001559565b620005c86200061636600462003080565b62001566565b620002f56200062d36600462003053565b620015d9565b6200032162001621565b620003876200064e36600462003039565b6000908152610196602052604090205490565b620003876101605481565b620003216200067d36600462003532565b62001636565b6200032d6200069436600462003039565b620016a8565b61019454620002f59060ff1681565b620002f5620006ba36600462003080565b62001719565b62000387620006d136600462003039565b6000908152610195602052604090205490565b620002f5620006f5366004620035b7565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b620002f56200073436600462003039565b6200173c565b620003216200074b36600462003080565b62001783565b62000321620007623660046200329d565b620017ff565b620003216200077936600462003039565b62001852565b620003216200079036600462003039565b620019ea565b6000620007a382620019fa565b92915050565b620007b362001a22565b620007bf828262001a7f565b5050565b606060658054620007d490620035e6565b80601f01602080910402602001604051908101604052809291908181526020018280546200080290620035e6565b8015620008535780601f10620008275761010080835404028352916020019162000853565b820191906000526020600020905b8154815290600101906020018083116200083557829003601f168201915b5050505050905090565b60006200086a8262001b3e565b506000908152606960205260409020546001600160a01b031690565b60006200089382620010b9565b9050806001600160a01b0316836001600160a01b03161415620009075760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480620009265750620009268133620006f5565b6200099a5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401620008fe565b620009a6838362001b9f565b505050565b60606000620009ba836200111b565b905060008167ffffffffffffffff811115620009da57620009da62003180565b60405190808252806020026020018201604052801562000a1757816020015b62000a0362002e3a565b815260200190600190039081620009f95790505b50905060005b8281101562000ae157600062000a34868362000c05565b9050600062000a4382620010b9565b600083815261019760209081526040808320546101959092528220549293506001600160a01b031691905060006040518060800160405280868152602001838152602001856001600160a01b03168152602001846001600160a01b031681525090508087878151811062000abb5762000abb62003623565b60200260200101819052505050505050808062000ad8906200364f565b91505062000a1d565b509392505050565b33600090815261015f602052604090205460ff1662000b1c5760405162461bcd60e51b8152600401620008fe906200366d565b62000b28338262001c0f565b62000b475760405162461bcd60e51b8152600401620008fe90620036a4565b620009a683838362001c94565b600082815260ca602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b031692820192909252829162000bca57506040805180820190915260c9546001600160a01b0381168252600160a01b90046001600160601b031660208201525b60208101516000906127109062000beb906001600160601b031687620036f1565b62000bf7919062003713565b915196919550909350505050565b600062000c12836200111b565b821062000c765760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401620008fe565b506001600160a01b03919091166000908152609760209081526040808320938352929052205490565b33600090815261015f6020526040812054819060ff1662000cd45760405162461bcd60e51b8152600401620008fe906200366d565b62000ce0848462001e13565b6000308460405162000cf29062002e74565b6001600160a01b0390921682526020820152604001604051809103906000f08015801562000d24573d6000803e3d6000fd5b506000858152610197602052604080822080546001600160a01b0319166001600160a01b03858116918217909255915193945090928792918916917f6bac9514e6e14277cddc0e4d1181a2d36484967aaf523b19b7b8fe79c4a0e52491a45050506000818152610197602052604090205490926001600160a01b039091169150565b33600090815261015f602052604090205460ff1662000dd95760405162461bcd60e51b8152600401620008fe906200366d565b60005b8151811015620007bf576000610195600084848151811062000e025762000e0262003623565b6020026020010151815260200190815260200160002054905060008111801562000e3a57506000818152610196602052604090205415155b62000e7f5760405162461bcd60e51b8152602060048201526014602482015273151bdddb94dd1bdc9e4e88139bdd08189bdd5b9960621b6044820152606401620008fe565b6000610195600085858151811062000e9b5762000e9b62003623565b6020026020010151815260200190815260200160002081905550600061019660008381526020019081526020016000208190555050808062000edd906200364f565b91505062000ddc565b62000ef062001a22565b62000efa62001e2f565b565b33600090815261015f602052604090205460ff1662000f2f5760405162461bcd60e51b8152600401620008fe906200366d565b620009a68383836040518060200160405280600081525062001636565b62000f5662001a22565b60005b8151811015620007bf5762000f8a82828151811062000f7c5762000f7c62003623565b602002602001015162001e83565b8062000f96816200364f565b91505062000f59565b600062000fab60995490565b8210620010105760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401620008fe565b6099828154811062001026576200102662003623565b90600052602060002001549050919050565b6200104262001a22565b8051620007bf9061019390602084019062002e82565b6200106262001a22565b620009a683838362001f28565b33600090815261015f602052604081205460ff16620010a25760405162461bcd60e51b8152600401620008fe906200366d565b620010af84848462001c94565b5060019392505050565b6000818152606760205260408120546001600160a01b031680620007a35760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401620008fe565b60006001600160a01b038216620011875760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401620008fe565b506001600160a01b031660009081526068602052604090205490565b620011ad62001a22565b62000efa600062001ff8565b620011c362001a22565b62000efa6200204b565b33600090815261015f602052604090205460ff16620012005760405162461bcd60e51b8152600401620008fe906200366d565b60005b8251811015620009a657610195600084838151811062001227576200122762003623565b602002602001015181526020019081526020016000205460001480156200127e5750610196600083838151811062001263576200126362003623565b60200260200101518152602001908152602001600020546000145b620012cc5760405162461bcd60e51b815260206004820152601860248201527f546f776e53746f72793a20416c726561647920626f756e6400000000000000006044820152606401620008fe565b818181518110620012e157620012e162003623565b6020026020010151610195600085848151811062001303576200130362003623565b602002602001015181526020019081526020016000208190555082818151811062001332576200133262003623565b6020026020010151610196600084848151811062001354576200135462003623565b602002602001015181526020019081526020016000208190555080806200137b906200364f565b91505062001203565b6200138e62001a22565b600090815260ca6020526040812055565b50565b606060668054620007d490620035e6565b33600090815261015f6020526040812054819060ff16620013e85760405162461bcd60e51b8152600401620008fe906200366d565b6000620013f56101915490565b90506200140761019180546001019055565b62001413848262001e13565b60003082604051620014259062002e74565b6001600160a01b0390921682526020820152604001604051809103906000f08015801562001457573d6000803e3d6000fd5b506000838152610197602052604080822080546001600160a01b0319166001600160a01b03858116918217909255915193945090928592918916917f6bac9514e6e14277cddc0e4d1181a2d36484967aaf523b19b7b8fe79c4a0e52491a450600081815261019760205260409020549092506001600160a01b03169050915091565b620014e362002e3a565b6000620014f083620010b9565b60008481526101976020908152604080832054610195835292819020548151608081018352978852918701919091526001600160a01b03928316908601521660608401525090919050565b6200154562001a22565b610194805460ff1916911515919091179055565b620007bf3383836200208b565b6200157062002e3a565b60006200157f83600062000c05565b905060006200158e82620010b9565b60008381526101976020908152604080832054610195835292819020548151608081018352968752918601919091526001600160a01b03928316908501521660608301525092915050565b33600090815261015f602052604081205460ff166200160c5760405162461bcd60e51b8152600401620008fe906200366d565b62001618838362001b9f565b50600192915050565b6200162b62001a22565b62000efa600060c955565b33600090815261015f602052604090205460ff16620016695760405162461bcd60e51b8152600401620008fe906200366d565b62001675338362001c0f565b620016945760405162461bcd60e51b8152600401620008fe90620036a4565b620016a2848484846200215c565b50505050565b6060620016b58262001b3e565b6000620016c162002196565b90506000815111620016e3576040518060200160405280600081525062001712565b80620016ef84620021a8565b6040516020016200170292919062003736565b6040516020818303038152906040525b9392505050565b6001600160a01b038116600090815261015f602052604081205460ff16620007a3565b33600090815261015f602052604081205460ff166200176f5760405162461bcd60e51b8152600401620008fe906200366d565b6200177a8262002246565b5060015b919050565b6200178d62001a22565b6001600160a01b038116620017f45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620008fe565b6200139f8162001ff8565b6200180962001a22565b60005b8151811015620007bf576200183d8282815181106200182f576200182f62003623565b6020026020010151620022ef565b8062001849816200364f565b9150506200180c565b600054610100900460ff1615808015620018735750600054600160ff909116105b806200188f5750303b1580156200188f575060005460ff166001145b620018f45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620008fe565b6000805460ff19166001179055801562001918576000805461ff0019166101001790555b6200196860405180604001604052806011815260200170151bdddb94dd1bdc9e481058d8dbdd5b9d607a1b8152506040518060400160405280600381526020016254534160e81b81525062002398565b62001972620023ce565b6200197c620023f8565b620019866200242c565b62001990620023ce565b6200199a620023ce565b6101918290558015620007bf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b620019f462001a22565b61019155565b60006001600160e01b0319821663152a902d60e11b1480620007a35750620007a38262002460565b61012d546001600160a01b0316331462000efa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620008fe565b6127106001600160601b038216111562001aad5760405162461bcd60e51b8152600401620008fe9062003769565b6001600160a01b03821662001b055760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401620008fe565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b9091021760c955565b6000818152606760205260409020546001600160a01b03166200139f5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401620008fe565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819062001bd682620010b9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008062001c1d83620010b9565b9050806001600160a01b0316846001600160a01b0316148062001c6557506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b8062001c8c5750836001600160a01b031662001c81846200085d565b6001600160a01b0316145b949350505050565b826001600160a01b031662001ca982620010b9565b6001600160a01b03161462001cd25760405162461bcd60e51b8152600401620008fe90620037b3565b6001600160a01b03821662001d365760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401620008fe565b62001d45838383600162002488565b826001600160a01b031662001d5a82620010b9565b6001600160a01b03161462001d835760405162461bcd60e51b8152600401620008fe90620037b3565b600081815260696020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260688552838620805460001901905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b620007bf8282604051806020016040528060008152506200253d565b62001e3962002577565b60fb805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038116600090815261015f602052604090205460ff1662001eee5760405162461bcd60e51b815260206004820152601f60248201527f546f776e53746f72793a204f776e657220646f6573206e6f74206578697374006044820152606401620008fe565b610160805490600062001f0183620037f8565b90915550506001600160a01b0316600090815261015f60205260409020805460ff19169055565b6127106001600160601b038216111562001f565760405162461bcd60e51b8152600401620008fe9062003769565b6001600160a01b03821662001fae5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401620008fe565b6040805180820182526001600160a01b0393841681526001600160601b039283166020808301918252600096875260ca90529190942093519051909116600160a01b029116179055565b61012d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62002055620025c2565b60fb805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25862001e663390565b816001600160a01b0316836001600160a01b03161415620020ef5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401620008fe565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6200216984848462001c94565b62002177848484846200260a565b620016a25760405162461bcd60e51b8152600401620008fe9062003812565b60606101938054620007d490620035e6565b60606000620021b78362002725565b600101905060008167ffffffffffffffff811115620021da57620021da62003180565b6040519080825280601f01601f19166020018201604052801562002205576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084620022405762000ae1565b6200220f565b60006200225382620010b9565b90506200226581600084600162002488565b6200227082620010b9565b600083815260696020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526068845282852080546000190190558785526067909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038116600090815261015f602052604090205460ff16156200235b5760405162461bcd60e51b815260206004820152601f60248201527f546f776e53746f72793a204f776e657220616c726561647920657869737473006044820152606401620008fe565b61016080549060006200236e836200364f565b90915550506001600160a01b0316600090815261015f60205260409020805460ff19166001179055565b600054610100900460ff16620023c25760405162461bcd60e51b8152600401620008fe9062003864565b620007bf828262002804565b600054610100900460ff1662000efa5760405162461bcd60e51b8152600401620008fe9062003864565b600054610100900460ff16620024225760405162461bcd60e51b8152600401620008fe9062003864565b62000efa62002859565b600054610100900460ff16620024565760405162461bcd60e51b8152600401620008fe9062003864565b62000efa6200288f565b60006001600160e01b0319821663780e9d6360e01b1480620007a35750620007a382620028c4565b62002492620025c2565b6001600160a01b03831615801590620024ae57506101945460ff165b156200252f576000620024c1846200111b565b9050600181106200252d5760405162461bcd60e51b815260206004820152602f60248201527f546f776e53746f72793a2054686520726563697069656e74206163636f756e7460448201526e20616c72656164792065786973747360881b6064820152608401620008fe565b505b620016a28484848462002917565b62002549838362002a68565b6200255860008484846200260a565b620009a65760405162461bcd60e51b8152600401620008fe9062003812565b60fb5460ff1662000efa5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401620008fe565b60fb5460ff161562000efa5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401620008fe565b60006001600160a01b0384163b156200271a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029062002651903390899088908890600401620038af565b602060405180830381600087803b1580156200266c57600080fd5b505af19250505080156200269f575060408051601f3d908101601f191682019092526200269c91810190620038ee565b60015b620026ff573d808015620026d0576040519150601f19603f3d011682016040523d82523d6000602084013e620026d5565b606091505b508051620026f75760405162461bcd60e51b8152600401620008fe9062003812565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905062001c8c565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310620027655772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831062002792576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310620027b157662386f26fc10000830492506010015b6305f5e1008310620027ca576305f5e100830492506008015b6127108310620027df57612710830492506004015b60648310620027f2576064830492506002015b600a8310620007a35760010192915050565b600054610100900460ff166200282e5760405162461bcd60e51b8152600401620008fe9062003864565b81516200284390606590602085019062002e82565b508051620009a690606690602084019062002e82565b600054610100900460ff16620028835760405162461bcd60e51b8152600401620008fe9062003864565b60fb805460ff19169055565b600054610100900460ff16620028b95760405162461bcd60e51b8152600401620008fe9062003864565b62000efa3362001ff8565b60006001600160e01b031982166380ac58cd60e01b1480620028f657506001600160e01b03198216635b5e139f60e01b145b80620007a357506301ffc9a760e01b6001600160e01b0319831614620007a3565b620029258484848462002c09565b6001811115620029965760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401620008fe565b816001600160a01b038516620029f557620029ef81609980546000838152609a60205260408120829055600182018355919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000155565b62002a1b565b836001600160a01b0316856001600160a01b03161462002a1b5762002a1b858262002c98565b6001600160a01b03841662002a3b5762002a358162002d3a565b62002a61565b846001600160a01b0316846001600160a01b03161462002a615762002a61848262002df4565b5050505050565b6001600160a01b03821662002ac05760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401620008fe565b6000818152606760205260409020546001600160a01b03161562002b275760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401620008fe565b62002b3760008383600162002488565b6000818152606760205260409020546001600160a01b03161562002b9e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401620008fe565b6001600160a01b038216600081815260686020908152604080832080546001019055848352606790915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001811115620016a2576001600160a01b0384161562002c53576001600160a01b0384166000908152606860205260408120805483929062002c4d9084906200390e565b90915550505b6001600160a01b03831615620016a2576001600160a01b0383166000908152606860205260408120805483929062002c8d90849062003928565b909155505050505050565b6000600162002ca7846200111b565b62002cb391906200390e565b60008381526098602052604090205490915080821462002d07576001600160a01b03841660009081526097602090815260408083208584528252808320548484528184208190558352609890915290208190555b5060009182526098602090815260408084208490556001600160a01b039094168352609781528383209183525290812055565b60995460009062002d4e906001906200390e565b6000838152609a60205260408120546099805493945090928490811062002d795762002d7962003623565b90600052602060002001549050806099838154811062002d9d5762002d9d62003623565b6000918252602080832090910192909255828152609a9091526040808220849055858252812055609980548062002dd85762002dd862003943565b6001900381819060005260206000200160009055905550505050565b600062002e01836200111b565b6001600160a01b039093166000908152609760209081526040808320868452825280832085905593825260989052919091209190915550565b6040518060800160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b610652806200395a83390190565b82805462002e9090620035e6565b90600052602060002090601f01602090048101928262002eb4576000855562002eff565b82601f1062002ecf57805160ff191683800117855562002eff565b8280016001018555821562002eff579182015b8281111562002eff57825182559160200191906001019062002ee2565b5062002f0d92915062002f11565b5090565b5b8082111562002f0d576000815560010162002f12565b6001600160e01b0319811681146200139f57600080fd5b60006020828403121562002f5257600080fd5b8135620017128162002f28565b80356001600160a01b03811681146200177e57600080fd5b80356001600160601b03811681146200177e57600080fd5b6000806040838503121562002fa357600080fd5b62002fae8362002f5f565b915062002fbe6020840162002f77565b90509250929050565b60005b8381101562002fe457818101518382015260200162002fca565b83811115620016a25750506000910152565b600081518084526200301081602086016020860162002fc7565b601f01601f19169290920160200192915050565b60208152600062001712602083018462002ff6565b6000602082840312156200304c57600080fd5b5035919050565b600080604083850312156200306757600080fd5b620030728362002f5f565b946020939093013593505050565b6000602082840312156200309357600080fd5b620017128262002f5f565b6020808252825182820181905260009190848201906040850190845b818110156200311057620030fc83855180518252602080820151908301526040808201516001600160a01b039081169184019190915260609182015116910152565b9284019260809290920191600101620030ba565b50909695505050505050565b6000806000606084860312156200313257600080fd5b6200313d8462002f5f565b92506200314d6020850162002f5f565b9150604084013590509250925092565b600080604083850312156200317157600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620031c257620031c262003180565b604052919050565b600067ffffffffffffffff821115620031e757620031e762003180565b5060051b60200190565b600082601f8301126200320357600080fd5b813560206200321c6200321683620031ca565b62003196565b82815260059290921b840181019181810190868411156200323c57600080fd5b8286015b8481101562003259578035835291830191830162003240565b509695505050505050565b6000602082840312156200327757600080fd5b813567ffffffffffffffff8111156200328f57600080fd5b62001c8c84828501620031f1565b60006020808385031215620032b157600080fd5b823567ffffffffffffffff811115620032c957600080fd5b8301601f81018513620032db57600080fd5b8035620032ec6200321682620031ca565b81815260059190911b820183019083810190878311156200330c57600080fd5b928401925b828410156200333557620033258462002f5f565b8252928401929084019062003311565b979650505050505050565b600067ffffffffffffffff8311156200335d576200335d62003180565b62003372601f8401601f191660200162003196565b90508281528383830111156200338757600080fd5b828260208301376000602084830101529392505050565b600060208284031215620033b157600080fd5b813567ffffffffffffffff811115620033c957600080fd5b8201601f81018413620033db57600080fd5b62001c8c8482356020840162003340565b6000806000606084860312156200340257600080fd5b83359250620034146020850162002f5f565b9150620034246040850162002f77565b90509250925092565b600080604083850312156200344157600080fd5b823567ffffffffffffffff808211156200345a57600080fd5b6200346886838701620031f1565b935060208501359150808211156200347f57600080fd5b506200348e85828601620031f1565b9150509250929050565b60808101620007a3828480518252602080820151908301526040808201516001600160a01b039081169184019190915260609182015116910152565b803580151581146200177e57600080fd5b600060208284031215620034f857600080fd5b6200171282620034d4565b600080604083850312156200351757600080fd5b620035228362002f5f565b915062002fbe60208401620034d4565b600080600080608085870312156200354957600080fd5b620035548562002f5f565b9350620035646020860162002f5f565b925060408501359150606085013567ffffffffffffffff8111156200358857600080fd5b8501601f810187136200359a57600080fd5b620035ab8782356020840162003340565b91505092959194509250565b60008060408385031215620035cb57600080fd5b620035d68362002f5f565b915062002fbe6020840162002f5f565b600181811c90821680620035fb57607f821691505b602082108114156200361d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141562003666576200366662003639565b5060010190565b6020808252601c908201527f546f776e53746f72793a205065726d697373696f6e2064656e69656400000000604082015260600190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60008160001904831182151516156200370e576200370e62003639565b500290565b6000826200373157634e487b7160e01b600052601260045260246000fd5b500490565b600083516200374a81846020880162002fc7565b8351908301906200376081836020880162002fc7565b01949350505050565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6000816200380a576200380a62003639565b506000190190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090620038e49083018462002ff6565b9695505050505050565b6000602082840312156200390157600080fd5b8151620017128162002f28565b60008282101562003923576200392362003639565b500390565b600082198211156200393e576200393e62003639565b500190565b634e487b7160e01b600052603160045260246000fdfe608060405234801561001057600080fd5b5060405161065238038061065283398101604081905261002f9161005d565b600080546001600160a01b0319166001600160a01b0393909316929092179091556001556064600255610097565b6000806040838503121561007057600080fd5b82516001600160a01b038116811461008757600080fd5b6020939093015192949293505050565b6105ac806100a66000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063150b7a021461008f5780633ccfd60b146100c657806354fd4d50146100d0578063bc197c81146100e7578063f23a6e6114610106575b600080fd5b61007a610075366004610259565b610125565b60405190151581526020015b60405180910390f35b6100ad61009d366004610356565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610086565b6100ce61015c565b005b6100d960025481565b604051908152602001610086565b6100ad6100f5366004610442565b63bc197c8160e01b95945050505050565b6100ad6101143660046104f0565b63f23a6e6160e01b95945050505050565b60006001600160e01b03198216630271189760e51b148061015657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001546040516331a9108f60e11b8152600481019190915233916001600160a01b031690636352211e9060240160206040518083038186803b1580156101a457600080fd5b505afa1580156101b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101dc9190610559565b6001600160a01b03161461022a5760405162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015260640160405180910390fd5b60405133904780156108fc02916000818181858888f19350505050158015610256573d6000803e3d6000fd5b50565b60006020828403121561026b57600080fd5b81356001600160e01b03198116811461028357600080fd5b9392505050565b6001600160a01b038116811461025657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156102de576102de61029f565b604052919050565b600082601f8301126102f757600080fd5b813567ffffffffffffffff8111156103115761031161029f565b610324601f8201601f19166020016102b5565b81815284602083860101111561033957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561036c57600080fd5b84356103778161028a565b935060208501356103878161028a565b925060408501359150606085013567ffffffffffffffff8111156103aa57600080fd5b6103b6878288016102e6565b91505092959194509250565b600082601f8301126103d357600080fd5b8135602067ffffffffffffffff8211156103ef576103ef61029f565b8160051b6103fe8282016102b5565b928352848101820192828101908785111561041857600080fd5b83870192505b848310156104375782358252918301919083019061041e565b979650505050505050565b600080600080600060a0868803121561045a57600080fd5b85356104658161028a565b945060208601356104758161028a565b9350604086013567ffffffffffffffff8082111561049257600080fd5b61049e89838a016103c2565b945060608801359150808211156104b457600080fd5b6104c089838a016103c2565b935060808801359150808211156104d657600080fd5b506104e3888289016102e6565b9150509295509295909350565b600080600080600060a0868803121561050857600080fd5b85356105138161028a565b945060208601356105238161028a565b93506040860135925060608601359150608086013567ffffffffffffffff81111561054d57600080fd5b6104e3888289016102e6565b60006020828403121561056b57600080fd5b81516102838161028a56fea2646970667358221220e16ca41b03d641941f645ca66d91f6bfc81c1131a86d7ebeda42d6a5b98d70f464736f6c63430008090033a26469706673582212201d3e75127e29f0db2afaeff939ba3db5677d4f159fe9dfebcbbf76151ad4e95264736f6c63430008090033" + }, + { + "address": "0xdd7217ae336c97c3b21ca53321744ad788b133b2", + "nonce": 18, + "balance": "0x0000000000000000000000000000000000000000000000000010fdf6673f8532", + "code": "0x" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x363d3d373d3d3d363d7354c97c29021a12cacb31f8388b32dd5486083f7b5af43d82803e903d91602b57fd5bf3" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061021a5760003560e01c80635c975abb11610123578063a217fddf116100ab578063d547741f1161006f578063d547741f146107e0578063e63ab1e914610809578063e985e9c514610834578063eb79554914610871578063f2fde38b1461089a5761021a565b8063a217fddf14610708578063a22cb46514610733578063b88d4fde1461075c578063c87b56dd14610778578063d5391393146107b55761021a565b80638456cb59116100f25780638456cb59146106215780638462151c146106385780638da5cb5b1461067557806391d14854146106a057806395d89b41146106dd5761021a565b80635c975abb146105655780636352211e1461059057806370a08231146105cd578063715018a61461060a5761021a565b80632f2ff15d116101a6578063423f6cef11610175578063423f6cef1461047d57806342842e0e146104a657806342966c68146104c25780634f6ccce7146104eb57806350bb4e7f146105285761021a565b80632f2ff15d146103d75780632f745c591461040057806336568abe1461043d5780633f4ba83a146104665761021a565b8063095ea7b3116101ed578063095ea7b31461030157806318160ddd1461032a5780631a3e7c8b1461035557806323b872dd14610371578063248a9ca31461039a5761021a565b806301ffc9a71461021f57806303f167391461025c57806306fdde0314610299578063081812fc146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613480565b6108c3565b60405161025391906134c8565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190613577565b6108d5565b60405161029091906135d0565b60405180910390f35b3480156102a557600080fd5b506102ae610908565b6040516102bb919061367b565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061369d565b61099a565b6040516102f891906136d9565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190613577565b610a1f565b005b34801561033657600080fd5b5061033f610b36565b60405161034c9190613703565b60405180910390f35b61036f600480360381019061036a91906138b3565b610b43565b005b34801561037d57600080fd5b5061039860048036038101906103939190613969565b610c92565b005b3480156103a657600080fd5b506103c160048036038101906103bc91906139e8565b610cf2565b6040516103ce91906135d0565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190613a15565b610d12565b005b34801561040c57600080fd5b5061042760048036038101906104229190613577565b610d78565b6040516104349190613703565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613a15565b610e1d565b005b34801561047257600080fd5b5061047b610ea0565b005b34801561048957600080fd5b506104a4600480360381019061049f9190613577565b610f1a565b005b6104c060048036038101906104bb9190613969565b610f40565b005b3480156104ce57600080fd5b506104e960048036038101906104e4919061369d565b610f60565b005b3480156104f757600080fd5b50610512600480360381019061050d919061369d565b610fbc565b60405161051f9190613703565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613a55565b61102d565b60405161055c91906134c8565b60405180910390f35b34801561057157600080fd5b5061057a6110d3565b60405161058791906134c8565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b2919061369d565b6110ea565b6040516105c491906136d9565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef9190613ac4565b61119b565b6040516106019190613703565b60405180910390f35b34801561061657600080fd5b5061061f611252565b005b34801561062d57600080fd5b506106366112da565b005b34801561064457600080fd5b5061065f600480360381019061065a9190613ac4565b611354565b60405161066c9190613baf565b60405180910390f35b34801561068157600080fd5b5061068a61144b565b60405161069791906136d9565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190613a15565b611474565b6040516106d491906134c8565b60405180910390f35b3480156106e957600080fd5b506106f26114df565b6040516106ff919061367b565b60405180910390f35b34801561071457600080fd5b5061071d611571565b60405161072a91906135d0565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190613bfd565b611578565b005b61077660048036038101906107719190613cde565b6116f8565b005b34801561078457600080fd5b5061079f600480360381019061079a919061369d565b61175a565b6040516107ac919061367b565b60405180910390f35b3480156107c157600080fd5b506107ca61176c565b6040516107d791906135d0565b60405180910390f35b3480156107ec57600080fd5b5061080760048036038101906108029190613a15565b611790565b005b34801561081557600080fd5b5061081e6117f6565b60405161082b91906135d0565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613d61565b61181a565b60405161086891906134c8565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613da1565b6118ae565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190613ac4565b61190b565b005b60006108ce82611a02565b9050919050565b600082826040516020016108ea929190613e15565b60405160208183030381529060405280519060200120905092915050565b60606001805461091790613e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461094390613e6d565b80156109905780601f1061096557610100808354040283529160200191610990565b820191906000526020600020905b81548152906001019060200180831161097357829003601f168201915b5050505050905090565b60006109a582611a7c565b6109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db90613f10565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2a826110ea565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9190613fa2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ab9611ae8565b73ffffffffffffffffffffffffffffffffffffffff161480610ae85750610ae781610ae2611ae8565b61181a565b5b610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90614034565b60405180910390fd5b610b318383611af0565b505050565b6000600980549050905090565b610b6d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a687611474565b610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba3906140c6565b60405180910390fd5b6000610bb886866108d5565b90508673ffffffffffffffffffffffffffffffffffffffff16610c1f8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611ba9565b73ffffffffffffffffffffffffffffffffffffffff1614610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90614158565b60405180910390fd5b610c7f8686611c18565b610c898585611c36565b50505050505050565b610ca3610c9d611ae8565b82611ca3565b610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd9906141ea565b60405180910390fd5b610ced838383611d81565b505050565b6000600d6000838152602001908152602001600020600101549050919050565b610d2b610d1e83610cf2565b610d26611ae8565b611474565b610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d619061427c565b60405180910390fd5b610d748282611fdc565b5050565b6000610d838361119b565b8210610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb9061430e565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e25611ae8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e89906143a0565b60405180910390fd5b610e9c82826120bd565b5050565b610ed17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ecc611ae8565b611474565b610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790614432565b60405180910390fd5b610f1861219f565b565b610f3c610f25611ae8565b838360405180602001604052806000815250612241565b5050565b610f5b838383604051806020016040528060008152506116f8565b505050565b610f71610f6b611ae8565b82611ca3565b610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa7906144c4565b60405180910390fd5b610fb98161229d565b50565b6000610fc6610b36565b8210611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90614556565b60405180910390fd5b6009828154811061101b5761101a614576565b5b90600052602060002001549050919050565b6000600e60009054906101000a900460ff166110b4576110747f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661106f611ae8565b611474565b6110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90614617565b60405180910390fd5b5b6110be8484611c18565b6110c88383611c36565b600190509392505050565b6000600c60009054906101000a900460ff16905090565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611189906146a9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361120b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112029061473b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125a611ae8565b73ffffffffffffffffffffffffffffffffffffffff1661127861144b565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c5906147a7565b60405180910390fd5b6112d860006122a9565b565b61130b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611306611ae8565b611474565b61134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190614432565b60405180910390fd5b61135261236d565b565b606060006113618361119b565b67ffffffffffffffff81111561137a57611379613728565b5b6040519080825280602002602001820160405280156113a85781602001602082028036833780820191505090505b50905060005b6113b78461119b565b81101561144157600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000205482828151811061142257611421614576565b5b6020026020010181815250508080611439906147f6565b9150506113ae565b5080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600280546114ee90613e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461151a90613e6d565b80156115675780601f1061153c57610100808354040283529160200191611567565b820191906000526020600020905b81548152906001019060200180831161154a57829003601f168201915b5050505050905090565b6000801b81565b611580611ae8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e49061488a565b60405180910390fd5b80600660006115fa611ae8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116a7611ae8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116ec91906134c8565b60405180910390a35050565b611709611703611ae8565b83611ca3565b611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f906141ea565b60405180910390fd5b61175484848484612241565b50505050565b606061176582612410565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6117a961179c83610cf2565b6117a4611ae8565b611474565b6117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df9061491c565b60405180910390fd5b6117f282826120bd565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119056118b9611ae8565b858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612241565b50505050565b611913611ae8565b73ffffffffffffffffffffffffffffffffffffffff1661193161144b565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e906147a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed906149ae565b60405180910390fd5b6119ff816122a9565b50565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a755750611a7482612561565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b63836110ea565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080600080611bb8856125db565b92509250925060018682858560405160008152602001604052604051611be194939291906149ea565b6020604051602081039080840390855afa158015611c03573d6000803e3d6000fd5b50505060206040510351935050505092915050565b611c32828260405180602001604052806000815250612643565b5050565b611c3f82611a7c565b611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7590614aa1565b60405180910390fd5b80600b60008481526020019081526020016000209081611c9e9190614c6d565b505050565b6000611cae82611a7c565b611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490614db1565b60405180910390fd5b6000611cf8836110ea565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d6757508373ffffffffffffffffffffffffffffffffffffffff16611d4f8461099a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d785750611d77818561181a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611da1826110ea565b73ffffffffffffffffffffffffffffffffffffffff1614611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee90614e43565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d90614ed5565b60405180910390fd5b611e7183838361269e565b611e7c600082611af0565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ecc9190614ef5565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f239190614f29565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611fe68282611474565b6120b9576001600d600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061205e611ae8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6120c78282611474565b1561219b576000600d600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612140611ae8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6121a76110d3565b6121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614fa9565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61222a611ae8565b60405161223791906136d9565b60405180910390a1565b61224c848484611d81565b61225884848484612765565b612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e9061503b565b60405180910390fd5b50505050565b6122a6816128ec565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123756110d3565b156123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac906150a7565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586123f9611ae8565b60405161240691906136d9565b60405180910390a1565b606061241b82611a7c565b61245a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245190615139565b60405180910390fd5b6000600b6000848152602001908152602001600020805461247a90613e6d565b80601f01602080910402602001604051908101604052809291908181526020018280546124a690613e6d565b80156124f35780601f106124c8576101008083540402835291602001916124f3565b820191906000526020600020905b8154815290600101906020018083116124d657829003601f168201915b50505050509050600061250461293f565b9050600081510361251957819250505061255c565b60008251111561254e578082604051602001612536929190615195565b6040516020818303038152906040529250505061255c565b61255784612956565b925050505b919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125d457506125d3826129fd565b5b9050919050565b60008060006041845114612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90615205565b60405180910390fd5b6020840151925060408401519150606084015160001a90509193909250565b61264d8383612adf565b61265a6000848484612765565b612699576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126909061503b565b60405180910390fd5b505050565b6126a66110d3565b156126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd906150a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c90615271565b60405180910390fd5b612760838383612cac565b505050565b60006127868473ffffffffffffffffffffffffffffffffffffffff16612dbe565b156128df578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127af611ae8565b8786866040518563ffffffff1660e01b81526004016127d194939291906152e6565b6020604051808303816000875af192505050801561280d57506040513d601f19601f8201168201806040525081019061280a9190615347565b60015b61288f573d806000811461283d576040519150601f19603f3d011682016040523d82523d6000602084013e612842565b606091505b506000815103612887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287e9061503b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128e4565b600190505b949350505050565b6128f581612dd1565b6000600b6000838152602001908152602001600020805461291590613e6d565b90501461293c57600b6000828152602001908152602001600020600061293b91906133b7565b5b50565b606060405180602001604052806000815250905090565b606061296182611a7c565b6129a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612997906153e6565b60405180910390fd5b60006129aa61293f565b905060008151116129ca57604051806020016040528060008152506129f5565b806129d484612ee2565b6040516020016129e5929190615195565b6040516020818303038152906040525b915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612ac857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612ad85750612ad782613042565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4590615452565b60405180910390fd5b612b5781611a7c565b15612b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8e906154be565b60405180910390fd5b612ba36000838361269e565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bf39190614f29565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612cb78383836130ac565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cf957612cf4816130b1565b612d38565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d3757612d3683826130fa565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d7a57612d7581613267565b612db9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612db857612db78282613338565b5b5b505050565b600080823b905060008111915050919050565b6000612ddc826110ea565b9050612dea8160008461269e565b612df5600083611af0565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e459190614ef5565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b606060008203612f29576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061303d565b600082905060005b60008214612f5b578080612f44906147f6565b915050600a82612f54919061550d565b9150612f31565b60008167ffffffffffffffff811115612f7757612f76613728565b5b6040519080825280601f01601f191660200182016040528015612fa95781602001600182028036833780820191505090505b5090505b6000851461303657600182612fc29190614ef5565b9150600a85612fd1919061553e565b6030612fdd9190614f29565b60f81b818381518110612ff357612ff2614576565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561302f919061550d565b9450612fad565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016131078461119b565b6131119190614ef5565b90506000600860008481526020019081526020016000205490508181146131f6576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061327b9190614ef5565b90506000600a60008481526020019081526020016000205490506000600983815481106132ab576132aa614576565b5b9060005260206000200154905080600983815481106132cd576132cc614576565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548061331c5761331b61556f565b5b6001900381819060005260206000200160009055905550505050565b60006133438361119b565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b5080546133c390613e6d565b6000825580601f106133d557506133f4565b601f0160209004906000526020600020908101906133f391906133f7565b5b50565b5b808211156134105760008160009055506001016133f8565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61345d81613428565b811461346857600080fd5b50565b60008135905061347a81613454565b92915050565b6000602082840312156134965761349561341e565b5b60006134a48482850161346b565b91505092915050565b60008115159050919050565b6134c2816134ad565b82525050565b60006020820190506134dd60008301846134b9565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061350e826134e3565b9050919050565b61351e81613503565b811461352957600080fd5b50565b60008135905061353b81613515565b92915050565b6000819050919050565b61355481613541565b811461355f57600080fd5b50565b6000813590506135718161354b565b92915050565b6000806040838503121561358e5761358d61341e565b5b600061359c8582860161352c565b92505060206135ad85828601613562565b9150509250929050565b6000819050919050565b6135ca816135b7565b82525050565b60006020820190506135e560008301846135c1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561362557808201518184015260208101905061360a565b60008484015250505050565b6000601f19601f8301169050919050565b600061364d826135eb565b61365781856135f6565b9350613667818560208601613607565b61367081613631565b840191505092915050565b600060208201905081810360008301526136958184613642565b905092915050565b6000602082840312156136b3576136b261341e565b5b60006136c184828501613562565b91505092915050565b6136d381613503565b82525050565b60006020820190506136ee60008301846136ca565b92915050565b6136fd81613541565b82525050565b600060208201905061371860008301846136f4565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61376082613631565b810181811067ffffffffffffffff8211171561377f5761377e613728565b5b80604052505050565b6000613792613414565b905061379e8282613757565b919050565b600067ffffffffffffffff8211156137be576137bd613728565b5b6137c782613631565b9050602081019050919050565b82818337600083830152505050565b60006137f66137f1846137a3565b613788565b90508281526020810184848401111561381257613811613723565b5b61381d8482856137d4565b509392505050565b600082601f83011261383a5761383961371e565b5b813561384a8482602086016137e3565b91505092915050565b600080fd5b600080fd5b60008083601f8401126138735761387261371e565b5b8235905067ffffffffffffffff8111156138905761388f613853565b5b6020830191508360018202830111156138ac576138ab613858565b5b9250929050565b60008060008060008060a087890312156138d0576138cf61341e565b5b60006138de89828a0161352c565b96505060206138ef89828a0161352c565b955050604061390089828a01613562565b945050606087013567ffffffffffffffff81111561392157613920613423565b5b61392d89828a01613825565b935050608087013567ffffffffffffffff81111561394e5761394d613423565b5b61395a89828a0161385d565b92509250509295509295509295565b6000806000606084860312156139825761398161341e565b5b60006139908682870161352c565b93505060206139a18682870161352c565b92505060406139b286828701613562565b9150509250925092565b6139c5816135b7565b81146139d057600080fd5b50565b6000813590506139e2816139bc565b92915050565b6000602082840312156139fe576139fd61341e565b5b6000613a0c848285016139d3565b91505092915050565b60008060408385031215613a2c57613a2b61341e565b5b6000613a3a858286016139d3565b9250506020613a4b8582860161352c565b9150509250929050565b600080600060608486031215613a6e57613a6d61341e565b5b6000613a7c8682870161352c565b9350506020613a8d86828701613562565b925050604084013567ffffffffffffffff811115613aae57613aad613423565b5b613aba86828701613825565b9150509250925092565b600060208284031215613ada57613ad961341e565b5b6000613ae88482850161352c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b2681613541565b82525050565b6000613b388383613b1d565b60208301905092915050565b6000602082019050919050565b6000613b5c82613af1565b613b668185613afc565b9350613b7183613b0d565b8060005b83811015613ba2578151613b898882613b2c565b9750613b9483613b44565b925050600181019050613b75565b5085935050505092915050565b60006020820190508181036000830152613bc98184613b51565b905092915050565b613bda816134ad565b8114613be557600080fd5b50565b600081359050613bf781613bd1565b92915050565b60008060408385031215613c1457613c1361341e565b5b6000613c228582860161352c565b9250506020613c3385828601613be8565b9150509250929050565b600067ffffffffffffffff821115613c5857613c57613728565b5b613c6182613631565b9050602081019050919050565b6000613c81613c7c84613c3d565b613788565b905082815260208101848484011115613c9d57613c9c613723565b5b613ca88482856137d4565b509392505050565b600082601f830112613cc557613cc461371e565b5b8135613cd5848260208601613c6e565b91505092915050565b60008060008060808587031215613cf857613cf761341e565b5b6000613d068782880161352c565b9450506020613d178782880161352c565b9350506040613d2887828801613562565b925050606085013567ffffffffffffffff811115613d4957613d48613423565b5b613d5587828801613cb0565b91505092959194509250565b60008060408385031215613d7857613d7761341e565b5b6000613d868582860161352c565b9250506020613d978582860161352c565b9150509250929050565b60008060008060608587031215613dbb57613dba61341e565b5b6000613dc98782880161352c565b9450506020613dda87828801613562565b935050604085013567ffffffffffffffff811115613dfb57613dfa613423565b5b613e078782880161385d565b925092505092959194509250565b6000604082019050613e2a60008301856136ca565b613e3760208301846136f4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e8557607f821691505b602082108103613e9857613e97613e3e565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613efa602c836135f6565b9150613f0582613e9e565b604082019050919050565b60006020820190508181036000830152613f2981613eed565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f8c6021836135f6565b9150613f9782613f30565b604082019050919050565b60006020820190508181036000830152613fbb81613f7f565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061401e6038836135f6565b915061402982613fc2565b604082019050919050565b6000602082019050818103600083015261404d81614011565b9050919050565b7f546865207369676e657220646f6573206e6f742068617665207468652072657160008201527f756972656420726f6c6500000000000000000000000000000000000000000000602082015250565b60006140b0602a836135f6565b91506140bb82614054565b604082019050919050565b600060208201905081810360008301526140df816140a3565b9050919050565b7f546865207369676e61747572652070726f766964656420646f6573206e6f742060008201527f6d61746368000000000000000000000000000000000000000000000000000000602082015250565b60006141426025836135f6565b915061414d826140e6565b604082019050919050565b6000602082019050818103600083015261417181614135565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006141d46031836135f6565b91506141df82614178565b604082019050919050565b60006020820190508181036000830152614203816141c7565b9050919050565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f206772616e740000000000000000000000000000000000602082015250565b6000614266602f836135f6565b91506142718261420a565b604082019050919050565b6000602082019050818103600083015261429581614259565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006142f8602b836135f6565b91506143038261429c565b604082019050919050565b60006020820190508181036000830152614327816142eb565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061438a602f836135f6565b91506143958261432e565b604082019050919050565b600060208201905081810360008301526143b98161437d565b9050919050565b7f536f6369616c5363616e42616467653a206d757374206861766520706175736560008201527f7220726f6c6520746f2070617573650000000000000000000000000000000000602082015250565b600061441c602f836135f6565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b60006144ae6030836135f6565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614540602c836135f6565b915061454b826144e4565b604082019050919050565b6000602082019050818103600083015261456f81614533565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f536f6369616c5363616e42616467653a206d7573742068617665206d696e746560008201527f7220726f6c6520746f206d696e74000000000000000000000000000000000000602082015250565b6000614601602e836135f6565b915061460c826145a5565b604082019050919050565b60006020820190508181036000830152614630816145f4565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006146936029836135f6565b915061469e82614637565b604082019050919050565b600060208201905081810360008301526146c281614686565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614725602a836135f6565b9150614730826146c9565b604082019050919050565b6000602082019050818103600083015261475481614718565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147916020836135f6565b915061479c8261475b565b602082019050919050565b600060208201905081810360008301526147c081614784565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061480182613541565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614833576148326147c7565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006148746019836135f6565b915061487f8261483e565b602082019050919050565b600060208201905081810360008301526148a381614867565b9050919050565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f207265766f6b6500000000000000000000000000000000602082015250565b60006149066030836135f6565b9150614911826148aa565b604082019050919050565b60006020820190508181036000830152614935816148f9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149986026836135f6565b91506149a38261493c565b604082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b600060ff82169050919050565b6149e4816149ce565b82525050565b60006080820190506149ff60008301876135c1565b614a0c60208301866149db565b614a1960408301856135c1565b614a2660608301846135c1565b95945050505050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b6000614a8b602e836135f6565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614b237fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614ae6565b614b2d8683614ae6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614b6a614b65614b6084613541565b614b45565b613541565b9050919050565b6000819050919050565b614b8483614b4f565b614b98614b9082614b71565b848454614af3565b825550505050565b600090565b614bad614ba0565b614bb8818484614b7b565b505050565b5b81811015614bdc57614bd1600082614ba5565b600181019050614bbe565b5050565b601f821115614c2157614bf281614ac1565b614bfb84614ad6565b81016020851015614c0a578190505b614c1e614c1685614ad6565b830182614bbd565b50505b505050565b600082821c905092915050565b6000614c4460001984600802614c26565b1980831691505092915050565b6000614c5d8383614c33565b9150826002028217905092915050565b614c76826135eb565b67ffffffffffffffff811115614c8f57614c8e613728565b5b614c998254613e6d565b614ca4828285614be0565b600060209050601f831160018114614cd75760008415614cc5578287015190505b614ccf8582614c51565b865550614d37565b601f198416614ce586614ac1565b60005b82811015614d0d57848901518255600182019150602085019450602081019050614ce8565b86831015614d2a5784890151614d26601f891682614c33565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614d9b602c836135f6565b9150614da682614d3f565b604082019050919050565b60006020820190508181036000830152614dca81614d8e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614e2d6029836135f6565b9150614e3882614dd1565b604082019050919050565b60006020820190508181036000830152614e5c81614e20565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ebf6024836135f6565b9150614eca82614e63565b604082019050919050565b60006020820190508181036000830152614eee81614eb2565b9050919050565b6000614f0082613541565b9150614f0b83613541565b9250828203905081811115614f2357614f226147c7565b5b92915050565b6000614f3482613541565b9150614f3f83613541565b9250828201905080821115614f5757614f566147c7565b5b92915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614f936014836135f6565b9150614f9e82614f5d565b602082019050919050565b60006020820190508181036000830152614fc281614f86565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006150256032836135f6565b915061503082614fc9565b604082019050919050565b6000602082019050818103600083015261505481615018565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006150916010836135f6565b915061509c8261505b565b602082019050919050565b600060208201905081810360008301526150c081615084565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b60006151236031836135f6565b915061512e826150c7565b604082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b600081905092915050565b600061516f826135eb565b6151798185615159565b9350615189818560208601613607565b80840191505092915050565b60006151a18285615164565b91506151ad8284615164565b91508190509392505050565b7f696e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b60006151ef6018836135f6565b91506151fa826151b9565b602082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b7f4572723a20746f6b656e207472616e7366657220697320424c4f434b45440000600082015250565b600061525b601e836135f6565b915061526682615225565b602082019050919050565b6000602082019050818103600083015261528a8161524e565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006152b882615291565b6152c2818561529c565b93506152d2818560208601613607565b6152db81613631565b840191505092915050565b60006080820190506152fb60008301876136ca565b61530860208301866136ca565b61531560408301856136f4565b818103606083015261532781846152ad565b905095945050505050565b60008151905061534181613454565b92915050565b60006020828403121561535d5761535c61341e565b5b600061536b84828501615332565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006153d0602f836135f6565b91506153db82615374565b604082019050919050565b600060208201905081810360008301526153ff816153c3565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061543c6020836135f6565b915061544782615406565b602082019050919050565b6000602082019050818103600083015261546b8161542f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006154a8601c836135f6565b91506154b382615472565b602082019050919050565b600060208201905081810360008301526154d78161549b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061551882613541565b915061552383613541565b925082615533576155326154de565b5b828204905092915050565b600061554982613541565b915061555483613541565b925082615564576155636154de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212209c0800dc566614d73c717eaa941a6c108a764d55d86f61c7835410035482175964736f6c63430008140033" + }, + { + "address": "0x6fefeb0c79615fe744eb745cc2c5eae2556d0fd0", + "nonce": 38, + "balance": "0x0000000000000000000000000000000000000000000000000002a8a79b3c3d57", + "code": "0x" + }, + { + "address": "0xce048492076b0130821866f6d05a0b621b1715c8", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100e85760003560e01c8063b2494df31161008a578063ecdbb4fd11610059578063ecdbb4fd146102d3578063ed6d73f9146102ef578063f3fef3a31461031a578063f887ea4014610343576100e8565b8063b2494df314610229578063b666493414610254578063b75c7dc61461027f578063b95459e4146102a8576100e8565b80634ada8076116100c65780634ada80761461016f578063523ba7ca1461019857806381b2248a146101c15780638388e226146101fe576100e8565b806301ffc9a7146100ed578063074321961461012a5780633cc30e2a14610146575b600080fd5b3480156100f957600080fd5b50610114600480360381019061010f9190610ed5565b61036e565b6040516101219190610f1d565b60405180910390f35b610144600480360381019061013f9190611294565b6104a8565b005b34801561015257600080fd5b5061016d60048036038101906101689190611591565b6105e8565b005b34801561017b57600080fd5b5061019660048036038101906101919190611638565b610722565b005b3480156101a457600080fd5b506101bf60048036038101906101ba9190611681565b6107bb565b005b3480156101cd57600080fd5b506101e860048036038101906101e3919061172f565b6108f1565b6040516101f5919061179d565b60405180910390f35b34801561020a57600080fd5b50610213610930565b604051610220919061179d565b60405180910390f35b34801561023557600080fd5b5061023e610938565b60405161024b9190611876565b60405180910390f35b34801561026057600080fd5b506102696109c6565b60405161027691906118f7565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a19190611912565b6109ec565b005b3480156102b457600080fd5b506102bd610a85565b6040516102ca9190611960565b60405180910390f35b6102ed60048036038101906102e8919061197b565b610aab565b005b3480156102fb57600080fd5b50610304610bef565b6040516103119190611a27565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190611a80565b610c15565b005b34801561034f57600080fd5b50610358610c19565b6040516103659190611ae1565b60405180910390f35b60007f204cf909000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061043957507f31c1afd5000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e253ca60018484346040518563ffffffff1660e01b815260040161050a9493929190611dc0565b600060405180830381600087803b15801561052457600080fd5b505af1158015610538573d6000803e3d6000fd5b5050505061054e82610548610930565b34610c3d565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362fa3d4583610595610930565b6040518363ffffffff1660e01b81526004016105b2929190611e1a565b600060405180830381600087803b1580156105cc57600080fd5b505af11580156105e0573d6000803e3d6000fd5b505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2baec4a600184846040518463ffffffff1660e01b8152600401610648939291906120be565b600060405180830381600087803b15801561066257600080fd5b505af1158015610676573d6000803e3d6000fd5b50505050610685838383610c42565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ec4d4cb84846106cd610930565b6040518463ffffffff1660e01b81526004016106eb939291906121b9565b600060405180830381600087803b15801561070557600080fd5b505af1158015610719573d6000803e3d6000fd5b50505050505050565b61072b81610c47565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ada8076826040518263ffffffff1660e01b815260040161078691906121fe565b600060405180830381600087803b1580156107a057600080fd5b505af11580156107b4573d6000803e3d6000fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2baec4a600184846040518463ffffffff1660e01b815260040161081b939291906120be565b600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b505050506108578282610d53565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8e2812d8361089e610930565b6040518363ffffffff1660e01b81526004016108bb929190612220565b600060405180830381600087803b1580156108d557600080fd5b505af11580156108e9573d6000803e3d6000fd5b505050505050565b6001818154811061090157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b606060018054806020026020016040519081016040528092919081815260200182805480156109bc57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610972575b5050505050905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109f581610d57565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b75c7dc6826040518263ffffffff1660e01b8152600401610a50919061225f565b600060405180830381600087803b158015610a6a57600080fd5b505af1158015610a7e573d6000803e3d6000fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e253ca60018484346040518563ffffffff1660e01b8152600401610b0d9493929190611dc0565b600060405180830381600087803b158015610b2757600080fd5b505af1158015610b3b573d6000803e3d6000fd5b50505050610b528383610b4c610930565b34610e63565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638ffa736b8484610b9a610930565b6040518463ffffffff1660e01b8152600401610bb89392919061227a565b600060405180830381600087803b158015610bd257600080fd5b505af1158015610be6573d6000803e3d6000fd5b50505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b505050565b505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0fbc748306040518263ffffffff1660e01b8152600401610ca2919061179d565b600060405180830381865afa158015610cbf573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610ce89190612598565b6020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f71f63e3100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0fbc748306040518263ffffffff1660e01b8152600401610db2919061179d565b600060405180830381865afa158015610dcf573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610df89190612598565b6020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e60576040517f71f63e3100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b50505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610eb281610e7d565b8114610ebd57600080fd5b50565b600081359050610ecf81610ea9565b92915050565b600060208284031215610eeb57610eea610e73565b5b6000610ef984828501610ec0565b91505092915050565b60008115159050919050565b610f1781610f02565b82525050565b6000602082019050610f326000830184610f0e565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610f8682610f3d565b810181811067ffffffffffffffff82111715610fa557610fa4610f4e565b5b80604052505050565b6000610fb8610e69565b9050610fc48282610f7d565b919050565b600080fd5b6000819050919050565b610fe181610fce565b8114610fec57600080fd5b50565b600081359050610ffe81610fd8565b92915050565b600067ffffffffffffffff82169050919050565b61102181611004565b811461102c57600080fd5b50565b60008135905061103e81611018565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff82111561106957611068610f4e565b5b61107282610f3d565b9050602081019050919050565b82818337600083830152505050565b60006110a161109c8461104e565b610fae565b9050828152602081018484840111156110bd576110bc611049565b5b6110c884828561107f565b509392505050565b600082601f8301126110e5576110e4611044565b5b81356110f584826020860161108e565b91505092915050565b60006080828403121561111457611113610f38565b5b61111e6080610fae565b9050600061112e84828501610fef565b60008301525060206111428482850161102f565b602083015250604082013567ffffffffffffffff81111561116657611165610fc9565b5b611172848285016110d0565b604083015250606082013567ffffffffffffffff81111561119657611195610fc9565b5b6111a2848285016110d0565b60608301525092915050565b600067ffffffffffffffff8211156111c9576111c8610f4e565b5b602082029050602081019050919050565b600080fd5b60006111f26111ed846111ae565b610fae565b90508083825260208201905060208402830185811115611215576112146111da565b5b835b8181101561125c57803567ffffffffffffffff81111561123a57611239611044565b5b80860161124789826110d0565b85526020850194505050602081019050611217565b5050509392505050565b600082601f83011261127b5761127a611044565b5b813561128b8482602086016111df565b91505092915050565b600080604083850312156112ab576112aa610e73565b5b600083013567ffffffffffffffff8111156112c9576112c8610e78565b5b6112d5858286016110fe565b925050602083013567ffffffffffffffff8111156112f6576112f5610e78565b5b61130285828601611266565b9150509250929050565b600067ffffffffffffffff82111561132757611326610f4e565b5b602082029050602081019050919050565b600061134b6113468461130c565b610fae565b9050808382526020820190506020840283018581111561136e5761136d6111da565b5b835b8181101561139757806113838882610fef565b845260208401935050602081019050611370565b5050509392505050565b600082601f8301126113b6576113b5611044565b5b81356113c6848260208601611338565b91505092915050565b600067ffffffffffffffff8211156113ea576113e9610f4e565b5b602082029050602081019050919050565b600061140e611409846113cf565b610fae565b90508083825260208201905060208402830185811115611431576114306111da565b5b835b8181101561147857803567ffffffffffffffff81111561145657611455611044565b5b80860161146389826110fe565b85526020850194505050602081019050611433565b5050509392505050565b600082601f83011261149757611496611044565b5b81356114a78482602086016113fb565b91505092915050565b600067ffffffffffffffff8211156114cb576114ca610f4e565b5b602082029050602081019050919050565b60006114ef6114ea846114b0565b610fae565b90508083825260208201905060208402830185811115611512576115116111da565b5b835b8181101561155957803567ffffffffffffffff81111561153757611536611044565b5b8086016115448982611266565b85526020850194505050602081019050611514565b5050509392505050565b600082601f83011261157857611577611044565b5b81356115888482602086016114dc565b91505092915050565b6000806000606084860312156115aa576115a9610e73565b5b600084013567ffffffffffffffff8111156115c8576115c7610e78565b5b6115d4868287016113a1565b935050602084013567ffffffffffffffff8111156115f5576115f4610e78565b5b61160186828701611482565b925050604084013567ffffffffffffffff81111561162257611621610e78565b5b61162e86828701611563565b9150509250925092565b60006020828403121561164e5761164d610e73565b5b600082013567ffffffffffffffff81111561166c5761166b610e78565b5b611678848285016113a1565b91505092915050565b6000806040838503121561169857611697610e73565b5b600083013567ffffffffffffffff8111156116b6576116b5610e78565b5b6116c285828601611482565b925050602083013567ffffffffffffffff8111156116e3576116e2610e78565b5b6116ef85828601611563565b9150509250929050565b6000819050919050565b61170c816116f9565b811461171757600080fd5b50565b60008135905061172981611703565b92915050565b60006020828403121561174557611744610e73565b5b60006117538482850161171a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117878261175c565b9050919050565b6117978161177c565b82525050565b60006020820190506117b2600083018461178e565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6117ed8161177c565b82525050565b60006117ff83836117e4565b60208301905092915050565b6000602082019050919050565b6000611823826117b8565b61182d81856117c3565b9350611838836117d4565b8060005b8381101561186957815161185088826117f3565b975061185b8361180b565b92505060018101905061183c565b5085935050505092915050565b600060208201905081810360008301526118908184611818565b905092915050565b6000819050919050565b60006118bd6118b86118b38461175c565b611898565b61175c565b9050919050565b60006118cf826118a2565b9050919050565b60006118e1826118c4565b9050919050565b6118f1816118d6565b82525050565b600060208201905061190c60008301846118e8565b92915050565b60006020828403121561192857611927610e73565b5b600061193684828501610fef565b91505092915050565b600061194a826118c4565b9050919050565b61195a8161193f565b82525050565b60006020820190506119756000830184611951565b92915050565b60008060006060848603121561199457611993610e73565b5b60006119a286828701610fef565b935050602084013567ffffffffffffffff8111156119c3576119c2610e78565b5b6119cf868287016110fe565b925050604084013567ffffffffffffffff8111156119f0576119ef610e78565b5b6119fc86828701611266565b9150509250925092565b6000611a11826118c4565b9050919050565b611a2181611a06565b82525050565b6000602082019050611a3c6000830184611a18565b92915050565b6000611a4d8261175c565b9050919050565b611a5d81611a42565b8114611a6857600080fd5b50565b600081359050611a7a81611a54565b92915050565b60008060408385031215611a9757611a96610e73565b5b6000611aa585828601611a6b565b9250506020611ab68582860161171a565b9150509250929050565b6000611acb826118c4565b9050919050565b611adb81611ac0565b82525050565b6000602082019050611af66000830184611ad2565b92915050565b600081549050919050565b60008190508160005260206000209050919050565b60008160001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b5c611b5783611b1c565b611b29565b9050919050565b6000611b6f8254611b49565b9050919050565b6000600182019050919050565b6000611b8e82611afc565b611b9881856117c3565b9350611ba383611b07565b8060005b83811015611bdb57611bb882611b63565b611bc288826117f3565b9750611bcd83611b76565b925050600181019050611ba7565b5085935050505092915050565b611bf181610fce565b82525050565b611c0081611004565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c40578082015181840152602081019050611c25565b60008484015250505050565b6000611c5782611c06565b611c618185611c11565b9350611c71818560208601611c22565b611c7a81610f3d565b840191505092915050565b6000608083016000830151611c9d6000860182611be8565b506020830151611cb06020860182611bf7565b5060408301518482036040860152611cc88282611c4c565b91505060608301518482036060860152611ce28282611c4c565b9150508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611d278383611c4c565b905092915050565b6000602082019050919050565b6000611d4782611cef565b611d518185611cfa565b935083602082028501611d6385611d0b565b8060005b85811015611d9f5784840389528151611d808582611d1b565b9450611d8b83611d2f565b925060208a01995050600181019050611d67565b50829750879550505050505092915050565b611dba816116f9565b82525050565b60006080820190508181036000830152611dda8187611b83565b90508181036020830152611dee8186611c85565b90508181036040830152611e028185611d3c565b9050611e116060830184611db1565b95945050505050565b60006040820190508181036000830152611e348185611c85565b9050611e43602083018461178e565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000608083016000830151611e8e6000860182611be8565b506020830151611ea16020860182611bf7565b5060408301518482036040860152611eb98282611c4c565b91505060608301518482036060860152611ed38282611c4c565b9150508091505092915050565b6000611eec8383611e76565b905092915050565b6000602082019050919050565b6000611f0c82611e4a565b611f168185611e55565b935083602082028501611f2885611e66565b8060005b85811015611f645784840389528151611f458582611ee0565b9450611f5083611ef4565b925060208a01995050600181019050611f2c565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000611fbe82611cef565b611fc88185611fa2565b935083602082028501611fda85611d0b565b8060005b858110156120165784840389528151611ff78582611d1b565b945061200283611d2f565b925060208a01995050600181019050611fde565b50829750879550505050505092915050565b60006120348383611fb3565b905092915050565b6000602082019050919050565b600061205482611f76565b61205e8185611f81565b93508360208202850161207085611f92565b8060005b858110156120ac578484038952815161208d8582612028565b94506120988361203c565b925060208a01995050600181019050612074565b50829750879550505050505092915050565b600060608201905081810360008301526120d88186611b83565b905081810360208301526120ec8185611f01565b905081810360408301526121008184612049565b9050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006121428383611be8565b60208301905092915050565b6000602082019050919050565b60006121668261210a565b6121708185612115565b935061217b83612126565b8060005b838110156121ac5781516121938882612136565b975061219e8361214e565b92505060018101905061217f565b5085935050505092915050565b600060608201905081810360008301526121d3818661215b565b905081810360208301526121e78185611f01565b90506121f6604083018461178e565b949350505050565b60006020820190508181036000830152612218818461215b565b905092915050565b6000604082019050818103600083015261223a8185611f01565b9050612249602083018461178e565b9392505050565b61225981610fce565b82525050565b60006020820190506122746000830184612250565b92915050565b600060608201905061228f6000830186612250565b81810360208301526122a18185611c85565b90506122b0604083018461178e565b949350505050565b6122c18161177c565b81146122cc57600080fd5b50565b6000815190506122de816122b8565b92915050565b600067ffffffffffffffff8211156122ff576122fe610f4e565b5b602082029050602081019050919050565b600061232361231e846122e4565b610fae565b90508083825260208201905060208402830185811115612346576123456111da565b5b835b8181101561236f578061235b88826122cf565b845260208401935050602081019050612348565b5050509392505050565b600082601f83011261238e5761238d611044565b5b815161239e848260208601612310565b91505092915050565b6123b081610f02565b81146123bb57600080fd5b50565b6000815190506123cd816123a7565b92915050565b600067ffffffffffffffff8211156123ee576123ed610f4e565b5b6123f782610f3d565b9050602081019050919050565b6000612417612412846123d3565b610fae565b90508281526020810184848401111561243357612432611049565b5b61243e848285611c22565b509392505050565b600082601f83011261245b5761245a611044565b5b815161246b848260208601612404565b91505092915050565b600060e0828403121561248a57612489610f38565b5b61249460e0610fae565b905060006124a4848285016122cf565b60008301525060206124b8848285016122cf565b602083015250604082015167ffffffffffffffff8111156124dc576124db610fc9565b5b6124e884828501612379565b60408301525060606124fc848285016123be565b606083015250608082015167ffffffffffffffff8111156125205761251f610fc9565b5b61252c84828501612446565b60808301525060a082015167ffffffffffffffff8111156125505761254f610fc9565b5b61255c84828501612446565b60a08301525060c082015167ffffffffffffffff8111156125805761257f610fc9565b5b61258c84828501612446565b60c08301525092915050565b6000602082840312156125ae576125ad610e73565b5b600082015167ffffffffffffffff8111156125cc576125cb610e78565b5b6125d884828501612474565b9150509291505056fea26469706673582212200568c57ce747219aa4ab9654d0f491eee5f75505562c8afdb74b5167140455c964736f6c63430008150033" + }, + { + "address": "0x8755d1f468e1a2aa92928bfe24cf4c0a1ede9437", + "nonce": 6, + "balance": "0x000000000000000000000000000000000000000000000000000a3ed9cca2cb20", + "code": "0x" + }, + { + "address": "0xd3575c36745536246b3f2c82d8932de68616ede7", + "nonce": 68, + "balance": "0x0000000000000000000000000000000000000000000000000012b1b9e4711464", + "code": "0x" + }, + { + "address": "0xb787edf42d4b6d331c523c91cea2d148d608b242", + "nonce": 8, + "balance": "0x000000000000000000000000000000000000000000000000000f783fb68daae6", + "code": "0x" + }, + { + "address": "0xbf1aa473e60388c734ed39c98ab9da90e90bc71e", + "nonce": 21, + "balance": "0x000000000000000000000000000000000000000000000000001d7bdc17cb310d", + "code": "0x" + }, + { + "address": "0x66c45ff040e86dc613f239123a5e21ffdc3a3fec", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806330e6ae311461003b5780636f7929f2146100fc575b600080fd5b6100fa6004803603606081101561005157600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561008557600080fd5b82018360208201111561009757600080fd5b803590602001918460018302840111640100000000831117156100b957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506101bb945050505050565b005b6100fa6004803603606081101561011257600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561014657600080fd5b82018360208201111561015857600080fd5b8035906020019184600183028401116401000000008311171561017a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610244945050505050565b816001600160a01b031663bd6015b4846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561021357600080fd5b505af1158015610227573d6000803e3d6000fd5b505050506040513d602081101561023d57600080fd5b5050505050565b816001600160a01b031663dd93f59a846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561021357600080fdfea264697066735822122006b740683837ef66d30a74b852e22c5873da4f543bed9f58bf1c0705458adb6764736f6c63430006090033" + }, + { + "address": "0x9c8d59f4b41f292c4fe663581e880928cd8eeb07", + "nonce": 127, + "balance": "0x0000000000000000000000000000000000000000000000000035a17d0c9f66f8", + "code": "0x" + }, + { + "address": "0x4282c8e153b0cdd87292e164ee0e88e616cc8e1a", + "nonce": 5, + "balance": "0x000000000000000000000000000000000000000000000000000cdfd42bd9c1b0", + "code": "0x" + }, + { + "address": "0xf9d64d54d32ee2bdceaabfa60c4c438e224427d0", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ad718d2a14610030575b600080fd5b61004361003e366004610312565b610045565b005b6100d185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601c81527f47656c61746f52656c61792e73706f6e736f72656443616c6c56323a00000000602082015273ffffffffffffffffffffffffffffffffffffffff8b169392509050610103565b506040517f8e4f8b7f1299a63a6b46587ec357933d2006e5697cd46d99297e670cee1dbeb190600090a1505050505050565b606060008473ffffffffffffffffffffffffffffffffffffffff168460405161012c91906103eb565b6000604051808303816000865af19150503d8060008114610169576040519150601f19603f3d011682016040523d82523d6000602084013e61016e565b606091505b509250905080156102045781516000036101ff5773ffffffffffffffffffffffffffffffffffffffff85163b1515836040516020016101ad9190610407565b604051602081830303815290604052906101fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f49190610448565b60405180910390fd5b505b61020e565b61020e8284610216565b509392505050565b602082516102249190610499565b6004036103015760208201517fffffffff0000000000000000000000000000000000000000000000000000000081167f08c379a000000000000000000000000000000000000000000000000000000000036102f05760448301925081836040516020016102929291906104d4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526101f491600401610448565b816040516020016102929190610503565b806040516020016102929190610544565b60008060008060008060a0878903121561032b57600080fd5b863573ffffffffffffffffffffffffffffffffffffffff8116811461034f57600080fd5b9550602087013567ffffffffffffffff8082111561036c57600080fd5b818901915089601f83011261038057600080fd5b81358181111561038f57600080fd5b8a60208285010111156103a157600080fd5b979a60209290920199509697604081013597506060810135965060800135945092505050565b60005b838110156103e25781810151838201526020016103ca565b50506000910152565b600082516103fd8184602087016103c7565b9190910192915050565b600082516104198184602087016103c7565b7f43616c6c20746f206e6f6e20636f6e7472616374000000000000000000000000920191825250601401919050565b60208152600082518060208401526104678160408501602087016103c7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000826104cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b600083516104e68184602088016103c7565b8351908301906104fa8183602088016103c7565b01949350505050565b600082516105158184602087016103c7565b7f4e6f4572726f7253656c6563746f720000000000000000000000000000000000920191825250600f01919050565b600082516105568184602087016103c7565b7f556e657870656374656452657475726e6461746100000000000000000000000092019182525060140191905056fea2646970667358221220582610a37287a07756e82c4742887f464821fa0391645f7cf8c1a59deaf80aa564736f6c63430008140033" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "nonce": 1, + "balance": "0x000000000000000000000000000000000000000000000000309fa4962b894000", + "code": "0x60806040526004361061014b5760003560e01c8063717a002b116100b657806395d89b411161006f57806395d89b411461045b578063a22cb46514610486578063b88d4fde146104af578063bdb4b848146104d8578063c87b56dd14610503578063e985e9c5146105405761014b565b8063717a002b146103715780638545f4ea1461039c5780638584c1fa146103c5578063879dbfed146103ee578063931e2e49146104055780639382f739146104305761014b565b806318160ddd1161010857806318160ddd1461025157806323b872dd1461027c57806342842e0e146102a557806351cff8d9146102ce5780636352211e146102f757806370a08231146103345761014b565b806301ffc9a71461015057806302fe53051461018d57806306fdde03146101b6578063081812fc146101e1578063095ea7b31461021e5780631249c58b14610247575b600080fd5b34801561015c57600080fd5b5061017760048036038101906101729190612259565b61057d565b60405161018491906122a1565b60405180910390f35b34801561019957600080fd5b506101b460048036038101906101af9190612402565b61065f565b005b3480156101c257600080fd5b506101cb610789565b6040516101d891906124d3565b60405180910390f35b3480156101ed57600080fd5b506102086004803603810190610203919061252b565b61081b565b6040516102159190612599565b60405180910390f35b34801561022a57600080fd5b50610245600480360381019061024091906125e0565b610861565b005b61024f610979565b005b34801561025d57600080fd5b50610266610a98565b604051610273919061262f565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061264a565b610a9e565b005b3480156102b157600080fd5b506102cc60048036038101906102c7919061264a565b610b2e565b005b3480156102da57600080fd5b506102f560048036038101906102f091906126db565b610bbe565b005b34801561030357600080fd5b5061031e6004803603810190610319919061252b565b610db8565b60405161032b9190612599565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190612708565b610e3f565b604051610368919061262f565b60405180910390f35b34801561037d57600080fd5b50610386610ef7565b604051610393919061262f565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be919061252b565b610efd565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190612735565b61104b565b005b3480156103fa57600080fd5b50610403611235565b005b34801561041157600080fd5b5061041a61133c565b604051610427919061262f565b60405180910390f35b34801561043c57600080fd5b50610445611342565b60405161045291906127e7565b60405180910390f35b34801561046757600080fd5b50610470611368565b60405161047d91906124d3565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a8919061282e565b6113fa565b005b3480156104bb57600080fd5b506104d660048036038101906104d1919061290f565b611410565b005b3480156104e457600080fd5b506104ed611472565b6040516104fa919061262f565b60405180910390f35b34801561050f57600080fd5b5061052a6004803603810190610525919061252b565b611478565b60405161053791906124d3565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190612992565b611515565b60405161057491906122a1565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106585750610657826115a9565b5b9050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b81526004016106ba9190612599565b602060405180830381865afa1580156106d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fb91906129e7565b610731576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008151141561076e576040517f3ba0191100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600b908051906020019061078492919061214a565b505050565b60606000805461079890612a43565b80601f01602080910402602001604051908101604052809291908181526020018280546107c490612a43565b80156108115780601f106107e657610100808354040283529160200191610811565b820191906000526020600020905b8154815290600101906020018083116107f457829003601f168201915b5050505050905090565b600061082682611613565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086c82610db8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d490612ae7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc61165e565b73ffffffffffffffffffffffffffffffffffffffff16148061092b575061092a8161092561165e565b611515565b5b61096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096190612b79565b60405180910390fd5b6109748383611666565b505050565b6007544210156109b5576040517ff3c63b2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600854141580156109c9575060085442115b15610a00576040517ff3c63b2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009543414610a3b576040517fa295726b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4733600a5461171f565b600a6000815480929190610a5a90612bc8565b91905055507f3c3284d117c92d0b1699230960384e794dcba184cc48ff114fe4fed20c9b056533604051610a8e9190612599565b60405180910390a1565b600a5481565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b1d5760006008541480610ae5575060085442105b15610b1c576040517fa24e573d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610b2884848461193d565b50505050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bad5760006008541480610b75575060085442105b15610bac576040517fa24e573d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610bb884848461199d565b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b8152600401610c199190612599565b602060405180830381865afa158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5a91906129e7565b610c90576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790506000811415610cd0576040517f669567ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610cf690612c42565b60006040518083038185875af1925050503d8060008114610d33576040519150601f19603f3d011682016040523d82523d6000602084013e610d38565b606091505b5050905080610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7390612ca3565b60405180910390fd5b7ff67611512e0a2d90c96fd3f08dca4971bc45fba9dc679eabe839a32abbe58a8e83604051610dab9190612ce4565b60405180910390a1505050565b600080610dc4836119bd565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90612d4b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea790612ddd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b8152600401610f589190612599565b602060405180830381865afa158015610f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9991906129e7565b610fcf576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081141561100a576040517f6c4aabce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806009819055507ff66fd9d9623ddfdc9ce19324c9037f799c288f2c29e0ab4df866d8296d592e4381604051611040919061262f565b60405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b81526004016110a69190612599565b602060405180830381865afa1580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e791906129e7565b61111d576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282824283101561115a576040517fb290253c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821415801561116b5750828211155b156111a2576040517f38af65f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008114156111dd576040517f6c4aabce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560078190555084600881905550836009819055507ff7bb3cb650f5d805d4b17ede5d7d1b950b9d95c2bbb1bc3d20775c94d6af435686868660405161122593929190612dfd565b60405180910390a1505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3ae2415336040518263ffffffff1660e01b81526004016112909190612599565b602060405180830381865afa1580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d191906129e7565b611307576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426008819055507f3e0a88b7f473f23267f4f675ce2bf9648d402704c089c5dea378f1433a7ba0d460405160405180910390a1565b60075481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001805461137790612a43565b80601f01602080910402602001604051908101604052809291908181526020018280546113a390612a43565b80156113f05780601f106113c5576101008083540402835291602001916113f0565b820191906000526020600020905b8154815290600101906020018083116113d357829003601f168201915b5050505050905090565b61140c61140561165e565b83836119fa565b5050565b61142161141b61165e565b83611b67565b611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790612ea6565b60405180910390fd5b61146c84848484611bfc565b50505050565b60095481565b606061148382611613565b600b805461149090612a43565b80601f01602080910402602001604051908101604052809291908181526020018280546114bc90612a43565b80156115095780601f106114de57610100808354040283529160200191611509565b820191906000526020600020905b8154815290600101906020018083116114ec57829003601f168201915b50505050509050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61161c81611c58565b61165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290612d4b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116d983610db8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690612f12565b60405180910390fd5b61179881611c58565b156117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90612f7e565b60405180910390fd5b6117e6600083836001611c99565b6117ef81611c58565b1561182f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182690612f7e565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611939600083836001611c9f565b5050565b61194e61194861165e565b82611b67565b61198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490612ea6565b60405180910390fd5b611998838383611ca5565b505050565b6119b883838360405180602001604052806000815250611410565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090612fea565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b5a91906122a1565b60405180910390a3505050565b600080611b7383610db8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bb55750611bb48185611515565b5b80611bf357508373ffffffffffffffffffffffffffffffffffffffff16611bdb8461081b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b611c07848484611ca5565b611c1384848484611f9f565b611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c499061307c565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611c7a836119bd565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b8273ffffffffffffffffffffffffffffffffffffffff16611cc582610db8565b73ffffffffffffffffffffffffffffffffffffffff1614611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d129061310e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d82906131a0565b60405180910390fd5b611d988383836001611c99565b8273ffffffffffffffffffffffffffffffffffffffff16611db882610db8565b73ffffffffffffffffffffffffffffffffffffffff1614611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e059061310e565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f9a8383836001611c9f565b505050565b6000611fc08473ffffffffffffffffffffffffffffffffffffffff16612127565b1561211a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fe961165e565b8786866040518563ffffffff1660e01b815260040161200b9493929190613215565b6020604051808303816000875af192505050801561204757506040513d601f19601f820116820180604052508101906120449190613276565b60015b6120ca573d8060008114612077576040519150601f19603f3d011682016040523d82523d6000602084013e61207c565b606091505b506000815114156120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b99061307c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061211f565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461215690612a43565b90600052602060002090601f01602090048101928261217857600085556121bf565b82601f1061219157805160ff19168380011785556121bf565b828001600101855582156121bf579182015b828111156121be5782518255916020019190600101906121a3565b5b5090506121cc91906121d0565b5090565b5b808211156121e95760008160009055506001016121d1565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61223681612201565b811461224157600080fd5b50565b6000813590506122538161222d565b92915050565b60006020828403121561226f5761226e6121f7565b5b600061227d84828501612244565b91505092915050565b60008115159050919050565b61229b81612286565b82525050565b60006020820190506122b66000830184612292565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61230f826122c6565b810181811067ffffffffffffffff8211171561232e5761232d6122d7565b5b80604052505050565b60006123416121ed565b905061234d8282612306565b919050565b600067ffffffffffffffff82111561236d5761236c6122d7565b5b612376826122c6565b9050602081019050919050565b82818337600083830152505050565b60006123a56123a084612352565b612337565b9050828152602081018484840111156123c1576123c06122c1565b5b6123cc848285612383565b509392505050565b600082601f8301126123e9576123e86122bc565b5b81356123f9848260208601612392565b91505092915050565b600060208284031215612418576124176121f7565b5b600082013567ffffffffffffffff811115612436576124356121fc565b5b612442848285016123d4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561248557808201518184015260208101905061246a565b83811115612494576000848401525b50505050565b60006124a58261244b565b6124af8185612456565b93506124bf818560208601612467565b6124c8816122c6565b840191505092915050565b600060208201905081810360008301526124ed818461249a565b905092915050565b6000819050919050565b612508816124f5565b811461251357600080fd5b50565b600081359050612525816124ff565b92915050565b600060208284031215612541576125406121f7565b5b600061254f84828501612516565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061258382612558565b9050919050565b61259381612578565b82525050565b60006020820190506125ae600083018461258a565b92915050565b6125bd81612578565b81146125c857600080fd5b50565b6000813590506125da816125b4565b92915050565b600080604083850312156125f7576125f66121f7565b5b6000612605858286016125cb565b925050602061261685828601612516565b9150509250929050565b612629816124f5565b82525050565b60006020820190506126446000830184612620565b92915050565b600080600060608486031215612663576126626121f7565b5b6000612671868287016125cb565b9350506020612682868287016125cb565b925050604061269386828701612516565b9150509250925092565b60006126a882612558565b9050919050565b6126b88161269d565b81146126c357600080fd5b50565b6000813590506126d5816126af565b92915050565b6000602082840312156126f1576126f06121f7565b5b60006126ff848285016126c6565b91505092915050565b60006020828403121561271e5761271d6121f7565b5b600061272c848285016125cb565b91505092915050565b60008060006060848603121561274e5761274d6121f7565b5b600061275c86828701612516565b935050602061276d86828701612516565b925050604061277e86828701612516565b9150509250925092565b6000819050919050565b60006127ad6127a86127a384612558565b612788565b612558565b9050919050565b60006127bf82612792565b9050919050565b60006127d1826127b4565b9050919050565b6127e1816127c6565b82525050565b60006020820190506127fc60008301846127d8565b92915050565b61280b81612286565b811461281657600080fd5b50565b60008135905061282881612802565b92915050565b60008060408385031215612845576128446121f7565b5b6000612853858286016125cb565b925050602061286485828601612819565b9150509250929050565b600067ffffffffffffffff821115612889576128886122d7565b5b612892826122c6565b9050602081019050919050565b60006128b26128ad8461286e565b612337565b9050828152602081018484840111156128ce576128cd6122c1565b5b6128d9848285612383565b509392505050565b600082601f8301126128f6576128f56122bc565b5b813561290684826020860161289f565b91505092915050565b60008060008060808587031215612929576129286121f7565b5b6000612937878288016125cb565b9450506020612948878288016125cb565b935050604061295987828801612516565b925050606085013567ffffffffffffffff81111561297a576129796121fc565b5b612986878288016128e1565b91505092959194509250565b600080604083850312156129a9576129a86121f7565b5b60006129b7858286016125cb565b92505060206129c8858286016125cb565b9150509250929050565b6000815190506129e181612802565b92915050565b6000602082840312156129fd576129fc6121f7565b5b6000612a0b848285016129d2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a5b57607f821691505b60208210811415612a6f57612a6e612a14565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ad1602183612456565b9150612adc82612a75565b604082019050919050565b60006020820190508181036000830152612b0081612ac4565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000612b63603d83612456565b9150612b6e82612b07565b604082019050919050565b60006020820190508181036000830152612b9281612b56565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bd3826124f5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c0657612c05612b99565b5b600182019050919050565b600081905092915050565b50565b6000612c2c600083612c11565b9150612c3782612c1c565b600082019050919050565b6000612c4d82612c1f565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000612c8d600f83612456565b9150612c9882612c57565b602082019050919050565b60006020820190508181036000830152612cbc81612c80565b9050919050565b6000612cce826127b4565b9050919050565b612cde81612cc3565b82525050565b6000602082019050612cf96000830184612cd5565b92915050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000612d35601883612456565b9150612d4082612cff565b602082019050919050565b60006020820190508181036000830152612d6481612d28565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000612dc7602983612456565b9150612dd282612d6b565b604082019050919050565b60006020820190508181036000830152612df681612dba565b9050919050565b6000606082019050612e126000830186612620565b612e1f6020830185612620565b612e2c6040830184612620565b949350505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000612e90602d83612456565b9150612e9b82612e34565b604082019050919050565b60006020820190508181036000830152612ebf81612e83565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612efc602083612456565b9150612f0782612ec6565b602082019050919050565b60006020820190508181036000830152612f2b81612eef565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612f68601c83612456565b9150612f7382612f32565b602082019050919050565b60006020820190508181036000830152612f9781612f5b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612fd4601983612456565b9150612fdf82612f9e565b602082019050919050565b6000602082019050818103600083015261300381612fc7565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613066603283612456565b91506130718261300a565b604082019050919050565b6000602082019050818103600083015261309581613059565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006130f8602583612456565b91506131038261309c565b604082019050919050565b60006020820190508181036000830152613127816130eb565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061318a602483612456565b91506131958261312e565b604082019050919050565b600060208201905081810360008301526131b98161317d565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006131e7826131c0565b6131f181856131cb565b9350613201818560208601612467565b61320a816122c6565b840191505092915050565b600060808201905061322a600083018761258a565b613237602083018661258a565b6132446040830185612620565b818103606083015261325681846131dc565b905095945050505050565b6000815190506132708161222d565b92915050565b60006020828403121561328c5761328b6121f7565b5b600061329a84828501613261565b9150509291505056fea26469706673582212208544ccbd8a093d9d28b750f429637b8f066bb33021875b8b1bb168edf30fda4064736f6c634300080c0033" + }, + { + "address": "0x608cb7c3168427091f5994a45baf12083964b4a3", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101425760003560e01c806379ba5097116100b8578063d0fb02031161007c578063d0fb0203146102a3578063e30c3978146102b6578063f2fde38b146102c7578063f6c00927146102da578063faff4f0814610303578063fbfa77cf1461031657600080fd5b806379ba5097146102515780638da5cb5b146102595780639dd41df21461026a578063abcef5541461027d578063ac4afa381461029057600080fd5b80634625a94d1161010a5780634625a94d146101e5578063472d35b9146101f85780634ccb20c01461020b5780635b16ebb714610213578063715018a614610236578063784198d91461023e57600080fd5b80630a992e0c146101475780630e16943b146101705780632716ae66146101855780632b4c9f161461019557806343a0fcc4146101b5575b600080fd5b61015a610155366004610a4a565b61033d565b6040516101679190610a78565b60405180910390f35b61018361017e366004610a99565b6103b5565b005b6007546040516101679190610adc565b6002546101a8906001600160a01b031681565b6040516101679190610af3565b6101d86101c3366004610a4a565b60046020526000908152604090205460ff1681565b6040516101679190610b09565b61015a6101f3366004610b69565b61044c565b610183610206366004610a4a565b6104d3565b6101a8610525565b6101d8610221366004610a4a565b60056020526000908152604090205460ff1681565b610183610598565b61018361024c366004610c14565b6105ac565b610183610758565b6000546001600160a01b03166101a8565b6101a8610278366004610c82565b61079a565b6101d861028b366004610a4a565b610816565b6101a861029e366004610cef565b610888565b6003546101a8906001600160a01b031681565b6001546001600160a01b03166101a8565b6101836102d5366004610a4a565b6108b2565b6101a86102e8366004610cef565b6006602052600090815260409020546001600160a01b031681565b610183610311366004610a4a565b610923565b6101a87f0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b81565b6003546040516302a64b8360e21b81526000916001600160a01b031690630a992e0c9061036e908590600401610af3565b602060405180830381865afa15801561038b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103af9190610d26565b92915050565b6103bd6109c5565b6001600160a01b0382166103ec5760405162461bcd60e51b81526004016103e390610d70565b60405180910390fd5b6001600160a01b03821660008181526004602052604090819020805460ff1916841515179055517f2c54fd9c1d7578da6d66f809aa31e327bc1a6cad6dc1d439f4b21adce023a15690610440908490610b09565b60405180910390a25050565b600354604051634625a94d60e01b81526000916001600160a01b031690634625a94d90610487908a908a908a908a908a908a90600401610daf565b602060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190610d26565b979650505050505050565b6104db6109c5565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f98a0dc993512fd2ddd1a4ee28a53d1275ec3c174565e996b03d4718909237bf890600090a250565b600354604080516301332c8360e61b815290516000926001600160a01b031691634ccb20c09160048083019260209291908290030181865afa15801561056f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105939190610e0e565b905090565b6105a06109c5565b6105aa60006109fe565b565b3360009081526004602052604090205460ff166105dc576040516329951ebb60e21b815260040160405180910390fd5b6001600160a01b0384166105ef57600080fd5b6001600160a01b03841660009081526005602052604090205460ff161561062957604051630188c99160e11b815260040160405180910390fd5b600083838360405160200161064093929190610e39565b60408051601f198184030181529181528151602092830120600081815260069093529120549091506001600160a01b03161561068f57604051630188c99160e11b815260040160405180910390fd5b600081815260066020908152604080832080546001600160a01b038a166001600160a01b031991821681179092558185526005909352818420805460ff191660019081179091556007805491820181559094527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688909301805490921683179091555161ffff8616919033907f4318beca5ca4f759b99c1f5f581fa8255b077a82e4c07f17213c471af5a0f56a906107499088908890610e63565b60405180910390a45050505050565b3361076b6001546001600160a01b031690565b6001600160a01b0316146107915760405162461bcd60e51b81526004016103e390610e75565b6105aa336109fe565b6040516313b8683f60e01b81526000906001600160a01b038516906313b8683f906107cb9086908690600401610e63565b6020604051808303816000875af11580156107ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080e9190610e0e565b949350505050565b600254604051632af3bd5560e21b81526000916001600160a01b03169063abcef55490610847908590600401610af3565b602060405180830381865afa158015610864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103af9190610ecd565b6007818154811061089857600080fd5b6000918252602090912001546001600160a01b0316905081565b6108ba6109c5565b600180546001600160a01b0383166001600160a01b031990911681179091556108eb6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61092b6109c5565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f41e309325204d4979853ee58efce248d83b12200f22fe333be8e33bbf748a71b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336109d86000546001600160a01b031690565b6001600160a01b0316146105aa5760405162461bcd60e51b81526004016103e390610f20565b600180546001600160a01b0319169055610a1781610975565b50565b60006001600160a01b0382166103af565b610a3481610a1a565b8114610a1757600080fd5b80356103af81610a2b565b600060208284031215610a5f57610a5f600080fd5b600061080e8484610a3f565b62ffffff81165b82525050565b602081016103af8284610a6b565b801515610a34565b80356103af81610a86565b60008060408385031215610aaf57610aaf600080fd5b6000610abb8585610a3f565b9250506020610acc85828601610a8e565b9150509250929050565b80610a72565b602081016103af8284610ad6565b610a7281610a1a565b602081016103af8284610aea565b801515610a72565b602081016103af8284610b01565b60008083601f840112610b2c57610b2c600080fd5b50813567ffffffffffffffff811115610b4757610b47600080fd5b602083019150836001820283011115610b6257610b62600080fd5b9250929050565b60008060008060008060a08789031215610b8557610b85600080fd5b6000610b918989610a3f565b9650506020610ba289828a01610a3f565b9550506040610bb389828a01610a3f565b9450506060610bc489828a01610a3f565b935050608087013567ffffffffffffffff811115610be457610be4600080fd5b610bf089828a01610b17565b92509250509295509295509295565b61ffff8116610a34565b80356103af81610bff565b60008060008060608587031215610c2d57610c2d600080fd5b6000610c398787610a3f565b9450506020610c4a87828801610c09565b935050604085013567ffffffffffffffff811115610c6a57610c6a600080fd5b610c7687828801610b17565b95989497509550505050565b600080600060408486031215610c9a57610c9a600080fd5b6000610ca68686610a3f565b935050602084013567ffffffffffffffff811115610cc657610cc6600080fd5b610cd286828701610b17565b92509250509250925092565b80610a34565b80356103af81610cde565b600060208284031215610d0457610d04600080fd5b600061080e8484610ce4565b62ffffff8116610a34565b80516103af81610d10565b600060208284031215610d3b57610d3b600080fd5b600061080e8484610d1b565b600f81526000602082016e496e76616c696420666163746f727960881b815291505b5060200190565b602080825281016103af81610d47565b82818337506000910152565b8183526000602084019350610da2838584610d80565b5050601f01601f19160190565b60a08101610dbd8289610aea565b610dca6020830188610aea565b610dd76040830187610aea565b610de46060830186610aea565b8181036080830152610df7818486610d8c565b98975050505050505050565b80516103af81610a2b565b600060208284031215610e2357610e23600080fd5b600061080e8484610e03565b61ffff8116610a72565b60408101610e478286610e2f565b8181036020830152610e5a818486610d8c565b95945050505050565b6020808252810161080e818486610d8c565b602080825281016103af81602981527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206020820152683732bb9037bbb732b960b91b604082015260600190565b80516103af81610a86565b600060208284031215610ee257610ee2600080fd5b600061080e8484610ec2565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000610d69565b602080825281016103af81610eee56fea264697066735822122055fdd8a1c1c750e3cb161950ef5ba543eca3c17fd5081ef45a3c689aacd8f15664736f6c634300080f0033" + }, + { + "address": "0xb0c43b8ade08a550ece33f1e0d08d611285db1ac", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063c3c5a5471161008c578063e8e253ca11610066578063e8e253ca14610237578063f030bba614610253578063f2fde38b14610271578063f887ea401461028d576100ea565b8063c3c5a547146101cf578063c851cc32146101ff578063e2baec4a1461021b576100ea565b80638129fc1c116100c85780638129fc1c146101455780638da5cb5b1461014f5780638ed9606a1461016d578063a8ee49fe1461019d576100ea565b80635664d69c146100ef5780636155fdf71461010b578063715018a61461013b575b600080fd5b610109600480360381019061010491906112e5565b6102ab565b005b610125600480360381019061012091906113a6565b6106df565b60405161013291906113e2565b60405180910390f35b61014361071e565b005b61014d610732565b005b610157610870565b60405161016491906113e2565b60405180910390f35b610187600480360381019061018291906113fd565b61089a565b6040516101949190611445565b60405180910390f35b6101b760048036038101906101b291906113fd565b6108bd565b6040516101c6939291906114df565b60405180910390f35b6101e960048036038101906101e491906113fd565b610a17565b6040516101f69190611445565b60405180910390f35b610219600480360381019061021491906113fd565b610a71565b005b61023560048036038101906102309190611a60565b610b23565b005b610251600480360381019061024c9190611b07565b610b9b565b005b61025b610d1d565b6040516102689190611bd1565b60405180910390f35b61028b600480360381019061028691906113fd565b610d2a565b005b610295610dad565b6040516102a29190611c4b565b60405180910390f35b336000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7dac9766040518163ffffffff1660e01b8152600401602060405180830381865afa15801561031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033f9190611c7b565b73ffffffffffffffffffffffffffffffffffffffff1663877b9a67836040518263ffffffff1660e01b815260040161037791906113e2565b602060405180830381865afa158015610394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b89190611cd4565b9050806103f1576040517f55b51ef100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085510361042c576040517f47e7a18000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104358361089a565b61046b576040517fe9a0ae2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610495837f367e8d1700000000000000000000000000000000000000000000000000000000610dd3565b6104cb576040517f74be437f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101805461051a90611d30565b90501115610554576040517f2157f2d700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180606001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815250606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190816106209190611f03565b5060408201518160020190816106369190611f03565b509050506067839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fceccd3e08ae8e7df061ddbcd07655a0d0ee04296ddcf9cb2a95bc7b9e23bd7298585856040516106d093929190611fd5565b60405180910390a15050505050565b606781815481106106ef57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610726610df8565b6107306000610e76565b565b60008060019054906101000a900460ff161590508080156107635750600160008054906101000a900460ff1660ff16105b80610790575061077230610f3c565b15801561078f5750600160008054906101000a900460ff1660ff16145b5b6107cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c69061208c565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561080c576001600060016101000a81548160ff0219169083151502179055505b610814610f5f565b801561086d5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161086491906120f4565b60405180910390a15b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60666020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461090690611d30565b80601f016020809104026020016040519081016040528092919081815260200182805461093290611d30565b801561097f5780601f106109545761010080835404028352916020019161097f565b820191906000526020600020905b81548152906001019060200180831161096257829003601f168201915b50505050509080600201805461099490611d30565b80601f01602080910402602001604051908101604052809291908181526020018280546109c090611d30565b8015610a0d5780601f106109e257610100808354040283529160200191610a0d565b820191906000526020600020905b8154815290600101906020018083116109f057829003601f168201915b5050505050905083565b600080606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054610a6790611d30565b9050119050919050565b610a79610df8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610adf576040517f4944068e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005b82518163ffffffff161015610b9557610b8284848363ffffffff1681518110610b5257610b5161210f565b5b6020026020010151848463ffffffff1681518110610b7357610b7261210f565b5b60200260200101516000610b9b565b8080610b8d9061217d565b915050610b26565b50505050565b600084510315610d17578151845114610be0576040517f083247ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b84518163ffffffff161015610d1557610c1b858263ffffffff1681518110610c0e57610c0d61210f565b5b6020026020010151610a17565b610c51576040517f9c4aee9e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b848163ffffffff1681518110610c6a57610c6961210f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663378144b085858463ffffffff1681518110610ca757610ca661210f565b5b602002602001015132866040518563ffffffff1660e01b8152600401610cd094939291906122d0565b600060405180830381600087803b158015610cea57600080fd5b505af1158015610cfe573d6000803e3d6000fd5b505050508080610d0d9061217d565b915050610be3565b505b50505050565b6000606780549050905090565b610d32610df8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9890612395565b60405180910390fd5b610daa81610e76565b50565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610dde83610fb8565b8015610df05750610def8383611005565b5b905092915050565b610e006110c4565b73ffffffffffffffffffffffffffffffffffffffff16610e1e610870565b73ffffffffffffffffffffffffffffffffffffffff1614610e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6b90612401565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590612493565b60405180910390fd5b610fb66110cc565b565b6000610fe4827f01ffc9a700000000000000000000000000000000000000000000000000000000611005565b8015610ffe5750610ffc8263ffffffff60e01b611005565b155b9050919050565b6000806301ffc9a760e01b8360405160240161102191906124ee565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806000602060008551602087018a617530fa92503d915060005190508280156110ac575060208210155b80156110b85750600081115b94505050505092915050565b600033905090565b600060019054906101000a900460ff1661111b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111290612493565b60405180910390fd5b61112b6111266110c4565b610e76565b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6111948261114b565b810181811067ffffffffffffffff821117156111b3576111b261115c565b5b80604052505050565b60006111c661112d565b90506111d2828261118b565b919050565b600067ffffffffffffffff8211156111f2576111f161115c565b5b6111fb8261114b565b9050602081019050919050565b82818337600083830152505050565b600061122a611225846111d7565b6111bc565b90508281526020810184848401111561124657611245611146565b5b611251848285611208565b509392505050565b600082601f83011261126e5761126d611141565b5b813561127e848260208601611217565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112b282611287565b9050919050565b6112c2816112a7565b81146112cd57600080fd5b50565b6000813590506112df816112b9565b92915050565b6000806000606084860312156112fe576112fd611137565b5b600084013567ffffffffffffffff81111561131c5761131b61113c565b5b61132886828701611259565b935050602084013567ffffffffffffffff8111156113495761134861113c565b5b61135586828701611259565b9250506040611366868287016112d0565b9150509250925092565b6000819050919050565b61138381611370565b811461138e57600080fd5b50565b6000813590506113a08161137a565b92915050565b6000602082840312156113bc576113bb611137565b5b60006113ca84828501611391565b91505092915050565b6113dc816112a7565b82525050565b60006020820190506113f760008301846113d3565b92915050565b60006020828403121561141357611412611137565b5b6000611421848285016112d0565b91505092915050565b60008115159050919050565b61143f8161142a565b82525050565b600060208201905061145a6000830184611436565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561149a57808201518184015260208101905061147f565b60008484015250505050565b60006114b182611460565b6114bb818561146b565b93506114cb81856020860161147c565b6114d48161114b565b840191505092915050565b60006060820190506114f460008301866113d3565b818103602083015261150681856114a6565b9050818103604083015261151a81846114a6565b9050949350505050565b600067ffffffffffffffff82111561153f5761153e61115c565b5b602082029050602081019050919050565b600080fd5b600061156861156384611524565b6111bc565b9050808382526020820190506020840283018581111561158b5761158a611550565b5b835b818110156115b457806115a088826112d0565b84526020840193505060208101905061158d565b5050509392505050565b600082601f8301126115d3576115d2611141565b5b81356115e3848260208601611555565b91505092915050565b600067ffffffffffffffff8211156116075761160661115c565b5b602082029050602081019050919050565b600080fd5b600080fd5b6000819050919050565b61163581611622565b811461164057600080fd5b50565b6000813590506116528161162c565b92915050565b600067ffffffffffffffff82169050919050565b61167581611658565b811461168057600080fd5b50565b6000813590506116928161166c565b92915050565b600067ffffffffffffffff8211156116b3576116b261115c565b5b6116bc8261114b565b9050602081019050919050565b60006116dc6116d784611698565b6111bc565b9050828152602081018484840111156116f8576116f7611146565b5b611703848285611208565b509392505050565b600082601f8301126117205761171f611141565b5b81356117308482602086016116c9565b91505092915050565b60006080828403121561174f5761174e611618565b5b61175960806111bc565b9050600061176984828501611643565b600083015250602061177d84828501611683565b602083015250604082013567ffffffffffffffff8111156117a1576117a061161d565b5b6117ad8482850161170b565b604083015250606082013567ffffffffffffffff8111156117d1576117d061161d565b5b6117dd8482850161170b565b60608301525092915050565b60006117fc6117f7846115ec565b6111bc565b9050808382526020820190506020840283018581111561181f5761181e611550565b5b835b8181101561186657803567ffffffffffffffff81111561184457611843611141565b5b8086016118518982611739565b85526020850194505050602081019050611821565b5050509392505050565b600082601f83011261188557611884611141565b5b81356118958482602086016117e9565b91505092915050565b600067ffffffffffffffff8211156118b9576118b861115c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156118e5576118e461115c565b5b602082029050602081019050919050565b6000611909611904846118ca565b6111bc565b9050808382526020820190506020840283018581111561192c5761192b611550565b5b835b8181101561197357803567ffffffffffffffff81111561195157611950611141565b5b80860161195e898261170b565b8552602085019450505060208101905061192e565b5050509392505050565b600082601f83011261199257611991611141565b5b81356119a28482602086016118f6565b91505092915050565b60006119be6119b98461189e565b6111bc565b905080838252602082019050602084028301858111156119e1576119e0611550565b5b835b81811015611a2857803567ffffffffffffffff811115611a0657611a05611141565b5b808601611a13898261197d565b855260208501945050506020810190506119e3565b5050509392505050565b600082601f830112611a4757611a46611141565b5b8135611a578482602086016119ab565b91505092915050565b600080600060608486031215611a7957611a78611137565b5b600084013567ffffffffffffffff811115611a9757611a9661113c565b5b611aa3868287016115be565b935050602084013567ffffffffffffffff811115611ac457611ac361113c565b5b611ad086828701611870565b925050604084013567ffffffffffffffff811115611af157611af061113c565b5b611afd86828701611a32565b9150509250925092565b60008060008060808587031215611b2157611b20611137565b5b600085013567ffffffffffffffff811115611b3f57611b3e61113c565b5b611b4b878288016115be565b945050602085013567ffffffffffffffff811115611b6c57611b6b61113c565b5b611b7887828801611739565b935050604085013567ffffffffffffffff811115611b9957611b9861113c565b5b611ba58782880161197d565b9250506060611bb687828801611391565b91505092959194509250565b611bcb81611370565b82525050565b6000602082019050611be66000830184611bc2565b92915050565b6000819050919050565b6000611c11611c0c611c0784611287565b611bec565b611287565b9050919050565b6000611c2382611bf6565b9050919050565b6000611c3582611c18565b9050919050565b611c4581611c2a565b82525050565b6000602082019050611c606000830184611c3c565b92915050565b600081519050611c75816112b9565b92915050565b600060208284031215611c9157611c90611137565b5b6000611c9f84828501611c66565b91505092915050565b611cb18161142a565b8114611cbc57600080fd5b50565b600081519050611cce81611ca8565b92915050565b600060208284031215611cea57611ce9611137565b5b6000611cf884828501611cbf565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d4857607f821691505b602082108103611d5b57611d5a611d01565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611dc37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611d86565b611dcd8683611d86565b95508019841693508086168417925050509392505050565b6000611e00611dfb611df684611370565b611bec565b611370565b9050919050565b6000819050919050565b611e1a83611de5565b611e2e611e2682611e07565b848454611d93565b825550505050565b600090565b611e43611e36565b611e4e818484611e11565b505050565b5b81811015611e7257611e67600082611e3b565b600181019050611e54565b5050565b601f821115611eb757611e8881611d61565b611e9184611d76565b81016020851015611ea0578190505b611eb4611eac85611d76565b830182611e53565b50505b505050565b600082821c905092915050565b6000611eda60001984600802611ebc565b1980831691505092915050565b6000611ef38383611ec9565b9150826002028217905092915050565b611f0c82611460565b67ffffffffffffffff811115611f2557611f2461115c565b5b611f2f8254611d30565b611f3a828285611e76565b600060209050601f831160018114611f6d5760008415611f5b578287015190505b611f658582611ee7565b865550611fcd565b601f198416611f7b86611d61565b60005b82811015611fa357848901518255600182019150602085019450602081019050611f7e565b86831015611fc05784890151611fbc601f891682611ec9565b8355505b6001600288020188555050505b505050505050565b60006060820190508181036000830152611fef81866114a6565b9050818103602083015261200381856114a6565b905061201260408301846113d3565b949350505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612076602e8361146b565b91506120818261201a565b604082019050919050565b600060208201905081810360008301526120a581612069565b9050919050565b6000819050919050565b600060ff82169050919050565b60006120de6120d96120d4846120ac565b611bec565b6120b6565b9050919050565b6120ee816120c3565b82525050565b600060208201905061210960008301846120e5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff82169050919050565b60006121888261216d565b915063ffffffff820361219e5761219d61213e565b5b600182019050919050565b6121b281611622565b82525050565b6121c181611658565b82525050565b600081519050919050565b600082825260208201905092915050565b60006121ee826121c7565b6121f881856121d2565b935061220881856020860161147c565b6122118161114b565b840191505092915050565b600060808301600083015161223460008601826121a9565b50602083015161224760208601826121b8565b506040830151848203604086015261225f82826121e3565b9150506060830151848203606086015261227982826121e3565b9150508091505092915050565b600082825260208201905092915050565b60006122a2826121c7565b6122ac8185612286565b93506122bc81856020860161147c565b6122c58161114b565b840191505092915050565b600060808201905081810360008301526122ea818761221c565b905081810360208301526122fe8186612297565b905061230d60408301856113d3565b61231a6060830184611bc2565b95945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061237f60268361146b565b915061238a82612323565b604082019050919050565b600060208201905081810360008301526123ae81612372565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006123eb60208361146b565b91506123f6826123b5565b602082019050919050565b6000602082019050818103600083015261241a816123de565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b600061247d602b8361146b565b915061248882612421565b604082019050919050565b600060208201905081810360008301526124ac81612470565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124e8816124b3565b82525050565b600060208201905061250360008301846124df565b9291505056fea26469706673582212207077e5dda40e7c26de52b8cedeaed8210a68f31883b5b08b463f25e72a538d4f64736f6c63430008150033" + }, + { + "address": "0xd3d7dbe73bbdd5a5c7a49ca322763c4d400fc240", + "nonce": 1685479, + "balance": "0x000000000000000000000000000000000000000000000634650666cc3fda2c40", + "code": "0x" + }, + { + "address": "0x2ef7557d99ab910210405a4c472e4a7c0344f569", + "nonce": 19, + "balance": "0x000000000000000000000000000000000000000000000000001309ecb62a0a9e", + "code": "0x" + }, + { + "address": "0x7b5e3fb92214804e1cc11ab30ddc5521c954d06c", + "nonce": 23, + "balance": "0x00000000000000000000000000000000000000000000000000110ac597ca70d2", + "code": "0x" + }, + { + "address": "0x76d8a43100ef5c045f8a31b60fcea74e6b52c433", + "nonce": 21, + "balance": "0x000000000000000000000000000000000000000000000000001e4e1f9781f1ac", + "code": "0x" + }, + { + "address": "0x7d38ebdd033bbfa8e4ea6eac2ba49210a5a013cc", + "nonce": 22, + "balance": "0x0000000000000000000000000000000000000000000000000000a300b87a9f8b", + "code": "0x" + }, + { + "address": "0x503a9ae5cdd0499bf69b1ce0ccb6e38a60cd48dd", + "nonce": 16, + "balance": "0x0000000000000000000000000000000000000000000000000068026826ffc128", + "code": "0x" + }, + { + "address": "0xebe57e8045f2f230872523bbff7374986e45c486", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x6080604052600436106100e15760003560e01c8063a9e118931161007f578063d60b347f11610059578063d60b347f14610355578063eb8d3f121461039b578063f951975a146103be578063fbe3c2cd146103eb57610159565b8063a9e11893146102db578063b172b22214610308578063c0fd8bde1461032657610159565b80636606b4e0116100bb5780636606b4e014610243578063875be02a146102655780639a8a059214610293578063a0cce1b3146102bb57610159565b806304ca84cf146101a15780631cfe7951146101d75780632c3c02a41461020357610159565b366101595760405162461bcd60e51b815260206004820152603560248201527f74686520576f726d686f6c6520526563656976657220636f6e7472616374206460448201527f6f6573206e6f742061636365707420617373657473000000000000000000000060648201526084015b60405180910390fd5b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f727465640000000000000000000000000000000000000000006044820152606401610150565b3480156101ad57600080fd5b506101c16101bc366004611fe7565b61040a565b6040516101ce91906123a5565b60405180910390f35b3480156101e357600080fd5b5060035463ffffffff165b60405163ffffffff90911681526020016101ce565b34801561020f57600080fd5b5061023361021e366004611e5a565b60009081526004602052604090205460ff1690565b60405190151581526020016101ce565b34801561024f57600080fd5b5061026361025e366004611fe7565b61064b565b005b34801561027157600080fd5b50610285610280366004612022565b61086a565b6040516101ce929190612377565b34801561029f57600080fd5b5060005461ffff165b60405161ffff90911681526020016101ce565b3480156102c757600080fd5b506102856102d6366004611e72565b610a1b565b3480156102e757600080fd5b506102fb6102f6366004611fe7565b610af9565b6040516101ce9190612415565b34801561031457600080fd5b506001546040519081526020016101ce565b34801561033257600080fd5b50610346610341366004611f7a565b610f11565b6040516101ce93929190612428565b34801561036157600080fd5b50610233610370366004611e39565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205460ff1690565b3480156103a757600080fd5b50600354640100000000900463ffffffff166101ee565b3480156103ca57600080fd5b506103de6103d9366004612142565b6113fd565b6040516101ce9190612402565b3480156103f757600080fd5b5060005462010000900461ffff166102a8565b610412611ba9565b600061041e83826114a9565b825261042b60208261254c565b9050610437838261150f565b60ff16602083015261044a60018261254c565b9050816020015160ff166002146104a35760405162461bcd60e51b815260206004820152601a60248201527f696e76616c696420477561726469616e536574557067726164650000000000006044820152606401610150565b6104ad8382611575565b61ffff1660408301526104c160028261254c565b90506104cd83826115db565b63ffffffff1660808301526104e360048261254c565b905060006104f1848361150f565b90506104fe60018361254c565b915060405180604001604052808260ff1667ffffffffffffffff81111561053557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561055e578160200160208202803683370190505b5081526000602090910181905260608501919091525b8160ff168110156105f3576105898584611641565b6060850151518051839081106105af57634e487b7160e01b600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526105df60148461254c565b9250806105eb81612607565b915050610574565b50818451146106445760405162461bcd60e51b815260206004820152601a60248201527f696e76616c696420477561726469616e536574557067726164650000000000006044820152606401610150565b5050919050565b600061065682610af9565b9050600080610664836116b7565b915091508181906106885760405162461bcd60e51b81526004016101509190612392565b5060006106988460e0015161040a565b805190915063436f7265146106ef5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c6964204d6f64756c650000000000000000000000000000000000006044820152606401610150565b606081015151516107425760405162461bcd60e51b815260206004820152601960248201527f6e657720677561726469616e2073657420697320656d707479000000000000006044820152606401610150565b60035463ffffffff16610756906001612564565b63ffffffff16816080015163ffffffff16146107da5760405162461bcd60e51b815260206004820152602160248201527f696e646578206d75737420696e63726561736520696e207374657073206f662060448201527f31000000000000000000000000000000000000000000000000000000000000006064820152608401610150565b61081c846101400151600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61083361082e60035463ffffffff1690565b611834565b6108458160600151826080015161186c565b60808101516003805463ffffffff191663ffffffff9092169190911790555050505050565b60006060600061087e8461010001516113fd565b8051519091506108ca5760006040518060400160405280601481526020017f696e76616c696420677561726469616e207365740000000000000000000000008152509250925050915091565b60035463ffffffff1663ffffffff1684610100015163ffffffff16141580156108fc575042816020015163ffffffff16105b156109435760006040518060400160405280601881526020017f677561726469616e2073657420686173206578706972656400000000000000008152509250925050915091565b61012084015151815151600a9060039061095d90836125d1565b61096791906125b1565b6109729060026125d1565b61097c91906125b1565b61098790600161254c565b11156109cf5760006040518060400160405280600981526020017f6e6f2071756f72756d00000000000000000000000000000000000000000000008152509250925050915091565b6000806109e786610140015187610120015185610a1b565b91509150816109fd576000969095509350505050565b60016040518060200160405280600081525094509450505050915091565b600060606000805b8551811015610ad8576000868281518110610a4e57634e487b7160e01b600052603260045260246000fd5b60200260200101519050610aaa82848a84606001518560000151866020015187604001518d60000151896060015160ff1681518110610a9d57634e487b7160e01b600052603260045260246000fd5b60200260200101516118c0565b909550935084610ac05760009450505050610af1565b60600151915080610ad081612607565b915050610a23565b5060016040518060200160405280600081525092509250505b935093915050565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e082018190526101008201839052610120820152610140810182905290610b5b838261150f565b60ff168252610b6b60018261254c565b9050816000015160ff16600114610bae576040517f6ce2251a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb883826115db565b63ffffffff16610100830152610bcf60048261254c565b90506000610bdd848361150f565b60ff169050610bed60018361254c565b91508067ffffffffffffffff811115610c1657634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c6857816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610c345790505b5061012084015260005b81811015610dd757610c84858461150f565b8461012001518281518110610ca957634e487b7160e01b600052603260045260246000fd5b602090810291909101015160ff909116606090910152610cca60018461254c565b9250610cd685846114a9565b8461012001518281518110610cfb57634e487b7160e01b600052603260045260246000fd5b60200260200101516000018181525050602083610d18919061254c565b9250610d2485846114a9565b8461012001518281518110610d4957634e487b7160e01b600052603260045260246000fd5b60200260200101516020018181525050602083610d66919061254c565b9250610d72858461150f565b610d7d90601b61258c565b8461012001518281518110610da257634e487b7160e01b600052603260045260246000fd5b602090810291909101015160ff909116604090910152610dc360018461254c565b925080610dcf81612607565b915050610c72565b506000610df383848751610deb91906125f0565b879190611a00565b90508080519060200120604051602001610e0f91815260200190565b60408051601f198184030181529190528051602090910120610140850152610e3785846115db565b63ffffffff166020850152610e4d60048461254c565b9250610e5985846115db565b63ffffffff166040850152610e6f60048461254c565b9250610e7b8584611575565b61ffff166060850152610e8f60028461254c565b9250610e9b85846114a9565b6080850152610eab60208461254c565b9250610eb78584611b28565b67ffffffffffffffff1660a0850152610ed160088461254c565b9250610edd858461150f565b60ff1660c0850152610ef060018461254c565b9250610f0383848751610deb91906125f0565b60e085015250919392505050565b604080516101608101825260006020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201819052610100820183905261012082018190526101408201839052843560f81c8083529192916001908114610fad576040517f6ce2251a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260608152600060208201528682013560e01c6101008601819052600490920191610fe0906113fd565b80515190915061102b57505060408051808201909152601481527f696e76616c696420677561726469616e2073657400000000000000000000000060208201526000925090506113f6565b60035463ffffffff1663ffffffff1685610100015163ffffffff161415801561105d575042816020015163ffffffff16105b156110a357505060408051808201909152601881527f677561726469616e20736574206861732065787069726564000000000000000060208201526000925090506113f6565b6001808301928881013560f81c91604283029091010187811061110457505060408051808201909152601881527f696e76616c6964207369676e6174757265206c656e677468000000000000000060208201526000945092506113f6915050565b61110f898983611b8e565b60405161111d929190612367565b6040805191829003822060208301520160408051601f198184030181529190528051602090910120610140880152506000805b8281101561121157604080516080810182528b8701803560f890811c60608085018290526001840135808652602185013560208701819052601b60419096013590941c9490940160ff169585018690526101408e01518a5180516042909d019c969760009793966111e4968b968d969094929391929085908110610a9d57634e487b7160e01b600052603260045260246000fd5b909250905081611201576000995097506113f69650505050505050565b5050606001519150600101611150565b505080600a6003846000015151600a028161123c57634e487b7160e01b600052601260045260246000fd5b046002028161125b57634e487b7160e01b600052601260045260246000fd5b0460010111156112a857505060408051808201909152600981527f6e6f2071756f72756d000000000000000000000000000000000000000000000060208201526000935091506113f69050565b60408051600080825260208201909252906112f2565b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816112be5790505b50610120870152878301803560e090811c60208901526004820135901c6040880152600881013560f01c6060880152600a8101356080880152602a81013560c090811c60a089015260329091013560f81c908701526033909201918683111561139857505060408051808201909152601681527f696e76616c6964207061796c6f6164206c656e6774680000000000000000000060208201526000935091506113f69050565b6113a3888885611b8e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060e08b019490945250506040805160208101909152918252506001955093505050505b9250925092565b60408051808201825260608082526000602080840182905263ffffffff8616825260028152908490208451815492830281018401865294850182815293949390928492849184018282801561148857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161145d575b50505091835250506001919091015463ffffffff1660209091015292915050565b60006114b682602061254c565b835110156115065760405162461bcd60e51b815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e647300000000000000000000006044820152606401610150565b50016020015190565b600061151c82600161254c565b8351101561156c5760405162461bcd60e51b815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610150565b50016001015190565b600061158282600261254c565b835110156115d25760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610150565b50016002015190565b60006115e882600461254c565b835110156116385760405162461bcd60e51b815260206004820152601460248201527f746f55696e7433325f6f75744f66426f756e64730000000000000000000000006044820152606401610150565b50016004015190565b600061164e82601461254c565b8351101561169e5760405162461bcd60e51b815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e647300000000000000000000006044820152606401610150565b5001602001516c01000000000000000000000000900490565b600060606000806116c78561086a565b91509150816116dc5760009590945092505050565b60035463ffffffff1663ffffffff1685610100015163ffffffff161461172257600060405180606001604052806022815260200161264f60229139935093505050915091565b60005462010000900461ffff1661ffff16856060015161ffff16146117845760006040518060400160405280601681526020017f77726f6e6720676f7665726e616e636520636861696e00000000000000000000815250935093505050915091565b6001548560800151146117d45760006040518060400160405280601981526020017f77726f6e6720676f7665726e616e636520636f6e747261637400000000000000815250935093505050915091565b61014085015160009081526004602052604090205460ff161561181757600060405180606001604052806022815260200161267160229139935093505050915091565b600160405180602001604052806000815250935093505050915091565b6118414262015180612564565b63ffffffff9182166000908152600260205260409020600101805463ffffffff191691909216179055565b63ffffffff81166000908152600260209081526040909120835180518593611898928492910190611c03565b50602091909101516001909101805463ffffffff191663ffffffff9092169190911790555050565b6000606089158015906118d957508860ff168760ff1611155b15611910576040517f9ad7979400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008152602081018083528a905260ff861691810191909152606081018790526080810186905273ffffffffffffffffffffffffffffffffffffffff84169060019060a0016020604051602081039080840390855afa15801561197b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16146119de57505060408051808201909152601481527f564d207369676e617475726520696e76616c696400000000000000000000000060208201526000906119f3565b50506040805160208101909152600081526001905b9850989650505050505050565b606081611a0e81601f61254c565b1015611a5c5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610150565b611a66828461254c565b84511015611ab65760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610150565b606082158015611ad55760405191506000825260208201604052611b1f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611b0e578051835260209283019201611af6565b5050858452601f01601f1916604052505b50949350505050565b6000611b3582600861254c565b83511015611b855760405162461bcd60e51b815260206004820152601460248201527f746f55696e7436345f6f75744f66426f756e64730000000000000000000000006044820152606401610150565b50016008015190565b366000611b9d84848188612524565b91509150935093915050565b6040518060a0016040528060008019168152602001600060ff168152602001600061ffff168152602001611bf6604051806040016040528060608152602001600063ffffffff1681525090565b8152600060209091015290565b828054828255906000526020600020908101928215611c7d579160200282015b82811115611c7d57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190611c23565b50611c89929150611c8d565b5090565b5b80821115611c895760008155600101611c8e565b803573ffffffffffffffffffffffffffffffffffffffff81168114611cc657600080fd5b919050565b600082601f830112611cdb578081fd5b81356020611cf0611ceb83612500565b6124cf565b80838252828201915082860187848660071b8901011115611d0f578586fd5b855b85811015611d7257608080838b031215611d29578788fd5b611d3161245f565b8335815286840135878201526040611d4a818601611e28565b908201526060611d5b858201611e28565b908201528552938501939190910190600101611d11565b5090979650505050505050565b600082601f830112611d8f578081fd5b813567ffffffffffffffff811115611da957611da9612638565b611dbc6020601f19601f840116016124cf565b818152846020838601011115611dd0578283fd5b816020850160208301379081016020019190915292915050565b803561ffff81168114611cc657600080fd5b803563ffffffff81168114611cc657600080fd5b803567ffffffffffffffff81168114611cc657600080fd5b803560ff81168114611cc657600080fd5b600060208284031215611e4a578081fd5b611e5382611ca2565b9392505050565b600060208284031215611e6b578081fd5b5035919050565b600080600060608486031215611e86578182fd5b8335925060208085013567ffffffffffffffff80821115611ea5578485fd5b611eb188838901611ccb565b94506040870135915080821115611ec6578384fd5b9086019060408289031215611ed9578384fd5b611ee1612488565b823582811115611eef578586fd5b83019150601f82018913611f01578485fd5b8135611f0f611ceb82612500565b8082825286820191508685018c888560051b8801011115611f2e578889fd5b8895505b83861015611f5757611f4381611ca2565b835260019590950194918701918701611f32565b50835250611f689050838501611dfc565b84820152809450505050509250925092565b60008060208385031215611f8c578182fd5b823567ffffffffffffffff80821115611fa3578384fd5b818501915085601f830112611fb6578384fd5b813581811115611fc4578485fd5b866020828501011115611fd5578485fd5b60209290920196919550909350505050565b600060208284031215611ff8578081fd5b813567ffffffffffffffff81111561200e578182fd5b61201a84828501611d7f565b949350505050565b600060208284031215612033578081fd5b813567ffffffffffffffff8082111561204a578283fd5b90830190610160828603121561205e578283fd5b6120666124ab565b61206f83611e28565b815261207d60208401611dfc565b602082015261208e60408401611dfc565b604082015261209f60608401611dea565b6060820152608083013560808201526120ba60a08401611e10565b60a08201526120cb60c08401611e28565b60c082015260e0830135828111156120e1578485fd5b6120ed87828601611d7f565b60e083015250610100612101818501611dfc565b908201526101208381013583811115612118578586fd5b61212488828701611ccb565b91830191909152506101409283013592810192909252509392505050565b600060208284031215612153578081fd5b611e5382611dfc565b6000815180845260208085019450808401835b838110156121b457815180518852838101518489015260408082015160ff908116918a019190915260609182015116908801526080909601959082019060010161216f565b509495945050505050565b60008151808452815b818110156121e4576020818501810151868301820152016121c8565b818111156121f55782602083870101525b50601f01601f19169290920160200192915050565b805160408084528151908401819052600091602091908201906060860190845b8181101561225c57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161222a565b50509382015163ffffffff16949091019390935250919050565b805160ff16825260006101606020830151612299602086018263ffffffff169052565b5060408301516122b1604086018263ffffffff169052565b5060608301516122c7606086018261ffff169052565b506080830151608085015260a08301516122ed60a086018267ffffffffffffffff169052565b5060c083015161230260c086018260ff169052565b5060e08301518160e086015261231a828601826121bf565b915050610100808401516123358287018263ffffffff169052565b5050610120808401518583038287015261234f838261215c565b61014095860151969095019590955250919392505050565b8183823760009101908152919050565b821515815260406020820152600061201a60408301846121bf565b602081526000611e5360208301846121bf565b602081528151602082015260ff602083015116604082015261ffff60408301511660608201526000606083015160a060808401526123e660c084018261220a565b905063ffffffff60808501511660a08401528091505092915050565b602081526000611e53602083018461220a565b602081526000611e536020830184612276565b60608152600061243b6060830186612276565b8415156020840152828103604084015261245581856121bf565b9695505050505050565b6040516080810167ffffffffffffffff8111828210171561248257612482612638565b60405290565b6040805190810167ffffffffffffffff8111828210171561248257612482612638565b604051610160810167ffffffffffffffff8111828210171561248257612482612638565b604051601f8201601f1916810167ffffffffffffffff811182821017156124f8576124f8612638565b604052919050565b600067ffffffffffffffff82111561251a5761251a612638565b5060051b60200190565b60008085851115612533578182fd5b8386111561253f578182fd5b5050820193919092039150565b6000821982111561255f5761255f612622565b500190565b600063ffffffff80831681851680830382111561258357612583612622565b01949350505050565b600060ff821660ff84168060ff038211156125a9576125a9612622565b019392505050565b6000826125cc57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156125eb576125eb612622565b500290565b60008282101561260257612602612622565b500390565b600060001982141561261b5761261b612622565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe6e6f74207369676e65642062792063757272656e7420677561726469616e20736574676f7665726e616e636520616374696f6e20616c726561647920636f6e73756d6564a2646970667358221220015b6ad3b80f10252bcca38a62465cf50376c33322ab6270e2e75c387413147964736f6c63430008040033" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "nonce": 2, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523480156200001157600080fd5b50600436106200019c5760003560e01c806384cdd9bc11620000ed578063c00c125c1162000099578063e25aa5fa116200006f578063e25aa5fa14620008d2578063ef0a712f14620008dc578063f9273ffb14620008fc576200019c565b8063c00c125c1462000856578063d46300fd1462000892578063da7a77be146200089c576200019c565b806391ceb3eb11620000cf57806391ceb3eb14620007bb57806398899f4014620007de578063a95b089f1462000823576200019c565b806384cdd9bc146200070057806391695586146200077c576200019c565b80635fd65f0f116200014d5780636dd4480b116200012f5780636dd4480b14620004205780637c61e561146200067857806382b8660014620006b4576200019c565b80635fd65f0f146200037357806366c0bd2414620003d4576200019c565b80633e3a156011620001835780633e3a1560146200028c5780634a1b0d5714620002c15780634d49e87d14620002f7576200019c565b80630ba8195914620001a157806331cd52b014620001bd575b600080fd5b620001ab62000991565b60408051918252519081900360200190f35b6200023a60048036036060811015620001d557600080fd5b81359190810190604081016020820135640100000000811115620001f857600080fd5b8201836020820111156200020b57600080fd5b803590602001918460208302840111640100000000831117156200022e57600080fd5b91935091503562000a19565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015620002785781810151838201526020016200025e565b505050509050019250505060405180910390f35b620001ab60048036036080811015620002a457600080fd5b5080359060ff602082013516906040810135906060013562000c93565b620001ab60048036036020811015620002d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000e3d565b620001ab600480360360608110156200030f57600080fd5b8101906020810181356401000000008111156200032b57600080fd5b8201836020820111156200033e57600080fd5b803590602001918460208302840111640100000000831117156200036157600080fd5b91935091508035906020013562000efd565b6200037d6200107a565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015273ffffffffffffffffffffffffffffffffffffffff1660e083015251908190036101000190f35b6200040a60048036036020811015620003ec57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16620010ab565b6040805160ff9092168252519081900360200190f35b6200067660048036036101008110156200043957600080fd5b8101906020810181356401000000008111156200045557600080fd5b8201836020820111156200046857600080fd5b803590602001918460208302840111640100000000831117156200048b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115620004dc57600080fd5b820183602082011115620004ef57600080fd5b803590602001918460208302840111640100000000831117156200051257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156200056357600080fd5b8201836020820111156200057657600080fd5b803590602001918460018302840111640100000000831117156200059957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050640100000000811115620005ed57600080fd5b8201836020820111156200060057600080fd5b803590602001918460018302840111640100000000831117156200062357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602081013590604081013590606001356200116d565b005b6200023a600480360360408110156200069057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013562001b61565b620006d760048036036020811015620006cc57600080fd5b503560ff1662001cea565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b620001ab600480360360608110156200071857600080fd5b8101906020810181356401000000008111156200073457600080fd5b8201836020820111156200074757600080fd5b803590602001918460208302840111640100000000831117156200076a57600080fd5b91935091508035906020013562001d9b565b620001ab600480360360a08110156200079457600080fd5b5060ff81358116916020810135909116906040810135906060810135906080013562001f18565b620001ab60048036036020811015620007d357600080fd5b503560ff16620020cb565b620001ab60048036036060811015620007f657600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020810135906040013560ff1662002166565b620001ab600480360360608110156200083b57600080fd5b5060ff81358116916020810135909116906040013562002233565b62000676600480360360408110156200086e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135620022e7565b620001ab6200241a565b620001ab60048036036020811015620008b457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166200246f565b620001ab620024fb565b620001ab60048036036020811015620008f457600080fd5b503562002550565b620001ab600480360360608110156200091457600080fd5b73ffffffffffffffffffffffffffffffffffffffff82351691908101906040810160208201356401000000008111156200094d57600080fd5b8201836020820111156200096057600080fd5b803590602001918460208302840111640100000000831117156200098357600080fd5b9193509150351515620025ad565b6000603373b87ac009f61fa214f196e232fd14a6f8ae422fa163c9b64dcb90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015620009e657600080fd5b505af4158015620009fb573d6000803e3d6000fd5b505050506040513d602081101562000a1257600080fd5b5051905090565b60606002600154141562000a8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155814281101562000b0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f446561646c696e65206e6f74206d657400000000000000000000000000000000604482015290519081900360640190fd5b603373b87ac009f61fa214f196e232fd14a6f8ae422fa16373fd6b3e90918888886040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925060200280828437600081840152601f19601f8201169050808301925050509550505050505060006040518083038186803b15801562000b9657600080fd5b505af415801562000bab573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101562000bf357600080fd5b810190808051604051939291908464010000000082111562000c1457600080fd5b90830190602082018581111562000c2a57600080fd5b825186602082028301116401000000008211171562000c4857600080fd5b82525081516020918201928201910280838360005b8381101562000c7757818101518382015260200162000c5d565b5050505090500160405250505091505060018055949350505050565b60006002600154141562000d0857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155814281101562000d7e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f446561646c696e65206e6f74206d657400000000000000000000000000000000604482015290519081900360640190fd5b604080517fe7a4db81000000000000000000000000000000000000000000000000000000008152603360048201526024810188905260ff8716604482015260648101869052905173b87ac009f61fa214f196e232fd14a6f8ae422fa19163e7a4db81916084808301926020929190829003018186803b15801562000e0157600080fd5b505af415801562000e16573d6000803e3d6000fd5b505050506040513d602081101562000e2d57600080fd5b5051600180559695505050505050565b604080517f968e55940000000000000000000000000000000000000000000000000000000081526033600482015273ffffffffffffffffffffffffffffffffffffffff83166024820152905160009173b87ac009f61fa214f196e232fd14a6f8ae422fa19163968e559491604480820192602092909190829003018186803b15801562000ec957600080fd5b505af415801562000ede573d6000803e3d6000fd5b505050506040513d602081101562000ef557600080fd5b505192915050565b60006002600154141562000f7257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155814281101562000fe857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f446561646c696e65206e6f74206d657400000000000000000000000000000000604482015290519081900360640190fd5b603373b87ac009f61fa214f196e232fd14a6f8ae422fa16340370edf90918888886040518563ffffffff1660e01b815260040180858152602001806020018381526020018281038252858582818152602001925060200280828437600081840152601f19601f8201169050808301925050509550505050505060206040518083038186803b15801562000e0157600080fd5b603354603454603554603654603754603854603954603a5473ffffffffffffffffffffffffffffffffffffffff1688565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260416020526040812054909160ff90911690620010e48262001cea565b73ffffffffffffffffffffffffffffffffffffffff16146200116757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f546f6b656e20646f6573206e6f74206578697374000000000000000000000000604482015290519081900360640190fd5b92915050565b600054610100900460ff16806200118957506200118962002698565b8062001198575060005460ff16155b620011ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062004490602e913960400191505060405180910390fd5b600054610100900460ff161580156200125657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b62001260620026ab565b6001895111620012d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5f706f6f6c6564546f6b656e732e6c656e677468203c3d203100000000000000604482015290519081900360640190fd5b6020895111156200134357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5f706f6f6c6564546f6b656e732e6c656e677468203e20333200000000000000604482015290519081900360640190fd5b8751895114620013b457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5f706f6f6c6564546f6b656e7320646563696d616c73206d69736d6174636800604482015290519081900360640190fd5b6060885167ffffffffffffffff81118015620013cf57600080fd5b50604051908082528060200260200182016040528015620013fa578160200160208202803683370190505b50905060005b8a518160ff161015620017435760ff8116156200153157604160008c8360ff16815181106200142b57fe5b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff16158015620014c557508a8160ff16815181106200147857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168b600081518110620014a457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b6200153157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4475706c696361746520746f6b656e7300000000000000000000000000000000604482015290519081900360640190fd5b600073ffffffffffffffffffffffffffffffffffffffff168b8260ff16815181106200155957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415620015e557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f546865203020616464726573732069736e277420616e204552432d3230000000604482015290519081900360640190fd5b601260ff168a8260ff1681518110620015fa57fe5b602002602001015160ff1611156200167357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f546f6b656e20646563696d616c732065786365656473206d6178000000000000604482015290519081900360640190fd5b620016a68a8260ff16815181106200168757fe5b602002602001015160ff16601260ff16620027d190919063ffffffff16565b600a0a828260ff1681518110620016b957fe5b60200260200101818152505080604160008d8460ff1681518110620016da57fe5b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9290921691909117905560010162001400565b50620f42408610620017b657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5f612065786365656473206d6178696d756d0000000000000000000000000000604482015290519081900360640190fd5b6305f5e10085106200182957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5f6665652065786365656473206d6178696d756d000000000000000000000000604482015290519081900360640190fd5b6402540be40084106200189d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5f61646d696e4665652065786365656473206d6178696d756d00000000000000604482015290519081900360640190fd5b6305f5e10083106200191057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5f77697468647261774665652065786365656473206d6178696d756d00000000604482015290519081900360640190fd5b878760126040516200192290620029ed565b60ff82166040820152606080825284519082015283518190602080830191608084019188019080838360005b83811015620019685781810151838201526020016200194e565b50505050905090810190601f168015620019965780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015620019cb578181015183820152602001620019b1565b50505050905090810190601f168015620019f95780820380516001836020036101000a031916815260200191505b5095505050505050604051809103906000f08015801562001a1e573d6000803e3d6000fd5b50603a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055895162001a7990603b9060208d0190620029fb565b50805162001a8f90603c90602084019062002a8a565b50895167ffffffffffffffff8111801562001aa957600080fd5b5060405190808252806020026020018201604052801562001ad4578160200160208202803683370190505b50805162001aeb91603d9160209091019062002a8a565b5062001af986606462002849565b60335562001b0986606462002849565b6034555060006035819055603655603784905560388390556039829055801562001b5657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b505050505050505050565b604080517ff967a81f0000000000000000000000000000000000000000000000000000000081526033600482015273ffffffffffffffffffffffffffffffffffffffff8416602482015260448101839052905160609173b87ac009f61fa214f196e232fd14a6f8ae422fa19163f967a81f91606480820192600092909190829003018186803b15801562001bf457600080fd5b505af415801562001c09573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101562001c5157600080fd5b810190808051604051939291908464010000000082111562001c7257600080fd5b90830190602082018581111562001c8857600080fd5b825186602082028301116401000000008211171562001ca657600080fd5b82525081516020918201928201910280838360005b8381101562001cd557818101518382015260200162001cbb565b50505050905001604052505050905092915050565b603b5460009060ff83161062001d6157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4f7574206f662072616e67650000000000000000000000000000000000000000604482015290519081900360640190fd5b603b805460ff841690811062001d7357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b60006002600154141562001e1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155814281101562001e8657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f446561646c696e65206e6f74206d657400000000000000000000000000000000604482015290519081900360640190fd5b603373b87ac009f61fa214f196e232fd14a6f8ae422fa16341b91c2690918888886040518563ffffffff1660e01b815260040180858152602001806020018381526020018281038252858582818152602001925060200280828437600081840152601f19601f8201169050808301925050509550505050505060206040518083038186803b15801562000e0157600080fd5b60006002600154141562001f8d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015581428110156200200357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f446561646c696e65206e6f74206d657400000000000000000000000000000000604482015290519081900360640190fd5b604080517fa5397b220000000000000000000000000000000000000000000000000000000081526033600482015260ff808a166024830152881660448201526064810187905260848101869052905173b87ac009f61fa214f196e232fd14a6f8ae422fa19163a5397b229160a4808301926020929190829003018186803b1580156200208e57600080fd5b505af4158015620020a3573d6000803e3d6000fd5b505050506040513d6020811015620020ba57600080fd5b505160018055979650505050505050565b603b5460009060ff8316106200214257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e646578206f7574206f662072616e67650000000000000000000000000000604482015290519081900360640190fd5b603d805460ff84169081106200215457fe5b90600052602060002001549050919050565b604080517fe4a9a0da0000000000000000000000000000000000000000000000000000000081526033600482015273ffffffffffffffffffffffffffffffffffffffff851660248201526044810184905260ff83166064820152815160009273b87ac009f61fa214f196e232fd14a6f8ae422fa19263e4a9a0da9260848083019392829003018186803b158015620021fd57600080fd5b505af415801562002212573d6000803e3d6000fd5b505050506040513d60408110156200222957600080fd5b5051949350505050565b604080517f4b23603c0000000000000000000000000000000000000000000000000000000081526033600482015260ff80861660248301528416604482015260648101839052905160009173b87ac009f61fa214f196e232fd14a6f8ae422fa191634b23603c91608480820192602092909190829003018186803b158015620022bb57600080fd5b505af4158015620022d0573d6000803e3d6000fd5b505050506040513d60208110156200222957600080fd5b603a5473ffffffffffffffffffffffffffffffffffffffff1633146200236e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f6e6c792063616c6c61626c6520627920706f6f6c20746f6b656e0000000000604482015290519081900360640190fd5b604080517fe9252d460000000000000000000000000000000000000000000000000000000081526033600482015273ffffffffffffffffffffffffffffffffffffffff8416602482015260448101839052905173b87ac009f61fa214f196e232fd14a6f8ae422fa19163e9252d46916064808301926000929190829003018186803b158015620023fd57600080fd5b505af415801562002412573d6000803e3d6000fd5b505050505050565b6000603373b87ac009f61fa214f196e232fd14a6f8ae422fa163b0a14cfc90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015620009e657600080fd5b604080517fe8c47a540000000000000000000000000000000000000000000000000000000081526033600482015273ffffffffffffffffffffffffffffffffffffffff83166024820152905160009173b87ac009f61fa214f196e232fd14a6f8ae422fa19163e8c47a5491604480820192602092909190829003018186803b15801562000ec957600080fd5b6000603373b87ac009f61fa214f196e232fd14a6f8ae422fa16371906c2c90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015620009e657600080fd5b6000603373b87ac009f61fa214f196e232fd14a6f8ae422fa1637d0481609091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801562000ec957600080fd5b6000603373b87ac009f61fa214f196e232fd14a6f8ae422fa1635e58579c9091878787876040518663ffffffff1660e01b8152600401808681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151581526020018281038252858582818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060206040518083038186803b1580156200266157600080fd5b505af415801562002676573d6000803e3d6000fd5b505050506040513d60208110156200268d57600080fd5b505195945050505050565b6000620026a530620028c8565b15905090565b600054610100900460ff1680620026c75750620026c762002698565b80620026d6575060005460ff16155b6200272d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062004490602e913960400191505060405180910390fd5b600054610100900460ff161580156200279457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6200279e620028ce565b8015620027ce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b6000828211156200284357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826200285a5750600062001167565b828202828482816200286857fe5b0414620028c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620044be6021913960400191505060405180910390fd5b9392505050565b3b151590565b600054610100900460ff1680620028ea5750620028ea62002698565b80620028f9575060005460ff16155b62002950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062004490602e913960400191505060405180910390fd5b600054610100900460ff16158015620029b757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600180558015620027ce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b6119698062002b2783390190565b82805482825590600052602060002090810192821562002a78579160200282015b8281111562002a7857825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90911617825560209092019160019091019062002a1c565b5062002a8692915062002ad6565b5090565b82805482825590600052602060002090810192821562002ac8579160200282015b8281111562002ac857825182559160200191906001019062002aab565b5062002a8692915062002b0f565b5b8082111562002a865780547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010162002ad7565b5b8082111562002a86576000815560010162002b1056fe60806040523480156200001157600080fd5b506040516200196938038062001969833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060405260209081015185519093508592508491620001bd916003918501906200029e565b508051620001d39060049060208401906200029e565b50506005805460ff19166012179055506000620001ef62000284565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620002508162000288565b6200025a62000284565b600680546001600160a01b0319166001600160a01b0392909216919091179055506200033a915050565b3390565b6005805460ff191660ff92909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002e157805160ff191683800117855562000311565b8280016001018555821562000311579182015b8281111562000311578251825591602001919060010190620002f4565b506200031f92915062000323565b5090565b5b808211156200031f576000815560010162000324565b61161f806200034a6000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063715018a6116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146103ff578063dd62ed3e14610438578063f2fde38b1461047357610136565b806395d89b41146103be578063a457c2d7146103c657610136565b8063715018a61461034457806379cc67901461034c5780638119c065146103855780638da5cb5b146103b657610136565b8063313ce5671161010957806340c10f19116100ee57806340c10f19146102b957806342966c68146102f457806370a082311461031157610136565b8063313ce56714610262578063395093511461028057610136565b806306fdde031461013b578063095ea7b3146101b857806318160ddd1461020557806323b872dd1461021f575b600080fd5b6101436104a6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017d578181015183820152602001610165565b50505050905090810190601f1680156101aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101f1600480360360408110156101ce57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561055a565b604080519115158252519081900360200190f35b61020d610577565b60408051918252519081900360200190f35b6101f16004803603606081101561023557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561057d565b61026a61061e565b6040805160ff9092168252519081900360200190f35b6101f16004803603604081101561029657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610627565b6102f2600480360360408110156102cf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610682565b005b6102f26004803603602081101561030a57600080fd5b50356107a4565b61020d6004803603602081101561032757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166107b8565b6102f26107e0565b6102f26004803603604081101561036257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108fc565b61038d610956565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61038d610972565b610143610993565b6101f1600480360360408110156103dc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a12565b6101f16004803603604081101561041557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a87565b61020d6004803603604081101561044e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610a9b565b6102f26004803603602081101561048957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ad3565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105505780601f1061052557610100808354040283529160200191610550565b820191906000526020600020905b81548152906001019060200180831161053357829003601f168201915b5050505050905090565b600061056e610567610c7f565b8484610c83565b50600192915050565b60025490565b600061058a848484610dca565b61061484610596610c7f565b61060f8560405180606001604052806028815260200161150f6028913973ffffffffffffffffffffffffffffffffffffffff8a166000908152600160205260408120906105e1610c7f565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610f9a565b610c83565b5060019392505050565b60055460ff1690565b600061056e610634610c7f565b8461060f8560016000610645610c7f565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549061104b565b61068a610c7f565b73ffffffffffffffffffffffffffffffffffffffff166106a8610972565b73ffffffffffffffffffffffffffffffffffffffff161461072a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b8061079657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f616d6f756e74203d3d2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b6107a082826110c6565b5050565b6107b56107af610c7f565b826111f7565b50565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6107e8610c7f565b73ffffffffffffffffffffffffffffffffffffffff16610806610972565b73ffffffffffffffffffffffffffffffffffffffff161461088857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600554604051600091610100900473ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff169055565b6000610933826040518060600160405280602481526020016115376024913961092c86610927610c7f565b610a9b565b9190610f9a565b905061094783610941610c7f565b83610c83565b61095183836111f7565b505050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b600554610100900473ffffffffffffffffffffffffffffffffffffffff1690565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105505780601f1061052557610100808354040283529160200191610550565b600061056e610a1f610c7f565b8461060f856040518060600160405280602581526020016115c56025913960016000610a49610c7f565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610f9a565b600061056e610a94610c7f565b8484610dca565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b610adb610c7f565b73ffffffffffffffffffffffffffffffffffffffff16610af9610972565b73ffffffffffffffffffffffffffffffffffffffff1614610b7b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610be7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806114a16026913960400191505060405180910390fd5b60055460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610cef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806115a16024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610d5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114c76022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061157c6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610ea2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061145c6023913960400191505060405180910390fd5b610ead838383611341565b610ef7816040518060600160405280602681526020016114e96026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610f9a565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610f33908261104b565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611043576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611008578181015183820152602001610ff0565b50505050905090810190601f1680156110355780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156110bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff821661114857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61115460008383611341565b600254611161908261104b565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054611194908261104b565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061155b6021913960400191505060405180910390fd5b61126f82600083611341565b6112b98160405180606001604052806022815260200161147f6022913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610f9a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020556002546112ec90826113e4565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b61134c838383610951565b600654604080517fc00c125c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529151919092169163c00c125c91604480830192600092919082900301818387803b1580156113c757600080fd5b505af11580156113db573d6000803e3d6000fd5b50505050505050565b60008282111561145557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122018cb8313ff2fa133a71bd08a8765ccd8326aa6a9a4dda5e60723cf0e43596bab64736f6c634300060c0033496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f5ef610ed32ed19bf452403f9c0e97d83005f61320054df6642d6ae87c38522d64736f6c634300060c0033" + }, + { + "address": "0xaf583b941df2215231c29f8c859dffc278e8ce90", + "nonce": 29, + "balance": "0x000000000000000000000000000000000000000000000000001afda0f9be698d", + "code": "0x" + }, + { + "address": "0xaa5a6c3b62eff7c3757b7ac031abb80dc98c7ac3", + "nonce": 7, + "balance": "0x000000000000000000000000000000000000000000000000002bb272fabab713", + "code": "0x" + }, + { + "address": "0x1a11669ecf91692440da95cc8a12de80b1c3d9e3", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106103cf5760003560e01c8063607ef6c1116101ff578063acc2166a1161011a578063dce15449116100ad578063e9af02921161007c578063e9af029214610942578063eabe7d9114610955578063ede4edd014610968578063f851a4401461097b57600080fd5b8063dce1544914610900578063dcfbc0c714610913578063e4028eee14610926578063e87554461461093957600080fd5b8063c2998238116100e9578063c299823814610892578063c488847b146108b2578063d02f7351146108da578063da3d454c146108ed57600080fd5b8063acc2166a14610851578063b0772d0b14610864578063bb82aa5e1461086c578063bdcdc2581461087f57600080fd5b80638e8f294b11610192578063a76b3fda11610161578063a76b3fda146107f7578063a979f0c51461080a578063abfceffc1461081d578063ac0b0bb71461083d57600080fd5b80638e8f294b1461073d5780638ebf636414610790578063929fe9a1146107a357806394543c15146107e457600080fd5b80636d35bf91116101ce5780636d35bf91146106e5578063731f0c2b146106f35780637dc0d1d01461071657806387f763031461072957600080fd5b8063607ef6c1146106895780636810dfa61461069c5780636a56947e146106af5780636d154ea5146106c257600080fd5b806342cbb15c116102ef57806351dff989116102825780635c778605116102515780635c7786051461063d5780635ec88c79146106505780635f5af1aa146106635780635fc7e71e1461067657600080fd5b806351dff989146105f157806352d84d1e1461060457806355ee1fe1146106175780635c254d111461062a57600080fd5b80634e79238f116102be5780634e79238f1461058a5780634ef4c3e1146105b85780634fd42e17146105cb57806351a485e4146105de57600080fd5b806342cbb15c1461054557806347ef3b3b1461054b5780634a584432146105615780634ada90af1461058157600080fd5b806324a3d6221161036757806338b8f4c31161033657806338b8f4c3146104f9578063391957d71461050c5780633bcf7ec11461051f57806341c728b91461053257600080fd5b806324a3d622146104ad57806326782247146104c05780632d70db78146104d3578063317b0b77146104e657600080fd5b80631d504dc6116103a35780631d504dc6146104475780631ededc911461045a57806321af45691461046f57806324008a621461049a57600080fd5b80627e3dd2146103d457806302c3bcbb146103f157806318c882a51461041f5780631c3db2e014610432575b600080fd5b6103dc600181565b60405190151581526020015b60405180910390f35b6104116103ff366004613900565b60106020526000908152604090205481565b6040519081526020016103e8565b6103dc61042d36600461392b565b61098e565b610445610440366004613a13565b610ad0565b005b610445610455366004613900565b610b33565b610445610468366004613a63565b5050505050565b600d54610482906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b6104116104a8366004613abe565b610cb1565b600954610482906001600160a01b031681565b600154610482906001600160a01b031681565b6103dc6104e1366004613b0f565b610cf8565b6104116104f4366004613b2c565b610de8565b610445610507366004613900565b610e8f565b61044561051a366004613900565b610f57565b6103dc61052d36600461392b565b611013565b610445610540366004613b45565b61113d565b42610411565b610445610559366004613b8b565b505050505050565b61041161056f366004613900565b600e6020526000908152604090205481565b61041160065481565b61059d610598366004613b45565b61129d565b604080519384526020840192909252908201526060016103e8565b6104116105c6366004613bf9565b6112dd565b6104116105d9366004613b2c565b61137e565b6104456105ec366004613c86565b6113db565b6104456105ff366004613b45565b6115b9565b610482610612366004613b2c565b61160e565b610411610625366004613900565b611638565b610445610638366004613900565b6116aa565b61044561064b366004613bf9565b505050565b61059d61065e366004613900565b611765565b610411610671366004613900565b6117a0565b610411610684366004613cf2565b611811565b610445610697366004613c86565b6119e0565b6104456106aa366004613d56565b611bb5565b6104456106bd366004613abe565b611d65565b6103dc6106d0366004613900565b600b6020526000908152604090205460ff1681565b610445610468366004613cf2565b6103dc610701366004613900565b600a6020526000908152604090205460ff1681565b600454610482906001600160a01b031681565b6009546103dc90600160a01b900460ff1681565b61077161074b366004613900565b60086020526000908152604090208054600182015460039092015460ff91821692911683565b60408051931515845260208401929092521515908201526060016103e8565b6103dc61079e366004613b0f565b611d6a565b6103dc6107b1366004613ddf565b6001600160a01b038082166000908152600860209081526040808320938616835260029093019052205460ff1692915050565b6103dc6107f2366004613900565b611e51565b610411610805366004613900565b611f10565b600f54610482906001600160a01b031681565b61083061082b366004613900565b612039565b6040516103e89190613e0d565b6009546103dc90600160a81b900460ff1681565b601154610482906001600160a01b031681565b6108306120af565b600254610482906001600160a01b031681565b61041161088d366004613abe565b612111565b6108a56108a0366004613e5a565b6121a8565b6040516103e89190613e8f565b6108c56108c0366004613bf9565b612270565b604080519283526020830191909152016103e8565b6104116108e8366004613cf2565b61248e565b6104116108fb366004613bf9565b61261f565b61048261090e366004613ec7565b612979565b600354610482906001600160a01b031681565b610411610934366004613ec7565b6129b1565b61041160055481565b610445610950366004613900565b612b43565b610411610963366004613bf9565b612ba7565b610411610976366004613900565b612be2565b600054610482906001600160a01b031681565b6001600160a01b03821660009081526008602052604081205460ff166109cf5760405162461bcd60e51b81526004016109c690613ef3565b60405180910390fd5b6009546001600160a01b03163314806109f257506000546001600160a01b031633145b610a0e5760405162461bcd60e51b81526004016109c690613f3b565b6000546001600160a01b0316331480610a2957506001821515145b610a455760405162461bcd60e51b81526004016109c690613f82565b6001600160a01b0383166000818152600b6020908152604091829020805460ff19168615159081179091558251938452606091840182905260069184019190915265426f72726f7760d01b6080840152908201527f71aec636243f9709bb0007ae15e9afb8150ab01716d75fd7573be5cc096e03b09060a0015b60405180910390a150805b92915050565b604080516001808252818301909252600091602080830190803683370190505090508281600081518110610b0657610b06613fb2565b60200260200101906001600160a01b031690816001600160a01b03168152505061064b8183600180611bb5565b806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b959190613fc8565b6001600160a01b0316336001600160a01b031614610c055760405162461bcd60e51b815260206004820152602760248201527f6f6e6c7920756e6974726f6c6c65722061646d696e2063616e206368616e676560448201526620627261696e7360c81b60648201526084016109c6565b806001600160a01b031663c1e803346040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190613fe5565b15610cae5760405162461bcd60e51b815260206004820152601560248201527418da185b99d9481b9bdd08185d5d1a1bdc9a5e9959605a1b60448201526064016109c6565b50565b6001600160a01b03841660009081526008602052604081205460ff16610cd957506009610cf0565b610ce285612f33565b610cec8584612f8f565b5060005b949350505050565b6009546000906001600160a01b0316331480610d1e57506000546001600160a01b031633145b610d3a5760405162461bcd60e51b81526004016109c690613f3b565b6000546001600160a01b0316331480610d5557506001821515145b610d715760405162461bcd60e51b81526004016109c690613f82565b60098054831515600160a81b0260ff60a81b199091161790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090610ddc9084906040808252600590820152645365697a6560d81b6060820152901515602082015260800190565b60405180910390a15090565b600080546001600160a01b03163314610e435760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792061646d696e2063616e2073657420636c6f736520666163746f720060448201526064016109c6565b600580549083905560408051828152602081018590527f3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd991015b60405180910390a160005b9392505050565b6000546001600160a01b03163314610ef85760405162461bcd60e51b815260206004820152602660248201527f6f6e6c792061646d696e2063616e2073657420737570706c792063617020677560448201526530b93234b0b760d11b60648201526084016109c6565b600f80546001600160a01b038381166001600160a01b03198316179092556040519116907fb0d3622c24ac9bd967d8f37a25808b3e668fe7ed4f3075bbe82842d3e287c04490610f4b9083908590614014565b60405180910390a15050565b6000546001600160a01b03163314610fc05760405162461bcd60e51b815260206004820152602660248201527f6f6e6c792061646d696e2063616e2073657420626f72726f772063617020677560448201526530b93234b0b760d11b60648201526084016109c6565b600d80546001600160a01b038381166001600160a01b03198316179092556040519116907feda98690e518e9a05f8ec6837663e188211b2da8f4906648b323f2c1d4434e2990610f4b9083908590614014565b6001600160a01b03821660009081526008602052604081205460ff1661104b5760405162461bcd60e51b81526004016109c690613ef3565b6009546001600160a01b031633148061106e57506000546001600160a01b031633145b61108a5760405162461bcd60e51b81526004016109c690613f3b565b6000546001600160a01b03163314806110a557506001821515145b6110c15760405162461bcd60e51b81526004016109c690613f82565b6001600160a01b0383166000818152600a6020908152604091829020805460ff19168615159081179091558251938452606091840182905260049184019190915263135a5b9d60e21b6080840152908201527f71aec636243f9709bb0007ae15e9afb8150ab01716d75fd7573be5cc096e03b09060a001610abf565b6001600160a01b0384166000908152601060205260409020548015610468576000856001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561119c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c09190613fe5565b905060006040518060200160405280886001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561120d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112319190613fe5565b9052905060006112418284612fef565b9050838111156112935760405162461bcd60e51b815260206004820152601960248201527f6d61726b657420737570706c792063617020726561636865640000000000000060448201526064016109c6565b5050505050505050565b6000806000806000806112b28a8a8a8a613007565b9250925092508260118111156112ca576112ca613ffe565b95509093509150505b9450945094915050565b6001600160a01b0383166000908152600a602052604081205460ff16156113375760405162461bcd60e51b815260206004820152600e60248201526d1b5a5b9d081a5cc81c185d5cd95960921b60448201526064016109c6565b6001600160a01b03841660009081526008602052604090205460ff166113615760095b9050610e88565b61136a84613335565b6113748484613367565b6000949350505050565b600080546001600160a01b0316331461139d57610aca6001600b613399565b600680549083905560408051828152602081018590527faeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec13169101610e7d565b6000546001600160a01b03163314806113fe5750600f546001600160a01b031633145b6114685760405162461bcd60e51b815260206004820152603560248201527f6f6e6c792061646d696e206f7220737570706c792063617020677561726469616044820152746e2063616e2073657420737570706c79206361707360581b60648201526084016109c6565b8281811580159061147857508082145b6114b45760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081a5b9c1d5d609a1b60448201526064016109c6565b60005b828110156115b0578484828181106114d1576114d1613fb2565b90506020020135601060008989858181106114ee576114ee613fb2565b90506020020160208101906115039190613900565b6001600160a01b0316815260208101919091526040016000205586868281811061152f5761152f613fb2565b90506020020160208101906115449190613900565b6001600160a01b03167f9e0ad9cee10bdf36b7fbd38910c0bdff0f275ace679b45b922381c2723d676f886868481811061158057611580613fb2565b9050602002013560405161159691815260200190565b60405180910390a2806115a881614044565b9150506114b7565b50505050505050565b801580156115c75750600082115b156116085760405162461bcd60e51b815260206004820152601160248201527072656465656d546f6b656e73207a65726f60781b60448201526064016109c6565b50505050565b600c818154811061161e57600080fd5b6000918252602090912001546001600160a01b0316905081565b600080546001600160a01b0316331461165757610aca60016010613399565b600480546001600160a01b038481166001600160a01b03198316179092556040519116907fd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e2290610e7d9083908690614014565b6000546001600160a01b031633146117125760405162461bcd60e51b815260206004820152602560248201527f6f6e6c792061646d696e2063616e207365742072657761726420646973747269604482015264313aba37b960d91b60648201526084016109c6565b601180546001600160a01b038381166001600160a01b03198316179092556040519116907f8ddca872a7a62d68235cff1a03badc845dc3007cfaa6145379f7bf3452ecb9b990610f4b9083908590614014565b60008060008060008061177c876000806000613007565b92509250925082601181111561179457611794613ffe565b97919650945092505050565b600080546001600160a01b031633146117bf57610aca60016013613399565b600980546001600160a01b038481166001600160a01b0319831681179093556040519116917f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e91610e7d918491614014565b6001600160a01b03851660009081526008602052604081205460ff16158061185257506001600160a01b03851660009081526008602052604090205460ff16155b156118615760095b90506119d7565b6040516395dd919360e01b81526001600160a01b038481166004830152600091908816906395dd919390602401602060405180830381865afa1580156118ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cf9190613fe5565b90506118da87611e51565b1561194557828110156119405760405162461bcd60e51b815260206004820152602860248201527f43616e206e6f74207265706179206d6f7265207468616e2074686520746f74616044820152676c20626f72726f7760c01b60648201526084016109c6565b6119d1565b60008061195186613412565b9193509091506000905082601181111561196d5761196d613ffe565b1461198e5781601181111561198457611984613ffe565b93505050506119d7565b8061199a576003611984565b60006119b6604051806020016040528060055481525085612fef565b9050808611156119cd5760119450505050506119d7565b5050505b60009150505b95945050505050565b6000546001600160a01b0316331480611a035750600d546001600160a01b031633145b611a6d5760405162461bcd60e51b815260206004820152603560248201527f6f6e6c792061646d696e206f7220626f72726f772063617020677561726469616044820152746e2063616e2073657420626f72726f77206361707360581b60648201526084016109c6565b82818115801590611a7d57508082145b611ab95760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081a5b9c1d5d609a1b60448201526064016109c6565b60005b828110156115b057848482818110611ad657611ad6613fb2565b90506020020135600e6000898985818110611af357611af3613fb2565b9050602002016020810190611b089190613900565b6001600160a01b03168152602081019190915260400160002055868682818110611b3457611b34613fb2565b9050602002016020810190611b499190613900565b6001600160a01b03167f6f1951b2aad10f3fc81b86d91105b413a5b3f847a34bbc5ce1904201b14438f6868684818110611b8557611b85613fb2565b90506020020135604051611b9b91815260200190565b60405180910390a280611bad81614044565b915050611abc565b60005b8351811015611d06576000848281518110611bd557611bd5613fb2565b6020908102919091018101516001600160a01b0381166000908152600890925260409091205490915060ff16611c455760405162461bcd60e51b81526020600482015260156024820152741b585c9ad95d081b5d5cdd081899481b1a5cdd1959605a1b60448201526064016109c6565b60018415151415611c9c57611c5981612f33565b60005b8651811015611c9a57611c8882888381518110611c7b57611c7b613fb2565b6020026020010151612f8f565b80611c9281614044565b915050611c5c565b505b60018315151415611cf357611cb081613335565b60005b8651811015611cf157611cdf82888381518110611cd257611cd2613fb2565b6020026020010151613367565b80611ce981614044565b915050611cb3565b505b5080611cfe81614044565b915050611bb8565b5060115460405163318d9e5d60e01b81526001600160a01b039091169063318d9e5d90611d37908790600401613e0d565b600060405180830381600087803b158015611d5157600080fd5b505af1158015611293573d6000803e3d6000fd5b611608565b6009546000906001600160a01b0316331480611d9057506000546001600160a01b031633145b611dac5760405162461bcd60e51b81526004016109c690613f3b565b6000546001600160a01b0316331480611dc757506001821515145b611de35760405162461bcd60e51b81526004016109c690613f82565b60098054831515600160a01b0260ff60a01b199091161790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090610ddc9084906040808252600890820152672a3930b739b332b960c11b6060820152901515602082015260800190565b6001600160a01b038116600090815260086020526040812060010154158015611e9757506001600160a01b0382166000908152600b602052604090205460ff1615156001145b8015610aca5750816001600160a01b031663173b99046040518163ffffffff1660e01b8152600401602060405180830381865afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f009190613fe5565b670de0b6b3a76400001492915050565b600080546001600160a01b03163314611f2f57610aca60016012613399565b6001600160a01b03821660009081526008602052604090205460ff1615611f5c57610aca600a6011613399565b816001600160a01b031663fe9c44ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbe919061405f565b506001600160a01b03821660009081526008602052604081208054600160ff199182168117835560038301805490921690915581019190915561200083613432565b6040516001600160a01b03841681527fcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f90602001610e7d565b6001600160a01b03811660009081526007602090815260408083208054825181850281018501909352808352606094938301828280156120a257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612084575b5093979650505050505050565b6060600c80548060200260200160405190810160405280929190818152602001828054801561210757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116120e9575b5050505050905090565b600954600090600160a01b900460ff16156121635760405162461bcd60e51b81526020600482015260126024820152711d1c985b9cd9995c881a5cc81c185d5cd95960721b60448201526064016109c6565b600061217086868561351b565b9050801561217f579050610cf0565b61218886613335565b6121928686613367565b61219c8685613367565b60009695505050505050565b805160609060008167ffffffffffffffff8111156121c8576121c8613964565b6040519080825280602002602001820160405280156121f1578160200160208202803683370190505b50905060005b8281101561226857600085828151811061221357612213613fb2565b6020026020010151905061222781336135d3565b601181111561223857612238613ffe565b83838151811061224a5761224a613fb2565b6020908102919091010152508061226081614044565b9150506121f7565b509392505050565b6004805460405163fc57d4df60e01b81526001600160a01b03868116938201939093526000928392839291169063fc57d4df90602401602060405180830381865afa1580156122c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e79190613fe5565b6004805460405163fc57d4df60e01b81526001600160a01b038981169382019390935292935060009291169063fc57d4df90602401602060405180830381865afa158015612339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235d9190613fe5565b905081158061236a575080155b1561237e57600d6000935093505050612486565b6000866001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190613fe5565b905060006123fc6040518060200160405280600081525090565b604080516020808201835260008083528351808301855290815283518083018552600654815284519283019094528882529192612438916136ca565b92506124606040518060200160405280888152506040518060200160405280888152506136ca565b915061246c8383613712565b9050612478818b612fef565b600099509750505050505050505b935093915050565b600954600090600160a81b900460ff16156124dd5760405162461bcd60e51b815260206004820152600f60248201526e1cd95a5e99481a5cc81c185d5cd959608a1b60448201526064016109c6565b6001600160a01b03861660009081526008602052604090205460ff16158061251e57506001600160a01b03851660009081526008602052604090205460ff16155b1561252a57600961185a565b846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190613fc8565b6001600160a01b0316866001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f79190613fc8565b6001600160a01b03161461260c57600261185a565b61261586613335565b6121928684613367565b6001600160a01b0383166000908152600b602052604081205460ff161561267b5760405162461bcd60e51b815260206004820152601060248201526f189bdc9c9bddc81a5cc81c185d5cd95960821b60448201526064016109c6565b6001600160a01b03841660009081526008602052604090205460ff166126a257600961135a565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff1661279f57336001600160a01b038516146127235760405162461bcd60e51b815260206004820152601560248201527439b2b73232b91036bab9ba1031329031aa37b5b2b760591b60448201526064016109c6565b600061272f33856135d3565b9050600081601181111561274557612745613ffe565b146127645780601181111561275c5761275c613ffe565b915050610e88565b6001600160a01b038086166000908152600860209081526040808320938816835260029093019052205460ff1661279d5761279d61407c565b505b6004805460405163fc57d4df60e01b81526001600160a01b038781169382019390935291169063fc57d4df90602401602060405180830381865afa1580156127eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280f9190613fe5565b61281a57600d61135a565b6001600160a01b0384166000908152600e602052604090205480156128ff576000856001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa158015612879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289d9190613fe5565b905060006128ab828661374c565b90508281106128fc5760405162461bcd60e51b815260206004820152601960248201527f6d61726b657420626f72726f772063617020726561636865640000000000000060448201526064016109c6565b50505b60008061290f8688600088613007565b9193509091506000905082601181111561292b5761292b613ffe565b1461294c5781601181111561294257612942613ffe565b9350505050610e88565b8015612959576004612942565b61296287612f33565b61296c8787612f8f565b6000979650505050505050565b6007602052816000526040600020818154811061299557600080fd5b6000918252602090912001546001600160a01b03169150829050565b600080546001600160a01b031633146129d7576129d060016006613399565b9050610aca565b6001600160a01b0383166000908152600860205260409020805460ff16612a0c57612a0460096007613399565b915050610aca565b60408051602080820183528582528251908101909252670c7d713b49da0000825290612a3a81835190511090565b15612a5557612a4b60066008613399565b9350505050610aca565b8415801590612ad157506004805460405163fc57d4df60e01b81526001600160a01b038981169382019390935291169063fc57d4df90602401602060405180830381865afa158015612aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612acf9190613fe5565b155b15612ae257612a4b600d6009613399565b60018301805490869055604080516001600160a01b0389168152602081018390529081018790527f70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc59060600160405180910390a16000979650505050505050565b610cae81600c805480602002602001604051908101604052809291908181526020018280548015612b9d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612b7f575b5050505050610ad0565b600080612bb585858561351b565b90508015612bc4579050610e88565b612bcd85613335565b612bd78585613367565b600095945050505050565b6040516361bfb47160e11b815233600482015260009082908290819081906001600160a01b0385169063c37f68e290602401608060405180830381865afa158015612c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c559190614092565b5092509250925082600014612cba5760405162461bcd60e51b815260206004820152602560248201527f657869744d61726b65743a206765744163636f756e74536e617073686f742066604482015264185a5b195960da1b60648201526084016109c6565b8015612cd657612ccc600c6002613399565b9695505050505050565b6000612ce387338561351b565b90508015612d0357612cf8600e600383613758565b979650505050505050565b6001600160a01b0385166000908152600860209081526040808320338452600281019092529091205460ff16612d4157600098975050505050505050565b3360009081526002820160209081526040808320805460ff191690556007825280832080548251818502810185019093528083529192909190830182828015612db357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612d95575b5050835193945083925060009150505b82811015612e1857896001600160a01b0316848281518110612de757612de7613fb2565b60200260200101516001600160a01b03161415612e0657809150612e18565b80612e1081614044565b915050612dc3565b50818110612e2857612e2861407c565b33600090815260076020526040902080548190612e47906001906140c8565b81548110612e5757612e57613fb2565b9060005260206000200160009054906101000a90046001600160a01b0316818381548110612e8757612e87613fb2565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080805480612ec557612ec56140df565b600082815260209020810160001990810180546001600160a01b03191690550190556040517fe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d90612f19908c903390614014565b60405180910390a160009c9b505050505050505050505050565b601154604051635ce65fe960e01b81526001600160a01b03838116600483015290911690635ce65fe9906024015b600060405180830381600087803b158015612f7b57600080fd5b505af1158015610468573d6000803e3d6000fd5b6011546040516375c7940360e11b81526001600160a01b039091169063eb8f280690612fc19085908590600401614014565b600060405180830381600087803b158015612fdb57600080fd5b505af1158015610559573d6000803e3d6000fd5b600080612ffc84846137d0565b9050610cf0816137f8565b6000806000613014613849565b6001600160a01b03881660009081526007602090815260408083208054825181850281018501909352808352849383018282801561307b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161305d575b5050505050905060005b81518110156132df5760008282815181106130a2576130a2613fb2565b60209081029190910101516040516361bfb47160e11b81526001600160a01b038e811660048301529192509082169063c37f68e290602401608060405180830381865afa1580156130f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061311b9190614092565b6080890152606088015260408701529350831561314757600f60008097509750975050505050506112d3565b60408051602080820183526001600160a01b0384811660008181526008845285902060010154845260c08a01939093528351808301855260808a0151815260e08a015260048054855163fc57d4df60e01b815291820194909452935192169263fc57d4df92602480830193928290030181865afa1580156131cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f09190613fe5565b60a0860181905261321057600d60008097509750975050505050506112d3565b604080516020810190915260a0860151815261010086015260c085015160e086015161324a9161323f916136ca565b8661010001516136ca565b610120860181905260408601518651613264929190613810565b855261010085015160608601516020870151613281929190613810565b60208601526001600160a01b03818116908c1614156132cc576132ae8561012001518b8760200151613810565b602086018190526101008601516132c6918b90613810565b60208601525b50806132d781614044565b915050613085565b506020830151835111156133105760208301518351600091613300916140c8565b60009550955095505050506112d3565b6000808460000151856020015161332791906140c8565b9550955095505050506112d3565b60115460405163743597df60e11b81526001600160a01b0383811660048301529091169063e86b2fbe90602401612f61565b601154604051631169274f60e21b81526001600160a01b03909116906345a49d3c90612fc19085908590600401614014565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08360118111156133ce576133ce613ffe565b8360138111156133e0576133e0613ffe565b60408051928352602083019190915260009082015260600160405180910390a1826011811115610e8857610e88613ffe565b6000806000613425846000806000613007565b9250925092509193909250565b60005b600c548110156134c857816001600160a01b0316600c828154811061345c5761345c613fb2565b6000918252602090912001546001600160a01b031614156134b65760405162461bcd60e51b81526020600482015260146024820152731b585c9ad95d08185b1c9958591e48185919195960621b60448201526064016109c6565b806134c081614044565b915050613435565b50600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831660009081526008602052604081205460ff1661354257600961135a565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff1661357a57600061135a565b60008061358a8587866000613007565b919350909150600090508260118111156135a6576135a6613ffe565b146135c6578160118111156135bd576135bd613ffe565b92505050610e88565b801561219c5760046135bd565b6001600160a01b0382166000908152600860205260408120805460ff166135fe576009915050610aca565b6001600160a01b038316600090815260028201602052604090205460ff16151560011415613630576000915050610aca565b6001600160a01b03838116600090815260028301602090815260408083208054600160ff19909116811790915560078352818420805491820181558452919092200180546001600160a01b03191692871692909217909155517f3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5906136b89086908690614014565b60405180910390a15060009392505050565b6040805160208101909152600081526040518060200160405280670de0b6b3a76400006136ff86600001518660000151613831565b61370991906140f5565b90529392505050565b60408051602081019091526000815260405180602001604052806137096137458660000151670de0b6b3a7640000613831565b855161383d565b6000610e888284614117565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561378d5761378d613ffe565b84601381111561379f5761379f613ffe565b604080519283526020830191909152810184905260600160405180910390a1836011811115610cf057610cf0613ffe565b6040805160208101909152600081526040518060200160405280613709856000015185613831565b8051600090610aca90670de0b6b3a7640000906140f5565b60008061381d85856137d0565b90506119d761382b826137f8565b8461374c565b6000610e88828461412f565b6000610e8882846140f5565b6040518061014001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016138956040518060200160405280600081525090565b81526020016138b06040518060200160405280600081525090565b81526020016138cb6040518060200160405280600081525090565b81526020016138e66040518060200160405280600081525090565b905290565b6001600160a01b0381168114610cae57600080fd5b60006020828403121561391257600080fd5b8135610e88816138eb565b8015158114610cae57600080fd5b6000806040838503121561393e57600080fd5b8235613949816138eb565b915060208301356139598161391d565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261398b57600080fd5b8135602067ffffffffffffffff808311156139a8576139a8613964565b8260051b604051601f19603f830116810181811084821117156139cd576139cd613964565b6040529384528581018301938381019250878511156139eb57600080fd5b83870191505b84821015612cf8578135613a04816138eb565b835291830191908301906139f1565b60008060408385031215613a2657600080fd5b8235613a31816138eb565b9150602083013567ffffffffffffffff811115613a4d57600080fd5b613a598582860161397a565b9150509250929050565b600080600080600060a08688031215613a7b57600080fd5b8535613a86816138eb565b94506020860135613a96816138eb565b93506040860135613aa6816138eb565b94979396509394606081013594506080013592915050565b60008060008060808587031215613ad457600080fd5b8435613adf816138eb565b93506020850135613aef816138eb565b92506040850135613aff816138eb565b9396929550929360600135925050565b600060208284031215613b2157600080fd5b8135610e888161391d565b600060208284031215613b3e57600080fd5b5035919050565b60008060008060808587031215613b5b57600080fd5b8435613b66816138eb565b93506020850135613b76816138eb565b93969395505050506040820135916060013590565b60008060008060008060c08789031215613ba457600080fd5b8635613baf816138eb565b95506020870135613bbf816138eb565b94506040870135613bcf816138eb565b93506060870135613bdf816138eb565b9598949750929560808101359460a0909101359350915050565b600080600060608486031215613c0e57600080fd5b8335613c19816138eb565b92506020840135613c29816138eb565b929592945050506040919091013590565b60008083601f840112613c4c57600080fd5b50813567ffffffffffffffff811115613c6457600080fd5b6020830191508360208260051b8501011115613c7f57600080fd5b9250929050565b60008060008060408587031215613c9c57600080fd5b843567ffffffffffffffff80821115613cb457600080fd5b613cc088838901613c3a565b90965094506020870135915080821115613cd957600080fd5b50613ce687828801613c3a565b95989497509550505050565b600080600080600060a08688031215613d0a57600080fd5b8535613d15816138eb565b94506020860135613d25816138eb565b93506040860135613d35816138eb565b92506060860135613d45816138eb565b949793965091946080013592915050565b60008060008060808587031215613d6c57600080fd5b843567ffffffffffffffff80821115613d8457600080fd5b613d908883890161397a565b95506020870135915080821115613da657600080fd5b50613db38782880161397a565b9350506040850135613dc48161391d565b91506060850135613dd48161391d565b939692955090935050565b60008060408385031215613df257600080fd5b8235613dfd816138eb565b91506020830135613959816138eb565b6020808252825182820181905260009190848201906040850190845b81811015613e4e5783516001600160a01b031683529284019291840191600101613e29565b50909695505050505050565b600060208284031215613e6c57600080fd5b813567ffffffffffffffff811115613e8357600080fd5b610cf08482850161397a565b6020808252825182820181905260009190848201906040850190845b81811015613e4e57835183529284019291840191600101613eab565b60008060408385031215613eda57600080fd5b8235613ee5816138eb565b946020939093013593505050565b60208082526028908201527f63616e6e6f742070617573652061206d61726b65742074686174206973206e6f6040820152671d081b1a5cdd195960c21b606082015260800190565b60208082526027908201527f6f6e6c7920706175736520677561726469616e20616e642061646d696e2063616040820152666e20706175736560c81b606082015260800190565b6020808252601690820152756f6e6c792061646d696e2063616e20756e706175736560501b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613fda57600080fd5b8151610e88816138eb565b600060208284031215613ff757600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b60006000198214156140585761405861402e565b5060010190565b60006020828403121561407157600080fd5b8151610e888161391d565b634e487b7160e01b600052600160045260246000fd5b600080600080608085870312156140a857600080fd5b505082516020840151604085015160609095015191969095509092509050565b6000828210156140da576140da61402e565b500390565b634e487b7160e01b600052603160045260246000fd5b60008261411257634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561412a5761412a61402e565b500190565b60008160001904831182151516156141495761414961402e565b50029056fea264697066735822122085ba96819ee5078ef880a9c742489c32299c5374c09899e46cdf3d1bc58c7f7a64736f6c634300080a0033" + }, + { + "address": "0x6cc4bbc248d1689a84a2f87f642a67d750908fa4", + "nonce": 119, + "balance": "0x000000000000000000000000000000000000000000000000003a038c9957d654", + "code": "0x" + }, + { + "address": "0x883100388d61ef6daa147de45deb04934fbcd40d", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b506004361061035d5760003560e01c80637f1e06be116101d3578063bd6d894d11610104578063f2b3abbd116100a2578063f851a4401161007c578063f851a44014610732578063f8f9da281461074a578063fca7820b14610752578063fe9c44ae1461076557600080fd5b8063f2b3abbd146106f9578063f3fdb15a1461070c578063f5e3c4621461071f57600080fd5b8063c5ebeaec116100de578063c5ebeaec14610692578063db006a75146106a5578063dd62ed3e146106b8578063e9c714f2146106f157600080fd5b8063bd6d894d14610644578063c37f68e21461064c578063c39b127f1461067f57600080fd5b8063a6afed9511610171578063ae9d70b01161014b578063ae9d70b014610603578063b2a02ff11461060b578063b57a4a721461061e578063b71d1a0c1461063157600080fd5b8063a6afed95146105df578063a9059cbb146105e7578063aa5af0fd146105fa57600080fd5b806395d89b41116101ad57806395d89b411461059e57806395dd9193146105a657806399d8c1b4146105b9578063a0712d68146105cc57600080fd5b80637f1e06be1461056f578063852a12e3146105825780638f840ddd1461059557600080fd5b8063313ce567116102ad578063601a0bf11161024b5780636c540baf116102255780636c540baf146105225780636f307dc31461052b57806370a082311461053e57806373acee981461056757600080fd5b8063601a0bf1146104f95780636752e7021461050c57806369ab32501461051a57600080fd5b80633e941010116102875780633e941010146104b75780634576b5db146104ca57806347bd3718146104dd5780635fe3b567146104e657600080fd5b8063313ce5671461047d5780633af9e6691461049c5780633b1d21a2146104af57600080fd5b806318160ddd1161031a5780631be19560116102f45780631be195601461043157806323b872dd146104445780632608f81814610457578063267822471461046a57600080fd5b806318160ddd1461040b578063182df0f5146104145780631a31d4651461041c57600080fd5b806306fdde0314610362578063095ea7b3146103805780630d983cc6146103a35780630e752702146103ce578063173b9904146103ef57806317bfdfbc146103f8575b600080fd5b61036a61076d565b60405161037791906137de565b60405180910390f35b61039361038e36600461384b565b6107fb565b6040519015158152602001610377565b6011546103b6906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b6103e16103dc366004613877565b610869565b604051908152602001610377565b6103e160085481565b6103e1610406366004613890565b61087c565b6103e1600d5481565b6103e16108e4565b61042f61042a366004613966565b6108f3565b005b61042f61043f366004613890565b610988565b610393610452366004613a1c565b610b54565b6103e161046536600461384b565b610bb0565b6004546103b6906001600160a01b031681565b60035461048a9060ff1681565b60405160ff9091168152602001610377565b6103e16104aa366004613890565b610bc5565b6103e1610c0b565b6103e16104c5366004613877565b610c15565b6103e16104d8366004613890565b610c26565b6103e1600b5481565b6005546103b6906001600160a01b031681565b6103e1610507366004613877565b610d78565b6103e1666379da05b6000081565b6103e1600081565b6103e160095481565b6012546103b6906001600160a01b031681565b6103e161054c366004613890565b6001600160a01b03166000908152600e602052604090205490565b6103e1610dbf565b61042f61057d366004613890565b610e15565b6103e1610590366004613877565b610eec565b6103e1600c5481565b61036a610ef7565b6103e16105b4366004613890565b610f04565b61042f6105c7366004613a5d565b610f0f565b6103e16105da366004613877565b611172565b6103e161117d565b6103936105f536600461384b565b61136a565b6103e1600a5481565b6103e16113c5565b6103e1610619366004613a1c565b61145d565b61042f61062c366004613aff565b6114b8565b6103e161063f366004613890565b61160f565b6103e161169c565b61065f61065a366004613890565b6116f8565b604080519485526020850193909352918301526060820152608001610377565b6103e161068d366004613890565b611739565b6103e16106a0366004613877565b6117c6565b6103e16106b3366004613877565b6117d1565b6103e16106c6366004613bca565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6103e16117dc565b6103e1610707366004613890565b6118e3565b6006546103b6906001600160a01b031681565b6103e161072d366004613c03565b6118f7565b6003546103b69061010090046001600160a01b031681565b6103e161190e565b6103e1610760366004613877565b611961565b610393600181565b6001805461077a90613c45565b80601f01602080910402602001604051908101604052809291908181526020018280546107a690613c45565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108579087815260200190565b60405180910390a35060019392505050565b6000610874826119a8565b506000919050565b6000805462010000900460ff166108ae5760405162461bcd60e51b81526004016108a590613c80565b60405180910390fd5b6000805462ff0000191690556108c261117d565b506108cc82610f04565b90506000805462ff0000191662010000179055919050565b60006108ee611a05565b905090565b610901868686868686610f0f565b601280546001600160a01b0319166001600160a01b038916908117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190613ca4565b5050505050505050565b60035461010090046001600160a01b031633146109ff5760405162461bcd60e51b815260206004820152602f60248201527f4345726332303a3a7377656570546f6b656e3a206f6e6c792061646d696e206360448201526e616e20737765657020746f6b656e7360881b60648201526084016108a5565b6012546001600160a01b0382811691161415610a785760405162461bcd60e51b815260206004820152603260248201527f4345726332303a3a7377656570546f6b656e3a2063616e206e6f74207377656560448201527138103ab73232b9363cb4b733903a37b5b2b760711b60648201526084016108a5565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae39190613ca4565b60035460405163a9059cbb60e01b81526001600160a01b03610100909204821660048201526024810183905291925083169063a9059cbb90604401600060405180830381600087803b158015610b3857600080fd5b505af1158015610b4c573d6000803e3d6000fd5b505050505050565b6000805462010000900460ff16610b7d5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019168155610b9533868686611a6f565b1490506000805462ff00001916620100001790559392505050565b6000610bbc8383611c9d565b50600092915050565b6000806040518060200160405280610bdb61169c565b90526001600160a01b0384166000908152600e6020526040902054909150610c04908290611cfb565b9392505050565b60006108ee611d1b565b6000610c2082611d90565b92915050565b60035460009061010090046001600160a01b03163314610c595760405163d219dc1f60e01b815260040160405180910390fd5b60055460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd29160048083019260209291908290030181865afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190613cbd565b610d135760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016108a5565b600580546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d91015b60405180910390a150600092915050565b6000805462010000900460ff16610da15760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055610db561117d565b506108cc82611df3565b6000805462010000900460ff16610de85760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055610dfc61117d565b5050600b546000805462ff000019166201000017905590565b60035461010090046001600160a01b03163314610e8a5760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652061646d696e206d6179207365742074686520636f6d702d60448201526c6c696b652064656c656761746560981b60648201526084016108a5565b6012546040516317066a5760e21b81526001600160a01b03838116600483015290911690635c19a95c90602401600060405180830381600087803b158015610ed157600080fd5b505af1158015610ee5573d6000803e3d6000fd5b5050505050565b600061087482611f15565b6002805461077a90613c45565b6000610c2082611f72565b60035461010090046001600160a01b03163314610f7a5760405162461bcd60e51b8152602060048201526024808201527f6f6e6c792061646d696e206d617920696e697469616c697a6520746865206d616044820152631c9ad95d60e21b60648201526084016108a5565b600954158015610f8a5750600a54155b610fe25760405162461bcd60e51b815260206004820152602360248201527f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f6044820152626e636560e81b60648201526084016108a5565b60078490558361104d5760405162461bcd60e51b815260206004820152603060248201527f696e697469616c2065786368616e67652072617465206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b60648201526084016108a5565b600061105887610c26565b905080156110a85760405162461bcd60e51b815260206004820152601a60248201527f73657474696e6720636f6d7074726f6c6c6572206661696c656400000000000060448201526064016108a5565b42600955670de0b6b3a7640000600a556110c186611fbc565b9050801561111c5760405162461bcd60e51b815260206004820152602260248201527f73657474696e6720696e7465726573742072617465206d6f64656c206661696c604482015261195960f21b60648201526084016108a5565b835161112f90600190602087019061374e565b50825161114390600290602086019061374e565b50506003805460ff90921660ff1990921691909117905550506000805462ff0000191662010000179055505050565b600061087482612131565b6009546000904290808214156111965760009250505090565b60006111a0611d1b565b600b54600c54600a546006546040516315f2405360e01b81526004810186905260248101859052604481018490529495509293919290916000916001600160a01b0316906315f2405390606401602060405180830381865afa15801561120a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122e9190613ca4565b9050645d21dba0008111156112855760405162461bcd60e51b815260206004820152601c60248201527f626f72726f772072617465206973206162737572646c7920686967680000000060448201526064016108a5565b60006112918789613cf5565b905060006112ad60405180602001604052808581525083612178565b905060006112bb8288611cfb565b905060006112c98883613d0c565b905060006112e86040518060200160405280600854815250848a6121a9565b905060006112f785898a6121a9565b60098e9055600a819055600b849055600c839055604080518d815260208101879052908101829052606081018590529091507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc049060800160405180910390a160009d505050505050505050505050505090565b6000805462010000900460ff166113935760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191681556113ab33808686611a6f565b1490506000805462ff000019166201000017905592915050565b6006546000906001600160a01b031663b81688166113e1611d1b565b600b54600c546008546040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015611439573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee9190613ca4565b6000805462010000900460ff166114865760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561149e338585856121ca565b50600080805462ff00001916620100001790559392505050565b600054610100900460ff16158080156114d85750600054600160ff909116105b806114f25750303b1580156114f2575060005460ff166001145b6115555760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108a5565b6000805460ff191660011790558015611578576000805461ff0019166101001790555b60038054610100600160a81b031916336101000217905561159e898989898989896108f3565b60038054610100600160a81b0319166101006001600160a01b038516021790558015611604576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60035460009061010090046001600160a01b0316331461164257604051635cb56c2b60e01b815260040160405180910390fd5b600480546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99101610d67565b6000805462010000900460ff166116c55760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191690556116d961117d565b506116e26108e4565b90506000805462ff000019166201000017905590565b6001600160a01b0381166000908152600e6020526040812054819081908190819061172287611f72565b61172a611a05565b93509350935093509193509193565b60035460009061010090046001600160a01b0316331461176c57604051632f7aaee760e01b815260040160405180910390fd5b601180546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fe3f5272426aa3e70e583474d1155b19c7d9a5394147c40191dfaf32b792bc9789101610d67565b600061087482612443565b60006108748261248a565b6004546000906001600160a01b0316331415806117f7575033155b1561181557604051631ba24f2960e21b815260040160405180910390fd5b60038054600480546001600160a01b03808216610100818102610100600160a81b0319871617968790556001600160a01b031990931690935560408051948390048216808652929095041660208401529290917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600454604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160009250505090565b60006118ed61117d565b50610c2082611fbc565b60006119048484846124d3565b5060009392505050565b6006546000906001600160a01b03166315f2405361192a611d1b565b600b54600c546040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260640161141c565b6000805462010000900460ff1661198a5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561199e61117d565b506108cc826125bd565b60005462010000900460ff166119d05760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191690556119e461117d565b506119f0333383612679565b50506000805462ff0000191662010000179055565b600d5460009080611a1857505060075490565b6000611a22611d1b565b90506000600c54600b5483611a379190613d0c565b611a419190613cf5565b9050600083611a58670de0b6b3a764000084613d24565b611a629190613d43565b95945050505050565b5090565b6005546040516317b9b84b60e31b81523060048201526001600160a01b038581166024830152848116604483015260648201849052600092839291169063bdcdc258906084016020604051808303816000875af1158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190613ca4565b90508015611b1c5760405163089d427760e11b8152600481018290526024016108a5565b836001600160a01b0316856001600160a01b03161415611b4f57604051638cd22d1960e01b815260040160405180910390fd5b6000856001600160a01b0316876001600160a01b03161415611b745750600019611b9c565b506001600160a01b038086166000908152600f60209081526040808320938a16835292905220545b6000611ba88583613cf5565b6001600160a01b0388166000908152600e602052604081205491925090611bd0908790613cf5565b6001600160a01b0388166000908152600e602052604081205491925090611bf8908890613d0c565b6001600160a01b03808b166000908152600e6020526040808220869055918b1681522081905590506000198414611c52576001600160a01b03808a166000908152600f60209081526040808320938e168352929052208390555b876001600160a01b0316896001600160a01b0316600080516020613dcf83398151915289604051611c8591815260200190565b60405180910390a35060009998505050505050505050565b60005462010000900460ff16611cc55760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055611cd961117d565b50611ce5338383612679565b50506000805462ff000019166201000017905550565b600080611d088484612178565b9050611d1381612822565b949350505050565b6012546040516370a0823160e01b81523060048201526000916001600160a01b03169081906370a0823190602401602060405180830381865afa158015611d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8a9190613ca4565b91505090565b6000805462010000900460ff16611db95760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055611dcd61117d565b50611dd78261283a565b5050600090506000805462ff0000191662010000179055919050565b600354600090819061010090046001600160a01b03163314801590611e2357506011546001600160a01b03163314155b15611e4157604051630f7e5e6d60e41b815260040160405180910390fd5b4260095414611e6357604051630dff50cb60e41b815260040160405180910390fd5b82611e6c611d1b565b1015611e8b57604051633345e99960e01b815260040160405180910390fd5b600c54831115611eae576040516378d2980560e11b815260040160405180910390fd5b82600c54611ebc9190613cf5565b600c8190559050611ecd33846128ce565b7f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e600360019054906101000a90046001600160a01b03168483604051610d6793929190613d65565b60005462010000900460ff16611f3d5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff000019169055611f5161117d565b50611f5e336000836129b8565b506000805462ff0000191662010000179055565b6001600160a01b03811660009081526010602052604081208054611f995750600092915050565b600a548154600091611faa91613d24565b9050816001015481611d139190613d43565b600354600090819061010090046001600160a01b03163314611ff15760405163407fded560e01b815260040160405180910390fd5b426009541461201357604051630be2a5cb60e11b815260040160405180910390fd5b600660009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208d9190613cbd565b6120d95760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016108a5565b600680546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f9269101610d67565b60005462010000900460ff166121595760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561216d61117d565b50611f5e3382612c95565b60408051602081019091526000815260405180602001604052806121a0856000015185612ebe565b90529392505050565b6000806121b68585612178565b9050611a626121c482612822565b84612eca565b60055460405163d02f735160e01b81523060048201526001600160a01b0386811660248301528581166044830152848116606483015260848201849052600092169063d02f73519060a4016020604051808303816000875af1158015612234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122589190613ca4565b9050801561227c576040516363e00e3360e11b8152600481018290526024016108a5565b836001600160a01b0316836001600160a01b031614156122af57604051633a94626760e11b815260040160405180910390fd5b60006122d0836040518060200160405280666379da05b60000815250612ed6565b905060006122de8285613cf5565b9050600060405180602001604052806122f5611a05565b9052905060006123058285611cfb565b9050600081600c546123179190613d0c565b600c819055600d5490915061232d908690613cf5565b600d556001600160a01b0388166000908152600e6020526040902054612354908890613cf5565b6001600160a01b03808a166000908152600e602052604080822093909355908b1681522054612384908590613d0c565b6001600160a01b03808b166000818152600e602052604090819020939093559151908a1690600080516020613dcf833981519152906123c69088815260200190565b60405180910390a360405185815230906001600160a01b038a1690600080516020613dcf8339815191529060200160405180910390a37fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc530838360405161242f93929190613d65565b60405180910390a150505050505050505050565b60005462010000900460ff1661246b5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561247f61117d565b50611f5e3382612ef9565b60005462010000900460ff166124b25760405162461bcd60e51b81526004016108a590613c80565b6000805462ff0000191690556124c661117d565b50611f5e338260006129b8565b60005462010000900460ff166124fb5760405162461bcd60e51b81526004016108a590613c80565b6000805462ff00001916905561250f61117d565b506000816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612552573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125769190613ca4565b9050801561259a57604051633eea49b760e11b8152600481018290526024016108a5565b6125a633858585613098565b50506000805462ff00001916620100001790555050565b60035460009061010090046001600160a01b031633146125f057604051631205b57b60e11b815260040160405180910390fd5b426009541461261257604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a764000082111561263b5760405163717220f360e11b815260040160405180910390fd5b600880549083905560408051828152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609101610d67565b600554604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283929116906324008a62906084016020604051808303816000875af11580156126de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127029190613ca4565b9050801561272657604051638c81362d60e01b8152600481018290526024016108a5565b42600954146127485760405163c9021e2f60e01b815260040160405180910390fd5b600061275385611f72565b9050600060001985146127665784612768565b815b905060006127768883613552565b905060006127848285613cf5565b9050600082600b546127969190613cf5565b6001600160a01b038a8116600081815260106020908152604091829020878155600a54600190910155600b8590558151938f168452830191909152810185905260608101849052608081018290529091507f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060a00160405180910390a1509098975050505050505050565b8051600090610c2090670de0b6b3a764000090613d43565b60008080804260095414612864576040516338acf79960e01b8152600481018290526024016108a5565b61286e3386613552565b905080600c5461287e9190613d0c565b915081600c819055507fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc53382846040516128ba93929190613d65565b60405180910390a160009590945092505050565b60125460405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905290911690819063a9059cbb90604401600060405180830381600087803b15801561291e57600080fd5b505af1158015612932573d6000803e3d6000fd5b5050505060003d6000811461294e576020811461295857600080fd5b6000199150612964565b60206000803e60005191505b50806129b25760405162461bcd60e51b815260206004820152601960248201527f544f4b454e5f5452414e534645525f4f55545f4641494c45440000000000000060448201526064016108a5565b50505050565b8115806129c3575080155b612a2c5760405162461bcd60e51b815260206004820152603460248201527f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416044820152736d6f756e74496e206d757374206265207a65726f60601b60648201526084016108a5565b60006040518060200160405280612a41611a05565b905290506000808415612a6257849150612a5b8386611cfb565b9050612a72565b612a6c8484613729565b91508390505b60055460405163eabe7d9160e01b81526000916001600160a01b03169063eabe7d9190612aa79030908b908890600401613d86565b6020604051808303816000875af1158015612ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aea9190613ca4565b90508015612b0e5760405163480f424760e01b8152600481018290526024016108a5565b4260095414612b30576040516397b5cfcd60e01b815260040160405180910390fd5b81612b39611d1b565b1015612b58576040516391240a1b60e01b815260040160405180910390fd5b82600d54612b669190613cf5565b600d556001600160a01b0387166000908152600e6020526040902054612b8d908490613cf5565b6001600160a01b0388166000908152600e6020526040902055612bb087836128ce565b60405183815230906001600160a01b03891690600080516020613dcf8339815191529060200160405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929878385604051612c1193929190613d65565b60405180910390a16005546040516351dff98960e01b81523060048201526001600160a01b0389811660248301526044820185905260648201869052909116906351dff98990608401600060405180830381600087803b158015612c7457600080fd5b505af1158015612c88573d6000803e3d6000fd5b5050505050505050505050565b600554604051634ef4c3e160e01b81526000916001600160a01b031690634ef4c3e190612cca90309087908790600401613d86565b6020604051808303816000875af1158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d9190613ca4565b90508015612d31576040516349abd4fd60e01b8152600481018290526024016108a5565b4260095414612d53576040516338d8859760e01b815260040160405180910390fd5b60006040518060200160405280612d68611a05565b905290506000612d788585613552565b90506000612d868284613729565b905080600d54612d969190613d0c565b600d556001600160a01b0386166000908152600e6020526040902054612dbd908290613d0c565b6001600160a01b0387166000908152600e60205260409081902091909155517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f90612e0d90889085908590613d65565b60405180910390a16040518181526001600160a01b038716903090600080516020613dcf8339815191529060200160405180910390a36005546040516341c728b960e01b81523060048201526001600160a01b0388811660248301526044820185905260648201849052909116906341c728b990608401600060405180830381600087803b158015612e9e57600080fd5b505af1158015612eb2573d6000803e3d6000fd5b50505050505050505050565b6000610c048284613d24565b6000610c048284613d0c565b6000670de0b6b3a7640000612eef848460000151612ebe565b610c049190613d43565b60055460405163368f515360e21b81526000916001600160a01b03169063da3d454c90612f2e90309087908790600401613d86565b6020604051808303816000875af1158015612f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f719190613ca4565b90508015612f955760405163918db40f60e01b8152600481018290526024016108a5565b4260095414612fb757604051630e8d8c6160e21b815260040160405180910390fd5b81612fc0611d1b565b1015612fdf576040516348c2588160e01b815260040160405180910390fd5b6000612fea84611f72565b90506000612ff88483613d0c565b9050600084600b5461300a9190613d0c565b6001600160a01b0387166000908152601060205260409020838155600a54600190910155600b819055905061303f86866128ce565b604080516001600160a01b038816815260208101879052908101839052606081018290527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a1505050505050565b600554604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000921690635fc7e71e9060a4016020604051808303816000875af1158015613102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131269190613ca4565b9050801561314a57604051630a14d17960e11b8152600481018290526024016108a5565b426009541461316c576040516380965b1b60e01b815260040160405180910390fd5b42826001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cf9190613ca4565b146131ed57604051631046f38d60e31b815260040160405180910390fd5b846001600160a01b0316846001600160a01b0316141561322057604051631bd1a62160e21b815260040160405180910390fd5b8261323e5760405163d29da7ef60e01b815260040160405180910390fd5b60001983141561326157604051635982c5bb60e11b815260040160405180910390fd5b600061326e868686612679565b60055460405163c488847b60e01b815291925060009182916001600160a01b03169063c488847b906132a890309089908890600401613d86565b6040805180830381865afa1580156132c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e89190613daa565b91509150600082146133585760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016108a5565b6040516370a0823160e01b81526001600160a01b0388811660048301528291908716906370a0823190602401602060405180830381865afa1580156133a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c59190613ca4565b10156134135760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016108a5565b6001600160a01b03851630141561343557613430308989846121ca565b6134ef565b60405163b2a02ff160e01b81526000906001600160a01b0387169063b2a02ff190613468908c908c908790600401613d86565b6020604051808303816000875af1158015613487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ab9190613ca4565b146134ef5760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b881cd95a5e9d5c994819985a5b195960621b60448201526064016108a5565b604080516001600160a01b038a811682528981166020830152818301869052871660608201526080810183905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a15050505050505050565b6012546040516370a0823160e01b81523060048201526000916001600160a01b0316908190839082906370a0823190602401602060405180830381865afa1580156135a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c59190613ca4565b6040516323b872dd60e01b81529091506001600160a01b038316906323b872dd906135f890899030908a90600401613d86565b600060405180830381600087803b15801561361257600080fd5b505af1158015613626573d6000803e3d6000fd5b5050505060003d60008114613642576020811461364c57600080fd5b6000199150613658565b60206000803e60005191505b50806136a65760405162461bcd60e51b815260206004820152601860248201527f544f4b454e5f5452414e534645525f494e5f4641494c4544000000000000000060448201526064016108a5565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156136ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137119190613ca4565b905061371d8382613cf5565b98975050505050505050565b6000610c0461374084670de0b6b3a7640000612ebe565b83516000610c048284613d43565b82805461375a90613c45565b90600052602060002090601f01602090048101928261377c57600085556137c2565b82601f1061379557805160ff19168380011785556137c2565b828001600101855582156137c2579182015b828111156137c25782518255916020019190600101906137a7565b50611a6b9291505b80821115611a6b57600081556001016137ca565b600060208083528351808285015260005b8181101561380b578581018301518582016040015282016137ef565b8181111561381d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461384857600080fd5b50565b6000806040838503121561385e57600080fd5b823561386981613833565b946020939093013593505050565b60006020828403121561388957600080fd5b5035919050565b6000602082840312156138a257600080fd5b8135610c0481613833565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126138d457600080fd5b813567ffffffffffffffff808211156138ef576138ef6138ad565b604051601f8301601f19908116603f01168101908282118183101715613917576139176138ad565b8160405283815286602085880101111561393057600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff8116811461396157600080fd5b919050565b600080600080600080600060e0888a03121561398157600080fd5b873561398c81613833565b9650602088013561399c81613833565b955060408801356139ac81613833565b945060608801359350608088013567ffffffffffffffff808211156139d057600080fd5b6139dc8b838c016138c3565b945060a08a01359150808211156139f257600080fd5b506139ff8a828b016138c3565b925050613a0e60c08901613950565b905092959891949750929550565b600080600060608486031215613a3157600080fd5b8335613a3c81613833565b92506020840135613a4c81613833565b929592945050506040919091013590565b60008060008060008060c08789031215613a7657600080fd5b8635613a8181613833565b95506020870135613a9181613833565b945060408701359350606087013567ffffffffffffffff80821115613ab557600080fd5b613ac18a838b016138c3565b94506080890135915080821115613ad757600080fd5b50613ae489828a016138c3565b925050613af360a08801613950565b90509295509295509295565b600080600080600080600080610100898b031215613b1c57600080fd5b8835613b2781613833565b97506020890135613b3781613833565b96506040890135613b4781613833565b955060608901359450608089013567ffffffffffffffff80821115613b6b57600080fd5b613b778c838d016138c3565b955060a08b0135915080821115613b8d57600080fd5b50613b9a8b828c016138c3565b935050613ba960c08a01613950565b915060e0890135613bb981613833565b809150509295985092959890939650565b60008060408385031215613bdd57600080fd5b8235613be881613833565b91506020830135613bf881613833565b809150509250929050565b600080600060608486031215613c1857600080fd5b8335613c2381613833565b9250602084013591506040840135613c3a81613833565b809150509250925092565b600181811c90821680613c5957607f821691505b60208210811415613c7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600a90820152691c994b595b9d195c995960b21b604082015260600190565b600060208284031215613cb657600080fd5b5051919050565b600060208284031215613ccf57600080fd5b81518015158114610c0457600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613d0757613d07613cdf565b500390565b60008219821115613d1f57613d1f613cdf565b500190565b6000816000190483118215151615613d3e57613d3e613cdf565b500290565b600082613d6057634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008060408385031215613dbd57600080fd5b50508051602090910151909290915056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d4df95c5c8f54f7f4acbfb2d7a897a6443d06603441cc4447cd2434eb357351764736f6c634300080a0033" + }, + { + "address": "0x21de102994bc986e02a795e0f39e5275817e7ef3", + "nonce": 89, + "balance": "0x0000000000000000000000000000000000000000000000000206f5d8386c4ba5", + "code": "0x" + }, + { + "address": "0xf19198b7b11eef578a0e67b8ed8c8b4162964571", + "nonce": 3, + "balance": "0x000000000000000000000000000000000000000000000000001e22a7869d9918", + "code": "0x" + }, + { + "address": "0xeee84badf6bd4cd77e03783fda23b5c114f0e008", + "nonce": 7, + "balance": "0x000000000000000000000000000000000000000000000000000f9f4e9c1cabb8", + "code": "0x" + }, + { + "address": "0xfbf9b6d3c7f177cde3215487a8cafd14c8b97d59", + "nonce": 248, + "balance": "0x0000000000000000000000000000000000000000000000000060b2a99317b932", + "code": "0x" + }, + { + "address": "0xe76b4515cce537fdc439dbec1fae301869c4a639", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x363d3d373d3d3d363d730fcb5237a1997c4700ffa2bb4522ea38d4f851fc5af43d82803e903d91602b57fd5bf3" + }, + { + "address": "0x428081337be786b930cc25f842b9f69664d1db26", + "nonce": 36, + "balance": "0x000000000000000000000000000000000000000000000000001beb0b7af92948", + "code": "0x" + }, + { + "address": "0x758bf7889ddef7e96b4296d32a086c66d853807c", + "nonce": 288, + "balance": "0x00000000000000000000000000000000000000000000000000ffa3031ac19351", + "code": "0x" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100675780634f1ef286146100905780635c60da1b146100ac5780638f283970146100d7578063f851a440146101005761005d565b3661005d5761005b61012b565b005b61006561012b565b005b34801561007357600080fd5b5061008e6004803603810190610089919061068c565b610145565b005b6100aa60048036038101906100a591906106b5565b61019a565b005b3480156100b857600080fd5b506100c1610269565b6040516100ce91906107c3565b60405180910390f35b3480156100e357600080fd5b506100fe60048036038101906100f9919061068c565b6102c1565b005b34801561010c57600080fd5b506101156103c6565b60405161012291906107c3565b60405180910390f35b61013361042e565b61014361013e6104ae565b6104df565b565b61014d610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018981610536565b610197565b61019661012b565b5b50565b6101a2610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561025b576101de83610536565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516102079291906107aa565b600060405180830381855af49150503d8060008114610242576040519150601f19603f3d011682016040523d82523d6000602084013e610247565b606091505b505090508061025557600080fd5b50610264565b61026361012b565b5b505050565b6000610273610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102b5576102ae6104ae565b90506102be565b6102bd61012b565b5b90565b6102c9610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103ba57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561036c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036390610827565b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610395610505565b826040516103a49291906107de565b60405180910390a16103b581610585565b6103c3565b6103c261012b565b5b50565b60006103d0610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104125761040b610505565b905061041b565b61041a61012b565b5b90565b6000813b60008111915050919050565b610436610505565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049b90610807565b60405180910390fd5b6104ac6105b4565b565b6000807f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b9050805491505090565b3660008037600080366000845af43d6000803e8060008114610500573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050805491505090565b61053f816105b6565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b90508181555050565b565b6105bf8161041e565b6105fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f590610847565b60405180910390fd5b60007f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b90508181555050565b60008135905061063c816109b1565b92915050565b60008083601f84011261065457600080fd5b8235905067ffffffffffffffff81111561066d57600080fd5b60208301915083600182028301111561068557600080fd5b9250929050565b60006020828403121561069e57600080fd5b60006106ac8482850161062d565b91505092915050565b6000806000604084860312156106ca57600080fd5b60006106d88682870161062d565b935050602084013567ffffffffffffffff8111156106f557600080fd5b61070186828701610642565b92509250509250925092565b61071681610883565b82525050565b60006107288385610867565b93506107358385846108b5565b82840190509392505050565b600061074e603283610872565b9150610759826108c4565b604082019050919050565b6000610771603683610872565b915061077c82610913565b604082019050919050565b6000610794603b83610872565b915061079f82610962565b604082019050919050565b60006107b782848661071c565b91508190509392505050565b60006020820190506107d8600083018461070d565b92915050565b60006040820190506107f3600083018561070d565b610800602083018461070d565b9392505050565b6000602082019050818103600083015261082081610741565b9050919050565b6000602082019050818103600083015261084081610764565b9050919050565b6000602082019050818103600083015261086081610787565b9050919050565b600081905092915050565b600082825260208201905092915050565b600061088e82610895565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b7f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260008201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000602082015250565b7f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60008201527f787920746f20746865207a65726f206164647265737300000000000000000000602082015250565b7f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60008201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000602082015250565b6109ba81610883565b81146109c557600080fd5b5056fea2646970667358221220b19e98ed56f7105d9dba7a9a58dd948e28cf216e3bcd6e9150295d65848fcd0464736f6c63430008040033" + }, + { + "address": "0xc77392396be1fb5143f1f66a3ae67dd03fbaba27", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806330e6ae31146100465780636f7929f214610046578063fbfa77cf1461005b575b600080fd5b61005961005436600461023f565b61008a565b005b60005461006e906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b61009582848361009a565b505050565b6000818060200190518101906100b091906102f9565b604080516001600160a01b0380841660208301528616918101919091526002606082015290915060009060800160408051808303601f1901815290829052600054631f2c13e160e31b83526001600160a01b0385811660048501528881166024850152919350169063f9609f08906044016020604051808303816000875af1158015610140573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610164919061031d565b50604051637132bb7f60e01b81526001600160a01b03861690637132bb7f906101969084903090600090600401610336565b60408051808303816000875af11580156101b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d891906103c1565b505050505050565b6001600160a01b03811681146101f557600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610237576102376101f8565b604052919050565b60008060006060848603121561025457600080fd5b833561025f816101e0565b9250602084810135610270816101e0565b9250604085013567ffffffffffffffff8082111561028d57600080fd5b818701915087601f8301126102a157600080fd5b8135818111156102b3576102b36101f8565b6102c5601f8201601f1916850161020e565b915080825288848285010111156102db57600080fd5b80848401858401376000848284010152508093505050509250925092565b60006020828403121561030b57600080fd5b8151610316816101e0565b9392505050565b60006020828403121561032f57600080fd5b5051919050565b608081526000845180608084015260005b8181101561036457602081880181015160a0868401015201610347565b50600083820160a00152601f01601f1916820161038c60208401866001600160a01b03169052565b6001600160a01b038416604084015260a08382030160608401526103b760a082016000815260200190565b9695505050505050565b6000604082840312156103d357600080fd5b6040516040810181811067ffffffffffffffff821117156103f6576103f66101f8565b6040528251610404816101e0565b8152602092830151928101929092525091905056fea26469706673582212204040b2b5dd371f0e7b2b04af51d3f8f85a86025711a2ab95b11842e5accc6fdb64736f6c63430008100033" + }, + { + "address": "0x92c53c327cf39ce132b57e5eab51610ad3f15746", + "nonce": 11, + "balance": "0x000000000000000000000000000000000000000000000000005068d396817e77", + "code": "0x" + }, + { + "address": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063a22cb4651161007c578063a22cb4651461037d578063b88d4fde14610399578063c87b56dd146103b5578063e797ec1b146103e5578063e985e9c5146103ef578063f2fde38b1461041f57610158565b8063715018a6146102f157806378ce9035146102fb5780637e5cd5c1146103195780638da5cb5b1461032357806395d89b41146103415780639fd6db121461035f57610158565b806323b872dd1161011557806323b872dd1461021f57806338e21cce1461023b5780633ccfd60b1461026b57806342842e0e146102755780636352211e1461029157806370a08231146102c157610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db5780631249c58b146101f757806318160ddd14610201575b600080fd5b61017760048036038101906101729190611a63565b61043b565b6040516101849190611aab565b60405180910390f35b61019561051d565b6040516101a29190611b56565b60405180910390f35b6101c560048036038101906101c09190611bae565b6105af565b6040516101d29190611c1c565b60405180910390f35b6101f560048036038101906101f09190611c63565b6105cb565b005b6101ff6105e1565b005b61020961078a565b6040516102169190611cb2565b60405180910390f35b61023960048036038101906102349190611ccd565b610790565b005b61025560048036038101906102509190611d20565b6107cb565b6040516102629190611aab565b60405180910390f35b6102736107eb565b005b61028f600480360381019061028a9190611ccd565b610902565b005b6102ab60048036038101906102a69190611bae565b610922565b6040516102b89190611c1c565b60405180910390f35b6102db60048036038101906102d69190611d20565b610934565b6040516102e89190611cb2565b60405180910390f35b6102f96109ee565b005b610303610a02565b6040516103109190611b56565b60405180910390f35b610321610a1e565b005b61032b610a6f565b6040516103389190611c1c565b60405180910390f35b610349610a99565b6040516103569190611b56565b60405180910390f35b610367610b2b565b6040516103749190611aab565b60405180910390f35b61039760048036038101906103929190611d79565b610b3e565b005b6103b360048036038101906103ae9190611eee565b610b54565b005b6103cf60048036038101906103ca9190611bae565b610b71565b6040516103dc9190611b56565b60405180910390f35b6103ed610b8c565b005b61040960048036038101906104049190611f71565b610bdd565b6040516104169190611aab565b60405180910390f35b61043960048036038101906104349190611d20565b610c71565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061050657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610516575061051582610cf7565b5b9050919050565b60606000805461052c90611fe0565b80601f016020809104026020016040519081016040528092919081815260200182805461055890611fe0565b80156105a55780601f1061057a576101008083540402835291602001916105a5565b820191906000526020600020905b81548152906001019060200180831161058857829003601f168201915b5050505050905090565b60006105ba82610d61565b506105c482610de9565b9050919050565b6105dd82826105d8610e26565b610e2e565b5050565b6105e9610e40565b600760149054906101000a900460ff16610638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062f9061205d565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156106c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bc906120c9565b60405180910390fd5b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008600081548092919061073090612118565b9190505550600060085490506107463382610e86565b7f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe3382604051610777929190612160565b60405180910390a150610788610ea4565b565b60085481565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c2906121d5565b60405180910390fd5b60096020528060005260406000206000915054906101000a900460ff1681565b6107f3610eae565b6107fb610e40565b600047905060008111610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a90612241565b60405180910390fd5b600061084d610a6f565b73ffffffffffffffffffffffffffffffffffffffff168260405161087090612292565b60006040518083038185875af1925050503d80600081146108ad576040519150601f19603f3d011682016040523d82523d6000602084013e6108b2565b606091505b50509050806108f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ed906122f3565b60405180910390fd5b5050610900610ea4565b565b61091d83838360405180602001604052806000815250610b54565b505050565b600061092d82610d61565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109a75760006040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161099e9190611c1c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109f6610eae565b610a006000610f35565b565b6040518060600160405280603581526020016123f76035913981565b610a26610eae565b6000600760146101000a81548160ff0219169083151502179055507faf79b4370f6af9d950564bbe6b81f7f0834c003c455db9248f4e55e6bf865eb760405160405180910390a1565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610aa890611fe0565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad490611fe0565b8015610b215780601f10610af657610100808354040283529160200191610b21565b820191906000526020600020905b815481529060010190602001808311610b0457829003601f168201915b5050505050905090565b600760149054906101000a900460ff1681565b610b50610b49610e26565b8383610ffb565b5050565b610b5f848484610790565b610b6b8484848461116a565b50505050565b6060610b7c82610d61565b50610b85611321565b9050919050565b610b94610eae565b6001600760146101000a81548160ff0219169083151502179055507f38cb976174a5c48b8f7b2f07f69b47c271ba7f019948915dc12efb770c2a542c60405160405180910390a1565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c79610eae565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ceb5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610ce29190611c1c565b60405180910390fd5b610cf481610f35565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080610d6d83611341565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610de057826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610dd79190611cb2565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610e3b838383600161137e565b505050565b600260065403610e7c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600681905550565b610ea0828260405180602001604052806000815250611543565b5050565b6001600681905550565b610eb6610e26565b73ffffffffffffffffffffffffffffffffffffffff16610ed4610a6f565b73ffffffffffffffffffffffffffffffffffffffff1614610f3357610ef7610e26565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f2a9190611c1c565b60405180910390fd5b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361106c57816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016110639190611c1c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161115d9190611aab565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b111561131b578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026111ae610e26565b8685856040518563ffffffff1660e01b81526004016111d09493929190612368565b6020604051808303816000875af192505050801561120c57506040513d601f19601f8201168201806040525081019061120991906123c9565b60015b611290573d806000811461123c576040519150601f19603f3d011682016040523d82523d6000602084013e611241565b606091505b50600081510361128857836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161127f9190611c1c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461131957836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016113109190611c1c565b60405180910390fd5b505b50505050565b60606040518060600160405280603581526020016123f760359139905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806113b75750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156114eb5760006113c784610d61565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561143257508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561144557506114438184610bdd565b155b1561148757826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161147e9190611c1c565b60405180910390fd5b81156114e957838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61154d838361155f565b61155a600084848461116a565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115d15760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016115c89190611c1c565b60405180910390fd5b60006115df83836000611658565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116535760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161164a9190611c1c565b60405180910390fd5b505050565b60008061166484611341565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146116a6576116a5818486611872565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611737576116e860008560008061137e565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146117ba576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b61187d838383611936565b61193157600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118f257806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016118e99190611cb2565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611928929190612160565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119ee57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119af57506119ae8484610bdd565b5b806119ed57508273ffffffffffffffffffffffffffffffffffffffff166119d583610de9565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a4081611a0b565b8114611a4b57600080fd5b50565b600081359050611a5d81611a37565b92915050565b600060208284031215611a7957611a78611a01565b5b6000611a8784828501611a4e565b91505092915050565b60008115159050919050565b611aa581611a90565b82525050565b6000602082019050611ac06000830184611a9c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b00578082015181840152602081019050611ae5565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b2882611ac6565b611b328185611ad1565b9350611b42818560208601611ae2565b611b4b81611b0c565b840191505092915050565b60006020820190508181036000830152611b708184611b1d565b905092915050565b6000819050919050565b611b8b81611b78565b8114611b9657600080fd5b50565b600081359050611ba881611b82565b92915050565b600060208284031215611bc457611bc3611a01565b5b6000611bd284828501611b99565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c0682611bdb565b9050919050565b611c1681611bfb565b82525050565b6000602082019050611c316000830184611c0d565b92915050565b611c4081611bfb565b8114611c4b57600080fd5b50565b600081359050611c5d81611c37565b92915050565b60008060408385031215611c7a57611c79611a01565b5b6000611c8885828601611c4e565b9250506020611c9985828601611b99565b9150509250929050565b611cac81611b78565b82525050565b6000602082019050611cc76000830184611ca3565b92915050565b600080600060608486031215611ce657611ce5611a01565b5b6000611cf486828701611c4e565b9350506020611d0586828701611c4e565b9250506040611d1686828701611b99565b9150509250925092565b600060208284031215611d3657611d35611a01565b5b6000611d4484828501611c4e565b91505092915050565b611d5681611a90565b8114611d6157600080fd5b50565b600081359050611d7381611d4d565b92915050565b60008060408385031215611d9057611d8f611a01565b5b6000611d9e85828601611c4e565b9250506020611daf85828601611d64565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611dfb82611b0c565b810181811067ffffffffffffffff82111715611e1a57611e19611dc3565b5b80604052505050565b6000611e2d6119f7565b9050611e398282611df2565b919050565b600067ffffffffffffffff821115611e5957611e58611dc3565b5b611e6282611b0c565b9050602081019050919050565b82818337600083830152505050565b6000611e91611e8c84611e3e565b611e23565b905082815260208101848484011115611ead57611eac611dbe565b5b611eb8848285611e6f565b509392505050565b600082601f830112611ed557611ed4611db9565b5b8135611ee5848260208601611e7e565b91505092915050565b60008060008060808587031215611f0857611f07611a01565b5b6000611f1687828801611c4e565b9450506020611f2787828801611c4e565b9350506040611f3887828801611b99565b925050606085013567ffffffffffffffff811115611f5957611f58611a06565b5b611f6587828801611ec0565b91505092959194509250565b60008060408385031215611f8857611f87611a01565b5b6000611f9685828601611c4e565b9250506020611fa785828601611c4e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ff857607f821691505b60208210810361200b5761200a611fb1565b5b50919050565b7f4d696e74696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b6000612047601683611ad1565b915061205282612011565b602082019050919050565b600060208201905081810360008301526120768161203a565b9050919050565b7f416464726573732068617320616c7265616479206d696e746564000000000000600082015250565b60006120b3601a83611ad1565b91506120be8261207d565b602082019050919050565b600060208201905081810360008301526120e2816120a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061212382611b78565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612155576121546120e9565b5b600182019050919050565b60006040820190506121756000830185611c0d565b6121826020830184611ca3565b9392505050565b7f5472616e73666572206e6f7420616c6c6f776564000000000000000000000000600082015250565b60006121bf601483611ad1565b91506121ca82612189565b602082019050919050565b600060208201905081810360008301526121ee816121b2565b9050919050565b7f4e6f2066756e647320746f207769746864726177000000000000000000000000600082015250565b600061222b601483611ad1565b9150612236826121f5565b602082019050919050565b6000602082019050818103600083015261225a8161221e565b9050919050565b600081905092915050565b50565b600061227c600083612261565b91506122878261226c565b600082019050919050565b600061229d8261226f565b9150819050919050565b7f5769746864726177616c206661696c6564000000000000000000000000000000600082015250565b60006122dd601183611ad1565b91506122e8826122a7565b602082019050919050565b6000602082019050818103600083015261230c816122d0565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061233a82612313565b612344818561231e565b9350612354818560208601611ae2565b61235d81611b0c565b840191505092915050565b600060808201905061237d6000830187611c0d565b61238a6020830186611c0d565b6123976040830185611ca3565b81810360608301526123a9818461232f565b905095945050505050565b6000815190506123c381611a37565b92915050565b6000602082840312156123df576123de611a01565b5b60006123ed848285016123b4565b9150509291505056fe697066733a2f2f516d544e5a456a526f4e6e36416a516b6957355038674337526d4e646434477577506e745253356845435459506ba26469706673582212202455d550efc3ce19bcda79dda5da578e03028bfc2ff53cd0a475b86a2ec47b4964736f6c63430008160033" + }, + { + "address": "0x5efa5e67a91493cf3e9250b80ccc80e0eac7a1e0", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033" + }, + { + "address": "0x45082f8cfb86c7b5eedf4cc8fe061d016727093a", + "nonce": 587, + "balance": "0x0000000000000000000000000000000000000000000000000022be9864089d70", + "code": "0x" + }, + { + "address": "0x2e6f50485f05c808ba753a95d1d533534b2e730f", + "nonce": 8, + "balance": "0x000000000000000000000000000000000000000000000000000fd60a5b7d793f", + "code": "0x" + }, + { + "address": "0x718a13230b18d6b7d17baf987ea499a758355557", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060408181526004908136101561001657600080fd5b600091823560e01c9384631848effa1461058457508363313ce5671461008a57836332343cec1461041657836341976e09146104115783634bb34153146104115783635e9a523c146103db57836368ae0944146100ba57508263c34c08e51461008f57505063f1a640f81461008a57600080fd5b6105c7565b346100b657816003193601126100b65760015490516001600160a01b039091168152602090f35b5080fd5b9250346100b657806003193601126100b65782359067ffffffffffffffff938483116103d757366023840112156103d75782810135948086116103d357602492838760051b8601013681116103cf5784359283116103cf57366023840112156103cf57828401359061012b8261068f565b9361013884519586610657565b828552602092878487019160051b830101913683116103cb5788859101915b8383106103bb575050505060018060a01b039060019782895416331480156102e0575b156102b8576101888b61068f565b9a61019586519c8d610657565b8b528701838b015b82821061029c57505050885184510361025a57869888995b6101bd578880f35b80518a1015610256576101d08a866106de565b51826101dc8c846106de565b51168a52898452848a20557fc37a77b91cc3fc2d0e4b43fd2f347ec67adda10e39215de4742836cc3e42c97a6060836102158d856106de565b51166102218d896106de565b518751918252868201523387820152a16000198a146102445798870198876101b5565b634e487b7160e01b8952601186528689fd5b8880f35b825162461bcd60e51b8152808601839052601a818801527f696e636f6e73697374656e7420706172616d73206c656e6774680000000000006044820152606490fd5b813584811681036102b457815290840190840161019d565b8b80fd5b845162461bcd60e51b81528088018590526003818a01526206f65760ec1b6044820152606490fd5b50845162435da560e01b8152848189817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503788165afa90811561038457849186918d9161038e575b508751637be53ca160e01b8152338b8201529283918c918391165afa908115610384578b91610357575b5061017a565b6103779150853d871161037d575b61036f8183610657565b8101906106c6565b38610351565b503d610365565b86513d8d823e3d90fd5b6103ae9150823d84116103b4575b6103a68183610657565b8101906106a7565b38610327565b503d61039c565b8235815291810191859101610157565b8a80fd5b8680fd5b8480fd5b8380fd5b50346100b65760203660031901126100b65760209181906001600160a01b03610402610607565b16815280845220549051908152f35b61061d565b3461058057602091826003193601126103d757610431610607565b815162435da560e01b815290936001600160a01b03939091828183817f00000000000000000000000034df93f37f327757684ae502b47c787c3846503789165afa90811561055957859184918991610563575b506024865180948193637be53ca160e01b83523388840152165afa90811561055957879161053c575b501561050b5750917f49aef47427a17b78024aa06f13d2c150bd483250f907caf46db8d81ef2331734939160609382600154941692836bffffffffffffffffffffffff60a01b8616176001558251943386521690840152820152a180f35b915162461bcd60e51b815291820152600d60248201526c37b7363ca837b7b620b236b4b760991b6044820152606490fd5b6105539150833d851161037d5761036f8183610657565b876104ad565b84513d89823e3d90fd5b61057a9150823d84116103b4576103a68183610657565b89610484565b8280fd5b8390346100b657816003193601126100b6577f00000000000000000000000034df93f37f327757684ae502b47c787c384650376001600160a01b03168152602090f35b346106025760003660031901126106025760206040517f000000000000000000000000000000000000000000000000000000000000001e8152f35b600080fd5b600435906001600160a01b038216820361060257565b34610602576020366003190112610602576001600160a01b0361063e610607565b1660005260006020526020604060002054604051908152f35b90601f8019910116810190811067ffffffffffffffff82111761067957604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116106795760051b60200190565b9081602091031261060257516001600160a01b03811681036106025790565b90816020910312610602575180151581036106025790565b80518210156106f25760209160051b010190565b634e487b7160e01b600052603260045260246000fdfea26469706673582212202ae72775afa5d70a6f9f93495ddf8cf82f4c9f4d08afd6aba99fa3144ad4c03c64736f6c63430008130033" + }, + { + "address": "0xeee1360db6d03d3caceed4190961d43fd4035ec9", + "nonce": 13, + "balance": "0x00000000000000000000000000000000000000000000000000140dca02b51dea", + "code": "0x" + }, + { + "address": "0x7406ecc532180589d34b29e92c543af48e7554d3", + "nonce": 17, + "balance": "0x0000000000000000000000000000000000000000000000000031ad2edc6a46c4", + "code": "0x" + }, + { + "address": "0xf15ccfdda3eb59958b5385c686401e18321670ce", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e8383604051806060016040528060278152602001610268602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b6060600080856001600160a01b0316856040516100e09190610218565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091506101318683838761013b565b9695505050505050565b606083156101ac5782516101a5576001600160a01b0385163b6101a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b50816101b6565b6101b683836101be565b949350505050565b8151156101ce5781518083602001fd5b8060405162461bcd60e51b815260040161019c9190610234565b60005b838110156102035781810151838201526020016101eb565b83811115610212576000848401525b50505050565b6000825161022a8184602087016101e8565b9190910192915050565b60208152600082518060208401526102538160408501602087016101e8565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ff8e6f2d761d58b3bd984933269e01a7ff1f70a460b808056daa4cff1ee8ab6964736f6c63430008090033" + }, + { + "address": "0xd3e706d98b588a8f819ec324d0e0934a685bc1d3", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c806341976e091461005c5780635ef7fbad1461008257806366331bba146100a4578063f98d06f0146100bc578063fc57d4df146100fb575b600080fd5b61006f61006a3660046107e7565b61010e565b6040519081526020015b60405180910390f35b61009561009036600461087f565b610189565b6040516100799392919061092f565b6100ac600181565b6040519015158152602001610079565b6100e37f000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b572981565b6040516001600160a01b039091168152602001610079565b61006f6101093660046107e7565b61023f565b600080826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561014f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101779190810190610971565b9050610182816103b8565b9392505050565b8051602081830181018051600082529282019190930120915280546001820180549192916101b6906109df565b80601f01602080910402602001604051908101604052809291908181526020018280546101e2906109df565b801561022f5780601f106102045761010080835404028352916020019161022f565b820191906000526020600020905b81548152906001019060200180831161021257829003601f168201915b5050505050908060020154905083565b600080826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610280573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102a89190810190610971565b9050600080826040516102bb9190610a1a565b9081526020016040518091039020604051806060016040529081600082015481526020016001820180546102ee906109df565b80601f016020809104026020016040519081016040528092919081815260200182805461031a906109df565b80156103675780601f1061033c57610100808354040283529160200191610367565b820191906000526020600020905b81548152906001019060200180831161034a57829003601f168201915b5050505050815260200160028201548152505090506000610387836103b8565b90508160400151601261039a9190610a4c565b6103a590600a610b49565b6103af9082610b55565b95945050505050565b6000806000836040516103cb9190610a1a565b9081526020016040518091039020604051806060016040529081600082015481526020016001820180546103fe906109df565b80601f016020809104026020016040519081016040528092919081815260200182805461042a906109df565b80156104775780601f1061044c57610100808354040283529160200191610477565b820191906000526020600020905b81548152906001019060200180831161045a57829003601f168201915b5050505050815260200160028201548152505090506000806104988361054e565b909250905060006104aa826012610a4c565b6104b590600a610b49565b6104bf9084610b55565b604051621554d160ea1b60208201529091506023016040516020818303038152906040528051906020012084602001516040516020016104ff9190610a1a565b60405160208183030381529060405280519060200120146103af57670de0b6b3a764000061053085602001516103b8565b61053a9083610b55565b6105449190610b74565b9695505050505050565b8051600090819061059a5760405162461bcd60e51b81526020600482015260116024820152701b5a5cdcda5b99c81c1c9a58d951995959607a1b60448201526064015b60405180910390fd5b82516001600160a01b0381168114156105c0576105b6816105c9565b9250925050915091565b6105b6816106ce565b60008060008360001c90506000816001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106389190610b96565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069e9190610baf565b60ff169050600082136106c35760405162461bcd60e51b815260040161059190610bd2565b909590945092505050565b60008060007f000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b57296001600160a01b03166396834ad3856040518263ffffffff1660e01b815260040161072191815260200190565b608060405180830381865afa15801561073e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107629190610c00565b90506000816000015160070b1361078b5760405162461bcd60e51b815260040161059190610bd2565b6000816040015160030b13156107b35760405162461bcd60e51b815260040161059190610bd2565b8051604082015167ffffffffffffffff909116906000906107d390610c97565b919663ffffffff9092169550909350505050565b6000602082840312156107f957600080fd5b81356001600160a01b038116811461018257600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561084f5761084f610810565b604052919050565b600067ffffffffffffffff82111561087157610871610810565b50601f01601f191660200190565b60006020828403121561089157600080fd5b813567ffffffffffffffff8111156108a857600080fd5b8201601f810184136108b957600080fd5b80356108cc6108c782610857565b610826565b8181528560208385010111156108e157600080fd5b81602084016020830137600091810160200191909152949350505050565b60005b8381101561091a578181015183820152602001610902565b83811115610929576000848401525b50505050565b83815260606020820152600083518060608401526109548160808501602088016108ff565b604083019390935250601f91909101601f19160160800192915050565b60006020828403121561098357600080fd5b815167ffffffffffffffff81111561099a57600080fd5b8201601f810184136109ab57600080fd5b80516109b96108c782610857565b8181528560208385010111156109ce57600080fd5b6103af8260208301602086016108ff565b600181811c908216806109f357607f821691505b60208210811415610a1457634e487b7160e01b600052602260045260246000fd5b50919050565b60008251610a2c8184602087016108ff565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b600082821015610a5e57610a5e610a36565b500390565b600181815b80851115610a9e578160001904821115610a8457610a84610a36565b80851615610a9157918102915b93841c9390800290610a68565b509250929050565b600082610ab557506001610b43565b81610ac257506000610b43565b8160018114610ad85760028114610ae257610afe565b6001915050610b43565b60ff841115610af357610af3610a36565b50506001821b610b43565b5060208310610133831016604e8410600b8410161715610b21575081810a610b43565b610b2b8383610a63565b8060001904821115610b3f57610b3f610a36565b0290505b92915050565b60006101828383610aa6565b6000816000190483118215151615610b6f57610b6f610a36565b500290565b600082610b9157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610ba857600080fd5b5051919050565b600060208284031215610bc157600080fd5b815160ff8116811461018257600080fd5b60208082526014908201527370726963652063616e6e6f74206265207a65726f60601b604082015260600190565b600060808284031215610c1257600080fd5b6040516080810167ffffffffffffffff8282108183111715610c3657610c36610810565b81604052845191508160070b8214610c4d57600080fd5b9082526020840151908082168214610c6457600080fd5b5060208201526040830151600381900b8114610c7f57600080fd5b60408201526060928301519281019290925250919050565b60008160030b637fffffff19811415610cb257610cb2610a36565b6000039291505056fea26469706673582212206eeb440f8490443b9fbdbfe76dd462eeeed23e6b40f7dfb0055c65e53709905f64736f6c634300080a0033" + }, + { + "address": "0xe77d2b64803fe14baacb4193389c4bf662401729", + "nonce": 152, + "balance": "0x00000000000000000000000000000000000000000000000000085f88c4b8ebe0", + "code": "0x" + }, + { + "address": "0x878c8ca70b8d6b6a7039ec39887d2f12f3489996", + "nonce": 35, + "balance": "0x000000000000000000000000000000000000000000000000001c781d200dd407", + "code": "0x" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033" + }, + { + "address": "0x34be5b8c30ee4fde069dc878989686abe9884470", + "nonce": 1, + "balance": "0x0000000000000000000000000000000000000000000000000000000000000000", + "code": "0x608060405234801561001057600080fd5b50600436106102ac5760003560e01c8063801b4c0a1161017b578063d18c0269116100d8578063e9e211a11161008c578063f242432a11610071578063f242432a1461067d578063f2fde38b14610690578063f5298aca146106a357600080fd5b8063e9e211a114610652578063ec8154f01461067557600080fd5b8063d7cd4ee5116100bd578063d7cd4ee5146105f0578063e139278f14610603578063e985e9c51461061657600080fd5b8063d18c0269146105a1578063d25b536f146105b457600080fd5b8063bacf99461161012f578063c1e0372811610114578063c1e0372814610514578063c8f7dec81461057b578063c90c934a1461058e57600080fd5b8063bacf9946146104e1578063bd85b039146104f457600080fd5b80638da5cb5b116101605780638da5cb5b146104b557806395d89b41146104c6578063a22cb465146104ce57600080fd5b8063801b4c0a1461048f57806387198cf2146104a257600080fd5b80633a8ed6081161022957806358743171116101dd57806370aa62f1116101c257806370aa62f11461045457806370ae92d214610467578063715018a61461048757600080fd5b8063587431711461042e5780636a8d0c281461044157600080fd5b80634e1273f41161020e5780634e1273f4146103d95780634f558e79146103f9578063542cecdb1461041b57600080fd5b80633a8ed6081461039b5780633f0bb0e2146103c657600080fd5b80631c31f710116102805780632eb2c2d6116102655780632eb2c2d61461036257806338af3eed1461037557806339e899ee1461038857600080fd5b80631c31f710146103225780632d5aecda1461033757600080fd5b8062fdd58e146102b157806301ffc9a7146102d757806306fdde03146102fa5780630e89341c1461030f575b600080fd5b6102c46102bf366004612e43565b6106b6565b6040519081526020015b60405180910390f35b6102ea6102e5366004612e83565b610762565b60405190151581526020016102ce565b6103026107fd565b6040516102ce9190612ef0565b61030261031d366004612f03565b61088b565b610335610330366004612f1c565b6108c7565b005b60085461034a906001600160a01b031681565b6040516001600160a01b0390911681526020016102ce565b610335610370366004613083565b610954565b60095461034a906001600160a01b031681565b610335610396366004612f1c565b6109f6565b6102c46103a9366004612e43565b600c60209081526000928352604080842090915290825290205481565b6103356103d436600461312d565b610a2d565b6103ec6103e7366004613160565b610ab1565b6040516102ce9190613266565b6102ea610407366004612f03565b600090815260036020526040902054151590565b6102c4610429366004613279565b610bef565b61033561043c3660046132b8565b610c3d565b6102c461044f36600461330f565b610e2f565b600a5461034a906001600160a01b031681565b6102c4610475366004612f1c565b600d6020526000908152604090205481565b610335610e48565b61033561049d36600461312d565b610e5c565b6103356104b0366004613382565b61105e565b6004546001600160a01b031661034a565b61030261107b565b6103356104dc3660046133b2565b611088565b6103356104ef3660046133b2565b611097565b6102c4610502366004612f03565b60009081526003602052604090205490565b610560610522366004612f03565b6040805180820190915260008082526020820152506000908152600b6020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016102ce565b6103356105893660046133e9565b6110ca565b61033561059c366004613382565b611113565b6103356105af36600461342b565b61112d565b6105db6105c2366004612f03565b600b602052600090815260409020805460019091015482565b604080519283526020830191909152016102ce565b6103356105fe366004613457565b61114d565b610335610611366004613508565b6112f7565b6102ea61062436600461358a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6102ea610660366004612f1c565b600e6020526000908152604090205460ff1681565b610302611571565b61033561068b3660046135bd565b61157e565b61033561069e366004612f1c565b611619565b6103356106b136600461312d565b6116a9565b60006001600160a01b0383166107395760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201527f616c6964206f776e65720000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b031982167fd9b67a260000000000000000000000000000000000000000000000000000000014806107c557506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061075c57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161461075c565b6005805461080a90613616565b80601f016020809104026020016040519081016040528092919081815260200182805461083690613616565b80156108835780601f1061085857610100808354040283529160200191610883565b820191906000526020600020905b81548152906001019060200180831161086657829003601f168201915b505050505081565b606061089760006117e1565b6108a083611875565b6040516020016108b1929190613650565b6040516020818303038152906040529050919050565b6108cf611915565b6001600160a01b0381166109255760405162461bcd60e51b815260206004820152600e60248201527f4e6f207a65726f206164646573730000000000000000000000000000000000006044820152606401610730565b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03851633148061097057506109708533610624565b6109e25760405162461bcd60e51b815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f7665640000000000000000000000000000000000006064820152608401610730565b6109ef858585858561196f565b5050505050565b6109fe611915565b6008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b610a35611915565b6001600160a01b038316610a8b5760405162461bcd60e51b815260206004820152600760248201527f4e6f207a65726f000000000000000000000000000000000000000000000000006044820152606401610730565b6001600160a01b039092166000908152600c602090815260408083209383529290522055565b60608151835114610b2a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d6174636800000000000000000000000000000000000000000000006064820152608401610730565b6000835167ffffffffffffffff811115610b4657610b46612f37565b604051908082528060200260200182016040528015610b6f578160200160208202803683370190505b50905060005b8451811015610be757610bba858281518110610b9357610b936136a7565b6020026020010151858381518110610bad57610bad6136a7565b60200260200101516106b6565b828281518110610bcc57610bcc6136a7565b6020908102919091010152610be0816136d3565b9050610b75565b509392505050565b6040805160208101869052908101849052606081018390526001600160a01b038216608082015260009060a0015b604051602081830303815290604052805190602001209050949350505050565b600085815260036020526040902054610c579085906136ec565b6000868152600b60205260409020541015610ca85760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a5cc81c185d5cd959607a1b6044820152606401610730565b336000908152600d60205260409020548314610cf45760405162461bcd60e51b815260206004820152600b60248201526a3737b731b29032b93937b960a91b6044820152606401610730565b6000610d008383611bd3565b6001600160a01b0381166000908152600e602052604090205490915060ff16610d6b5760405162461bcd60e51b815260206004820152601660248201527f7369676e617475726520636865636b206661696c6564000000000000000000006044820152606401610730565b6000610d7987878733610bef565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c90209091508414610df95760405162461bcd60e51b815260206004820152601660248201527f696e7465677265747920636865636b206661696c6564000000000000000000006044820152606401610730565b336000908152600d60205260408120805491610e14836136d3565b9190505550610e263387896000611bef565b50505050505050565b600084848484604051602001610c1d94939291906136ff565b610e50611915565b610e5a6000611cd3565b565b60008281526003602052604081205411610eb85760405162461bcd60e51b815260206004820152600f60248201527f4f6e6c79206d696e746564204e465400000000000000000000000000000000006044820152606401610730565b6001600160a01b0383166000908152600c60209081526040808320858452909152902054610f285760405162461bcd60e51b815260206004820152601760248201527f4e6f206d696e742077697468207468697320746f6b656e0000000000000000006044820152606401610730565b600082815260036020526040902054610f429082906136ec565b6000838152600b60205260409020541015610f935760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a5cc81c185d5cd959607a1b6044820152606401610730565b6009546001600160a01b038085166000818152600c6020908152604080832088845290915290205490926323b872dd923392911690610fd3908690613745565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015611027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b919061375c565b506110593382846004611bef565b505050565b611066611915565b6000918252600b602052604090912060010155565b6006805461080a90613616565b611093338383611d32565b5050565b61109f611915565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6110d2611915565b6110f7858585604051806040016040528060018152602001600360fc1b815250611e26565b6000848152600b602052604090208281556001018190556109ef565b61111b611915565b6000918252600b602052604090912055565b611135611915565b6000928352600b602052604090922090815560010155565b611155611915565b81518451146111cc5760405162461bcd60e51b815260206004820152602b60248201527f73746f704d696e74416674657220706172616d73206d7573742068617665206560448201527f7175616c206c656e6774680000000000000000000000000000000000000000006064820152608401610730565b80518451146112435760405162461bcd60e51b815260206004820152602c60248201527f6d6178546f74616c537570706c7920706172616d73206d75737420686176652060448201527f657175616c206c656e67746800000000000000000000000000000000000000006064820152608401610730565b611268858585604051806040016040528060018152602001600360fc1b815250611f40565b60005b84518110156112ef576112dd858281518110611289576112896136a7565b60200260200101518483815181106112a3576112a36136a7565b60200260200101518484815181106112bd576112bd6136a7565b60200260200101516000928352600b602052604090922090815560010155565b806112e7816136d3565b91505061126b565b505050505050565b60005b85518110156113da57848181518110611315576113156136a7565b602002602001015161134c878381518110611332576113326136a7565b602002602001015160009081526003602052604090205490565b61135691906136ec565b600b600088848151811061136c5761136c6136a7565b602002602001015181526020019081526020016000206000015410156113c85760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a5cc81c185d5cd959607a1b6044820152606401610730565b806113d2816136d3565b9150506112fa565b50336000908152600d602052604090205483146114275760405162461bcd60e51b815260206004820152600b60248201526a3737b731b29032b93937b960a91b6044820152606401610730565b60006114338383611bd3565b6001600160a01b0381166000908152600e602052604090205490915060ff1661149e5760405162461bcd60e51b815260206004820152601660248201527f7369676e617475726520636865636b206661696c6564000000000000000000006044820152606401610730565b60006114ac87878733610e2f565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c9020909150841461152c5760405162461bcd60e51b815260206004820152601660248201527f696e7465677265747920636865636b206661696c6564000000000000000000006044820152606401610730565b336000908152600d60205260408120805491611547836136d3565b9190505550610e26338888604051806040016040528060018152602001600360fc1b815250611f40565b6007805461080a90613616565b6001600160a01b03851633148061159a575061159a8533610624565b61160c5760405162461bcd60e51b815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f7665640000000000000000000000000000000000006064820152608401610730565b6109ef8585858585612115565b611621611915565b6001600160a01b03811661169d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610730565b6116a681611cd3565b50565b6001600160a01b0383163314806116e357506001600160a01b038316600090815260016020908152604080832033845290915290205460ff165b6117555760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f76656400000000000000000000000000000000000000000000006064820152608401610730565b6110598383836122ce565b606061075c8261176f84611777565b600101612491565b600080608083901c1561178f5760809290921c916010015b604083901c156117a45760409290921c916008015b602083901c156117b95760209290921c916004015b601083901c156117ce5760109290921c916002015b600883901c1561075c5760010192915050565b6060600280546117f090613616565b80601f016020809104026020016040519081016040528092919081815260200182805461181c90613616565b80156118695780601f1061183e57610100808354040283529160200191611869565b820191906000526020600020905b81548152906001019060200180831161184c57829003601f168201915b50505050509050919050565b606060006118828361265d565b600101905060008167ffffffffffffffff8111156118a2576118a2612f37565b6040519080825280601f01601f1916602001820160405280156118cc576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846118d657509392505050565b6004546001600160a01b03163314610e5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610730565b81518351146119d15760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610730565b6001600160a01b038416611a355760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610730565b33611a4481878787878761273f565b60005b8451811015611b6d576000858281518110611a6457611a646136a7565b602002602001015190506000858381518110611a8257611a826136a7565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015611b155760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610730565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611b529084906136ec565b9250508190555050505080611b66906136d3565b9050611a47565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611bbd929190613779565b60405180910390a46112ef8187878787876128cd565b6000806000611be28585612a72565b91509150610be781612ab7565b6000828152600b6020908152604080832060010154600390925290912054611c189085906136ec565b1115611c665760405162461bcd60e51b815260206004820152601360248201527f4e6f206d6f7265207468697320746f6b656e73000000000000000000000000006044820152606401610730565b611c8b848385604051806040016040528060018152602001600360fc1b815250611e26565b604080518381526020810185905260ff83168183015290517f7b881d936ff51ac84a956af91b7db25c1b7d9bd61372534c809254750233592d9181900360600190a150505050565b600480546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611db95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608401610730565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416611e865760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610730565b336000611e9285612c1c565b90506000611e9f85612c1c565b9050611eb08360008985858961273f565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290611ee09084906136ec565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610e2683600089898989612c67565b6001600160a01b038416611fa05760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610730565b81518351146120025760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610730565b336120128160008787878761273f565b60005b84518110156120ad57838181518110612030576120306136a7565b602002602001015160008087848151811061204d5761204d6136a7565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461209591906136ec565b909155508190506120a5816136d3565b915050612015565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516120fe929190613779565b60405180910390a46109ef816000878787876128cd565b6001600160a01b0384166121795760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610730565b33600061218585612c1c565b9050600061219285612c1c565b90506121a283898985858961273f565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156122265760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610730565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906122639084906136ec565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46122c3848a8a8a8a8a612c67565b505050505050505050565b6001600160a01b03831661234a5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610730565b33600061235684612c1c565b9050600061236384612c1c565b90506123838387600085856040518060200160405280600081525061273f565b6000858152602081815260408083206001600160a01b038a168452909152902054848110156124195760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610730565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052610e26565b606060006124a0836002613745565b6124ab9060026136ec565b67ffffffffffffffff8111156124c3576124c3612f37565b6040519080825280601f01601f1916602001820160405280156124ed576020820181803683370190505b509050600360fc1b81600081518110612508576125086136a7565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612553576125536136a7565b60200101906001600160f81b031916908160001a9053506000612577846002613745565b6125829060016136ec565b90505b6001811115612607577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106125c3576125c36136a7565b1a60f81b8282815181106125d9576125d96136a7565b60200101906001600160f81b031916908160001a90535060049490941c93612600816137a7565b9050612585565b5083156126565760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610730565b9392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106126a6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106126d2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106126f057662386f26fc10000830492506010015b6305f5e1008310612708576305f5e100830492506008015b612710831061271c57612710830492506004015b6064831061272e576064830492506002015b600a831061075c5760010192915050565b6001600160a01b0385166127c65760005b83518110156127c45782818151811061276b5761276b6136a7565b602002602001015160036000868481518110612789576127896136a7565b6020026020010151815260200190815260200160002060008282546127ae91906136ec565b909155506127bd9050816136d3565b9050612750565b505b6001600160a01b0384166112ef5760005b8351811015610e265760008482815181106127f4576127f46136a7565b602002602001015190506000848381518110612812576128126136a7565b60200260200101519050600060036000848152602001908152602001600020549050818110156128aa5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f7460448201527f616c537570706c790000000000000000000000000000000000000000000000006064820152608401610730565b600092835260036020526040909220910390556128c6816136d3565b90506127d7565b6001600160a01b0384163b156112ef5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061291190899089908890889088906004016137be565b6020604051808303816000875af192505050801561294c575060408051601f3d908101601f191682019092526129499181019061381c565b60015b612a0157612958613839565b806308c379a003612991575061296c613855565b806129775750612993565b8060405162461bcd60e51b81526004016107309190612ef0565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610730565b6001600160e01b0319811663bc197c8160e01b14610e265760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610730565b6000808251604103612aa85760208301516040840151606085015160001a612a9c87828585612d63565b94509450505050612ab0565b506000905060025b9250929050565b6000816004811115612acb57612acb6138df565b03612ad35750565b6001816004811115612ae757612ae76138df565b03612b345760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610730565b6002816004811115612b4857612b486138df565b03612b955760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610730565b6003816004811115612ba957612ba96138df565b036116a65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610730565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612c5657612c566136a7565b602090810291909101015292915050565b6001600160a01b0384163b156112ef5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190612cab90899089908890889088906004016138f5565b6020604051808303816000875af1925050508015612ce6575060408051601f3d908101601f19168201909252612ce39181019061381c565b60015b612cf257612958613839565b6001600160e01b0319811663f23a6e6160e01b14610e265760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610730565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612d9a5750600090506003612e1e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612dee573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612e1757600060019250925050612e1e565b9150600090505b94509492505050565b80356001600160a01b0381168114612e3e57600080fd5b919050565b60008060408385031215612e5657600080fd5b612e5f83612e27565b946020939093013593505050565b6001600160e01b0319811681146116a657600080fd5b600060208284031215612e9557600080fd5b813561265681612e6d565b60005b83811015612ebb578181015183820152602001612ea3565b50506000910152565b60008151808452612edc816020860160208601612ea0565b601f01601f19169290920160200192915050565b6020815260006126566020830184612ec4565b600060208284031215612f1557600080fd5b5035919050565b600060208284031215612f2e57600080fd5b61265682612e27565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715612f7357612f73612f37565b6040525050565b600067ffffffffffffffff821115612f9457612f94612f37565b5060051b60200190565b600082601f830112612faf57600080fd5b81356020612fbc82612f7a565b604051612fc98282612f4d565b83815260059390931b8501820192828101915086841115612fe957600080fd5b8286015b848110156130045780358352918301918301612fed565b509695505050505050565b600082601f83011261302057600080fd5b813567ffffffffffffffff81111561303a5761303a612f37565b604051613051601f8301601f191660200182612f4d565b81815284602083860101111561306657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561309b57600080fd5b6130a486612e27565b94506130b260208701612e27565b9350604086013567ffffffffffffffff808211156130cf57600080fd5b6130db89838a01612f9e565b945060608801359150808211156130f157600080fd5b6130fd89838a01612f9e565b9350608088013591508082111561311357600080fd5b506131208882890161300f565b9150509295509295909350565b60008060006060848603121561314257600080fd5b61314b84612e27565b95602085013595506040909401359392505050565b6000806040838503121561317357600080fd5b823567ffffffffffffffff8082111561318b57600080fd5b818501915085601f83011261319f57600080fd5b813560206131ac82612f7a565b6040516131b98282612f4d565b83815260059390931b85018201928281019150898411156131d957600080fd5b948201945b838610156131fe576131ef86612e27565b825294820194908201906131de565b9650508601359250508082111561321457600080fd5b5061322185828601612f9e565b9150509250929050565b600081518084526020808501945080840160005b8381101561325b5781518752958201959082019060010161323f565b509495945050505050565b602081526000612656602083018461322b565b6000806000806080858703121561328f57600080fd5b8435935060208501359250604085013591506132ad60608601612e27565b905092959194509250565b600080600080600060a086880312156132d057600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff81111561330357600080fd5b6131208882890161300f565b6000806000806080858703121561332557600080fd5b843567ffffffffffffffff8082111561333d57600080fd5b61334988838901612f9e565b9550602087013591508082111561335f57600080fd5b5061336c87828801612f9e565b935050604085013591506132ad60608601612e27565b6000806040838503121561339557600080fd5b50508035926020909101359150565b80151581146116a657600080fd5b600080604083850312156133c557600080fd5b6133ce83612e27565b915060208301356133de816133a4565b809150509250929050565b600080600080600060a0868803121561340157600080fd5b61340a86612e27565b97602087013597506040870135966060810135965060800135945092505050565b60008060006060848603121561344057600080fd5b505081359360208301359350604090920135919050565b600080600080600060a0868803121561346f57600080fd5b61347886612e27565b9450602086013567ffffffffffffffff8082111561349557600080fd5b6134a189838a01612f9e565b955060408801359150808211156134b757600080fd5b6134c389838a01612f9e565b945060608801359150808211156134d957600080fd5b6134e589838a01612f9e565b935060808801359150808211156134fb57600080fd5b5061312088828901612f9e565b600080600080600060a0868803121561352057600080fd5b853567ffffffffffffffff8082111561353857600080fd5b61354489838a01612f9e565b9650602088013591508082111561355a57600080fd5b61356689838a01612f9e565b95506040880135945060608801359350608088013591508082111561311357600080fd5b6000806040838503121561359d57600080fd5b6135a683612e27565b91506135b460208401612e27565b90509250929050565b600080600080600060a086880312156135d557600080fd5b6135de86612e27565b94506135ec60208701612e27565b93506040860135925060608601359150608086013567ffffffffffffffff81111561330357600080fd5b600181811c9082168061362a57607f821691505b60208210810361364a57634e487b7160e01b600052602260045260246000fd5b50919050565b60008351613662818460208801612ea0565b835190830190613676818360208801612ea0565b7f3f626c6f636b636861696e3d6c696e65610000000000000000000000000000009101908152601101949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016136e5576136e56136bd565b5060010190565b8082018082111561075c5761075c6136bd565b608081526000613712608083018761322b565b8281036020840152613724818761322b565b9150508360408301526001600160a01b038316606083015295945050505050565b808202811582820484141761075c5761075c6136bd565b60006020828403121561376e57600080fd5b8151612656816133a4565b60408152600061378c604083018561322b565b828103602084015261379e818561322b565b95945050505050565b6000816137b6576137b66136bd565b506000190190565b60006001600160a01b03808816835280871660208401525060a060408301526137ea60a083018661322b565b82810360608401526137fc818661322b565b905082810360808401526138108185612ec4565b98975050505050505050565b60006020828403121561382e57600080fd5b815161265681612e6d565b600060033d11156138525760046000803e5060005160e01c5b90565b600060443d10156138635790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561389357505050505090565b82850191508151818111156138ab5750505050505090565b843d87010160208285010111156138c55750505050505090565b6138d460208286010187612f4d565b509095945050505050565b634e487b7160e01b600052602160045260246000fd5b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261392d60a0830184612ec4565b97965050505050505056fea264697066735822122020d0a789eefc460605b9431bb4ea9ab6a4072891e43b6b32b52bc4c4cf60e7de64736f6c63430008110033" + }, + { + "address": "0xdb8e9113daa5fcd09f7b68d5d7d35576b1cc5760", + "nonce": 11, + "balance": "0x000000000000000000000000000000000000000000000000001d48f4840f2474", + "code": "0x" + }, + { + "address": "0x4bdb9a26955fb929978857bcb76756ee841e29dc", + "nonce": 4, + "balance": "0x0000000000000000000000000000000000000000000000000019b9090fd18540", + "code": "0x" + }, + { + "address": "0xab688f8a8bbe6ab5efa291857ea9649e7da64e01", + "nonce": 11, + "balance": "0x0000000000000000000000000000000000000000000000000010c2ca9f3afee1", + "code": "0x" + }, + { + "address": "0x45e42d96dd5ded012ff36a784a6893c11f29830e", + "nonce": 33, + "balance": "0x000000000000000000000000000000000000000000000000000d4a33ba40a6ee", + "code": "0x" + }, + { + "address": "0x562f25789dcf663381b0103741e0937818b27b13", + "nonce": 9, + "balance": "0x0000000000000000000000000000000000000000000000000014549cdce6eb36", + "code": "0x" + }, + { + "address": "0xbea70fc812267f534be568553f2978a7a54495b0", + "nonce": 19, + "balance": "0x0000000000000000000000000000000000000000000000000041e329f372f65d", + "code": "0x" + } + ], + "storage": [ + { + "address": "0xa658742d33ebd2ce2f0bdff73515aa797fd161d9", + "key": "0x0000000000000000000000000000000000000000000000000000000000000066", + "value": "0x00000000000000000000000038de71124f7a447a01d67945a51edce9ff491251" + }, + { + "address": "0xa658742d33ebd2ce2f0bdff73515aa797fd161d9", + "key": "0x0000000000000000000000000000000000000000000000000000000000000034", + "value": "0x0000000000000000000000009f403140bc0574d7d36ea472b82daa1bbd4ef327" + }, + { + "address": "0xa658742d33ebd2ce2f0bdff73515aa797fd161d9", + "key": "0xf1a448c7929f6976c2b6a36a3923f20e67fe47e9b765b1b7590175f0d9cadf48", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xa658742d33ebd2ce2f0bdff73515aa797fd161d9", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000c614e9c511a5149f1969f2cb0199d508bbb5b915" + }, + { + "address": "0xa658742d33ebd2ce2f0bdff73515aa797fd161d9", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x3d775406a990b5d4020cec5cef92c4784c7073c1", + "key": "0x000000000000000000000000000000000000000000000000000000000000000a", + "value": "0x000000000000000000000000000000000000000000000000000000026e76cecd" + }, + { + "address": "0x3d775406a990b5d4020cec5cef92c4784c7073c1", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x0000000000000000000000000000000000000000000003971618b8c39a372ff7" + }, + { + "address": "0x3d775406a990b5d4020cec5cef92c4784c7073c1", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000" + }, + { + "address": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x000000000000000000000000ca68a9acf7c6e364d23382bcb7ad06c5b29ddc44" + }, + { + "address": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x00000000000000000000000000b97496700288c1bceb90ecc04a40c4aeac8bb4" + }, + { + "address": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589", + "key": "0x68ccfddb465e828bc0f3c044fc4e33abe144227396a494d1fec43bbe884b6876", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xecbee1a087aa83db1fcc6c2c5effc30bcb191589", + "key": "0x0000000000000000000000000000000000000000000000000000000000000007", + "value": "0x000000000000000000000061104fbe07ecc735d8d84422c7f045f8d29dbf1500" + }, + { + "address": "0x5ec5b1e9b1bd5198343abb6e55fb695d2f7bb308", + "key": "0x000000000000000000000000000000000000000000000000000000000000000a", + "value": "0x00000000000000000000000000000000000000000000001a242afb870e847490" + }, + { + "address": "0x5ec5b1e9b1bd5198343abb6e55fb695d2f7bb308", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x000000000000000000000000000000000000000000000000000001987fce63b9" + }, + { + "address": "0x5ec5b1e9b1bd5198343abb6e55fb695d2f7bb308", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xd5d61e4ecdf6d46a63bfdc262af92544dfc19083", + "key": "0x09bec16b1ce479d3771eb4c9501252f87b54b78974a85876407b6c003dab5ff2", + "value": "0x000000000000000000000000b86b3e16b6b960fd822849fd4b4861d73805879b" + }, + { + "address": "0xd5d61e4ecdf6d46a63bfdc262af92544dfc19083", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000f6cfd951c6c2bd1ac8f53ff314a0d01f0443f0ee" + }, + { + "address": "0xd5d61e4ecdf6d46a63bfdc262af92544dfc19083", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x00000000000000000000000031c2b0c23c0b9afec70229c18efc2c272722c2cf" + }, + { + "address": "0xd5d61e4ecdf6d46a63bfdc262af92544dfc19083", + "key": "0x64fca317688057a4e85ac0d65b57c59f0162677c9027e6ebc9f92d9e4228b785", + "value": "0x000000000000000000000000b9cc0bb020cf55197c4c3d826ac87cadba51f272" + }, + { + "address": "0xd5d61e4ecdf6d46a63bfdc262af92544dfc19083", + "key": "0xfaa98f3ea6236bbd014b8ad25026ae5385557c69ba81da7433374bce1b12b77f", + "value": "0x000000000000000000000000ce048492076b0130821866f6d05a0b621b1715c8" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x662a69cd3109118eaeb97453d7757bb72730762cc0b8db890749a1f9ba0ccffc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x3b02aa84a1735db0dfe30dab17610fbfd994ff78dc78115b8892dec252c874b6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x58ee4eb31b6bf5bbf0b096cea1180dc35822a59b387a0956b461af4722d2c85c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000005" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x58ee4eb31b6bf5bbf0b096cea1180dc35822a59b387a0956b461af4722d2c85b", + "value": "0x000000000000000000000000000000000000000000000000000302ab5b662641" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x58ee4eb31b6bf5bbf0b096cea1180dc35822a59b387a0956b461af4722d2c856", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x3b02aa84a1735db0dfe30dab17610fbfd994ff78dc78115b8892dec252c874bb", + "value": "0x000000000000000000000000000000000000000000000000000a19aca2750624" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x3b02aa84a1735db0dfe30dab17610fbfd994ff78dc78115b8892dec252c874bc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0xbd02e0f21261974459713a2e7497a51729c0c6f0f6783bf002156e8df723357a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000063d3d" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x99a9357ee5c18d034349e10fdf571dcd78266aa8b96852af20a47d123db4ce5b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000007" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x000000000000000000000000487e08aad08cfd10babf7a2219b8bba9f96e49ae" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0xc2973946212de411270aafbf3c7d99c2f927c084d9d13779707a2cedd483ee96", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x99a9357ee5c18d034349e10fdf571dcd78266aa8b96852af20a47d123db4ce5a", + "value": "0x00000000000000000000000000000000000000000000000000170d201af0eadc" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x99a9357ee5c18d034349e10fdf571dcd78266aa8b96852af20a47d123db4ce55", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x662a69cd3109118eaeb97453d7757bb72730762cc0b8db890749a1f9ba0ccff6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x33ff3765920596471de298659fed20f0bcd6eedab352dad17d6b0a3467a1bce0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x000000000000000000000000000000000000000000000000000000000000000b", + "value": "0x000000000000000000000000000000000000000000000000002ce55a897c1d0f" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x000000000000000000000000000000000000000000000000000000000000000a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0xa2236962e53db54d8e7ac709e082f05f66908d1ffc688bd1b13dd86edc97cc85", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000" + }, + { + "address": "0x9e813d7661d7b56cbcd3f73e958039b208925ef8", + "key": "0x662a69cd3109118eaeb97453d7757bb72730762cc0b8db890749a1f9ba0ccffb", + "value": "0x000000000000000000000000000000000000000000000000000735698ff9d3cd" + }, + { + "address": "0xd236b61b6445f2af7775814aa690bec421ce3dd6", + "key": "0x000000000000000000000000000000000000000000000000000000000000000a", + "value": "0x00000000000000000000000000000000000000000000001739d90ab3e7373f47" + }, + { + "address": "0xd236b61b6445f2af7775814aa690bec421ce3dd6", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x00000000000000000000000000000000000000000000001411a934d7fa02296e" + }, + { + "address": "0xd236b61b6445f2af7775814aa690bec421ce3dd6", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x224d8fd7ab6ad4c6eb4611ce56ef35dec2277f03", + "key": "0x978117e31fa41cf1f16590ecdd4b3f2acc680df19aa0b9bc654fed668e629cc1", + "value": "0x000000000000000000000000000000000000000000000086c470a013d3128a85" + }, + { + "address": "0x224d8fd7ab6ad4c6eb4611ce56ef35dec2277f03", + "key": "0x11344873bff0b52502d219b5635959134723b0faad50bddc1fe8e8d6cb8961c7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x224d8fd7ab6ad4c6eb4611ce56ef35dec2277f03", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000000000000000000000000086c59092e3283f6185" + }, + { + "address": "0x224d8fd7ab6ad4c6eb4611ce56ef35dec2277f03", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x224d8fd7ab6ad4c6eb4611ce56ef35dec2277f03", + "key": "0x5cede7462ce11f0c5766a7acd006dbd99bf9034772d9d3bb950c4b849f346995", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x0000000000000000000000000000000000000000000000000000000000000016", + "value": "0x0000000000000000000000000000000000000000000000000000000065dbd489" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0xbc6e6eba003069670f560b03c13e536696e8c5d6b1b86737524a47097a0baabd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x0000000000000000000000000000000000000000000000000000000000000015", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x2092218758b7fe67e9f9d4a23cb8db9f2320218bf6618de16fd300c4f1fe8a44", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x0000000000000000000000000000000000000000000000000000000000000014", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x0000000000000000000000000000000000000000000000000000000000000013", + "value": "0x0000000000000000000000000000000000000000000000000000000065184600" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x0000000000000000000000000000000000000000000000000000000000000012", + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf82f7f2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x0000000000000000000000000000000000000000000000000000000000000011", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x3375dd91c7e928df40b633c5d4092cf997fa492875298203e34cd43e2cd380fc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf82f7f1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x000000000000000000000000000000000000000000000000000000000000001d", + "value": "0x00000000000000000000000036374fc7ef9205b8bb9520f715c9f339829308d2" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x3bd81fce5dfc56e3bdc459dc7c0e873d1ba9674b9499b3e522e5bc8828eb2b32", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x0000000000000000000000000000000000000000000000000000000000000017", + "value": "0x00000000000000000000000000000000000000000000000000000000660b4a83" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x66ac91044cc1d003d976dcea2eb1849631758c8cd54e41fa18328ce4ca22da87", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0xe5bed81d6b73cc95728dcd5d8c859c8a6d9d43a389f71a005bb9494466038eba", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0xf8d466e75f5219a7fd47aabb1df85cde97445041d97f19e7dbb95f0c2edaee3d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x7a46137a5bb2511c34b594b7933b2ee27a44f9ab63ee6c3c254e96071890d893", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x2c0bddac6e1a02b6918d22bae81181a40c5c39527fce3cb51b4c9c58d286a73f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x3fab3fd7ce910e2e229c7a2db6f8cac62317132285728a559de30179b0cca2be", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x00000000000000000000000000000000000000000000000000000000000d3042" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x5ad045826174f3acbbc2be17a5fa7ce798beef12f93ce3ccf6c89d6a94da3c77", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0xb2116c6cfa512830dc1c4e95f23ce37e07718d59a4b1abc09dfa2e35df8dd994", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x617facb3fa372ed2d204d5be694c6172f11e0c9abbe3fe726f8e8e12a2704b06", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000d82f30c68369f255b32be4864deef620a3c709fb" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0x0000000000000000000000000000000000000000000000000000000000000021", + "value": "0x00000000000000000000000000000000000000000000000000000000000f4240" + }, + { + "address": "0x66ccc220543b6832f93c2082edd7be19c21df6c0", + "key": "0xf120e31ba4323e4cdb89ce2f72d1bdfdbd4360c314d8b5fee23c3c94091e9879", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xeacf8b19e104803cfcd2557d893d6a407e4994f0", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x000000000000000000000000381c031baa5995d0cc52386508050ac947780815" + }, + { + "address": "0xb6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7", + "key": "0xccd9a18987aa879a1e035b61c66b3a53f5a52e1dd6d7a1bf2e897d74c8778a52", + "value": "0x0000000000000000000000000000000000000000000000000000000000067d2c" + }, + { + "address": "0xb6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7", + "key": "0x87e603a3caf5ea2d8872fe30ffa90807c1b8555e67057c5f485cead523f0684b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x0000000000000000000000000000000000000000000000000000000000000101" + }, + { + "address": "0xb6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7", + "key": "0x720e4d2bfecfa412cf4068fca0fe6552b6367554348b2d1585c378a990c36241", + "value": "0x000000000000000038de71124f7a447a01d67945a51edce9ff49125100010001" + }, + { + "address": "0x628e5081ba93b1c4f58e54e7175088b1ace58852", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x00000000000000000000000065934e2f228fde069a6255f46e6a15bc9de38545" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0xe2d157079a1ae4d7af87daf5c800a1cde00ed4fcddb344ee9810e79ded22c0a1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0xecad04d42daa5bac623e92788df7807447bdd3ef2248e733cb9399d7c3e8a772", + "value": "0x00000000000000000000000000000000000000000000000252aefe6b6efea942" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0xc1932b07ff8c5ae6e65f25b39002e6a7441501c4b6101522c572bfaae0e7a3f8", + "value": "0x0000000000000000000000000000000000000000000000001e3c9720ef33fd58" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0xe42edd00220334258889a055c7908c42e66e6b3bf5f030db2dcb7ac42675051b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0x01c610eefac091a2f15583714b36e5708c3813d9244f46bea1fc4de39505eaf9", + "value": "0x000000000000000000000000000000000000000000000005fdf41c9fc02489ba" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0xabd232d194f9e5ffb2cb7f960a4ffb9a7ad601537c0e02e740d926a5aaf1107a", + "value": "0x000000000000000000000000000000000000000000000043289879163316df0d" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0xd785c02df20d548ab9f65ecb8012ad8e9fc5c0776ea2bae3294a0052255c2217", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0x0b7bf2eac8c8793869c57ca7e9507952f0939c6ed7ae314b2340d9d1ea88e8f9", + "value": "0x000000000000000000000000000000000000000000000000020d5fd44f3f0b91" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0x4175c49d56cad0bc6d69ef289864fd048386a14da4ac19736c9e074139b2e912", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0xd7baaebc599bd42cb713b8d059f8a9ad4ee5d42db1abeb4aaead04d6905b9551", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0x3bc9abd4ed26927cd511cfbe4af60ad96c4ea01425305f78bca6f96865cd8101", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0x9bfe8af010c441b92005d99c0533fc259db7811b06cdbfb57cc8fff844519508", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0x2c34fd55b62653c7f10fa3a2b90849484b5eaf9fa117d6bd491d166923df8d63", + "value": "0x000000000000000000000000000000000000000000000000000009184e72a000" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0x4dde6aa35c28ddd73fa5ed53dab4e756bfebf0570af5802b016fe43dec04e8f7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0x39949d9d12e0dd3401f651da2640754b490a33c85c5e6e9875e4c066860800cc", + "value": "0x000000000000000000000000000000000000000000000001067000ee588defcf" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "key": "0x26c1f8c67399ef5bbdc1229f592cac7468734c2cae0e5298bf4f8d854001b8f5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fc8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000101" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xa32648ccb355d346f3a23992a400a0b86c40ee068ba6c2bd675fefdafdab9669", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fc7", + "value": "0x00000000000000000000000000000000000000000000000000000000000493e0" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xa32648ccb355d346f3a23992a400a0b86c40ee068ba6c2bd675fefdafdab9668", + "value": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fca", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xa32648ccb355d346f3a23992a400a0b86c40ee068ba6c2bd675fefdafdab9667", + "value": "0x000000000000000000000000894f8b4192e376b13715ccab686b73eda4b30759" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fc9", + "value": "0x000000000000000000000000000000000000000000000000000000006602c5d5" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fc4", + "value": "0x000000000000000000000000000000000000b3183223533ebf3c84d013c00000" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fc3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fc6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fc5", + "value": "0x000000000000000000000000000000000000000000000000727395c1471fc000" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0x0000000000000000000000000000000000000000000000000000000000000065", + "value": "0x00000000000000000000000034df93f37f327757684ae502b47c787c38465037" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x0000000000000000000000001e703c0607ad08ded4dca06506198dea0d53fdf2" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fc0", + "value": "0x000000000000000000000000894f8b4192e376b13715ccab686b73eda4b30759" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fbf", + "value": "0x00000000000000000000000000000000000000000000000000000000000002c3" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fc2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xe3656b962f50412f297d0925f494629fe0e34888ea81ba178f71e9e8ce083fc1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0x0016efd098f54ba11ae009e6d20227b1176983508d7b80f692ed5a7717af28e1", + "value": "0x00000000000000000000000000000000000000000000000000038d7ea4c68000" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0x330ba942cae596691eea8b36507aace33480783461a7a93495a51ddb8cfa9997", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0x0016efd098f54ba11ae009e6d20227b1176983508d7b80f692ed5a7717af28e0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xa3fe3988a0a1efabf85f80ddc207f07cc061914ae0bea19024a5333291cd5e11", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xa32648ccb355d346f3a23992a400a0b86c40ee068ba6c2bd675fefdafdab966b", + "value": "0x000000000000000000000000000000000000000000000000727395c1471fc000" + }, + { + "address": "0x69c6b6d88fc2f298473737d22bb9156d74b83d59", + "key": "0xa32648ccb355d346f3a23992a400a0b86c40ee068ba6c2bd675fefdafdab966a", + "value": "0x00000000000000000000000000000000000000000000000000000000000002c3" + }, + { + "address": "0xa2aa501b19aff244d90cc15a4cf739d2725b5729", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e320" + }, + { + "address": "0xa2aa501b19aff244d90cc15a4cf739d2725b5729", + "key": "0xa04b87b5b3344a007b9e03a236b13ec557d0d61da9088c2f924bf8704e27428f", + "value": "0x00000000000000000000b1ca0000000005f62d2efffffff8000000006601ff02" + }, + { + "address": "0xa2aa501b19aff244d90cc15a4cf739d2725b5729", + "key": "0x3f8f2c07540c691e24100a1325eae362e25a7574205faba96871ac7e5a433aac", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xa2aa501b19aff244d90cc15a4cf739d2725b5729", + "key": "0x00000000000000000000000000000000000000000000000000000000000000ce", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xa2aa501b19aff244d90cc15a4cf739d2725b5729", + "key": "0x28b01e5f9379f2a22698d286ce7faa0c31f6e4041ee32933d99cfe45a4a8ced5", + "value": "0x0000000000000000119e0ca200000054979f9bc2fffffff8000000006602c5c8" + }, + { + "address": "0xa2aa501b19aff244d90cc15a4cf739d2725b5729", + "key": "0x28b01e5f9379f2a22698d286ce7faa0c31f6e4041ee32933d99cfe45a4a8ced6", + "value": "0x00000000000000000000000000000000000000000dfbe31f00000054da5de740" + }, + { + "address": "0xa2aa501b19aff244d90cc15a4cf739d2725b5729", + "key": "0x722e7100a3d24c397610faf61a4be63ed8ba9109ab7d026e295c4f7b757e549a", + "value": "0x00000000000000000000b9750000000005f5c3a4fffffff80000000066028d42" + }, + { + "address": "0xa2aa501b19aff244d90cc15a4cf739d2725b5729", + "key": "0x00000000000000000000000000000000000000000000000000000000000000c9", + "value": "0x0000000000000000000000000708325268df9f66270f1401206434524814508b" + }, + { + "address": "0xc690549e0215192d1ffb527bb3ca4d4ba638cad2", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000905438e60010000" + }, + { + "address": "0xc690549e0215192d1ffb527bb3ca4d4ba638cad2", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000000000000000000000000000016345785d8a0000" + }, + { + "address": "0xc690549e0215192d1ffb527bb3ca4d4ba638cad2", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0xfe6d928e7334422ddf4c5c7fc2b0b4e1fa8ae56e89ceb9174e8211f54c83b999", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0xd65a715552ea112af78a3dee642ec1e73519f2377d37a73cea257b3177000fd6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x0e8bb039a4a450868ebaf9a6e6b72fae14f7a539d6ae5f98d30ba1795ab1fb5c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x658aed1aafada17ae0cd776044adff4cabfec2cd8f0e9e37953e3438c9bdeada", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x00000000000000000000000000000000000000000000000000000000000c0bd4" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000000000001dfcd042f164c2848cc249cdfa7856162e5cd3a9" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x000000000000000000000000000000000000000000000000000000000000000e", + "value": "0x00000000000000000000000000000000000000000000000000000000660c8015" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x22ea791ddb9516bcd92b4c2909cdb588bb6b2044e048a63ae46866eb10674760", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x000000000000000000000001ecbee1a087aa83db1fcc6c2c5effc30bcb191589" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x000000000000000000000000000000000000000000000000000000000000000a", + "value": "0x0000000000000000000000001df703545d965e757672691fb58637c675cd5e3e" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0xb25b8d9fbc7d893da64abaa99db0e3aa2f59f1c87a76323c5bfcff000bf7b354", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0xae1a57f7f2f2aa17c6791fcb76959ed001a8f24f7ff45b5f3c949108d2a276f0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x687e263eb74037b3a80fb2238c9bc52acb9b7611a7c07e5090483b10565b6134", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x96a79c0211e6d451aeedc23767cc9a95f7d9adc2ab7661784d6fa2d908cc5fee", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x7afaf38dc5e7eaf4294298e333bd2b5a573e141c4c07225db3c30b3aabe945cc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x439803674f2081b2f239fac7ebd5b8a670d75fc2c4b365ef9f7ba57fced50732", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x56b0ccb6deb2e9423a8591ce4877ee76baff663d88fb12aaabf076183f6344fa", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0xbf3b216b8c0504cfdae9437c531ffd8eedc248cdcdc0af7004616a157dc227c6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x49785f3f14413b710aebd22ae6ee87083cff15b3963757ab4d60af2610460f29", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x3acdc4331c7461c4ac9c890704e105779d4dcf15ac1b773205fa35c6fb2bd7f0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x83192edb7d959f915ee80990954436ebf25732804f735f2af7072934a6d78d0f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0xb3b563ce1abe012c6084a5bbfa752d357f8aae42ec1347022f311b06bf95b6e1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x5759467b5a9674990312c7adb9c1130786e1e4f433da925e5d8126540290245f", + "value": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000" + }, + { + "address": "0x0de240b2a3634fcd72919eb591a7207bddef03cd", + "key": "0x3ee4323e6884b96bf85ed8e9fc0004414bd92a945e0692417d6891d7ead473be", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0xa20aee350f88445e8e4a0a46d470c1562f63cc52a9e9cc8ee0d7824462bc65f3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf7b1703", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x3174907e20bd1d087bfab06840f4c7422ec58e7955038050b676f6b14fb7c29a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0xc1cd29ed83fbf290c74813b86a9917d34d62b94fc65a10ee534a162b37dc3bc4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x61560e0b7594a6e0b872136a7e90f62c93be754e9db343af99db6449f53ec6e4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x5cd000dc1052e18c66c59cc1da9f009d935bf20b893c038a4884844146b641dd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0xb1ce751e24c0f1fd98b964e3793f9b9ee22b9fa084290e6f4b2824f82a36693d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x2f17c556ae89dfa365a140a48880ceedc8428e10b6a64df2fc2b4c92964ac7a5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0xbdc082903045394d1749e49876490d375b6dc2e44a23068fec7bde0bcdcf6e69", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x5cd000dc1052e18c66c59cc1da9f009d935bf20b893c038a4884844146b641de", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x9d907dd56752e98ab79723de0ad401d798c70fc279e67f79defcbaefa7b80b48", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x5cd000dc1052e18c66c59cc1da9f009d935bf20b893c038a4884844146b641db", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x0bd0476acf1474a3aaa171d867568769e71bbfa9c7dffdba0040a08c449717db", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x5cd000dc1052e18c66c59cc1da9f009d935bf20b893c038a4884844146b641dc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x0a031f7d0c62f6da71183dc58144e43a4ffcdb5b5ed90cefe48f78e37f89f322", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x3c7e0543706a95e1e4664bd3df8558d3370b4eda53840833a0973eed24e2b5f0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x1edc4e7e08e92ac7e3850269038aff445fc3f95cb9a10e1399774db603210d99", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x780de722234532f7d61ca3d147574f44a85c4244", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x0000000000000000000000000000000000000000000000000000000000054f54" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0xa09bbb16b6bb2eba74de2b89ceb9c4797dda8b79467758f599efc128362b26a1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0xb2daa9d7ce7449e3e6b982cae64b8c7ee811ee47afb2475f57c31234a5373b8d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x5d4253208d90ec8fa548655544ea235f9494e1c3e4867e9f9602fa4da6352e8c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0xc7d76cd1b80320a4e0b6680a861f4c864356368e8b580115785683bcbe584335", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x06e38d846b191dcfd9de8a205ef57695b1287f3b4fd378fc5a72d1bd9f744246", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0xc393f06fce34b82cbaaae1e84b79ea5eabdc872955b9b3779812eb12921acc8a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x6bda9f243e4e37fcbd17836ab14394a5cbdb3eec14a32be6b7085d3fdf861995", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x399afb74e16c87871f61f56edabce24179155276c45a69f0c0ab37001fecd81e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x000000000000000000000000000000000000000000000000000000000000000f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x415bf2bf59c60beae53a1561065a941d219a176a3497a7e796b1400b57145d1f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x1e4235e6eefd8cbceab496c19afda036fc13631e25d879a4d443cc7d87ea7749", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x485074d00a8953c2327b8be8d22f2d8b2c2749d0f67cfab317b3f4b47efda0f1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0xc909698a4cb5897d25a243da97a69bc3cbb1e34a830eab08cdd27e3180463041", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x8d71faae4b2f067d8b5e2339ee0d85952d3872684073215452229e8a4a23ec88", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x8e27c26df8609ff3c9ce7789934367c95d5fbda662f813c163e48d2306d8c2ef", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x868195754d79ec8cb7482efd5078e0a40dbe1572b92db1b3cc1e72f701506eed", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x1c9b899a1ac02c2ff868f66919b6c83b2b4df2f8c80102998602b5cd1b158bbd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b70ec71", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b70ec70", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x00000000000000000000000000000000000000000000000000000000000d7d8d" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x827170055fb3c36af396efe8fef4260a5d499e97d458fcbef966e398c8fd084c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x5a0dc8d5f931ff35cd1d9de5b93b1483374ef17644f3b129149c2785956a2e72", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x00000000000000000000000000000000000000000000000000000000000d7d8c" + }, + { + "address": "0xb18b7847072117ae863f71f9473d555d601eb537", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b70ec6f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x0000000000000000000000000000000000000000000000000000000000000016", + "value": "0x0000000000000000000000000000000000000000000000000000000065e7256f" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x0000000000000000000000000000000000000000000000000000000000000015", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x1da9bc2a8326d1d395c9ed33ba0a682515d025e13c70dad2babeb1e1adebe6ae", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xb9356ec5453db810f8fd3f3536eb8c43592699916f81d2f2fc935453467601e7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x0000000000000000000000000000000000000000000000000000000000000014", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x0000000000000000000000000000000000000000000000000000000000000013", + "value": "0x0000000000000000000000000000000000000000000000000000000065184600" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x0000000000000000000000000000000000000000000000000000000000000012", + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x0000000000000000000000000000000000000000000000000000000000000011", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x7cc69665b4b28378ac0ebdbd9977098766b74a75de1d64d94c2fb27ba5cbef40", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x000000000000000000000000000000000000000000000000000000000000001d", + "value": "0x00000000000000000000000079c309bdda16976b90f9f21a8dfbd11e719ed24c" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xbac3fc32087e57a958cb81bc5c4eb42fdd8efb7685c3a9b627e7d0988776bfdc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xcaa3f3df1018ca9847b72de763306f8eb2f3f06174989a69fa8149126c568812", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x0000000000000000000000000000000000000000000000000000000000000017", + "value": "0x00000000000000000000000000000000000000000000000000000000660c0860" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xad5d301a4da039c43d4d9edb025474c960880c847c7a0d9c333c04d891f23ccd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xcd4fe5a8e433bffb0e3f57cd2897c77e1777a2d8929ae253bfcc0311e43ae66a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xb4de4f6ba2f9e7ff3a8b4fb4b86ee1b56a6749ee682a0692dab9b2d2d28562db", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xf1704e58ddc40858103a9cf050ae7adadb90c80e82a6a7800e4792a664f048d8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x00000000000000000000000000000000000000000000000000000000000b4eeb" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x3fba29e3b2fd2233ad32d73846f51d169bde6bdc622ee492341e625ed8bd0e9d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xb1f8900090d9b064cef4902c5837f9baa435b1534cd43df40ce906b91120f127", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xb667e93f6415563668e3a2011bbd0667152f780548034032c37f636bb09c4742", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xaade1d14eddb09b6ec462e7d53650912ea67962d0b59127dcc9f26583f887a71", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x10d48e2b496f77efd1e43c1125956cc22dcfc5bacfd167102dbf5efab9fccfd6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x264fd19c4ffdadd8ca6c1e7f58587858cb9919d8e74594179271124f22baeb5f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xdd42930b2b9d2045f19533763ee1bfb66923b805b9b11d995e5604841272d5c2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf81169c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x3f7ca6929d8c0b50c19ec6fbf2b1566eba3734eb56f492b855374cdf5c424cec", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf81169d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf81169a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf81169b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x740e45082e9a8c389e2ec71c418362a9ef519b8f245eb01e7012884ba3560145", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xcb0c2da7c4f383a7112542b68c01fa69bcf4163690b43eb11b9c4ab92073937e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xea3e7d65692d6e8dbea445625f00fb6586bec4cd3ac026db6113cfaad0ae888f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000d82f30c68369f255b32be4864deef620a3c709fb" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x0000000000000000000000000000000000000000000000000000000000000021", + "value": "0x00000000000000000000000000000000000000000000000000000000000f4240" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xda41912a6a83ab8522b5140bc982daa4f8e5fe5ebc4a916b01832ee1731ad79e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xa8a70a6cc461c897cea0ef441ab8b2f539d2b469b6cd3586d146c7bd773fef82", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x0c0bc6d60ce896c41881c789894283de86c268868c9d291874a672cf200236fa", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x178fdcef11be6f60ab90b58363fea9ee53e61a4c85275ecd125e68afcd00bde5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0xfa61f6db12dc20a71814f5eb4d58743e21d46bd8d25746e8cbc2453f265e5770", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x31ce07e9190e689769223fa9eb26e89783d37c968964499c6ed7740c53bde504", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x969a0bfefe0f3cef84d2e8664e597b40610a9be6b4c497535ce8f114f603b2b0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc043bce9af87004398181a8de46b26e63b29bf99", + "key": "0x666e5db4bffd004dc2867b7612ee44f054db8af0c53a437611e01fdec69d5755", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x38de71124f7a447a01d67945a51edce9ff491251", + "key": "0x734c51d5d5e6d5834ce46db1cdd4db120261db7f392c022493bf2bd681a9d0cf", + "value": "0x0002a658742d33ebd2ce2f0bdff73515aa797fd161d900000000000000140002" + }, + { + "address": "0x38de71124f7a447a01d67945a51edce9ff491251", + "key": "0x734c51d5d5e6d5834ce46db1cdd4db120261db7f392c022493bf2bd681a9d0d0", + "value": "0x00000000d56e4eab23cb81f43168f9f45211eb027b9ac7cc000000000000000a" + }, + { + "address": "0x38de71124f7a447a01d67945a51edce9ff491251", + "key": "0x12cb41e0d9174da94bd5172ad2999f8be62d47f06a92f3d3fd273c9ae1f769be", + "value": "0x0000000000000000000000000000000000000000000000000000000000000014" + }, + { + "address": "0x38de71124f7a447a01d67945a51edce9ff491251", + "key": "0xc878774d599b1f96bb638326ef90795c39e264486051a7988ce4ceb7eab01b3b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000014" + }, + { + "address": "0x38de71124f7a447a01d67945a51edce9ff491251", + "key": "0xf876e473ea46172c8aaff47b16fc85350cf816e94fba5c778df4d235f9fd5c05", + "value": "0x0000000000000000000000000000000000000000000000000000000000000014" + }, + { + "address": "0x38de71124f7a447a01d67945a51edce9ff491251", + "key": "0x67c6e6213cdfa6a2839937a2f5fa621ea4bd452e6ae9a72871e284700fe42cfc", + "value": "0x0000000000000000000000004d73adb72bc3dd368966edd0f0b2148401a178e2" + }, + { + "address": "0x38de71124f7a447a01d67945a51edce9ff491251", + "key": "0xf3edfe273c30a9843d5009e9570b0e255a9f7de867f544e3dbc0ca77e41ad3df", + "value": "0x000000000000000000000000c1b15d3b262beec0e3565c11c9e0f6134bdacb36" + }, + { + "address": "0xb5bedd42000b71fdde22d3ee8a79bd49a568fc8f", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000c0583e2f5930ede5fab9d57bac4169878730b010" + }, + { + "address": "0xb5bedd42000b71fdde22d3ee8a79bd49a568fc8f", + "key": "0xe61add0a88f204078cfba7d76f50a1ce3a47f69a1b09bdd9bfb3e99dc6b7c080", + "value": "0x000000000000000000000000000000000000000000000000000005f5d8a74849" + }, + { + "address": "0xb5bedd42000b71fdde22d3ee8a79bd49a568fc8f", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x000000000000000000000000f951d7592e03edb0bab3d533935e678ce64eb927" + }, + { + "address": "0xb5bedd42000b71fdde22d3ee8a79bd49a568fc8f", + "key": "0x35ae3b45de4f91a1552cd59a3d02c0e5e7bcc9ba9613f8966e9781810e98c42e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb5bedd42000b71fdde22d3ee8a79bd49a568fc8f", + "key": "0xfa56ca41a7d43a1364d521a2385ab52dafd002297e97c015a48bd6b8bacabe50", + "value": "0x0000000000000000000000000000000000000000000000141baca5c6c9902a7e" + }, + { + "address": "0x967035b7cc9a323c6019fb0b9c53a308d2ca551c", + "key": "0xb86a6de16676fea9c4e661f2cb8b2860955dd41d88ee1d58df110c685863008f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x967035b7cc9a323c6019fb0b9c53a308d2ca551c", + "key": "0xe2016ffaf05e045321bf50d6748a304cfc322ba70beee48e1a59d59d0220aa1f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x967035b7cc9a323c6019fb0b9c53a308d2ca551c", + "key": "0x2244c972d68956b98429489784e23f077acba8473f7dacef268c383bb9815e5c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x68d96d49a939f88fad14ef16ae538ab042451634", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729" + }, + { + "address": "0x68d96d49a939f88fad14ef16ae538ab042451634", + "key": "0xb2bf366252f3433b53d8078786e5745512ed31c7f3777592b1ab3e8f3e4ee7da", + "value": "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace" + }, + { + "address": "0x8286d601a0ed6cf75e067e0614f73a5b9f024151", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000629658970d075d0d50f88110238787b3d10c21fe" + }, + { + "address": "0xf851513a732996f22542226341748f3c9978438f", + "key": "0x502a7e4dc2bdb6b7925cedcc0c6705b44e944cb3d5576abf73b576c36f7c9f42", + "value": "0x6f70656e6964330000000000000000000000000000000000000000000000000e" + }, + { + "address": "0xf851513a732996f22542226341748f3c9978438f", + "key": "0x728a1ba39e8a45dc858f9c6d8e574e1c0e15f7b99020cf196b0c1f49b2cbf576", + "value": "0x5472757374676f566572696669636174696f6e4d6f64756c6500000000000032" + }, + { + "address": "0xf851513a732996f22542226341748f3c9978438f", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000b0c43b8ade08a550ece33f1e0d08d611285db1ac" + }, + { + "address": "0xf851513a732996f22542226341748f3c9978438f", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x00000000000000000000000031c2b0c23c0b9afec70229c18efc2c272722c2cf" + }, + { + "address": "0xf851513a732996f22542226341748f3c9978438f", + "key": "0x15f2cbdca77e690b38538e1b66d217194d1c3c5ea47c9363f8311583865f093b", + "value": "0x5275627973636f72655369676e436865636b4d6f64756c655631000000000034" + }, + { + "address": "0x666a8f155e5c0316b0867f6ef5d410ae0fbcfbd8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x0000000000000000000000008190f747d1348466740bb7a3a966d0ca99e11ade" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xc658c54d28bc75b3364ae992b88fd4df6ed46aad40a5fdaf4759f1b4529c4e7c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xe10be6ed914dcb838b5832e92a1c9f9f20aeb07554a5f6e57f8ca9bf5f53f77e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x9e36447431500dcef524a6a142cc210cd3031a5aeba8117ae0c526272933ff7d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xcd081a4550642f766e18516a14006be2ce65a5743a5909dca01dab436b5c3eaa", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x2b826793ab815af9bd8d7c2041aeddea954bf151e78fce2f289a0f6f0b8fc89d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x1f07648dd959d1f113e675ff7346c14a80cc625c2454a7809436ea919b122776", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x4d108906b9d5244e7c17bca69dd374afbe070d34381c793f4cc9751be3851a5c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x929f1afe05b4d0dbc51d797409def2dbbfb7d37502d3d33ffa7f015bea0ebbfa", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x2e890dbf229bfefa3daf941da9f3f99eefd8ccb2ed814342644e57e55c29f244", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x126e52ca1227a040200da3c047766bb948779b97207fc442fa4e3eb6e3dd656d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x1d48405d2a21fe082e739c434456b6a91f6b45256d0fcac11bda4e6fe6f321ea", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x0000000000000000000000000000000000000000000000000000000000000099", + "value": "0x0000000000000000000000000000000000000000000000000000000000087d93" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xab4768b007f770031ad49310eddccb16923c315bd9d53432b9379ccd77483480", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xb33bcfb7d67378f69a0ae8154d9d80450d9821b7c4f2a0ec4cd2ae51f0c8ef7c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xdb7fb6fcc9fc866be4fd53b9a5615750770a38a020f47a07dd8d03a48a7287ed", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xb088fbdd83a4a07740372842eb0897465a8ebecce44205ee75d728d8908cd9bc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94a01a97", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94a01a96", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x00000000000000000000000045d014c365dfedb216569b4ce61b6e30fdcdc72f" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94a01a93", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xdb0b21ff0af02d12756cf926aef29eeec06ae02e36510a92e43fc7acbc1ddaea", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xa9e6db12e925a609e9f7ba14eaeaff12b30d80e17e88df572f14d1d69bef55e2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94a01a95", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94a01a94", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xda58227d8f6adc342556922ecac830e8bc7da0071daff05dd35d46b5c1aade89", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x90bd99a79b88ed61930d2246dabcde72e035f2215d37103975ff32241abcd299", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x5a91b2853bd2bdfa8e55f837aa1570c69efba23980ab7b869394348f1915f97c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xd36609d831cbca69d39882d05c5d0b8006724fa8af9d60c731e87d1f408a9240", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xe4a0081e3f6e128dd6a722d9917b2008e4f9e088bdcd3be6fdf99660459597f1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x58456f3b2aca67d6a9ebe1067c6c46bdee9e11d97f704e8100a3d91c57f12d85", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x0000000000000000000000000000000000000000000000000000000000000194", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x8562c28e0182904f6944a1e687b660bd4ba7f3f5e35d143eb01b2b2025558bdc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x0000000000000000000000000000000000000000000000000000000000000191", + "value": "0x0000000000000000000000000000000000000000000000000000000000640b13" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xd55920c5a00f2518e59201bb248e34ba7c53d23e1612f4dc49b900754b62b239", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xd3318f0b6ecda88a059741916d5c910ffdbf6a5b538565c7d40d36206f7ca463", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x312b4e733d8c6260d45d7f416a65de3b7ec59954d8243a9537e867044e486ca7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x00000000000000000000000000000000000000000000000000000000000000fb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x14e6faddd75177e2a30e82f85ee8bb2a27cb76ebedbe3caf631f43a941d315d7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xa4c5fb921b6bb775a70a333dd02f5643e9e0e2c243f00b729a2c11a402e242ce", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x9427e282d5df3c03335476c2e83e01f30280cacb7de4e3b602ac3298b9813b1e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x5b91efc2db2b279e67c9c969eaf933f30c681cf805b4a4de3edf82e1a2a238d6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x614e0025f4823d238dc3d5f51537e1f27e281adb13c1a75ef31fc57b7cba2283", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x00000000000000000000000095a921ec76cac8af162508e27f60eff4a2cf98a5" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xb0956d71d5191a7cc69e35e186450c91b873937a9d47f420fbd0004c8c91bd7c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x9f62f204543163dca9ba4163da84455607e2763f4b7a053496f45c1ced6112b5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0x0f2c7b1770f56bc846426d1d9362bc913084042da75e4652c9b95b4d706397f9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xda36df0764d138993f9811353ecadd6b32caafb9", + "key": "0xa469e716e65a1025637919646b93734bf23155b8c25ab388ce35a8cf4446756a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xdc38c5af436b9652225f92c370a011c673fa7ba5", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x0000000000000000000000cbb852a6274e03fa00fb4895de0463f66df27a1112" + }, + { + "address": "0xdc38c5af436b9652225f92c370a011c673fa7ba5", + "key": "0x79db10572fb477f5f659507692990c6b814b35839c5137a5ad621ee543c1b50e", + "value": "0x000000000000000000000000000000000000000000000004b27c6e8ae2b8a797" + }, + { + "address": "0xdc38c5af436b9652225f92c370a011c673fa7ba5", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000000000000000000000000000057c73e9c0de293ad4" + }, + { + "address": "0xdc38c5af436b9652225f92c370a011c673fa7ba5", + "key": "0x4f1c3bbc0afe3830a7b18a5ab5079da44c94ca6e10ecf89fd0606826e3bf95aa", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x57d8311842f41ec811352f5d68616fd51551a391", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x000000000000000000000001b97f21d1f2508ff5c73e7b5af02847640b1ff75d" + }, + { + "address": "0x57d8311842f41ec811352f5d68616fd51551a391", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000009a0b7c38b542208936f1179151cd08e2943833" + }, + { + "address": "0x57d8311842f41ec811352f5d68616fd51551a391", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000004f5f443fec450fd64dce57ccace8f5ad10b4028f" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0xaacd5b2ab5a99d56613e26b178ee765d9fcecc44b87b7c7c9cd1290bb2b8a5aa", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x0128f7ff9daf29bacfce69d4bbcdaf1072748974871c84e5359f06ff33cd9b96", + "value": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x90d7940a4fbc1578369b90f299bbd2d346f6d603fd7c654d535b027de31c7905", + "value": "0x0000000000000000000000000000000000000000000000000b1a2bc2ec500000" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x0000000000000000000000000000000000000000000000000000000000000011", + "value": "0x0000000000000000000000003b9b9364bf69761d308145371c38d9b558013d40" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x95ea918519f1bab72bc98b276f427ddd50d0ee6c2be631142d4445d2f4ade680", + "value": "0x0000000000000000000000000000000000000000000000000b1a2bc2ec500000" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x95ea918519f1bab72bc98b276f427ddd50d0ee6c2be631142d4445d2f4ade67f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0xb3b2add1f4bc8d224893dc7cb8102ea6e2113a9ae44203301c6439c50f0e742b", + "value": "0x00000000000000000000000000000000000000000000000009b6e64a8ec60000" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x000000000000000000000000d3e706d98b588a8f819ec324d0e0934a685bc1d3" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000001a11669ecf91692440da95cc8a12de80b1c3d9e3" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x200e73966c215ebe0ecc5e17b1bd106299e1329cd36f04785cace464b4fec823", + "value": "0x000000000000000000000000ad7f33984bed10518012013d4ab0458d37fee6f3" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x200e73966c215ebe0ecc5e17b1bd106299e1329cd36f04785cace464b4fec822", + "value": "0x000000000000000000000000333d8b480bdb25ea7be4dd87eeb359988ce1b30d" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x2758dccf10c716aa6fa386f2c217048459bb8a6c2784bdc3bbf6daa5f04e1eb0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x200e73966c215ebe0ecc5e17b1bd106299e1329cd36f04785cace464b4fec821", + "value": "0x000000000000000000000000f669c3c03d9fdf4339e19214a749e52616300e89" + }, + { + "address": "0x1b4d3b0421ddc1eb216d230bc01527422fb93103", + "key": "0x4ffd4188bdb1260a2a023516eac51714c8c99eaec6a7a25ed6444821bf78b90a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x009a0b7c38b542208936f1179151cd08e2943833", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x0000000000000000000000005d06067f86946620c326713b846ddc8b97470957" + }, + { + "address": "0x009a0b7c38b542208936f1179151cd08e2943833", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x00000000000000000000000057d8311842f41ec811352f5d68616fd51551a391" + }, + { + "address": "0x009a0b7c38b542208936f1179151cd08e2943833", + "key": "0x81179ee070a20c571d222b7f7562fa31902eaa3524bfa3f91c03a6de651e854d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x009a0b7c38b542208936f1179151cd08e2943833", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x009a0b7c38b542208936f1179151cd08e2943833", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x009a0b7c38b542208936f1179151cd08e2943833", + "key": "0xd5d80628b354e25ce5f0aa4a90ce03fd63752b4a8952af0b3fd29f0c60b2aadf", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x009a0b7c38b542208936f1179151cd08e2943833", + "key": "0x03f9feb64f6b1cabcedc5d545ded99b25e669ce85ba42d2430d590b656c3945e", + "value": "0x000000000000000000000000c7d8489dae3d2ebef075b1db2257e2c231c9d231" + }, + { + "address": "0x009a0b7c38b542208936f1179151cd08e2943833", + "key": "0xd5d80628b354e25ce5f0aa4a90ce03fd63752b4a8952af0b3fd29f0c60b2aae0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x009a0b7c38b542208936f1179151cd08e2943833", + "key": "0xd5d80628b354e25ce5f0aa4a90ce03fd63752b4a8952af0b3fd29f0c60b2aae1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x009a0b7c38b542208936f1179151cd08e2943833", + "key": "0xd5d80628b354e25ce5f0aa4a90ce03fd63752b4a8952af0b3fd29f0c60b2aae2", + "value": "0x00000000000000000000000000000000000000000000000009b6e64a8ec60000" + }, + { + "address": "0x16675523d9cb8a0354be0f80c9fba48695d3cd98", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "address": "0x16675523d9cb8a0354be0f80c9fba48695d3cd98", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x000000000000000000000000beb8acde724d565fe637353e120fcb5ab8859f3b" + }, + { + "address": "0xd5539d0360438a66661148c633a9f0965e482845", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x000000000000000000000000000000000000000000000000003fd3153a695567" + }, + { + "address": "0xd5539d0360438a66661148c633a9f0965e482845", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x000000000000000006e655b1539d8bbb0000000000000000000000006af0a1c4" + }, + { + "address": "0xd5539d0360438a66661148c633a9f0965e482845", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000000000000000000cad2973cfe9ba82116e8cae9c05" + }, + { + "address": "0xd5539d0360438a66661148c633a9f0965e482845", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x000000000000000000000000000000000000000000000000000000010d480d48" + }, + { + "address": "0xd5539d0360438a66661148c633a9f0965e482845", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x00000000010001000002f71f00000000000040c962cd9ca240eb516caf1dba8c" + }, + { + "address": "0xd5539d0360438a66661148c633a9f0965e482845", + "key": "0x7a74ceeb7e4916057732409db262d7d77bc2c68592f515eadf744fc0b19727d3", + "value": "0xc84b2699ab24302f3009300a4340249807800080e21902d10061000200120400" + }, + { + "address": "0xd5539d0360438a66661148c633a9f0965e482845", + "key": "0x0000000000000000000000000000000000000000000000000000000000010008", + "value": "0x000000000000000000000000db4a350f7758a539e6f718b74c87a17c0a133c0a" + }, + { + "address": "0xd5539d0360438a66661148c633a9f0965e482845", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x01000000000000013ac011b00d59c8cd44df729902000362a3e63d096602c5b5" + }, + { + "address": "0x678aa4bf4e210cf2166753e054d5b7c31cc7fa86", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x65934e2f228fde069a6255f46e6a15bc9de38545", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x65934e2f228fde069a6255f46e6a15bc9de38545", + "key": "0x29dc8487d3f4ed47116d5a712bb1a5317890d7f70fd666054e0136cd7b9c0841", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x65934e2f228fde069a6255f46e6a15bc9de38545", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000000000000000000000000000000000000000000019" + }, + { + "address": "0xd852b4696de610965e601ccc256135d4d91109b7", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x000000000000000000000000f3eee655eab9896bf7537c2d1078669c4fd13b15" + }, + { + "address": "0xd852b4696de610965e601ccc256135d4d91109b7", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x000000000000000000000000000000000000000000000000000000000000012c" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0xea6c33dce48e1783d74b6dfe14202904a2788a2e9d5ae8907c101497c28c5156", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0xb2f588aae0881e1bbe5a0a0beb8d26bbd7165b3d483e9edd05f4fb6281d9144e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x297114a5e4383b3a803a1ff8f7eab180d6457d7990d3449a6fa108b00791c072", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0xb682e7dbe927ce3b0ed323fc4bae1919069297cb80b6d923679fdc0011c819e9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x6dc1394665e807fa21c1e65916af1e9353080e69cea0dbbaf766e83bec7b1d88", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x6dc1394665e807fa21c1e65916af1e9353080e69cea0dbbaf766e83bec7b1d86", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x6dc1394665e807fa21c1e65916af1e9353080e69cea0dbbaf766e83bec7b1d87", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x6dc1394665e807fa21c1e65916af1e9353080e69cea0dbbaf766e83bec7b1d84", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x6dc1394665e807fa21c1e65916af1e9353080e69cea0dbbaf766e83bec7b1d85", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x6dc1394665e807fa21c1e65916af1e9353080e69cea0dbbaf766e83bec7b1d82", + "value": "0x0000000000000000000000000000000000000000000000000000000065dd261a" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x6dc1394665e807fa21c1e65916af1e9353080e69cea0dbbaf766e83bec7b1d83", + "value": "0x00000000000000000000000000000000000000000000000000000000660c8003" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x0e1f2431c6bf1b48dbdacaa130c1be84b7e45cbd98add10ab5f7b5fe6a532531", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x6792c294759f173b2ed91c0a1cbd5d2996dd2f948ea037e48afec1d332604dbc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x186dcf897b656a92ae9ba3716ee96d9be476421ffa27e34624df4d76a0fc283a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x56152e7bce8fb8fbb31573a96548da9e81b7bc6f4001ffd1ae12396b7ea20010", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x8f912511c16fea95c6a109b35c96e21ed4b9b04adbcfdc3649e036c94e4fa48e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x1df703545d965e757672691fb58637c675cd5e3e", + "key": "0x1011b90263d2db4980df5e15f597c124c918f6ce581361f48c15e27a85273163", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb1f41deb552a6571859d432505d31e6cb462374502f0cca5cef32ac5379ad48d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb1f41deb552a6571859d432505d31e6cb462374502f0cca5cef32ac5379ad48c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb1f41deb552a6571859d432505d31e6cb462374502f0cca5cef32ac5379ad48b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb1f41deb552a6571859d432505d31e6cb462374502f0cca5cef32ac5379ad48a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb1f41deb552a6571859d432505d31e6cb462374502f0cca5cef32ac5379ad489", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb1f41deb552a6571859d432505d31e6cb462374502f0cca5cef32ac5379ad488", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x9bbc37a679f7237a2f20e2b9ae93d94a2d8e01554222b7a17e02098cee83ed58", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x9bbc37a679f7237a2f20e2b9ae93d94a2d8e01554222b7a17e02098cee83ed57", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x9bbc37a679f7237a2f20e2b9ae93d94a2d8e01554222b7a17e02098cee83ed56", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x9bbc37a679f7237a2f20e2b9ae93d94a2d8e01554222b7a17e02098cee83ed55", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb51b1123dac559d639b08aa85220f15dadc02081edbf45160703a5121cb9e134", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x9bbc37a679f7237a2f20e2b9ae93d94a2d8e01554222b7a17e02098cee83ed54", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb51b1123dac559d639b08aa85220f15dadc02081edbf45160703a5121cb9e135", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x9bbc37a679f7237a2f20e2b9ae93d94a2d8e01554222b7a17e02098cee83ed53", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb51b1123dac559d639b08aa85220f15dadc02081edbf45160703a5121cb9e136", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb51b1123dac559d639b08aa85220f15dadc02081edbf45160703a5121cb9e137", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb51b1123dac559d639b08aa85220f15dadc02081edbf45160703a5121cb9e138", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb51b1123dac559d639b08aa85220f15dadc02081edbf45160703a5121cb9e139", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x950f2c788be5efc1728eb82cfd3366dee8c10a898c8963c8235779b66e2a1f9c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xbc619000922ea32e746069c327b1bc2ae2c518f2df8499b893e61a51316500cd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6828210ecd552c2e1b131cf4b080f928c2d7573aaa74ba202650f12a28bb0846", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x2b7e0e65ab6f21cbe77eefb3b0d9a5f08a54382a92b42ad25df676216f4d3c60", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6828210ecd552c2e1b131cf4b080f928c2d7573aaa74ba202650f12a28bb0848", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfc6eeb36b7f5b5ba9d2580d59e818a28edc6958b2410337527edc98000f3e306", + "value": "0x000000000000000000000000000000000000000000000000000000000008d419" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6828210ecd552c2e1b131cf4b080f928c2d7573aaa74ba202650f12a28bb0847", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6828210ecd552c2e1b131cf4b080f928c2d7573aaa74ba202650f12a28bb084a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6828210ecd552c2e1b131cf4b080f928c2d7573aaa74ba202650f12a28bb0849", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6828210ecd552c2e1b131cf4b080f928c2d7573aaa74ba202650f12a28bb084b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xde132722682b9207a60470b67efba2bca7f075e0cca94fd33b6e69c5ac316f72", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1da1f4391208d2cb77abd1f8d71e7d55bc84f0bef83f5107f4c28170a7246743", + "value": "0x2bda5b41146fca5bcd6aabf405ccdbf842393a3372d5339602602d329af8fd8a" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1da1f4391208d2cb77abd1f8d71e7d55bc84f0bef83f5107f4c28170a7246740", + "value": "0x00000000000000000000000000000000000000006602c5050000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1da1f4391208d2cb77abd1f8d71e7d55bc84f0bef83f5107f4c28170a724673f", + "value": "0x000000000000000000000000bc3c845c58c3f97be75b684b1adf19d9f6f322fa" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1da1f4391208d2cb77abd1f8d71e7d55bc84f0bef83f5107f4c28170a7246742", + "value": "0x0b429c827ad32f3ab6531d1688bf5187c113886e7faa56eede3288f1bfc7b14e" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1da1f4391208d2cb77abd1f8d71e7d55bc84f0bef83f5107f4c28170a7246741", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xc32e11e45f3a75c00e5fbd1ffce02b21fad09053bf2289c89222274960a806ef", + "value": "0x000000000000000000000000000000000000000000000000000000000008d419" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfc6eeb36b7f5b5ba9d2580d59e818a28edc6958b2410337527edc98000f3e309", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfc6eeb36b7f5b5ba9d2580d59e818a28edc6958b2410337527edc98000f3e30a", + "value": "0x2f52c9cb5d6a0c45a341ad5bb3012d63fb9f6ad741947315e5db264d6d0895a5" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1da1f4391208d2cb77abd1f8d71e7d55bc84f0bef83f5107f4c28170a724673e", + "value": "0x000000000000000000000000000000000000000000000000000000000008d448" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfc6eeb36b7f5b5ba9d2580d59e818a28edc6958b2410337527edc98000f3e307", + "value": "0x000000000000000000000000c253c51cf4204d7d5da9bec2b39bcbbf1c524bad" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x2e8b85432e74d58bb4edf0a26f02327c8d2058fd861b5b629048bf2f1070c537", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfc6eeb36b7f5b5ba9d2580d59e818a28edc6958b2410337527edc98000f3e308", + "value": "0x00000000000000000000000000000000000000006602c4b50000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfc6eeb36b7f5b5ba9d2580d59e818a28edc6958b2410337527edc98000f3e30b", + "value": "0x0a5f3a65d7b6c490c6c07dafa319bc20d1fedf9e37cfc83094061e7d5efb92c2" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xb90f0373c6cd4ad8a5773930b07ba8f09c5e6bb9070a80068d7baecd2f8f3d54", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xdf696cc055b80fe3922d09edaf1cc0ca4235001443aa37ba47d7e1b9d2593cbb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfac1b7eb084a48232719e70d22f94323a20ffb004fe0b2588139101f30b7d305", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfac1b7eb084a48232719e70d22f94323a20ffb004fe0b2588139101f30b7d304", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xa9dac3c1d25f079e205cc7dbcc9f5aa699b9fd9b695bf5b01126ed7d247539cb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xa9dac3c1d25f079e205cc7dbcc9f5aa699b9fd9b695bf5b01126ed7d247539c9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xa9dac3c1d25f079e205cc7dbcc9f5aa699b9fd9b695bf5b01126ed7d247539ca", + "value": "0x000000000000000000000000000000000000000000000000000000006602c5d5" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xc692a4463e1416095d3bc21c386633cd288b5a988b7595a2ef5475333b26f5b2", + "value": "0x000000000000000000000000000000000000000000000000000000000007dc75" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xc692a4463e1416095d3bc21c386633cd288b5a988b7595a2ef5475333b26f5b3", + "value": "0x000000000000000000000788472926e26f3d1d68a7e99f42ff8b34d856f94711" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xa9dac3c1d25f079e205cc7dbcc9f5aa699b9fd9b695bf5b01126ed7d247539c8", + "value": "0x0000000000000000000000000000000000000000000000000000000009bfc6d0" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xc692a4463e1416095d3bc21c386633cd288b5a988b7595a2ef5475333b26f5b4", + "value": "0x00000000000000000000000000000000000000006600b7150000000000000078" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xc692a4463e1416095d3bc21c386633cd288b5a988b7595a2ef5475333b26f5b5", + "value": "0x0000000000000000000000000000000000000000000000000100230048110c88" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xc692a4463e1416095d3bc21c386633cd288b5a988b7595a2ef5475333b26f5b6", + "value": "0x1a1f0a56a86700c83a0283afb08612ad8eca7848e38d6c39b14d3c283f32735f" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfac1b7eb084a48232719e70d22f94323a20ffb004fe0b2588139101f30b7d303", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfac1b7eb084a48232719e70d22f94323a20ffb004fe0b2588139101f30b7d302", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfac1b7eb084a48232719e70d22f94323a20ffb004fe0b2588139101f30b7d301", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xfac1b7eb084a48232719e70d22f94323a20ffb004fe0b2588139101f30b7d300", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xc19f7bcffa724687406491d9e51d837143ee57f2a7c504154ed07bcce27d1252", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x7d4b5f179499124607a1d2eb0e22b3e6b07ebf7b66112701f21e0d80b6e182c8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xc692a4463e1416095d3bc21c386633cd288b5a988b7595a2ef5475333b26f5b7", + "value": "0x150b1a83863665ce48cc8291c3ebc8b193360ab328c943a599424e139273b869" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x00000000000000000000000014e20a4e88e71b9f2479c918f35c7307524d60a1" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6233dc7cdad386ec7ca84db311dd93673c50883ffaee2c179494747b2d237cb9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6233dc7cdad386ec7ca84db311dd93673c50883ffaee2c179494747b2d237cb8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6233dc7cdad386ec7ca84db311dd93673c50883ffaee2c179494747b2d237cb7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6233dc7cdad386ec7ca84db311dd93673c50883ffaee2c179494747b2d237cbc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6233dc7cdad386ec7ca84db311dd93673c50883ffaee2c179494747b2d237cbb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x6233dc7cdad386ec7ca84db311dd93673c50883ffaee2c179494747b2d237cba", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1c6720864e75d475dff0ab1f00b12af9bf4d6ad184a44565a6688a7b4293b3fd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1c6720864e75d475dff0ab1f00b12af9bf4d6ad184a44565a6688a7b4293b3fc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1c6720864e75d475dff0ab1f00b12af9bf4d6ad184a44565a6688a7b4293b3fb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x000000000000000000000000000000000000000000000000000000000000004e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1e4cebe42b93988e6a918ad66e157aca0f44f42e918405a2a92a400ca5afdc09", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x000000000000000000000000000000000000000000000000000000000000004c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xabde667fbfd7945e943670765dafbed1b62185350030b79094dbba36dd667d32", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x4dd51118f00c0ed3455d4ec88d8185bd1757a6325779c9fe5a545679013e3062", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x36a37a5a16adabd5c1e444b4eddd3886bf0f2688d491f5a4de9e852054a49576", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1c6720864e75d475dff0ab1f00b12af9bf4d6ad184a44565a6688a7b4293b3fa", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1c6720864e75d475dff0ab1f00b12af9bf4d6ad184a44565a6688a7b4293b3f9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x1c6720864e75d475dff0ab1f00b12af9bf4d6ad184a44565a6688a7b4293b3f8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x47f91cb44ee290d4753077eca9d099738ae85cc2a8e619dc99d5b0b433b4e9de", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x7b9125722c54d9f97a57a44bf7e2b513c7a1ff0abdd5032df21938536fd4151e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x7b9125722c54d9f97a57a44bf7e2b513c7a1ff0abdd5032df21938536fd4151f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x7b9125722c54d9f97a57a44bf7e2b513c7a1ff0abdd5032df21938536fd41520", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x7b9125722c54d9f97a57a44bf7e2b513c7a1ff0abdd5032df21938536fd41521", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x18568898f741436c6378e97ae0a64b9a55f252371515c69c6b47e8a95ef42094", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x33ba902a1d102312d694b0b4a96272bfb376c6fa1f97dd22ec76e2a7adb23231", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x7b9125722c54d9f97a57a44bf7e2b513c7a1ff0abdd5032df21938536fd4151c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x7b9125722c54d9f97a57a44bf7e2b513c7a1ff0abdd5032df21938536fd4151d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xa6130f63052d163e326a6018be60c7c7f13d450fdc8ac58dec8306768e48e7db", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x000000000000000000000000000000000000000000000000000000000000014a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x7ecab35e98a398a6ee324dacd2f7ff6e9f197028102bd8422da85638d4e2cde2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x7ecab35e98a398a6ee324dacd2f7ff6e9f197028102bd8422da85638d4e2cde1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xad45d399cd4d4484775e14defb3a8ce0fdc44dbd93bcefbcc6998e61ac12eddb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xad45d399cd4d4484775e14defb3a8ce0fdc44dbd93bcefbcc6998e61ac12eddc", + "value": "0x17d136a21bd26e39f4446e8b75a1f11d1f672e5994f7cca7b5b5d2368d4030d1" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xad45d399cd4d4484775e14defb3a8ce0fdc44dbd93bcefbcc6998e61ac12edd9", + "value": "0x000000000000000000000000ee6a2f373b50400758cba9b743646ce2e8aa3e72" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xad45d399cd4d4484775e14defb3a8ce0fdc44dbd93bcefbcc6998e61ac12edda", + "value": "0x00000000000000000000000000000000000000006602c5b50000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xad45d399cd4d4484775e14defb3a8ce0fdc44dbd93bcefbcc6998e61ac12eddd", + "value": "0x00a94de939766fc9b55e391e699eaa457ec3be1d31a2f3e13a5f0f8fd961d7d6" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xff5b455fd4beaa7bd19907f94f612a4e42e2054d06b5d4cdb6ccf1b79d763ffb", + "value": "0x000000000000000000000000000000000000000000000000000000000007dc75" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xad45d399cd4d4484775e14defb3a8ce0fdc44dbd93bcefbcc6998e61ac12edd8", + "value": "0x000000000000000000000000000000000000000000000000000000000008d4cd" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x0000000000000000000000000000000000000000000000000000000000000035", + "value": "0x000000000000000000000000a1737a96531b67a85213df67af4526559df86a7f" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x0000000000000000000000000000000000000000000000000000000000000034", + "value": "0x000000000000000000000000743281db4c21f138a62be1b8e9d3aa0ad167c7ee" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x0000000000000000000000000000000000000000000000000000000000000033", + "value": "0x0000000000000000000000006ba3593101e32cedbde5ac9439e9187736b26a15" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x06cb8b124e27fb0449cebcd9831350c3a074fdf0b62f40d5bea0802953ec92d8", + "value": "0x000000000000000000000000000000000000000000000000000000000008d448" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x000000000000000000000000000000000000000000000000000000000000003a", + "value": "0x000000000000000000000000000000000000000000000000000000000008d4de" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x304564734ebfebf169c7b18e4679e842b8ffa49ccf98730fc1d9aa6c65442373", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x0000000000000000000000000000000000000000000000000000000000000039", + "value": "0x0000000000000000000000000000000000000000000000000000000000000fa0" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x304564734ebfebf169c7b18e4679e842b8ffa49ccf98730fc1d9aa6c65442372", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x0000000000000000000000000000000000000000000000000000000000000037", + "value": "0x000000000000000000000000f15ccfdda3eb59958b5385c686401e18321670ce" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x33d13c149959174817b07214f6faff3d4c1d39ff89c6e7f82e2df5f04c00a0f0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x33d13c149959174817b07214f6faff3d4c1d39ff89c6e7f82e2df5f04c00a0f1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x9508c7db3c718bb7946ebb11d131f29d7cfe1456d245b10da9f77e25f2a0ae60", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0xc0bcfd0fee636de0cd321e85398332f8cac320e90ddcd0e12644ed361d1098b6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x62817b63383f3a5a4f68774c40da0c488d56df714054b7a2c167dabb6a0ef8b2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x92e25818f47ce1eb943523cde57966b99e79e4d26b4db7f8fdb707cba160ab72", + "value": "0x000000000000000000000000000000000000000000000000000000000008d4cd" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x33d13c149959174817b07214f6faff3d4c1d39ff89c6e7f82e2df5f04c00a0ec", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x33d13c149959174817b07214f6faff3d4c1d39ff89c6e7f82e2df5f04c00a0ed", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x46b66a005d581b541e6a1fd02984499a3ded1f5aaae9b8dec5ea8bcf7f8f9dd6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x33d13c149959174817b07214f6faff3d4c1d39ff89c6e7f82e2df5f04c00a0ee", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x490d76b1e9418a78b5403740bd70dfd4f6007e0f", + "key": "0x33d13c149959174817b07214f6faff3d4c1d39ff89c6e7f82e2df5f04c00a0ef", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xaf54be5b6eec24d6bfacf1cce4eaf680a8239398", + "key": "0x86b3fa87ee245373978e0d2d334dbde866c9b8b039036b87c5eb2fd89bcb6bab", + "value": "0x000000000000000000000000aad094f6a75a14417d39f04e690fc216f080a41a" + }, + { + "address": "0xad7f33984bed10518012013d4ab0458d37fee6f3", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x0000000000000000000000006e0c50657b610f4613b1c6b1dae95262a3f6c4f7" + }, + { + "address": "0xad7f33984bed10518012013d4ab0458d37fee6f3", + "key": "0x0000000000000000000000000000000000000000000000000000000000000012", + "value": "0x000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f" + }, + { + "address": "0xad7f33984bed10518012013d4ab0458d37fee6f3", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x6d6557455448000000000000000000000000000000000000000000000000000c" + }, + { + "address": "0xad7f33984bed10518012013d4ab0458d37fee6f3", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x0000000000000000000000002f9386f0c8ebeed27873a2a64c7f243af9bc733c" + }, + { + "address": "0xad7f33984bed10518012013d4ab0458d37fee6f3", + "key": "0x674a8b4ffc9c47c18280699e61d95d725ffc79db3b96d875ce41bfe77c51df62", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xad7f33984bed10518012013d4ab0458d37fee6f3", + "key": "0x000000000000000000000000000000000000000000000000000000000000000d", + "value": "0x00000000000000000000000000000000000000000000000000000c3d61b001f1" + }, + { + "address": "0xad7f33984bed10518012013d4ab0458d37fee6f3", + "key": "0xf440c79a3f1a4762f82a1d910e74dba5ddfbae0b12de2e25d8d47abd854fcd7c", + "value": "0x00000000000000000000000000000000000000000000000000000001ab0246be" + }, + { + "address": "0xad7f33984bed10518012013d4ab0458d37fee6f3", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x000000000000000000000000000000000000000000000000191bcdd6764c5e9c" + }, + { + "address": "0xad7f33984bed10518012013d4ab0458d37fee6f3", + "key": "0x000000000000000000000000000000000000000000000000000000000000000b", + "value": "0x00000000000000000000000000000000000000000000005505eac12c255ab1b5" + }, + { + "address": "0x4d3a380a03f3a18a5dc44b01119839d8674a552e", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000eb205b722d60334ba8d45a8b4585a6ddfd56ed83" + }, + { + "address": "0x4d3a380a03f3a18a5dc44b01119839d8674a552e", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x00000000000000000000000031c2b0c23c0b9afec70229c18efc2c272722c2cf" + }, + { + "address": "0x4d3a380a03f3a18a5dc44b01119839d8674a552e", + "key": "0x0000000000000000000000000000000000000000000000000000000000000068", + "value": "0x0000000000000000000000000f95dcec4c7a93f2637eb13b655f2223ea036b59" + }, + { + "address": "0x4d3a380a03f3a18a5dc44b01119839d8674a552e", + "key": "0x0000000000000000000000000000000000000000000000000000000000000067", + "value": "0x000000000000000000000000d5d61e4ecdf6d46a63bfdc262af92544dfc19083" + }, + { + "address": "0x6a1ff5f05ddaf8b61f1734daa6f9a42f16e3368e", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x00000000000000000000000000000001219262c96601b33d00989680ffffd323" + }, + { + "address": "0xf081470f5c6fbccf48cc4e5b82dd926409dcdd67", + "key": "0x67977de35846758acf6e5bfe71e2d7bbf031b4b85502f4e3c14fe8b2c1f020dc", + "value": "0x000000000000000000000000a3fe30e2c53e2744a7e2002e70fd88b476409745" + }, + { + "address": "0xf081470f5c6fbccf48cc4e5b82dd926409dcdd67", + "key": "0x3e765065b3392cc8edd1e94bba9bfaf11421e3f75665d7b7b45a02771e596af8", + "value": "0x000000000000000000000000a3fe30e2c53e2744a7e2002e70fd88b476409745" + }, + { + "address": "0xf081470f5c6fbccf48cc4e5b82dd926409dcdd67", + "key": "0x3d7493d6044307e098cefacc5e6b93891394f3bbe46d62a4cb85859947a49a0f", + "value": "0x000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897" + }, + { + "address": "0xf081470f5c6fbccf48cc4e5b82dd926409dcdd67", + "key": "0x3bdbe088267ed67ba935873446417c49035c3465e3b031d6000f5f6f6d67a865", + "value": "0x000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897" + }, + { + "address": "0xf081470f5c6fbccf48cc4e5b82dd926409dcdd67", + "key": "0x4ab19f38dab65470f0dc4730b6ffeedd53b1eaa0c9119252756b4458c8ecb5d0", + "value": "0x000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897" + }, + { + "address": "0xf081470f5c6fbccf48cc4e5b82dd926409dcdd67", + "key": "0x29bf3886dd698f1aa9baebc2edaefbf66002dc935f7e18dc4c3dd04a82a1c337", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xf081470f5c6fbccf48cc4e5b82dd926409dcdd67", + "key": "0x9932588c857b0691792b49bc2500676cf28f18fb0177f2f1fd3490fb07babb72", + "value": "0x000000000000000000000000564e52bbdf3adf10272f3f33b00d65b2ee48afff" + }, + { + "address": "0x23b9cb6f49100c54fa2a13ba0f85832b38780cb7", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x0000000000000000000000000000000000000000000000000b1a2bc2ec500000" + }, + { + "address": "0x23b9cb6f49100c54fa2a13ba0f85832b38780cb7", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000a13eb61c9" + }, + { + "address": "0x23b9cb6f49100c54fa2a13ba0f85832b38780cb7", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x23b9cb6f49100c54fa2a13ba0f85832b38780cb7", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000000000000000000000000000000000007620d06e" + }, + { + "address": "0x3c6cd9cc7c7a4c2cf5a82734cd249d7d593354da", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3c6cd9cc7c7a4c2cf5a82734cd249d7d593354da", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000635163285c6ef5692167f18b799fb339df064f80001" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0xb918dcaec813edd89fb017cca150af5a43d8c992b2f4749d5fb00137b459080b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0x4aeb9345489fcec2f691080ebdb83239d321a6e27f4ee4e50f88a730e43d7784", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0xa7c1bf524a258cc511b2a92e38eb82d7845bf6327007aed46666db8cf560fd06", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0xa0ae57d108d3cd894483e44511b3094c826ab63b3b605da86966ee0feded3fd5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0xd0a70e173ee6cec4411d08e817596b0afae779d69013d0f6e88dd91aff69f408", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x000000000000000000000001784ad8676ade4dee288fd3f36e2f2ebdfdf70765" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0xbd86cb4437a87edfafe1f18e0bc125370aa1a672bdf39af023e2d71ba9ce8ef8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0x4d0af8aa4a57461d4da13999b0c448091bc9d80b0bbcccf3f3fa1b3780ca4007", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0x05b6d9f5b5954458321db6bbddac2237213d1afcfc46a48bc173d629e1eb8510", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0x046654bf65765c43595f3b05214b65a3e1350fcc6da10e649dd233332e883429", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0x690c15efa5943437601e67c5c998e6f7f6160dc5bdbe509f95516f7b75c2701d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x000000000000000000000000c577018b3518cd7763d143d7699b280d6e50fdb6" + }, + { + "address": "0x3bbee2922f47d276a70fbe2d38dcc2a920ed1d05", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x000000000000000000000000000000000000000000000000000000000006d3ac" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x85f51284b01027f14de446c122e9bd482ea95324ab1f8c4559debcdaf2981c4f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xec3e88328dad46834be22d607cc332e0d1ab91fe69097c3940b035693adc76b6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xcbcaac5fb0332d279c130ed25e13f110839c36cf803fd4b240e52f6d7c084fed", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x1840a67160d43179b11319bc5fa6b298614efb600582b65f03fb91a5737f9af0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x88c3196c6a7e4b2af883dcf6a3581dabe68cf6366e0572530b416509d54350e4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x295c81c5fd5ffd348259ef271231ff696d2e32e0b93a71494b640aecaa8dde07", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x9428e9b4045d82a316e44287f182bbda3b112bd56ae2d427fa9d71e5ba784076", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x98f015cbdf8c536c72e8750ed8657c94e50d02878c662bf11da5bb0d1b49effb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x477b247b8afc5323cdca60002704b3dc8d817a7240a73ff304fd2e6a2b22a6ce", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xdaedc710e1d3daa20da34685f47d7611f26d3d392772647b837b316171857db0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x8b9f403b78d940de1cfb556317a63b04791c0af070628821963156fbf5aad894", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x9e82c437e556ad8d2b1027a3a609cc8d72b51dc6bccede031d8c3a9a0157a55e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x8db37f89395d96297f9b2c52b75cd5fca26cc17183275254bdcdee4b25ab3361", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x3b5eb3dd04ad4dd3e8e19f45abcaef587fe246daec107ba3e918e4ce1b3173ee", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xccc44386f4998086e6b480edce51768158936ae20e4d43053a41b71b72c2676e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x377aba6dc2619c050773561c4caa74b250157fb49027d7c2b52c50c182393d1b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xa9a60370a99ad2aa6fefaf28c4f4b28eb26832dd0c0ff674cd9633bacb0f2f0c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xba2c8bda53510b71471e052bf8a11d63b4e1be1786a7d90926c803ad7c4f445e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x45f9a14ba85963abdc661df0cc4eb638fca3acb372b5255390e325acf1721c4a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x707d9be967dbe6edf931128cb3c842f7b7ae01013e7e92fab50256424a4cb668", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x163ba4772f802f6cc0cca0b8614d674b156c437e5bd5a34bffe9c1f8b0792be8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xce4631de162d45c691945574a6fb8320bece3f0bf747f98fbfebf9ad5f3faa6f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xef5c672e964083bfa11cee9aa408de71f727b76720d2f53b9f14ee95643e4129", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x456cef38a1125930e307157c0313700f7238ea7c650f292e2488bbb88fd8dcff", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x83425add9cd2ca4064435ff9bda8aebf45d3dca457867981900531573a3ec1e2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x29e2b4bc3adc4e9192bd1a6bf0eb9d43f21934ea307e230a3e26e7f4286e47b8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xa75f4a8b14991e622af1ab8ee10ad21c6c697ff0b5678c802d7efef9649f66a9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf7791938f4df4d3a941d05f90831405d6410a4168325f34dc9df81618c9539cc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x191b1f786a286b0f668dc47e80331b3bfd54f0915668419427b7a416bdcd7044", + "value": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x60ddf11b3e288db291f7ec11d95532c84aa32df78c8892e1718a27f9b61968de", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xd6ae191ac6527f52fdf5d90557c9cb82bb9bf86c9406d328c5d1c028018f72b0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xd2b70d7119c2fa83108e2c401a0a0858bbac4db4ed958426ebdce4bfb260c0e0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x28fe08b5c146f41e7a4f53f39c390f0d424c92b700610eaf270ad5448e40922a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x7ed0fb8cf0948c381b9a54c41e483a7fcbc3534f1cba9dad64814bcf49ae9b2c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x5901f9df0c1b6ada713df62319ba4b3211012fa2593fe01fb0c478b552be45be", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xa3fd9a57023c9245eb507646d17950d2ca2711b3c9afa7f657da8ed0ae526ce5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x4e867f1aff88cfa73b7cb74c82450a0964e0df6f1f472605a68e00ede69a8da9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x0a6b4a497e711151565884b4cff1a7bb6fd1230c3058439efd16b7cfe4b887da", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x736af1967b8abdb988b3ca77334b18506c0c95d052ef6f86739b52cb4eb9ff11", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x0d8894efc05cdfe47314f6a9b984b675b3b705fe4c940e4b68bbe5a0c474215b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x69f56d28399b36b861e634428420850fe790780681287aacd59b1a3713cfeae1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x19524ae0e8284cdce0a5bc45570bf649a026f45ba517cfd25e1f60031f2e405c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xa8909d5662a2f79919d081dac7386296e7736b4b22d0d72e65cf57af5c2ae156", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x49124a14850e223b2abbc918d479a7449cd76db3cc8b18d875a5611692e96689", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x68c3799be9c7740defa924f2243fe4a729da85857671e07ee2e1f2e093c37a0e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xb20c9974fab6857701d3d4c7fc261f63fa25de0d53b63427f717f2e0ba3631ec", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x332ea8e02c5954540cb4faf214cebc6a49481735d16b5d8a3be19c9b18554022", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde96", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xe889a1bdb703948c5a1f6af1e081c02cfcb8a52df92965e921b3d8eb95d71844", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde95", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde98", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde97", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x202642c871d1863dbd5a39a6e0d8dc0bae40428f60ffeaa2e7684ca89cc4ff02", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x1ab590d5c6fc84fe9d22a6d247003d8f0fbeeeb58b3dfb5aced7d2901d27caa7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x69c55670c1fd1dea97a2767f7c35cb6957ec5ed52b45678f160aaa0d6d55f98f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde94", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x533c3f6eeb3fbc8fccf4ae77e66a88d02eb95b8f6bcac3aaad606cf551023228", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde9e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde9d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xee1058ec194d8edc8820433efe2b5e5ce31ce18937c10db5df10c61c256503dd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6ddea0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde9f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde9a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x91523536ce6e08044b55262c7e53a6b3521d91b329982f3676af5d265a5832df", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde99", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x956a1ba17241e7fb88b0b354aa398edbc2b695f18a0598f0ec44dfce4a8b8065", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde9c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6dde9b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x10468f6702ce1d7063a8d36787a7cf19fe988c219c2fd7f3d9c3a5834dac5110", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6ddea2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6ddea1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x09bfc4fccaec6e391c44b8e6a35fb2989b5e36f9b2dabfe888b23c0092feebb7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6ddea4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6ddea3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x710b181dc37079c33656e2fcfdd4bf4683fcfc5f724a87e81ffcdfb7a94821ba", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xcc427d26810c248795e2d5d560b419f80a089fdfeade6158a860ad0ad07d4dec", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xe7200d3611c5002c6541a13875e3fb5415cd5cde6eabeaa6db6c4d846022706e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xc983d3e50e554b7f2840443be213e6c1a5c02de282f817e39395763925dc489b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x6de40e33dc2fb71a2cda84af006c33974fef20625529d905018b2434110251f6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xe7664d5f9b85e02b895680223a575509974aac7e11f7fba99629f06abe42a0cf", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x224ffa99ed06c14ff6677d94b8bd352ce9a2ea087e16ce0c5786898c80897373", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x3770d5820e62c31b0ffa2cf792a92f5daf06e6653c122583f06ed3e0f856e794", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x71dbac55d23f346cfe934495a219daae9f640b2b0efbe7adc320b9a087513a8c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xd1986621994c3d455882edc7ba93612360820a9e7c231032e078b5bfd8f70eec", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x7e4acdf2aeccca7b0f8ab13bf748ac85a45ae649a6508c22ca25ffd1cd6e6686", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x5ef8fd16d4d46bd11dc9802856915963c39c560ab1589f28e8a25e1f362a6da0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x600db4b777ddb7482e214cbbfb9e042b61d2602c56f44c6e8c1623af0c85c557", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x23b7693103c51532232a4e2970545253e42ddf677d3222bbfa60500ec0d7685f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xde9390e46a172e799eccb8742f9c5cb9791153f8dbbfd7954cc35f636c168e91", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x46051e83f2a04495f9863b7239548b11c819c785027bb8b9c383db4f5d28aed9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x091adac46c1fb42b51da583e5e209163ac46d97504ff4362e75331777e55bbfc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x144c30d77e22d53a0da1ae770be1363e8b3f7d488660a1dd3cdb3c6083c937df", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xa286a5611c7dfa71a4b05e00e24a49021abf6a0b6191e9b3c8e3bb2149846371", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x5e627ffb80a923d1a53edde063a5761953d0be14ab95b591ffde0958739b2159", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x00000000000000000000000000000000000000000000000000000000000a6fb1" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xd89a6d3c0aa0d8f1c01cd3e78043854d419128e395050366a37e33ecdf4d1c86", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x000000000000000000000000000000000000000000000000000000000000000b", + "value": "0x0000000000000000000000003c2d36b101faa082b8f00e906f7dabc8d7aacd67" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x19a36fd9061b37bc373ac75314601a4be05970cb518a57b7cd8f472ee29b872a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x00000000000000000000000000000000000000000000000000000000000a6fb1" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xb711db61e9a00d358303ac27a5d4ea1548c266c25acaced6b59628717ebeecf9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x142f7a446162c04689489af4aa2c1f28427f39d49687a3933b82c718b3703751", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0xc160d8ec95e3c0bff131757fd4271af30ce80f3468e028a4270872d9e567c573", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x85d2815d20854b7776905fd94c03dcd95e61734f1a857fae1ffceabe2b3f3ac6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x3ee4168e54d865a0f20c071e01e199a03a4649c6785d806fddcb815226442bcf", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x9f11e22efde644b37f77ea570693500216fabc8e6ad9af76f4f855d24ffb66e0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x671f040829d58d1bfa9c5bedf991a246b8d48205421e264aff5a6d836a437544", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x7136abb0fa3d88e4b4d4ee58fc1dfb8506bb7de7", + "key": "0x730b53ab843f611b79f2f040d302a2115f012f0087fee7e058ae8b867799ead0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xbdb018e21ad1e5756853fe008793a474d329991b", + "key": "0xe7599df335fb4774046ce99272484ee93d87bc768a2c496522cff574e67ff5c7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xbdb018e21ad1e5756853fe008793a474d329991b", + "key": "0x26b4a10d0f0b04925c23bd4480ee147c916e5e87a7d68206a533dad160ac81e2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xbdb018e21ad1e5756853fe008793a474d329991b", + "key": "0x12468eeaa9266d575046dd9d13a0bfddb8b1177b2c2e1d1b7efbfc92fcc2e4df", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xbdb018e21ad1e5756853fe008793a474d329991b", + "key": "0x43e89f6a19d067218ab95f14a7b4e1550e45972b8ad83efc4eb020f803ac5308", + "value": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0xbdb018e21ad1e5756853fe008793a474d329991b", + "key": "0x75f96ab15d697e93042dc45b5c896c4b27e89bb6eaf39475c5c371cb2513f7d2", + "value": "0x00000000000000000000000000000000000000000000000000000000000017bf" + }, + { + "address": "0xbdb018e21ad1e5756853fe008793a474d329991b", + "key": "0x000000000000000000000000000000000000000000000000000000000000000a", + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000" + }, + { + "address": "0xbdb018e21ad1e5756853fe008793a474d329991b", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x70bf27bbb562a9b21fe6eaf2b7832c476691a39f", + "key": "0x08a12458f9c1fad3bf1b1d6b2df791e9f625c724e26aabaf5cca58d68816f67f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x70bf27bbb562a9b21fe6eaf2b7832c476691a39f", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x0000000000000000000000004972bf6c4bc94d79e47b81f15e4abc28ac59f229" + }, + { + "address": "0x70bf27bbb562a9b21fe6eaf2b7832c476691a39f", + "key": "0xa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103", + "value": "0x3100000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0x70bf27bbb562a9b21fe6eaf2b7832c476691a39f", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000000000000334cc39d2ed6926fdd367ae0e34c6ef7b879f62" + }, + { + "address": "0x70bf27bbb562a9b21fe6eaf2b7832c476691a39f", + "key": "0xa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102", + "value": "0x456e646572732047617465205369676e6174757265205665726966696572003c" + }, + { + "address": "0x70bf27bbb562a9b21fe6eaf2b7832c476691a39f", + "key": "0x8ed91d4ca29cdc5077cf068b227f5f97a4fa68816626910a63616b34e76c41b5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3b9b9364bf69761d308145371c38d9b558013d40", + "key": "0x0000000000000000000000000000000000000000000000000000000000000065", + "value": "0x0000000000000000000000001b4d3b0421ddc1eb216d230bc01527422fb93103" + }, + { + "address": "0x3b9b9364bf69761d308145371c38d9b558013d40", + "key": "0xa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c22097753", + "value": "0x00000000000000000000000043e8809ea748eff3204ee01f08872f063e44065f" + }, + { + "address": "0x3b9b9364bf69761d308145371c38d9b558013d40", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000052932456a8fd199cd33be91312638a35c8b7ca5" + }, + { + "address": "0x3b9b9364bf69761d308145371c38d9b558013d40", + "key": "0x246c7904715a192406d379f0fc9c69e62601c99bfc528742b07fc1f19251e3ac", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3b9b9364bf69761d308145371c38d9b558013d40", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x0000000000000000000000002f9386f0c8ebeed27873a2a64c7f243af9bc733c" + }, + { + "address": "0x3b9b9364bf69761d308145371c38d9b558013d40", + "key": "0xdbe8660cc12df82119af38623eb8985cecbc14509614339d418a7501300c8a18", + "value": "0x6602c51d00000000000006dc152d215f0bc66c52b3febfd9d4c438f71a7d6d7c" + }, + { + "address": "0x3b9b9364bf69761d308145371c38d9b558013d40", + "key": "0xbe9605076b84ac2c93adefac748fae0e030bd8f18fcdfac17d8f9d58fa2a5045", + "value": "0x0000000000000000000006dc12e15c7ce85a0387ca857b5c019bd5e83223d13b" + }, + { + "address": "0x3b9b9364bf69761d308145371c38d9b558013d40", + "key": "0xdbe8660cc12df82119af38623eb8985cecbc14509614339d418a7501300c8a17", + "value": "0x000000000000000000000000000000000000000000000000031608e261ed7000" + }, + { + "address": "0x3b9b9364bf69761d308145371c38d9b558013d40", + "key": "0x0000000000000000000000000000000000000000000000000000000000000068", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x45f1a95a4d3f3836523f5c83673c797f4d4d263b", + "key": "0x08f7c1381a1fb1b7d984cbe1c2f9ba2a420186375b6d1e87b9db0b3805e07d27", + "value": "0x0000000000000000000000000000000000000000000000000000000000000051" + }, + { + "address": "0x45f1a95a4d3f3836523f5c83673c797f4d4d263b", + "key": "0x5fb32ddd7af3fd83ab0c2e5099470666994bc1a3c3f82b87ca868ef5760b8946", + "value": "0x673c797f4d4d263b000000000000000000000000000000000000000000000000" + }, + { + "address": "0x45f1a95a4d3f3836523f5c83673c797f4d4d263b", + "key": "0x5fb32ddd7af3fd83ab0c2e5099470666994bc1a3c3f82b87ca868ef5760b8945", + "value": "0x352d8275aae3e0c2404d9f68f6cee084b5beb3dd45f1a95a4d3f3836523f5c83" + }, + { + "address": "0xb6ae56d3981c26728c668fc6bf95d9b64b77b8c8", + "key": "0x171bd511faed5fb25fa78a04e5326e6934ba06d135bd3818ab10096dc0d5083d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xb6ae56d3981c26728c668fc6bf95d9b64b77b8c8", + "key": "0xfcbde4338fb74aef3bda88c7913cbbca304736fe99eddb820ab6b59b1f3234d2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xf3eee655eab9896bf7537c2d1078669c4fd13b15", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x00000000000000000000005efa5e67a91493cf3e9250b80ccc80e0eac7a1e000" + }, + { + "address": "0xf3eee655eab9896bf7537c2d1078669c4fd13b15", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0xcdd713846b8fe50aaa5ae7ecc0ef3deca8115319a4160576d77fbd8ec2fe4c46", + "value": "0x000000000000000000000000000000000000000000000000000000000116aa0d" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0xed7133d95494eee1c8e6e395b6f764290d22f04d328668d4e9ac1ccf56611a22", + "value": "0x000000000000000000000000000000000000000000000000000000003f7da1cb" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0x94c3ce2212ee58f2ec6e77edb32333a62c549058629f0ffd88309dc21b5efe67", + "value": "0x0000000000000000000000000000000000000000000000000000000020196630" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0xac5c0ee64e22f51dec41296d5edd1f020f4687b17bce08ca7e48b63d15829456", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0x3933313c1ef0b2ce94d51c26b9b25d9c7e3ff8a859c6fd261a480b5525ead7a6", + "value": "0x0000000000000000000000000000000000000000000000000000000000008e00" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0xfa56ca41a7d43a1364d521a2385ab52dafd002297e97c015a48bd6b8bacabe50", + "value": "0x000000000000000000000000000000000000000000000000000000b31d5ed3a8" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0x4687a34c43ccc90f781c42662102a5ae37da40c420ee7f696406355a6e770f29", + "value": "0x000000000000000000000000000000000000000000000000000000000b4a7c82" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0xc665f25253c6348c5d6bb53857ca74dedb8747e7098628a24d480dc158eeedfe", + "value": "0x00000000000000000000000000000000000000000000000000000000158097d5" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000c0583e2f5930ede5fab9d57bac4169878730b010" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x000000000000000000000000a11ba93afbd6d18e26fefdb2c6311da6c9b370d6" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0xd5a21da60bb4215b5e1b8805e2ffd24ef9305a36a855b6bc975a3a35557ff284", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0xe78319e86f4efb5b0973be3f29f7579326a2789df3960a2beb2c9afd69f7711c", + "value": "0x0000000000000000000000000000000000000000000000000000000000002710" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0xd3602ca4d33eeabc53a5093ca125085dbd93cc2727835c19d08e4994a120507b", + "value": "0x0000000000000000000000000000000000000000000000000000000001d38f26" + }, + { + "address": "0xa219439258ca9da29e9cc4ce5596924745e12b93", + "key": "0x7ea2d605c8a932241f0bcc1482a83d6c2ca172ca94586529c418aed88d3a8c03", + "value": "0x00000000000000000000000000000000000000000000000000000046b17ecd8f" + }, + { + "address": "0xf9326b9aa3c9beef6557a508cfffe519ab6ff560", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x000000000000000000000000f9326b9aa3c9beef6557a508cfffe519ab6ff560" + }, + { + "address": "0xf9326b9aa3c9beef6557a508cfffe519ab6ff560", + "key": "0x7915257f9f0d87771d2a7de256b1506883a1de8aacc3471a586632ab1347a643", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xf9326b9aa3c9beef6557a508cfffe519ab6ff560", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x000000000000000000000000000000000000000000000000000000000000e708" + }, + { + "address": "0xf9326b9aa3c9beef6557a508cfffe519ab6ff560", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x000000000000000000000000815667ca7e44607c2598f8cacb82a2c55d176fff" + }, + { + "address": "0xf9326b9aa3c9beef6557a508cfffe519ab6ff560", + "key": "0xc49c8d52b427a38b03e51474a7387b9b16e6f1682948c7fd5013b6c0e341f3d8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xf9326b9aa3c9beef6557a508cfffe519ab6ff560", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x537465616d4964566572696669636174696f6e00000000000000000000000026" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x3c2a0ef8cfe649185e5196a0cb1b857decebb2c136db0c165ac7ac46310713a1", + "value": "0x000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x955c61e894e169d044ec560fb5eb5628b84b6a0595431bfa7fb89eedc26c3c6a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x3c2a0ef8cfe649185e5196a0cb1b857decebb2c136db0c165ac7ac46310713a2", + "value": "0x000000000000000000000000000000000000000000000000000000000000006f" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x3c2a0ef8cfe649185e5196a0cb1b857decebb2c136db0c165ac7ac463107139d", + "value": "0x0000000000000000000000000000000000000000000000000000000000073c5d" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x3c2a0ef8cfe649185e5196a0cb1b857decebb2c136db0c165ac7ac463107139e", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x3c2a0ef8cfe649185e5196a0cb1b857decebb2c136db0c165ac7ac463107139f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x3c2a0ef8cfe649185e5196a0cb1b857decebb2c136db0c165ac7ac46310713a0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x3c2a0ef8cfe649185e5196a0cb1b857decebb2c136db0c165ac7ac463107139b", + "value": "0x0000000000000000000000000000000000000000000000000000000065f7e2d2" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x3c2a0ef8cfe649185e5196a0cb1b857decebb2c136db0c165ac7ac463107139c", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x79946d67bfb75c3ba20ac344c3cc3147e98f68d9489761bb86e71434e8f54e58", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x00000000000000000000000000000000000000000000000000000000000000da", + "value": "0x8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0xa61838f37c7934b7b5ff86f2a93a9fdac621131300d0f1fe4a9ca39812406fef", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x9b619270ca6630bf71b3d1aa7cfdd324cdbc575778f574ca1f633e50125b46a7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x09957ee96fb1911fb67ade0f7942782e7ca55723d8cbc41a8f7925b84fb8dddd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x8d6a1193f90ce84e057416eb39b35f89c416235f3db120de8cf383e56191ea55", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0xa0ebed4338c26af5dc682a28b75aba30716252f3380ea1967e552277b8195f25", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x607bca81048e113d0b6b5451b6e2be43b426dff5f8b22bc8b99f756ac4e919ba", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x3d74c46d2f097e28a2c31afdcfa40725415cd1206af7b672d8760808c62721be", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0xd753a8ee8cba3a0f20b9ee6e27a2283699d93601bd61aa521a54216a4a23213a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x49467cf55fa13fe6f65f7f9ab79b23c26489764da1c4a113fee9459efa0e3141", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x0f6eb56d31b04acbae876ba12e5275c44177da286c2e4654550afa4b11c6c54b", + "value": "0x0000000000000000000000000000000000000000000000000000000000073c5d" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x7feac6ef4894db443b6046f934d8dffe8af4812f9f4b307224f533cf30c9fb62", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0xa0aca643726b3cf1a8be1ebdb30e2657e66152865be10e4f786b65039b8838e1", + "value": "0x4d32524d515236324b55596d6b32395544625754502f30000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0xa0aca643726b3cf1a8be1ebdb30e2657e66152865be10e4f786b65039b8838e0", + "value": "0x697066733a2f2f516d5675393865637a5a52705359634633554b5952446b4873" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x4def93d50fdbdde416def540124edb47cf0b32d4f41aebbb3696092b2d6948e3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0xd0135112387a37f2999bcd8857c277674df89112833c87d4adb7f7f8a044f6d8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0xf4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec375", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0xf4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec376", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0xe8ffccdcb747a3152ff2e08354fe60241270b1ce589b07ec81900832865a5d89", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x4fd7a63c3c9664b57fdb58ffa112436e0feec3de7ec53414b3ab5519fa2a007d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9df3c2c75a92069b99c73bd386961631f143727c", + "key": "0x5d7c2b89ec6c55286766ea938448fb255e3a440844388230c1d576f56038eba1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000010012", + "value": "0x00000000000000000000000088867bf3bb3321d8c7da71a8eab70680037068e4" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000010011", + "value": "0x0000000000000000000000005615a7b1619980f7d6b5e7f69f3dc093dfe0c95c" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x000000000000000000000000000000000000000000000000000000000001000f", + "value": "0x000000000000000000000000000000000000000000000000000000002db4e0d7" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000010", + "value": "0x00000000000000000000000000000000000000000100047fc669c8266602c5c9" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000010016", + "value": "0x0000000000000000000000324a41ebea62e7ab70413356d30df73ca803aae41c" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x0000000000000000000000000000000000000001000346d6ff11672ae55ad010" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x000000000000000000000000005e594c9b7c8ba555e8d53e332f91b92640e698" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000003f51a6d18751a2e9e988ae39dd27f32" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x00000000000000000a0001f4e5d7c2a44ffddf6b295a15c148167daaaf5cf34f" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x89a27b9283427b3d83e23808e6e56c30a7070888d2899118408f9e393939b83b", + "value": "0xcce4e8520e6a02e86b982c1d74410e2a1c5ab031832080480e80061000100000" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x00000000000000000000000068db60b964dfe3c9fa5a1efc43970c3500f3cb00" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0xadaa9486ce31e341f9769249b572a02d0de027a0584571490316cc1d744e5a3b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x00000000000000000000000c1e565d0000000000000000000000000d459fc684" + }, + { + "address": "0x5615a7b1619980f7d6b5e7f69f3dc093dfe0c95c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000007", + "value": "0x00000000010001000002f74800000000000040eb33e160bac1c3ddd3392877d0" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x5e4b7d51674f9c6be5ed2e296327b538adff59a262f613642642c966749fae63", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x33c772ad169352644627edfdbbce0040d764b545e07b4c227db1b0c2a4976425", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf7aaaed", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x86dc5ce65e7cb235b37d90f5376a868c1d9a3e60930df14dd31fa2cafe238ce5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x86dc5ce65e7cb235b37d90f5376a868c1d9a3e60930df14dd31fa2cafe238ce4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x86dc5ce65e7cb235b37d90f5376a868c1d9a3e60930df14dd31fa2cafe238ce7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0xbdc082903045394d1749e49876490d375b6dc2e44a23068fec7bde0bcdcf6e69", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x86dc5ce65e7cb235b37d90f5376a868c1d9a3e60930df14dd31fa2cafe238ce6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x427e3d4394d2b4987e9d3cc6e79821d8130c8a2b6d0abbe831aa36677924a73f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x2abfbb958f7f2cb767af42cd8e6bd459f176e2382cd36591bd5b5ef40282af2d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x000000000000000000000000000000000000000000000000000000000004e33e" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0x669129088e1848ad022a58c7380a0b07b003f798477061fa1306ad80254972e4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x26ee4ba1f0017f411c400a729115c4389e85c42c", + "key": "0xffd99f7ff5e482c311324e63b3fcfb6238006cea13921a7d3fb57bd8bf7c2e3d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x12af3ec993ec5d5bd789b3e989c9e95a2f6c586d", + "key": "0x451914e017a16ff395b19264cc2e46a3d0f8ff94794b93fdea55450e9267c80f", + "value": "0x000000000000000000000000000000000000000000000000000000000000012c" + }, + { + "address": "0x12af3ec993ec5d5bd789b3e989c9e95a2f6c586d", + "key": "0x96e56ee86c4bf1d6126bd064c67dbce939d42b477cc1102a51a9e67edb99e636", + "value": "0x000000000000000000000000000000000000000000000000000000000000012c" + }, + { + "address": "0x12af3ec993ec5d5bd789b3e989c9e95a2f6c586d", + "key": "0x0256c2d7254b0c1a367f54a5632390353022ad9048b43975cfa13996f208a216", + "value": "0x000000000000000000000000000000000000000000000000000000000000012c" + }, + { + "address": "0x12af3ec993ec5d5bd789b3e989c9e95a2f6c586d", + "key": "0x66fab475b927b6174c1bbb334bf43229314547836c2f63877a90f1b1a5a1e573", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x12af3ec993ec5d5bd789b3e989c9e95a2f6c586d", + "key": "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000032" + }, + { + "address": "0x4f5f443fec450fd64dce57ccace8f5ad10b4028f", + "key": "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff", + "value": "0x0000000000000000000000003c6cd9cc7c7a4c2cf5a82734cd249d7d593354da" + }, + { + "address": "0x7d43aabc515c356145049227cee54b608342c0ad", + "key": "0xd6d3120f4cf6c8f86abfb934f484a2d3d6ce6d63feadc06b8b68b7610483f996", + "value": "0x00000000000000000000000000000000000000000000000822232ac93e54457c" + }, + { + "address": "0x7d43aabc515c356145049227cee54b608342c0ad", + "key": "0xf98842e2fa2be07315e79bd73114ddf878bbab917ac38f430b03d90174fb41a4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x7d43aabc515c356145049227cee54b608342c0ad", + "key": "0x8436923cd8948dd96c1a8e573893a27d02067e52a72136ef518cd9d77aaf4d12", + "value": "0x000000000000000000000000000000000000000000000038fab0a48e5b91a294" + }, + { + "address": "0x7d43aabc515c356145049227cee54b608342c0ad", + "key": "0x81cb7f404d50d86308eae3a1ce17a4091fb0dd2a1a57846b2949c28029c085c8", + "value": "0x00000000000000000000000000000000000000000000000000000000f8cba54d" + }, + { + "address": "0xcbb852a6274e03fa00fb4895de0463f66df27a11", + "key": "0x0000000000000000000000000000000000000000000000000000000000000013", + "value": "0x000000000000000000000000000000000000000000000000000000000000cfbc" + }, + { + "address": "0xcbb852a6274e03fa00fb4895de0463f66df27a11", + "key": "0x17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b552", + "value": "0x000000000000000000000000000000000000000000000000494bd504aef1fcbb" + }, + { + "address": "0xcbb852a6274e03fa00fb4895de0463f66df27a11", + "key": "0x000000000000000000000000000000000000000000000000000000000000000f", + "value": "0x000000000000000000000000000000000000000000000000000009184e72a000" + }, + { + "address": "0xcbb852a6274e03fa00fb4895de0463f66df27a11", + "key": "0x72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xcbb852a6274e03fa00fb4895de0463f66df27a11", + "key": "0x000000000000000000000000000000000000000000000000000000000000000e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0xcbb852a6274e03fa00fb4895de0463f66df27a11", + "key": "0x000000000000000000000000000000000000000000000000000000000000000d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000400" + }, + { + "address": "0xcbb852a6274e03fa00fb4895de0463f66df27a11", + "key": "0x06b560bfabc26ec993672a10b709f09713733f902ee8e2da7d405c653b386493", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xcbb852a6274e03fa00fb4895de0463f66df27a11", + "key": "0x8c6065603763fec3f5742441d3833f3f43b982453612d76adb39a885e3006b5f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000043" + }, + { + "address": "0x401c196454c5541c6c63713f14db2967fcc0b38a", + "key": "0xca23a3ce95d9c686090d68eba9e3ec6a5b71c54ae79792479f96e4deb5c741c3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x401c196454c5541c6c63713f14db2967fcc0b38a", + "key": "0x6784389a92ba51e45d55cb90158f04bad1bb938f649a9da9451fd254925652d0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x401c196454c5541c6c63713f14db2967fcc0b38a", + "key": "0x91662e43371122635b5a3bf3fedbdc0df1c34a513c0eb02bb8d7766d21e70901", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x01f1ab96b728b27897d957e997ff254efe5fc8a2e75809f58268d6901ff883dc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x9f5a77eb4ccc2b1b1e7da27d890ed498c33713485c630c4ccae8106713d55ca5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0xb296d8e652c96fbbd93c98c0fc1bd5edcf9d24f5514cb66fcea24cac6da1ccfb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x0000000000000000000000000000000000000000000000000000000000000011", + "value": "0x0000000000000000000000000000000000000000000000000000000000029c7e" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x000000000000000000000000000000000000000000000000000000000000000f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x352660b41cd5873dcf427d9f749e7e85bb6cdd8868bd460faca6e63753aa226a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x4ecd8c5cbbda586cf07769d6c0264a6211af517f6d31744f7c50e8a76d2d153b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x5da22f2c7df10ebe7b49ed436f148fa2bbe13fc3049379eca42829559694de26", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x000000000000000000000000553eafd6672ec5d3097cf4536522310260dec05f" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x71b2d79409168a45bf397d216567354acce7d949a219c7a782e899b319c2682d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0xa6f1827519e4b5d5bc69ec6a5979344bc3c343303663ec2b0291b2ad7ce45352", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0xa6f1827519e4b5d5bc69ec6a5979344bc3c343303663ec2b0291b2ad7ce45353", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x0efc338d942e567de6df1f6edbacc90813950bd209a0bde2f39c17b9b0eec913", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x000000000000000000000000000000000000000000000000000000000000000e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x000000000000000000000000000000000000000000000000000000000000000d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x0000000000000000000000000000000000000000000000000000000000029c7e" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x7752440b46a3a2fb684a909d344c90ecd9797c148b1135527793426ec06c625a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x7752440b46a3a2fb684a909d344c90ecd9797c148b1135527793426ec06c6259", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0xcbd414ed6cec278e5ecf99a0c23a0bad189bbd4195ee527a560c217c736c38ac", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf78642d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf78642e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0xa194ef5bc6d215a7644a33f23e3c92f10c6c0d1dc5946e27820203d0e2f5359d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0x1fff1f6c4b0ddb55f7475801d714225e2f30d5da5cfe34fc39b14153de31f6ec", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x37d4bfc8c583d297a0740d734b271eac9a88ade4", + "key": "0xac956394c52935c4e430e5e4eb96e661be019e2952414ea7181200ed6f0c4050", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x281a95769916555d1c97036e0331b232b16edabc", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x281a95769916555d1c97036e0331b232b16edabc", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x000000000000000000000000da36df0764d138993f9811353ecadd6b32caafb9" + }, + { + "address": "0x281a95769916555d1c97036e0331b232b16edabc", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000428a8a0a62f4f5344ba7285bd8a24e36625267c3" + }, + { + "address": "0x281a95769916555d1c97036e0331b232b16edabc", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x281a95769916555d1c97036e0331b232b16edabc", + "key": "0xee8f5cd37d6f30ac7963fd03e59ced42f0db96ed1170c585bb6dca5b3a961ddf", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x281a95769916555d1c97036e0331b232b16edabc", + "key": "0xb1d25a42f752a5558ec7d1b8c202a4acd82327c1536a34a93d2fd82e84783953", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x281a95769916555d1c97036e0331b232b16edabc", + "key": "0xf8450e6e552456f657fc30ac34aba3be4b8a75bb501c390bbbfda0034bfea409", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x281a95769916555d1c97036e0331b232b16edabc", + "key": "0xe9021451e449efc10a87fb59a2e67c00ff24137028be41c1989f8a16d0cef4bf", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x281a95769916555d1c97036e0331b232b16edabc", + "key": "0x9a5abd751648fbef182cfc0475d60d23ee666172099eed2f5cba6452f979faae", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xce048492076b0130821866f6d05a0b621b1715c8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x0000000000000000000000003de3893aa4cdea029e84e75223a152fd08315138" + }, + { + "address": "0xce048492076b0130821866f6d05a0b621b1715c8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000f851513a732996f22542226341748f3c9978438f" + }, + { + "address": "0xce048492076b0130821866f6d05a0b621b1715c8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xce048492076b0130821866f6d05a0b621b1715c8", + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6", + "value": "0x000000000000000000000000401c196454c5541c6c63713f14db2967fcc0b38a" + }, + { + "address": "0xdb4a350f7758a539e6f718b74c87a17c0a133c0a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000006602c5c900000000000000000037287fb244a764" + }, + { + "address": "0xdb4a350f7758a539e6f718b74c87a17c0a133c0a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x000000000000000000000000000567eff862e24810f5ca9f31ef4c3e8b193b6c" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x82706840ddb30490d1d0503defd25ed6181f6ed6366953ec09d608c1d49094ab", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x82706840ddb30490d1d0503defd25ed6181f6ed6366953ec09d608c1d49094ac", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x82706840ddb30490d1d0503defd25ed6181f6ed6366953ec09d608c1d49094ad", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x82706840ddb30490d1d0503defd25ed6181f6ed6366953ec09d608c1d49094ae", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x000000000000000000000000000000000000000000000000000000000000000f", + "value": "0x0000000000000000000000000000000000000000000000000000000000005c7f" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0xf6510d97fbce6c000b74ee1cd280e54e54685a08dc679bf80e49044012b88083", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x82706840ddb30490d1d0503defd25ed6181f6ed6366953ec09d608c1d49094af", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x82706840ddb30490d1d0503defd25ed6181f6ed6366953ec09d608c1d49094b0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x82706840ddb30490d1d0503defd25ed6181f6ed6366953ec09d608c1d49094b1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x82706840ddb30490d1d0503defd25ed6181f6ed6366953ec09d608c1d49094b2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x82706840ddb30490d1d0503defd25ed6181f6ed6366953ec09d608c1d49094b3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x000000000000000000000000c5f444d25d5013c395f70398350d2969ef0f6aa0" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581b2481", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x000000000000000000000000000000000000000000000000000221b262dd8000" + }, + { + "address": "0x66217ebf82de81b8b536d5fbeb060f4f3aa8c8d2", + "key": "0x0000000000000000000000000000000000000000000000000000000000000007", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000010013", + "value": "0x000000000000000000000000b8ddafe7385a962a4515821248368823e93fa61f" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000010011", + "value": "0x000000000000000000000000564e52bbdf3adf10272f3f33b00d65b2ee48afff" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000010010", + "value": "0x00000000000000000000000000000000000000000000000003d89d54c10643c3" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x53933160e49e7598a57e1744a11afb0a418175863972ff147a727ac436cb54f5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x80283cfdc74729ecb224822f7a02837fb1d52df7cc3435ae86bb6e025f6e06fa", + "value": "0xffffffffffffffffffffffffffffffbfff776920410c0150db70009a00000020" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000010016", + "value": "0x0000000000000000000000324a41ebea62e7ab70413356d30df73ca803aae41c" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x0000000000000000000000000000000000000001000346d6ff11672ae55ad010" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x000000000000000000000000008e102f5b4021fa76b190a82c7b174c29dd43b6" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x00000000000000000000000000000000064f7cee2faf7947d4820b6f7ffaec0a" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x00000000000000003c000bb8e5d7c2a44ffddf6b295a15c148167daaaf5cf34f" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x000000000000000000000002752342a6e74cac9b187d425d2d2a0c34ecf3cb14" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x0000000000000000000000f20727217c00000000000000000000012154a7869c" + }, + { + "address": "0x564e52bbdf3adf10272f3f33b00d65b2ee48afff", + "key": "0x0000000000000000000000000000000000000000000000000000000000000007", + "value": "0x00000000010001000002f71300000000000040bf38e6a64cc03449bf6f25c14d" + }, + { + "address": "0x34df93f37f327757684ae502b47c787c38465037", + "key": "0x2e573600b475045b060c72d5873093b3b53001bc009df6fa7c3c354d4e90593e", + "value": "0x000000000000000000000000718a13230b18d6b7d17baf987ea499a758355557" + }, + { + "address": "0x34df93f37f327757684ae502b47c787c38465037", + "key": "0x09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d524", + "value": "0x00000000000000000000000068d96d49a939f88fad14ef16ae538ab042451634" + }, + { + "address": "0x34df93f37f327757684ae502b47c787c38465037", + "key": "0xac9786f842679119c45f55854d5a4cedee202e9fbaba6f0502cc3f41977aef0f", + "value": "0x000000000000000000000000b6ae56d3981c26728c668fc6bf95d9b64b77b8c8" + }, + { + "address": "0x34df93f37f327757684ae502b47c787c38465037", + "key": "0x7040d9035199443f2087f1e29c3d28f1cc4a7de063dfd8c1aa6418430f0fb667", + "value": "0x000000000000000000000000d852b4696de610965e601ccc256135d4d91109b7" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0x4ee9895eec3be6047fff1c7c349f2ea15761330dfd36be0ca1b38695303cce4b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0x06ef8c7092baf9174f250fa0991acd5332858cff58f4bf305245b36aca3d6687", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0xadca045cca6b640fbf3f97405e6cf7af6fbc40a6a0cdfe1f2e720aceb434ec67", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0x2e1066462f046a36f00bacb0a601c0ed01342c9b7eca6c76e0450e0ff1727043", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0xcd541f61c70e96261e5e5b0f37a8a6afa1d1f1f92166ea445efa0fed32b89ae4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0x33d4349a46d7b4eb99b30b2bb06d5322497fdc06f2a7eea29e274f65224b7867", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0xcd6901a9a9c79a0f9986d441cf358eb7fbe7a4377e05735b29259dcaffa71b98", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0x0337fdaec4acf32469a687939cec1ed6f329fd9d16ef159e4cb804be9d91a195", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0x77a3540147e3af590e859330321b55ce6bbf39c965a126335aba21db79d80c82", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0x000000000000000000000000000000000000000000000000000000000000000a", + "value": "0x000000000000000000000000000000000000000000000000000000000004cfa9" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x0000000000000000000000000000000000000000000000000000886c98b76000" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x000000000000000000000000000000000000000000000000000000006615d680" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0x714ef060aa81a569f038b3a11f7efb9aa5d719de51608119b96e73d37769f596", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5ac7880e0607d0903a4c27d0a7c886f39d9b50dc", + "key": "0x0000000000000000000000000000000000000000000000000000000000000007", + "value": "0x0000000000000000000000000000000000000000000000000000000065f8d580" + }, + { + "address": "0x608cb7c3168427091f5994a45baf12083964b4a3", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x00000000000000000000000012af3ec993ec5d5bd789b3e989c9e95a2f6c586d" + }, + { + "address": "0x608cb7c3168427091f5994a45baf12083964b4a3", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000006e5509d54c72f994f00d5a48b04822785c74970b" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xf82c57f3b260e20db29a987c2ccf55c4a05ea5d418a187f022a69d6038db2b92", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x61a9370901480f2f4edebb66813553f3ae18a68a7b4d5bb469c2159e3f7c4803", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xc19ce7f0669ba628656956bc063bcf925ad08f6eb94a5aac4b922f191dd2d68f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xd34b908afd03097154474b4226fffd134411df3c58ac0490855e9bf8f5c1fa0c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x8556de4b5298f456ab30ad94b72c824a3dc1bbf935cbb77865a57d8594cf08dc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x43df9e025e720901ab304fac151237ddedcf42f6f93289949c3cc52e287a30f9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x3b0a78f7381ebba6f80cb5b500f0cc12b5ee8e0810c7532c7f4ba1db65db20af", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xd7e214c45ef045935466662f0c63ef9741977f5cb49b429b0de59d820eb5d452", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xe7d4017c4bf68b0d588e504f9a3a85d6a1472094706e661270c4bf95f5aba02d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xa3f9b2a2b0cf0191ef4d73dbfe18c45b22aa0bea72ec94c94d5861640db3c72c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x000000000000000000000000000000000000000000000000000000000000000a", + "value": "0x000000000000000000000000000000000000000000000000000000000005dc9b" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x000000000000000000000000000000000000000000000000000110d9316ec000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x000000000000000000000000000000000000000000000000000000006615d680" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000007", + "value": "0x0000000000000000000000000000000000000000000000000000000065f8d580" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x98663db093b7d3320e986fe8935b3c3f1981dd04d030b71d35f87efa65e06f40", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x03619877622c106524c8e367054c464abd5f61b31cecdd2c3035b4edfec391a8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xfc937126a91a59da698a85c8651df7a5a3d9b5e0cf405e0ada14b2f453e1b396", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xf04ce446aa4319b7889f9b82e791e86f9f742f564891142694b684106e951d46", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xf72d31f6647c7550781dd919743fe4d0c8bfee0a5bf6fd49e5b346dbd7f444b9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x7dc6312bf6b17038eb9ffdc918bb87349aacec3610ad57674a23aa28626a2cf5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x12e3b0042c642bb0421958ed9a7bd58009d710974d4c24064efe6f9b05353f6f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xf4628eb633d241a71ed0bbc707db425d76a9d0c9a2482f55f64259afe3514aaf", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xcd8cec6de5621f05e5385a60ac30a3d3cd55091a29642d87d198509a3e089394", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x8fb4f903f89755efeef056fbe07578f0916dec00bee7a436a7bb88c5cba6c8c7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0x37e9caaa3491895ba8973db403ad61561205334627ceb4de44eda1133fc96699", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2dc9d44ec35d5defd146e5fd718ee3277dfacf0a", + "key": "0xe329521fdc72703bd960d3d4c55f5720bcef0b69bf8740c0f0cc414be8363f27", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x7d5b69c4b86b506b7cf2e4ab475db187f7faaf48263b9b178aeff065a4c5eb46", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x501c7e206f2037eaf058269b9f0321acd004be2c806bfccfb2342ee852c1df1c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000106" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000011", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0xbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545da", + "value": "0x00000000000000000000000013b19cfb68cc7f71dd48e27f57811dd6a853f658" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x44d0ae86228da8084fa29be2797513fc9c3213d738bb0774f20637059455b867", + "value": "0x0000000000000000000000000000000000000000000000000000000000000208" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0xb14ffafb3c2dc8eecca27753c5bdaa1bddb59cde6209a62bc726c8eb66a0b0a0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000107" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x169454b45c3aee0cdab1a398f24dbcdc1500efeef57e7a64f80a592354caaee3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000103" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x0000000100010001000100010001000100010001000100010001000100010001" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0xb679a13735f4aaccfcd4868b1c108dcaced7114820ff971df20f403b11d5424d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x000100010001000100010001101d101f104e0fdf0fd2104d104b104a104d104e" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x000000000000000000000000000000000000000000000000000000000000002e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x000000000000000000000000000000000000000000000000000000000000002b", + "value": "0x0000000000000000104d0300013d0605b3c9ebd6f89701463821e9d841825ed9" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x000000000000000000000000000000000000000000000000000000000000002a", + "value": "0x000000000000000000000000000000000000000000000000000000000000000a" + }, + { + "address": "0x0635163285c6ef5692167f18b799fb339df064f8", + "key": "0x658955e80c7f95624b400e5551dbf90b026c2e56484ab4417b4db723c5450ce9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000102" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x0000000000000000000000000000000000000000000000000000000000000197", + "value": "0x0000000000000000000000000000000000000000000000000000000000016d71" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x2e52d308a73eb8b9d1fa960a8438afeee9de66365a9dfb996a913e019e31e25a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x0000000000000000000000000000000000000000000000000000000000000191", + "value": "0x00000000000000000000000000000000000000000065d4b06000660c1d700001" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x19ca2aa4be29ddd5dab0d5273f23d8678abc031d54c5de3ddfff7732e5158da9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x00000000000000000000000000000000000000000000000000000000000000fb", + "value": "0x000000000000000000000000c577018b3518cd7763d143d7699b280d6e50fdb6" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x000000000000000000000000000000000000000000000000000000000000019b", + "value": "0x000000000000000000000000000000000000000000000000000000000001a2cf" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x3ea4d693734e62a1b4642df418cf4aae0e5ba336a2d6024b2d33585611a6505c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x0000000000000000000000000000000000000000000000000000000000000097", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x1f456aef9e001839c4ac481a5ccc44973859aa9345299144f7ab2953886516ee", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x0000000000000000000000008e480709a03aa3856ae20fb9648ff7a379d485fd" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x0000000000000000000000000000000000000000000000000000000000000161", + "value": "0x000000000000000000000000000000000000000000000000000000000001a2cf" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x49309e9dd845be2ac1581891c346b53a4598d2ce88d784f02b2dd76ee9f177fb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0xafbb1c043347995df017ce3291b765e028ad5f784d2aa00c3f5e073760a6815a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x72f1ed92e7d47aa4c131debafe209f73440d892392b081505f6bb2f947e4457b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0xeae4605bd3a4ed3e94c66fa9b1d861311783467ceb61b47aded31fd8f754fc47", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x2fbcbe072e3e5182025907a28019ac2b75f657cc5c614df3e38f5c65b714ef9e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9b0bbcaf24df0cef9ae59ea385aad375b77325ef", + "key": "0x8021d2b3a0ed20f7d250fcb2a875bd375c5233bff82f7cd152407190e5fd86e4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2933749e45796d50eba9a352d29eed6fe58af8bb", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0xc6e54c7e1bd1cab2044bef1e7505337a7df3112e563e26a82664859d32d42047", + "value": "0x00000000000000000000000000000000000000000000001a242afb870e847490" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0x0787f026b4406793bc6e4011ea276f87ac5941005cac7f07191d11d4f481e62c", + "value": "0x0000000000000000000000000000000000000000000000141baca5c6c9902a7e" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0xc0597a1bb94daf09b350da2806d733085af1781edbb2f3e907377e5c3e40a05e", + "value": "0x00000000000000000000000000000000000000000000001411a934d7fa02296e" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0xd7a9c0e6f6c586ed58c80e700eecdae74d22bfed95a297bddcbd384dfcb55311", + "value": "0x000000000000000000000000000000000000000000000000000001987fce63b9" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0xa827b7836824cb0c31049c73dfec122e6ae00d91cecb9e737cb4ea113c44bab5", + "value": "0x00000000000000000000000000000000000000000000001739d90ab3e7373f47" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0x4a7f7216cadd88bde38b7f5d82d7f899b863eb9e21ace2f0fb5c27af085ec9f2", + "value": "0x000000000000000000000000000000000000000000000000000000b31d5ed3a8" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0x87d11119a8cde76d292fb71832758d4ddeb05511d5981de44c6ac3ab41f0c649", + "value": "0x000000000000000000000000000000000000000000000000000000026e76cecd" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0x1d4d14360813175399ac1f7e007206a320af0db26a02316239206722ee7fcd5b", + "value": "0x0000000000000000000000000000000000000000000003971618b8c39a372ff7" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0xa46599a18a626e7836515b917ea8bb3872a19b7fbdd733860247e5839bee4f08", + "value": "0x0000000000000000000000000000000000000000000000000000021854c97125" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0x5b89d1873dd0a159ea85322d33df434faaa996f8b7b4a7bf7f34d4c7bbc59fb0", + "value": "0x0000000000000000000000000000000000000000000019d03dd7ca190304c498" + }, + { + "address": "0x7160570bb153edd0ea1775ec2b2ac9b65f1ab61b", + "key": "0x05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc", + "value": "0x000000000000000000000000000000000000000000000042432dd6dcf4f0e6ee" + }, + { + "address": "0xaad094f6a75a14417d39f04e690fc216f080a41a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000013", + "value": "0x000000000000000000000000000000000000000000000000097e6c59ccc6ff27" + }, + { + "address": "0xaad094f6a75a14417d39f04e690fc216f080a41a", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7bc", + "value": "0x000000000000000000000000000000000000000000000050ea30b50109b6b6f2" + }, + { + "address": "0xaad094f6a75a14417d39f04e690fc216f080a41a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000011", + "value": "0x00000000000000000000000000000000000000000000000334d293760edd2efe" + }, + { + "address": "0xaad094f6a75a14417d39f04e690fc216f080a41a", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b9", + "value": "0x000000000000000000000000000000000000000000000049ae9d8485b3eccab1" + }, + { + "address": "0xaad094f6a75a14417d39f04e690fc216f080a41a", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7ba", + "value": "0x00000000000000000000000000000000000000000000000c88aa1fbf098383b8" + }, + { + "address": "0xaad094f6a75a14417d39f04e690fc216f080a41a", + "key": "0x000000000000000000000000000000000000000000000000000000000000000e", + "value": "0x00000000000000000000000000000000000000000000003666815119b74d39ed" + }, + { + "address": "0xaad094f6a75a14417d39f04e690fc216f080a41a", + "key": "0xe79659174f0e98bff6608b143bffe9e550a81c916b80b13dd1629854a3d05fec", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xaad094f6a75a14417d39f04e690fc216f080a41a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x0000000000000000000000000000000000000000000000000000000000000004" + }, + { + "address": "0xaad094f6a75a14417d39f04e690fc216f080a41a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x996472bc236571dc20c62c42d834c99bafc1f787f2921ae8b18948d741035e2f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x72e761fa1af144b07a57513725269ca2c49b08e3478bcca799d30c05a7cc1ee0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x0ea7de8db555757cf2f52928e0b4e1bcdb4bb29f19af352e46c24489f962cf9c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x4062dca57d1f88d17aecc50d6de35091d7e590e87190d9aae2f0b8c1975a7761", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x486be8bce8b98cd32df03e4d7b56fb28ef8bdb5fc1cdcd99eec3a701307a0f5e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x00000000000000000000000000000000000000000000000000000000000b197a" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x95d8b82363f9078ee9ded27182985265fe79abcea91211acc150713d8fb4cca8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0xdfa77759c5f65c487d33a2c889f4ea63532269f18283958cc5328c41b78e7997", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x7565f46c2ca2d126384464ebe0bc40576f638e87235cd24980047cd77b7c03b4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x95154e7715b97dc03bd532f4c2e789aa65164c4a21748babc0eafccf78309d5b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x00c9695d73407473c41a1f97f3c46570aff3e33e76915ead844858b91f26dac0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x7bd6edabe8dee3d219451b52f55342a22aa4aea76547745bf23176506d0a300d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x45b92d8744c5050ab80d1fc3d5fc24cfc7d51f38cd2ad76f864dc03429679d19", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0xf69ad8ddf40945475353654740b4a666ab7f3ac3b651aadc33e04379dfdedd1d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0xe04e0352857f1ab3698445687fa2ec1cc027f5908f654bf602bf51fa6d0af10b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0xc2de9fe397f198a06cbbaccf505267d7618ab0b15f1a52d9474afeb98df7808e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0xd3bebe6a61369a2002a42e65a454ae869bcbdff036766058f7cca192270e8c0b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x9e38447c896817e559c95c29272eafbc16661f06613386be5ded60630539aa5b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x4e11838420191885ff43c08ac0537b7497e25f92eeb3894d436b38f19ebd1cca", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x2a90afcab45cf939c8deb2b0c5e794bc548aad05455d2d95420d99b3bf332c3a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x75042350e21c29d62725abcb9ac18bff4d32dced24bb2a194dcc9381d3d5d7b0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x45bfaae2e2859b6d94462fe95f6dedb97ba89e79df88a1a217e23ba8d8d9d6e1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x7dd5e2f4135f1c15ffbd6bfce63e1716c0addfb987b91d8b690a23dd6caf6626", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0xfd56bff5e9757f71c7d552fc9d8a1279c4b8089336b0df8031472f4ab752f880", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x578705c60609c9f02d8b7c1d83825e2f031e35aa", + "key": "0x4ef218e52c465d598793ac9f9acec3270aba798aeefc5ca8f985236c4a5aaafe", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb9cc0bb020cf55197c4c3d826ac87cadba51f272", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x0000000000000000000100000d0d5ff3cfef8b7b2b1cac6b6c27fd0846c09361" + }, + { + "address": "0xb9cc0bb020cf55197c4c3d826ac87cadba51f272", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x0000000000000000000000003de3893aa4cdea029e84e75223a152fd08315138" + }, + { + "address": "0xb9cc0bb020cf55197c4c3d826ac87cadba51f272", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000f851513a732996f22542226341748f3c9978438f" + }, + { + "address": "0xb9cc0bb020cf55197c4c3d826ac87cadba51f272", + "key": "0x42eea122863e68e46ab6f205f3265b30579ddc0433fb0fccb75d2ca0bd3dbe83", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xb9cc0bb020cf55197c4c3d826ac87cadba51f272", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xb9cc0bb020cf55197c4c3d826ac87cadba51f272", + "key": "0x559728550b6cdc0d8be5bddb53d5b7364ee5bf422ebd71abac49f3cea340d102", + "value": "0x0000000000000000000000000000000000000000000000000001c6bf52634000" + }, + { + "address": "0xb9cc0bb020cf55197c4c3d826ac87cadba51f272", + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6", + "value": "0x000000000000000000000000eacf8b19e104803cfcd2557d893d6a407e4994f0" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000010013", + "value": "0x000000000000000000000000b8ddafe7385a962a4515821248368823e93fa61f" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000010011", + "value": "0x0000000000000000000000009cfcc5322455f0951336ccb4474795924f564015" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000010010", + "value": "0x00000000000000000000000000000000000000000000000085faef4173c238f1" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000000010", + "value": "0x0000000000000000000000000000000000000000010005009a7378c66602c4ad" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000010016", + "value": "0x0000000000000000000000324a41ebea62e7ab70413356d30df73ca803aae41c" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x0000000000000000000000000000000000000001000346d6ff11672ae55ad010" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x00000000000000000000000001430ed09ca5783f2a37dd62ffcc8a9bf8915b16" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x00000000000000000000000000000000000165dd85cd287394acb69109e22c35" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x00000000000000000a0001f47d43aabc515c356145049227cee54b608342c0ad" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x00000000000000000000000068db60b964dfe3c9fa5a1efc43970c3500f3cb00" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x9e7f0cca2e37f7ac5d64ca64cc810e1773c6b153b3972d812476fde0929e3e7c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x0000000000000000000000c44e3fccaa0000000000000000000001632218d374" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x94750c6f27e5c635344b58bc598c9e067fd307f4c910abe4679a628cb7ff247a", + "value": "0x20108003da1fff04000000000008000000000000000000000000000000000000" + }, + { + "address": "0x9cfcc5322455f0951336ccb4474795924f564015", + "key": "0x0000000000000000000000000000000000000000000000000000000000000007", + "value": "0x00000000010001000004375100000000000f3e892d8aee75deac67efc684d80e" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xc75f30b8c82c9f64d3346a41eb90807b61425dc9ee55685680999f6fd6f1dda1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x224f198139b300c4e5f0d48ee4e1da6d441633af01eac8b9224509b630eeac8f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x9721ba75b7296a76fe1ef2a76bf3ce6f9826e622d4bd6dcee92a002ab06a6d4a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x3bfd3a5e0cfd7098570a08e209606009bcfc5d799c5055371482721529f78a35", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xf4b6525283c4bf73c77497ae8159dde631be8f339c61248307174c91719f67a8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x4ad7db63cf0515ca557dc8e32768d33fbf6b91472c31b560441bffb552c0902e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xf4b6525283c4bf73c77497ae8159dde631be8f339c61248307174c91719f67a9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xf4b6525283c4bf73c77497ae8159dde631be8f339c61248307174c91719f67a6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xf4b6525283c4bf73c77497ae8159dde631be8f339c61248307174c91719f67a7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xf4b6525283c4bf73c77497ae8159dde631be8f339c61248307174c91719f67a4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x2c48d6763238260153a6e667f9b35386e35d501a67a3e246589e6b4260f7fdf7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xd4e6b062f5d6ac35ccc6a7d1fde47d5152ba731aa1af7b29e2c683fc98823823", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x93bad5ad26bf1739b5d496568b311a5901324212a6a35fda84af15510c1cc919", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xf4b6525283c4bf73c77497ae8159dde631be8f339c61248307174c91719f67a5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xe33ccaa1bd8673e14e521c8dfa3b9a1460941b2c9a01619d9f91c1ec2210894e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x000000000000000000000000000000000000000000000000000000000000000d", + "value": "0x000000000000000000000000000000000000000000000000000000000005f307" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x1763e7d93de4fe45923369c5945d1d92f166857c662b29f9b9095f3f42d3376e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x000000000000000000000000000000000000000000000000000000000000000b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xebe4bbddd36e625eef6a883c7c7cc47429c60183ac54614e853c53b6baa2399f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x000000000000000000000000000000000000000000000000000000000005f306" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xae90b73108ee38aa1021075fb4b85b69549d221c7dd94754bd8e67e9db4c3a42", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x10d8c3795583c1fe6c450aacc773efafc7280e954c079e7c0827c04a1c58978e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x2a3ee05afcaa52f7860d70fec34a0307ee585865ec442cd7d5b0b38cc8a86581", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x10d8c3795583c1fe6c450aacc773efafc7280e954c079e7c0827c04a1c58978f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xf3d311ca037ec71db02079be37a971d43f35a287da62c56ed884c3d127cf37cd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x93bad5ad26bf1739b5d496568b311a5901324212a6a35fda84af15510c1cc91d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x93bad5ad26bf1739b5d496568b311a5901324212a6a35fda84af15510c1cc91c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x93bad5ad26bf1739b5d496568b311a5901324212a6a35fda84af15510c1cc91b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x93bad5ad26bf1739b5d496568b311a5901324212a6a35fda84af15510c1cc91a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x096e15838424ac893a21bcfe29d4e37d52f050b393b29efe6d1cb2962b7c156a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x93bad5ad26bf1739b5d496568b311a5901324212a6a35fda84af15510c1cc91e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xae9b2e87e2c62d7ee4fa2878905bedf5e93a12a451102cec4d08d429f732c3fa", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x143db577530b642041708f9938523c1e14385cff127e4ac2bbf9cbe7a7541fd0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x10d8c3795583c1fe6c450aacc773efafc7280e954c079e7c0827c04a1c589792", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x10d8c3795583c1fe6c450aacc773efafc7280e954c079e7c0827c04a1c589793", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x10d8c3795583c1fe6c450aacc773efafc7280e954c079e7c0827c04a1c589790", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0x10d8c3795583c1fe6c450aacc773efafc7280e954c079e7c0827c04a1c589791", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6961e9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xaea87ebef92a37711595e05e8b50b3abc25aefe5c329cb270282729ba9a37fab", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6961eb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x43264dccf2bbff0f21d711e46505c4c30879ead2", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6961ea", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x4960eda41a25c6c0fedbe8798940cb4585e36311", + "key": "0x03a8fe364d229a5e5bb798f1c8a3b99e7bb3193a69b979fd7aa291b0fbe360c7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x4960eda41a25c6c0fedbe8798940cb4585e36311", + "key": "0x40f5a1cb910517f4161cc1358c8edacbaba90652769b5393c680da767a320dc2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x4960eda41a25c6c0fedbe8798940cb4585e36311", + "key": "0xe86501784729f351904c74d5423d27ac379a746729fe39915cebdca1fcf0ab21", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x4960eda41a25c6c0fedbe8798940cb4585e36311", + "key": "0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b", + "value": "0x00000000000000000000000043f970fb4256763b3c03bed26df01ebda6f488a5" + }, + { + "address": "0x4960eda41a25c6c0fedbe8798940cb4585e36311", + "key": "0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3", + "value": "0x000000000000000000000000f34cc0410350b99e181ec1569c35db0bc59296ce" + }, + { + "address": "0x70b9c57e1ff24761c1c3ced57ddae9a3f3570698", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x0000000000000000000000006c1c420c04f4d563d6588a97693af902b87be5f1" + }, + { + "address": "0x70b9c57e1ff24761c1c3ced57ddae9a3f3570698", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000005543df729c000" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c82", + "value": "0x00000000000000000000000058cc3ae5c097b213ce3c81979e1b9f9570746aa5" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c83", + "value": "0x000000000000000000000000ff6cb952589bde862c25ef4392132fb9d4a42157" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c84", + "value": "0x000000000000000000000000114de8460193bdf3a2fcf81f86a09765f4762fd1" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c85", + "value": "0x000000000000000000000000107a0086b32d7a0977926a205131d8731d39cbeb" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c86", + "value": "0x0000000000000000000000008c82b2fd82faed2711d59af0f2499d16e726f6b2" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c87", + "value": "0x00000000000000000000000011b39756c042441be6d8650b69b54ebe715e2343" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c88", + "value": "0x00000000000000000000000054ce5b4d348fb74b958e8966e2ec3dbd4958a7cd" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c91", + "value": "0x0000000000000000000000008192b6e7387ccd768277c17dab1b7a5027c0b3cf" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c92", + "value": "0x000000000000000000000000178e21ad2e77ae06711549cfbb1f9c7a9d8096e8" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c93", + "value": "0x0000000000000000000000005e1487f35515d02a92753504a8d75471b9f49edb" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c94", + "value": "0x0000000000000000000000006fbebc898f403e4773e95feb15e80c9a99c8348d" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x0000000000000000000000000000000000000000000000000000000000000003" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000ebe57e8045f2f230872523bbff7374986e45c486" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c89", + "value": "0x00000000000000000000000015e7caf07c4e3dc8e7c469f92c8cd88fb8005a20" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8a", + "value": "0x00000000000000000000000074a3bf913953d695260d88bc1aa25a4eee363ef0" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8b", + "value": "0x000000000000000000000000000ac0076727b35fbea2dac28fee5ccb0fea768e" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8c", + "value": "0x000000000000000000000000af45ced136b9d9e24903464ae889f5c8a723fc14" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8d", + "value": "0x000000000000000000000000f93124b7c738843cbb89e864c862c38cddcccf95" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8e", + "value": "0x000000000000000000000000d2cc37a4dc036a8d232b48f62cdd4731412f4890" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c8f", + "value": "0x000000000000000000000000da798f6896a3331f64b48c12d1d57fd9cbe70811" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000013" + }, + { + "address": "0x0708325268df9f66270f1401206434524814508b", + "key": "0x2fc7941cecc943bf2000c5d7068f2b8c8e9a29be62acd583fe9e6e90489a8c90", + "value": "0x00000000000000000000000071aa1be1d36cafe3867910f99c09e347899c19c3" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000036", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000034", + "value": "0x0000000000000000000000000000000000000000000000000000000000004e20" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4d", + "value": "0x000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0xbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4e", + "value": "0x000000000000000000000000dc38c5af436b9652225f92c370a011c673fa7ba5" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0x000000000000000000000000000000000000000000000000000000000000003d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0x000000000000000000000000000000000000000000000000000000000000003c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0x000000000000000000000000000000000000000000000000000000000000003b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000038", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000037", + "value": "0x00000000000000000000000000000000000000000000000000000000003d0900" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0xc6bb06cb7f92603de181bf256cd16846b93b752a170ff24824098b31aa008a7e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0xc6bb06cb7f92603de181bf256cd16846b93b752a170ff24824098b31aa008a7f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0xece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc3", + "value": "0x000000000000000000000000000000000000000000000005fdf41c9fc02489ba" + }, + { + "address": "0x2935173357c010f8b56c8719a44f9fbdda90f67c", + "key": "0xece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc4", + "value": "0x000000000000000000000000000000000000000000000004b27c6e8ae2b8a797" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x5931583070eb8916cdb22caac533a6164469edc7f873b4a2f865d6767d3319fa", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6795ad", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x8b21eeb2f8b7890321cc8df268f18122ea0aed19d95bdaf14ab96b03d7706a89", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0xc692ec8c1676ddb8f3b969bfe5be4fa3a63ed01f75508bdcab1f4d56675491a7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x1c17ae2ce53afb1cb252b4b2721fab33d58a2a2f447bb41e65e07ed6c6eb23fc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x1c17ae2ce53afb1cb252b4b2721fab33d58a2a2f447bb41e65e07ed6c6eb23fb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6795ae", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x2f218f09b73130e308e91bd72ab2311d8b2611f4ac71974d96872877b640bf08", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x4f568bb7c53141526d0a20ef9e9a9026e7862f63289101b58a711fdad80be934", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x1c17ae2ce53afb1cb252b4b2721fab33d58a2a2f447bb41e65e07ed6c6eb23fd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0xafa6cdac490d3e00cf3fa2c2d0dbc95e2c73d1303b8cef04c29454cfc1c8caaf", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0xc5b6897bb128b9e6e5f31cf646746223f7dbb91a9823a4e094f1291c865f2b5b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0xafa6cdac490d3e00cf3fa2c2d0dbc95e2c73d1303b8cef04c29454cfc1c8caae", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0xafa6cdac490d3e00cf3fa2c2d0dbc95e2c73d1303b8cef04c29454cfc1c8caad", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x8089410a592bc89c5715b55272d00c12ce5bd6ac0a038f6dd87a31f7fb4a40c8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0xf5522cd65976a1a68dcc656c82b0b0d1a56f8b1e11d9ea481d405fd8668d8f2b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x00000000000000000000000000000000000000000000000000000000000426ca" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0xf7c8cf0d079e9cdd8b62a76f42ad0e47311829ef66bb5514915e754934cf1639", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x65f51697833dab068b246e9caa62cae988e0ed5925c6988d6e912e3423ba7372", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x380186c6559ea1731a25792b5e5ed7cf56df72c74294e881b9ce12c964dccf7f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x00000000000000000000000000000000000000000000000000000000000426ca" + }, + { + "address": "0xa3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce", + "key": "0x7c2900744fff0a72e0dbd3ec2e48c2663d938d78cbc377c23d53129eab3a5a6b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x06f9914838903162515afa67d5b99ada0f9791cc", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x000000000000000000000000ae1973ea82989b6c7c984800c116cb71c472f50b" + }, + { + "address": "0x06f9914838903162515afa67d5b99ada0f9791cc", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x000000000000000000000000798a48fd2e0db03f5c9e547529da2db212ba9213" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x9427922297240663749f02179d3b494f255c2042c7836781feb05cec37a101f7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xfb3434d6f18286fd63cfb0f88bdb302810cf8fd5a76a6cc17ec5342324961908", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xdf3519d9c1e2cc160ef58c0171503e3f6f80880fd28e1b7e64f14f5351ce7c6c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x892a5494d223f459d51fdf028215ddf34fa68bfc2006f36369e8d94c8341417e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf8045f6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf8045f7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xf820360d89b917aac93db121009f22def1c43d8949b8c1cae61416215998f5a2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x70dc5153cfdc0494f626c7ee86163844d6d8450251e9b617525fb147d3e9f663", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x0bd4e5e9f3729712fdecbb8bd5d00e03a32b9f29584bb296c242031d54647716", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x327f88616c442ca74ec75d07510ce658e7b3abe14c78e5f3655ea3252c6736a6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x6215dba75e6b9607710a6f0b3c18f42d603c10b29b3814e1a7d394cc32482289", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x71c1b4eee49e814d6e2074e5a3e362819e185aef8ede710d8a69caf698385fd6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x90e24e8b7249871f50fb11545b7c1f5f1a95f28f51a015e660be39e2ed40382b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf8045fa", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x2842365c9a14e9d491eacda3b9d098f0e316b96b3d3d78e97f78564fd8bd27f7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf8045f8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf8045f9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x34bb2e491bdd1cf250a3190070b6561811aff539020d3ce7252211790165d4b9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x2975c1588749d4e810a3d327b7c29eba307e1ee909d0d49b9ed6381ae546b36a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xd461fec5d45ae404b8733cfb5d03d85767160100b0c136a7af584a7b0e73ac93", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xdb3f608887f48056f999787a2bc52c9f528ca3aba7cb092ad45b5148291ab426", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xb25ca9540febff97cce8f152c3c314fea4db4ffad36557c6db9dbadc63992c8d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xd79b21b32a67e5b83144c0c8bc4eb3652018c4688a88848ab5882c501dfda397", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000016", + "value": "0x0000000000000000000000000000000000000000000000000000000065db7a05" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xdc162701dd0e57b9ed3027002c205bb6b3a48d25cf0f31cfcb22ff921414c0b3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x0ebbd4577d4848500e9d9d8e8c73968193f27e33cac8224dbcc5c45699a3f1c7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000015", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x26e25fa5f0fc7863b72e9d58620515120472fb8b37a88fa967502f1a3e9c0270", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000014", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xfa40d9b4820bdc1698aa8df49250d1e07397f1bde741d70533325091c91f0b39", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x87de661b26bf555ee81401fbfbfc242ce63af4d2dc1cea2ca3f61c4a153d3254", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000013", + "value": "0x0000000000000000000000000000000000000000000000000000000065184600" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000012", + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000011", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x57df47f395d2a0ea7727b15beea838c9e40acfe93cd7c32a33edae0e81fa941a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xfbc9da0c3f3d98cb95eda83d89fe3fa95cbb600d64f101fe6019563f6e0d4d05", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x4cf3573bdecc50f642fc006fec77e08da16e83358ece6386b62a3ddbca2f485f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x992f2efad4f51e9dccf652ac315f5afee7b0acf1990245559c3a1d84c390c5ec", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x000000000000000000000000000000000000000000000000000000000000001d", + "value": "0x000000000000000000000000dd491a3ca9b5bbb12a0e1d9725448c7bb6bbff04" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000017", + "value": "0x00000000000000000000000000000000000000000000000000000000f48656ff" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x616c44d858a3616446bddef656bba3d0a7034df6911abd35946481936fb5fcd4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x49f52c99461a58332cc622e5e0c7292f10756af17bd877bb7cdd954772e6b075", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x54461724a5d4945fb629cb2b2f0633a6267a70189c0a33eb95e58ede1f074834", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x00000000000000000000000000000000000000000000000000000000000a7e47" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xa8017c1541a889be9737774137d51c0b576b6527ae361fb5d681bf71b7d423fb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x1e2db4536927ef1c7a98ddba0af6912068c859a878016240af7ea7440d2ae25c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x55cfc06fb84605226f7eaeb2c0a4586bbb1d11e88262bb88a0af27f960e00fec", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000d82f30c68369f255b32be4864deef620a3c709fb" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x0000000000000000000000000000000000000000000000000000000000000021", + "value": "0x00000000000000000000000000000000000000000000000000000000000f4240" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0xfa37e5b7a35f92822bc62ad10749d3ace5156e7d0c1dce1556455f9ac3f5fc3f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x47874ff0bef601d180a8a653a912ebbe03739a1a", + "key": "0x258a10c7327d749e461389157502a504d816fa96a17b57ffc31604b1cb4312a1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xb20116ee399f15647bb1eef9a74f6ef3b58bc951", + "key": "0x02748e89d0b6cde681b6e4a1832f048ae1f986d2292bdfe85a91acc2751282a8", + "value": "0x00000000000000000000000000000000000000000000116f208aaf80a0f36e6c" + }, + { + "address": "0xb20116ee399f15647bb1eef9a74f6ef3b58bc951", + "key": "0x6d651710af9f4150ade90cf0955597d172d9772377cb1a670050e0cf0c6a8942", + "value": "0x0000000000000000000000000000000000000000000000000000618f037603a0" + }, + { + "address": "0xca68a9acf7c6e364d23382bcb7ad06c5b29ddc44", + "key": "0x2b9d01a07ead53d9bbefbcdd86bafc81a4bd892c3b101e0aaaa77c9838b5767d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "key": "0xc7520e89a98144c54a732a102d4d5a167d70da42a34d977a182f01a80a577cd2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "key": "0xacdd12fd74fde3f6e42ba4eafa09e188b287c90c0a7c9d06bc18b043c9d0279e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "key": "0xa33ae205cb28f1bbfd8ab722e0e7851a15912aace0b791156cbe7aad1e3a63bf", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b6c43c1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "key": "0x000000000000000000000000000000000000000000000000000000000000000e", + "value": "0x000000000000000000000000000000000000000000000000000000000008d4de" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "key": "0x000000000000000000000000000000000000000000000000000000000000000d", + "value": "0x000000000000000000000000e9b964cec023ec6f0912c3e527581f1808fc11bc" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "key": "0x0771becc3c3d13efe8adc5250e986c7431bdef25a039cc7419d44c3d8724fe41", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "key": "0x000000000000000000000000000000000000000000000000000000000000000b", + "value": "0x000000000000000000000000000000000000000000000000000000000008d4de" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "key": "0x62420758b4cd236fc10954092cf768cdca0532f4a87392503a07bc846555e4f0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x510581cefd1a4c651aa6727957f283c665647485", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x000000000000000000000000000000000000000000000000000000000008d4de" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005876", + "value": "0x0000000000000100c07080c12d13e489a5f1ee40fffb23cd8208ef66015a7501" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005874", + "value": "0x0000000000000100c06cc07062376edf953feb53fffb23e43ce6136601551101" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005834", + "value": "0x0000000000000100c0326544c07d41bf62c7b964fffb2545d502ef6601013501" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000004dc8", + "value": "0x00000000000000034a6c27abf53cddd29b140df4fffb9fd8b2c1ed65e3ed5901" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005832", + "value": "0x0000000000000100c031da17a6cc9c49fc2fc7cffffb25492054c76601006d01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005872", + "value": "0x0000000000000100c06b9ef3dadc7d1e96e52808fffb23eb16f5936601537101" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000004dc6", + "value": "0x00000000000000034a6bea7fef6661d4c5b8e12dfffb9fda25ce5d65e3ed0101" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005830", + "value": "0x0000000000000100c0318c275af90c6ea403a6ecfffb254af897176600fffd01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000004dc4", + "value": "0x00000000000000034a6bbb3b02295f1c43c3e17cfffb9fdb44868565e3ecbd01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000002c72", + "value": "0x0000000000000002a46b4287ba05e599dd25bdeffffd0e19b3eca0658d117f01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x000000000000000000000000000000000000000000000000000000000000561c", + "value": "0x0000000000000100bd84ca324c662de94ae124aefffb3580152fa765fd27f901" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x000000000000000000000000000000000000000000000000000000000000585e", + "value": "0x0000000000000100c0497d78ef5250075eb69ca1fffb24b9e599c76601226501" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x00000000000000000000000000000000000000000000000000000000000058de", + "value": "0x0000000000000100c16b9b720be80427826799a5fffb1ddc02bfe76602c34d01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000002c70", + "value": "0x0000000000000002a46b04ad4ed398eb2b0e798ffffd0e6043f68c658d00c301" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x000000000000000000000000000000000000000000000000000000000000561a", + "value": "0x0000000000000100bd6cbfd37b1b32eea18db6a6fffb3611bec25765fd056d01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x000000000000000000000000000000000000000000000000000000000000585c", + "value": "0x0000000000000100c049751f305712e6b9d67489fffb24ba1832e36601225901" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000020000", + "value": "0x00000000000000000064000a000000002134003b0000ea60000001682ee00b54" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x00000000000000000000000000000000000000000000000000000064da455401" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x00000000000000000000000000000000000000000000000000000000000058e4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x00000000000000000000000000000000000000000000000000000000000058e3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005782", + "value": "0x0000000000000100bf99316c45d71f83da52cb45fffb28e6233c876600250d01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x00000000000000000000000000000000000000000000000000000000000058e2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x00000000000000000000000000000000000000000000000000000000000058e1", + "value": "0x00000000000000000003d2c13b9e027e93cafbc8940000000000001f25ca17a9" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005780", + "value": "0x0000000000000100bf95a06d5fdfaee81a9700e2fffb28fbbf69e766001fed01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x00000000000000000000000000000000000000000000000000000000000058e0", + "value": "0x0000000000000100c16d428a82f6c7f2cec4de75fffb1dd1ff2b476602c5ad01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x000000000000000000000000000000000000000000000000000000000000561e", + "value": "0x0000000000000100bd8601f37bb46d56ab91a83afffb3578b43ee765fd29b901" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005860", + "value": "0x0000000000000100c049c5d811290c779e4d4d73fffb24b82f157f660122cd01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x000000000000000000000000000000000000000000000000000000000000577e", + "value": "0x0000000000000100bf93bee0aff23f384c18a368fffb2907254f7766001d3901" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x000000000000000000000000000000000000000000000000000000000000588a", + "value": "0x0000000000000100c0918919503e5d0084a5de74fffb23055a6e8b660189ed01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005888", + "value": "0x0000000000000100c08f2781da99eeb180ba6f85fffb2313c836536601868101" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x00000000000000000000000000000000000000000000000000000000000042a8", + "value": "0x00000000000000032e8a9f7cce4524a2717bdd7afffbf6e4ae821a65cf480401" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x000000000000000000000000000000000000000000000000000000000000587e", + "value": "0x0000000000000100c081717bf16b3b6d74adef97fffb2366dcab33660172cd01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x000000000000000000000000000000000000000000000000000000000000587c", + "value": "0x0000000000000100c07e129785573995923315c6fffb237b492cdb66016df501" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005356", + "value": "0x0000000000000003cbd80c49a01aea98e162a960fffb715fe0a41e65eef2ea01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005354", + "value": "0x0000000000000003bbcb79b54ee1f3895da00633fffb71be52629e65eedc8201" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005352", + "value": "0x0000000000000003ac5c7becd6a4ec3ea42f4ba6fffb7219267e4e65eec6f601" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005882", + "value": "0x0000000000000100c0890df3591447d910fd25c2fffb2338be5d2366017dbd01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x00000000000000000000000000000000000000000000000000000000000042ac", + "value": "0x00000000000000032e8b043cf2838c8a529be3c5fffbf69c5937d265cf592c01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005881", + "value": "0x00000000000000000003d16a062b8714f58ffbc8900000000000001f25b99bb8" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x00000000000000000000000000000000000000000000000000000000000042aa", + "value": "0x00000000000000032e8afd8a2b5319ea95f1a899fffbf6a12854c665cf580801" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x0000000000000000000000000000000000000000000000000000000000005880", + "value": "0x0000000000000100c085b4a016fd196c4717bc01fffb234d092353660178ed01" + }, + { + "address": "0x9d3c6ba6689c6ac9ab87d43fa4e9551b02c46aec", + "key": "0x000000000000000000000000000000000000000000000000000000000000587f", + "value": "0x00000000000000000003d169cd17d7a9db98fbc8900000000000001f25b99598" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0x37b704892c6a1e17f73116d852d185cd30caf8e41d7be6c34ced7c3c8ee0c60b", + "value": "0x0000000000000000000000000000000000000000000000201b0e4916f38e077b" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0xfa4d604a50e26173781cd3082776182b055ecc8452edce162c4100193032b2fc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0xfa4d604a50e26173781cd3082776182b055ecc8452edce162c4100193032b2fb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0xfa4d604a50e26173781cd3082776182b055ecc8452edce162c4100193032b2fe", + "value": "0x00000000000000000000000000000000000000000000000405d53585d85ce2b6" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0xfa4d604a50e26173781cd3082776182b055ecc8452edce162c4100193032b2fd", + "value": "0x00000000000000000000000000000000000000000000001488a1213eb07cc5b6" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0xfa4d604a50e26173781cd3082776182b055ecc8452edce162c4100193032b301", + "value": "0x000000000000000000000000000000000000000000000000000000006602c5c5" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0x37b704892c6a1e17f73116d852d185cd30caf8e41d7be6c34ced7c3c8ee0c609", + "value": "0x0000000000000000000000000000000000000000000000000002061a5d0d2fd8" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0xfa4d604a50e26173781cd3082776182b055ecc8452edce162c4100193032b2ff", + "value": "0x0000000000000000000000000000000000000000000000201b0e4916f38e077b" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0xfa4d604a50e26173781cd3082776182b055ecc8452edce162c4100193032b300", + "value": "0x00000000000000000000000000000000000000000000017e27882ea3d662b6e7" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0x37b704892c6a1e17f73116d852d185cd30caf8e41d7be6c34ced7c3c8ee0c608", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x00000000000000000000000014c5a2b562754ed412708a103fb9cb65b1b16494" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x000000000000000000000000009a0b7c38b542208936f1179151cd08e2943833" + }, + { + "address": "0x5d06067f86946620c326713b846ddc8b97470957", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x22e2f236065b780fa33ec8c4e58b99ebc8b55c57", + "key": "0x0000000000000000000000000000000000000000000000000000000000000011", + "value": "0x000000000000000000000000000000000000000007765cbd724fd3e95a917cd2" + }, + { + "address": "0x22e2f236065b780fa33ec8c4e58b99ebc8b55c57", + "key": "0x0000000000000000000000000000000000000000000000000000000000000010", + "value": "0x000000000000000000000000000000000000000000000000000000006603d4e5" + }, + { + "address": "0x22e2f236065b780fa33ec8c4e58b99ebc8b55c57", + "key": "0x000000000000000000000000000000000000000000000000000000000000000d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000045" + }, + { + "address": "0x22e2f236065b780fa33ec8c4e58b99ebc8b55c57", + "key": "0xfb779924df5e688490af59cd797c3f5c66ad14d2c8280f7bb7d38c21cc62daef", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x22e2f236065b780fa33ec8c4e58b99ebc8b55c57", + "key": "0x3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31", + "value": "0x0000000000000000000000000000000000000000000000000000000000000010" + }, + { + "address": "0xcf68a2721394dcf5dcf66f6265c1819720f24528", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x0000000000000000000000000f7b8403bab32b5a6476cab039e123a59701f508" + }, + { + "address": "0xcf68a2721394dcf5dcf66f6265c1819720f24528", + "key": "0x4cc38b685f21f166ccdfd38e967d48ad05fffcac1b8d8c820389c1fb01d76b77", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xcf68a2721394dcf5dcf66f6265c1819720f24528", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x000000000000000000000000eb146b1342d92ae66772278eb7ff89c30aab1280" + }, + { + "address": "0xe76b4515cce537fdc439dbec1fae301869c4a639", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x000000000000000000000000000020196630000000000000020d5fd44f3f0b91" + }, + { + "address": "0xe76b4515cce537fdc439dbec1fae301869c4a639", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93" + }, + { + "address": "0xe76b4515cce537fdc439dbec1fae301869c4a639", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f" + }, + { + "address": "0xe76b4515cce537fdc439dbec1fae301869c4a639", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000006292e8f7647b3b9ddf5795b1fb77d0187e30e0f9010000" + }, + { + "address": "0xe76b4515cce537fdc439dbec1fae301869c4a639", + "key": "0x0000000000000000000000000000000000000000000000000000000000000010", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xe76b4515cce537fdc439dbec1fae301869c4a639", + "key": "0x000000000000000000000000000000000000000000000000000000000000000f", + "value": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000" + }, + { + "address": "0xe76b4515cce537fdc439dbec1fae301869c4a639", + "key": "0x000000000000000000000000000000000000000000000000000000000000000e", + "value": "0x000000000000000000000000628e5081ba93b1c4f58e54e7175088b1ace58852" + }, + { + "address": "0xe76b4515cce537fdc439dbec1fae301869c4a639", + "key": "0x000000000000000000000000000000000000000000000000000000000000000d", + "value": "0x000000000000000000000000000000000000000000000000000886c98b760000" + }, + { + "address": "0xb86b3e16b6b960fd822849fd4b4861d73805879b", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x0000000000000000000000003de3893aa4cdea029e84e75223a152fd08315138" + }, + { + "address": "0xb86b3e16b6b960fd822849fd4b4861d73805879b", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000f851513a732996f22542226341748f3c9978438f" + }, + { + "address": "0xb86b3e16b6b960fd822849fd4b4861d73805879b", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xb86b3e16b6b960fd822849fd4b4861d73805879b", + "key": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6", + "value": "0x000000000000000000000000e4756068c0ab70bc3c3a3b0c81be07a18bb9a502" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x000000000000000000000000000000000000000000000013fa6494751263af27" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x000000000000000000000000c690549e0215192d1ffb527bb3ca4d4ba638cad2" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000009a0b7c38b542208936f1179151cd08e2943833" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x97e0d873638e344c9034dd88cee45da2e9bd137f83da9f890c9a48bf1298f40a", + "value": "0x0000000000000000000000000000000000000000000000000002061a5d0d2fd8" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x5ee8e4049df3bf0ea58132260d136c78b8117d3f3560bbc56a9d2061ba4f1425", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x000000000000000000000000000000000000000000000000000000000000000d", + "value": "0x0000000000000000000000000000000000000000000000000e7750c8a6f7b3c1" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x5ee8e4049df3bf0ea58132260d136c78b8117d3f3560bbc56a9d2061ba4f1426", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x000000000000000000000000000000000000000000000000000000006602c5c5" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x000000000000000000000000000000000000000000000000000000000000000b", + "value": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x000000000000000000000000000000000000000000000003f7a34f9b2a0d18fe" + }, + { + "address": "0xc7d8489dae3d2ebef075b1db2257e2c231c9d231", + "key": "0x0000000000000000000000000000000000000000000000000000000000000007", + "value": "0x000000000000000000000000000000000000000000000000007ae67db2e822fa" + }, + { + "address": "0xf5b709c209c3ba5e837d517bb2719e3d2da76629", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x594f4f4c00000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xf5b709c209c3ba5e837d517bb2719e3d2da76629", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000" + }, + { + "address": "0xf5b709c209c3ba5e837d517bb2719e3d2da76629", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000000f2af301d159b5894533ecb30cda92aa57eb7d9e" + }, + { + "address": "0xf5b709c209c3ba5e837d517bb2719e3d2da76629", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x00000000000000000000007b1b92f4d2324ca5f1a9679f76032c719744809e00" + }, + { + "address": "0xf5b709c209c3ba5e837d517bb2719e3d2da76629", + "key": "0x992cdc8dd9f24c9f78d353856ce9b7019f66e341045e09699e0191b48570500d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xd1a3abf42f9e66be86cfdea8c5c2c74f041c5e14", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000564477025731ee7197eecf2c4a0d0106cc3e4572" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0x0758751a2c93468e8967ec277c41f828c2dd0060b4cfccd16cffe677d2234eae", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0x161e5f4d9a6d05be25d3ee694bcfe65a3f16258aa847af4f5cbc8c508437d8de", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0xe8a2d4bfd13be6c3c53adedc3467caa2ed209e6ba63fa06fec3f4f56ccd39fb2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0x4c42f6ca0d0abd952b27987d6e38b4882b973a3b09dd8e4627053c6a36e3adfe", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0xed3bb71014c56df8670c58d732d5552d394c83cbd1e2cf68d6a4daae7a2d2957", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0x3f50b680072179f4d7bcc6ac14ff563a9df54387e96f1012660143ccf86a5282", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0xd1d4b95655c4be3715bf73ec813e1c38ab1374da8741dff9bc25a46e69b31632", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0xbdb2c2bf64fb110337f23de75dbc6b99f9cf7836fce9335de0b13abbf4dcd86c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0x8303f9c769a47b39244963b1e87147c5371029a49c785289ec888c8bc37e1b71", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0xa8ff8ebbfe8e95bddf6b81d97ccabd8f8201233c59e7f7a055681ee8ef97955f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0x000000000000000000000000000000000000000000000000000000000000000d", + "value": "0x000000000000000000000000000000000000000000000000000000000005bd5a" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0x275ec5d13c4de33d91fa6caa136f942a501ceb1fd487fc4f249c0013c5866080", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0xec542599e31f26bc9ca007cf12348c6fd1d25244ac30e8b9c978d9641011e073", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x00000000000000000000000000000000000000000000000000000005bd5b0002" + }, + { + "address": "0xe3b5500039f401e48627e8025b37d4871cf34f36", + "key": "0x91c4e86187211901fd6acf86214888adb9daf0185ae23fcd238d6b6fa757adee", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xa1737a96531b67a85213df67af4526559df86a7f", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + { + "address": "0xa1737a96531b67a85213df67af4526559df86a7f", + "key": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e565", + "value": "0x0000000000005000000000000000240000000000000010000000000000000700" + }, + { + "address": "0xa1737a96531b67a85213df67af4526559df86a7f", + "key": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563", + "value": "0x0000000000000010000000000000000400000000000000000000000000000000" + }, + { + "address": "0xa1737a96531b67a85213df67af4526559df86a7f", + "key": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564", + "value": "0x0000000000000300000000000000014000000000000000800000000000000030" + }, + { + "address": "0x4af15ec2a0bd43db75dd04e62faa3b8ef36b00d5", + "key": "0xafe9da374efa688176e01c9dd373211da1fe4761366d74ad4326a3b8ee48bcfb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x4af15ec2a0bd43db75dd04e62faa3b8ef36b00d5", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000c0583e2f5930ede5fab9d57bac4169878730b010" + }, + { + "address": "0x4af15ec2a0bd43db75dd04e62faa3b8ef36b00d5", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x000000000000000000000000a11ba93afbd6d18e26fefdb2c6311da6c9b370d6" + }, + { + "address": "0x4af15ec2a0bd43db75dd04e62faa3b8ef36b00d5", + "key": "0x4b001b3fe0efb9f94a1ddece8bf3ce4a6e160092df3ebcfcfcebf65bb904308a", + "value": "0x0000000000000000000000000000000000000000000000075a16f580454cde5d" + }, + { + "address": "0x4af15ec2a0bd43db75dd04e62faa3b8ef36b00d5", + "key": "0x22013dedf2928f029dbc7ef731d661a4fc0286c1cdbbefb981757261e719a275", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x4af15ec2a0bd43db75dd04e62faa3b8ef36b00d5", + "key": "0xfa56ca41a7d43a1364d521a2385ab52dafd002297e97c015a48bd6b8bacabe50", + "value": "0x0000000000000000000000000000000000000000000019d03dd7ca190304c498" + }, + { + "address": "0x63ce21bd9af8cc603322cb025f26db567de8102b", + "key": "0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x63ce21bd9af8cc603322cb025f26db567de8102b", + "key": "0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x63ce21bd9af8cc603322cb025f26db567de8102b", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x0000000000000000000000009a74388bd74c3ee252bb1af32b7d3fba1ea41ada" + }, + { + "address": "0x63ce21bd9af8cc603322cb025f26db567de8102b", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x00000000000000000000000000000000000000000000000000005af3107a4000" + }, + { + "address": "0xe4756068c0ab70bc3c3a3b0c81be07a18bb9a502", + "key": "0xc744d10c8079514304c22d2dcbd0910d95ba6fe90ea797621b155129f4232914", + "value": "0x0000000000000000000000000000000000000000000000000000000000000064" + }, + { + "address": "0xe4756068c0ab70bc3c3a3b0c81be07a18bb9a502", + "key": "0xfe46fde7ed3b063e7217c33997f3de14871baf842e175489d6655529680503b9", + "value": "0x0000000000000000000000000000000000000000000000000002d79883d20000" + }, + { + "address": "0xf669c3c03d9fdf4339e19214a749e52616300e89", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000883100388d61ef6daa147de45deb04934fbcd40d" + }, + { + "address": "0xf669c3c03d9fdf4339e19214a749e52616300e89", + "key": "0x0000000000000000000000000000000000000000000000000000000000000012", + "value": "0x000000000000000000000000a219439258ca9da29e9cc4ce5596924745e12b93" + }, + { + "address": "0xf669c3c03d9fdf4339e19214a749e52616300e89", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x6d6555534454000000000000000000000000000000000000000000000000000c" + }, + { + "address": "0xf669c3c03d9fdf4339e19214a749e52616300e89", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x0000000000000000000000002f9386f0c8ebeed27873a2a64c7f243af9bc733c" + }, + { + "address": "0xf669c3c03d9fdf4339e19214a749e52616300e89", + "key": "0x674a8b4ffc9c47c18280699e61d95d725ffc79db3b96d875ce41bfe77c51df62", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xf669c3c03d9fdf4339e19214a749e52616300e89", + "key": "0x000000000000000000000000000000000000000000000000000000000000000d", + "value": "0x000000000000000000000000000000000000000000000000003b322e203cc793" + }, + { + "address": "0xf669c3c03d9fdf4339e19214a749e52616300e89", + "key": "0xf440c79a3f1a4762f82a1d910e74dba5ddfbae0b12de2e25d8d47abd854fcd7c", + "value": "0x00000000000000000000000000000000000000000000000000000022eb64c6ff" + }, + { + "address": "0xf669c3c03d9fdf4339e19214a749e52616300e89", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x0000000000000000000000000000000000000000000000000000000085ffaf19" + }, + { + "address": "0xf669c3c03d9fdf4339e19214a749e52616300e89", + "key": "0x000000000000000000000000000000000000000000000000000000000000000b", + "value": "0x000000000000000000000000000000000000000000000000000002dd1b9b3ad9" + }, + { + "address": "0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x00000000000000000000000045f1a95a4d3f3836523f5c83673c797f4d4d263b" + }, + { + "address": "0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x000000000000000000000000af54be5b6eec24d6bfacf1cce4eaf680a8239398" + }, + { + "address": "0xc77392396be1fb5143f1f66a3ae67dd03fbaba27", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "key": "0x0000000000000000000000000000000000000000000000000000000000000066", + "value": "0x0000000000000000000000004960eda41a25c6c0fedbe8798940cb4585e36311" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "key": "0x0000000000000000000000000000000000000000000000000000000000000065", + "value": "0x000000000000000000000000ee7101f8e479539410988b6e5e2aad0d32fd2fe0" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "key": "0x44712d5a7d10e66fe5afd40076f7f20e20f6a3743cdb275be74cf12d89701f34", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "key": "0x68c246b50159f77ff7e766685b04bf667241d2a90c0d7bc6acd4b60ec8701689", + "value": "0x436974792053746172746572202842617369632035290000000000000000002c" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "key": "0x68c246b50159f77ff7e766685b04bf667241d2a90c0d7bc6acd4b60ec870168b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "key": "0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b", + "value": "0x00000000000000000000000043f970fb4256763b3c03bed26df01ebda6f488a5" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "key": "0x68c246b50159f77ff7e766685b04bf667241d2a90c0d7bc6acd4b60ec870168a", + "value": "0x000000000000000000000b2f00020094f6c90094a8aa6401661003e065d4b060" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "key": "0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3", + "value": "0x00000000000000000000000059fe0a0940e93ad43eabeeaa722bd06c1fb70eb5" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "key": "0x0000000000000000000000000000000000000000000000000000000000000069", + "value": "0x00000000000000000000000000000000000000000000000000000000000000c8" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "key": "0x68c246b50159f77ff7e766685b04bf667241d2a90c0d7bc6acd4b60ec870168c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x8a78dc698472a89e49efccbd9fe4aebfeee3bf75", + "key": "0x0000000000000000000000000000000000000000000000000000000000000067", + "value": "0x00000000000000000000000021de102994bc986e02a795e0f39e5275817e7ef3" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x0000000000000000000000000000000000000000000000000000000000000012", + "value": "0x000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x674a8b4ffc9c47c18280699e61d95d725ffc79db3b96d875ce41bfe77c51df63", + "value": "0x0000000000000000000000000000000000000000000000000e794391701566dd" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x674a8b4ffc9c47c18280699e61d95d725ffc79db3b96d875ce41bfe77c51df62", + "value": "0x00000000000000000000000000000000000000000000000000000000011428f7" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0xf440c79a3f1a4762f82a1d910e74dba5ddfbae0b12de2e25d8d47abd854fcd7c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x00000000000000000000000023b9cb6f49100c54fa2a13ba0f85832b38780cb7" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x0000000000000000000000001b4d3b0421ddc1eb216d230bc01527422fb93103" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x0000000000000000000000008ce9892329e04a86ea25056ba77bb9aa60817045" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x6d6555534443000000000000000000000000000000000000000000000000000c" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000000000000000000000000000000000000000000000010001" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x0000000000000000000000002f9386f0c8ebeed27873a2a64c7f243af9bc733c" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x000000000000000000000000000000000000000000000000000000000000000d", + "value": "0x00000000000000000000000000000000000000000000000000838d2e0e5e3b9f" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x00000000000000000000000000000000000000000000000000000001175913cc" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x000000000000000000000000000000000000000000000000000000000000000b", + "value": "0x00000000000000000000000000000000000000000000000000000656a4e4b537" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x000000000000000000000000000000000000000000000000000000000000000a", + "value": "0x0000000000000000000000000000000000000000000000000e818b653d8bfac1" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x000000000000000000000000000000000000000000000000000000006602c5bd" + }, + { + "address": "0x333d8b480bdb25ea7be4dd87eeb359988ce1b30d", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x00000000000000000000000000000000000000000000000001cdda4faccd0000" + }, + { + "address": "0x1d0188c4b276a09366d05d6be06af61a73bc7535", + "key": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff2ceea575", + "value": "0x0000000000000000000000002e98ef87f7f0d31987a0d94051b8bc5d001152e8" + }, + { + "address": "0x1d0188c4b276a09366d05d6be06af61a73bc7535", + "key": "0xf4496a311d836743b6e511513c820949d31815db47420ed055f1d638eb3c0eae", + "value": "0x000000000000000000000000000000000000000000000000003d170a188f0238" + }, + { + "address": "0x1d0188c4b276a09366d05d6be06af61a73bc7535", + "key": "0x079bb613b46d8aca7a0fbe9d391ceb5913593f8825aa19f06db6024aa331ac75", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x1d0188c4b276a09366d05d6be06af61a73bc7535", + "key": "0x9fb6725567992a5ff17401d6ecbb78faa059695cb12af4db2de66334546096f6", + "value": "0x000000000000000000000000000000000000000000000002c00ca7a4ce7c79df" + }, + { + "address": "0x1d0188c4b276a09366d05d6be06af61a73bc7535", + "key": "0x1d39dba6c7f4dc69c26d0130edcaebc004ea40a7318ce59f92331415264e8881", + "value": "0x00000000000000000b0ebee95f2584e40000fffffffffffff4f14116a0da7b1b" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "key": "0x2aae50ccaae4890fda01d1063e9b7cf07867d2cab149d64a2b24ee8fd6af0c6b", + "value": "0x000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "key": "0x2aae50ccaae4890fda01d1063e9b7cf07867d2cab149d64a2b24ee8fd6af0c6a", + "value": "0x000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "key": "0x2aae50ccaae4890fda01d1063e9b7cf07867d2cab149d64a2b24ee8fd6af0c69", + "value": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x0000000000000000000000007928e4e69697b1827b450f806ebdc746b932b052" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "key": "0x2aae50ccaae4890fda01d1063e9b7cf07867d2cab149d64a2b24ee8fd6af0c6f", + "value": "0x0000000000000000000000000000000000000000000000000000000000989680" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "key": "0x2aae50ccaae4890fda01d1063e9b7cf07867d2cab149d64a2b24ee8fd6af0c6e", + "value": "0x0000000000000000000000000000000000000000000000000000000002faf080" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "key": "0x2aae50ccaae4890fda01d1063e9b7cf07867d2cab149d64a2b24ee8fd6af0c6d", + "value": "0x00000000000000000000001b5e7e08ca3a8f6987819baecbe228000000000000" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "key": "0x2aae50ccaae4890fda01d1063e9b7cf07867d2cab149d64a2b24ee8fd6af0c6c", + "value": "0x0000000000000000000000014f4eb3e56ab27c65b53dd0f4558ea0078347dba6" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "key": "0x2aae50ccaae4890fda01d1063e9b7cf07867d2cab149d64a2b24ee8fd6af0c72", + "value": "0x00000000000000000000000000000000000000000000000000000000000186a0" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "key": "0x2aae50ccaae4890fda01d1063e9b7cf07867d2cab149d64a2b24ee8fd6af0c71", + "value": "0x000000000000000000000000000000000000000000000000000000000000c350" + }, + { + "address": "0x03f61a185efeeefdd3ba032afa8a0259337ced64", + "key": "0x2aae50ccaae4890fda01d1063e9b7cf07867d2cab149d64a2b24ee8fd6af0c70", + "value": "0x0000000000000000000000000000000000000000000000000000000000030d40" + }, + { + "address": "0x612af58f8016c06e603d803829ccfd843f787618", + "key": "0x10d7cfb3785e628317d558617c89d262b5c63dc9f7ef217b06aae4cf13d934c5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x612af58f8016c06e603d803829ccfd843f787618", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x00000000000000000000000043264dccf2bbff0f21d711e46505c4c30879ead2" + }, + { + "address": "0x612af58f8016c06e603d803829ccfd843f787618", + "key": "0x99b2157ae5700865650a96c2cc303d059192a1e768b69c3820e269ac4d19ab00", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x612af58f8016c06e603d803829ccfd843f787618", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0000000000000000000000de2d75881c4915d182d2a2c06440e496133df23300" + }, + { + "address": "0x612af58f8016c06e603d803829ccfd843f787618", + "key": "0xcd13634de6309029e8e275d889d5445c62a963ee374f2e9904a4a8087750537c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x612af58f8016c06e603d803829ccfd843f787618", + "key": "0x67462dd1448d1f373efe15ec18253c28f4f3a5aefb51309291beb9d5735ffe07", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x612af58f8016c06e603d803829ccfd843f787618", + "key": "0xc923ac2ba44f7ed88f4ef615dc7232991163421a17959165a239b3a50bf3989f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x612af58f8016c06e603d803829ccfd843f787618", + "key": "0xd735c97ee970ead67afd7242b385d1a668d917e2f9a867f49521faf78250d5b9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x612af58f8016c06e603d803829ccfd843f787618", + "key": "0x1c06f8a5bbbc770708812bb3087999e702443bf8dc74dbb7ca538ca7ef7365bf", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2", + "key": "0x0000000000000000000000000000000000000000000000000000000000000006", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2", + "key": "0xb479dde044401ffd0cfa7a6d1873831a7e1f3c07f4d32ac96b6c8e08d87813ba", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2", + "key": "0xa7989de4547ec95d0f87328867d451b6f61f395af1dfe06394196b0cb692629b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2", + "key": "0x63232bcc7869f82beee9ca870785145d4bed03326a6cca4571b1b64e4d635254", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2", + "key": "0x6865bc365d261cb9f1e58c0833bf98d787ef937fa7e9367cd1192e4a12028be8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2", + "key": "0x3db242971c8a401e2880d282dc1209660811f2f94bb602322b9b638e0efeb86b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x00000000000000000000000000000000000000000000000000000000000a16b7" + }, + { + "address": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2", + "key": "0x222c4b2ac0e8d8aa331a8219a989050f25155c983ba109f3fdd36d5df94f9133", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc0b4ab5cb0fdd6f5dfddb2f7c10c4c6013f97bf2", + "key": "0x0000000000000000000000000000000000000000000000000000000000000007", + "value": "0x0000000000000000000000019aa971b87cd24bac37b89ce1bafa7b15439f91b8" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0x963b1ed91f5a0f530f8db456c221003fe2ada944ba2fa4b113b922c5b8f2aed8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0x0000000000000000000000000000000000000000000000000000000000000035", + "value": "0x000000000000000000000000000000000000000000000000000000002f1fdf79" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0xabe2d164de37811570a08ce7983568098d881759339e6c428da4c740b1a5bb5d", + "value": "0x000000000000000000000000000000000000000000000000000000000134d7c5" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0x75ff943f0fb0ceb54d2541d8e108082b1014632946e88fe65ecc642079288727", + "value": "0x000000000000000000000000000000000000000000000000000000000134d7c5" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0xc80fc7566a351db8f310a97a803e637633e5ee1790d35ab8670106ee1fa743b2", + "value": "0x000000000000000000000000000000000000000000000000000000000134d7c5" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x00000000000000000000000087f21c771eac9c547eb22312997153d3a1fc40f6" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0x8d12a7ae03f490d2e842d39755941aab1622c58df731bc57bb85696d467a705d", + "value": "0x0000000000000000000000000000000000000000000000000000000000007194" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0xa5839b3c7431a739bf1da7e67ceaeff08d1dc3d45fc8baf50f0f38f5cb8a205a", + "value": "0x00000000000000000000000000000000000000000000000000000000000078ee" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x00000000000000000000000088b08b6c93f4f6d21b763ac25104bd59ad410915" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0x25ec98505ea37a118fbf303a0ddfff9e418e450cee18b7c67760fbedd94bb169", + "value": "0x000000000000000000000000000000000000000000000000000000000134d7c5" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0xda3085c14855293527d7294e4090442e6d96edfbe534ca138cd65e1f7cb6a115", + "value": "0x0000000000000000000000000000000000000000000000000000000000003d58" + }, + { + "address": "0xc5cb997016c9a3ac91cbe306e59b048a812c056f", + "key": "0xfdf13893787a2e551640012ae92083dd7a7c94f655a4847e3f6474c1c2714bc5", + "value": "0x00000000000000000000000000000000000000000000000000000000000010e5" + }, + { + "address": "0x5efa5e67a91493cf3e9250b80ccc80e0eac7a1e0", + "key": "0x01cb5a1affe051009d7349cc50f53d1973a692d578176dcf7e020ffa273460f3", + "value": "0x000000000000000000000000894f8b4192e376b13715ccab686b73eda4b30759" + }, + { + "address": "0x5efa5e67a91493cf3e9250b80ccc80e0eac7a1e0", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x00000000000000000000000067ff38bec32613b9b7b282c26214920d8a00c3ab" + }, + { + "address": "0x5efa5e67a91493cf3e9250b80ccc80e0eac7a1e0", + "key": "0x01cb5a1affe051009d7349cc50f53d1973a692d578176dcf7e020ffa273460f5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x5efa5e67a91493cf3e9250b80ccc80e0eac7a1e0", + "key": "0x01cb5a1affe051009d7349cc50f53d1973a692d578176dcf7e020ffa273460f4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0x5efa5e67a91493cf3e9250b80ccc80e0eac7a1e0", + "key": "0x01cb5a1affe051009d7349cc50f53d1973a692d578176dcf7e020ffa273460f7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5efa5e67a91493cf3e9250b80ccc80e0eac7a1e0", + "key": "0x01cb5a1affe051009d7349cc50f53d1973a692d578176dcf7e020ffa273460f6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x5efa5e67a91493cf3e9250b80ccc80e0eac7a1e0", + "key": "0x01cb5a1affe051009d7349cc50f53d1973a692d578176dcf7e020ffa273460f9", + "value": "0x0000000000000000000000000000000000000000000000000000000358ea00e3" + }, + { + "address": "0x5efa5e67a91493cf3e9250b80ccc80e0eac7a1e0", + "key": "0x01cb5a1affe051009d7349cc50f53d1973a692d578176dcf7e020ffa273460f8", + "value": "0x000000000000000000000000000000000000b353598404fe885e1e5a25c00000" + }, + { + "address": "0x45e5f26451cdb01b0fa1f8582e0aad9a6f27c218", + "key": "0xce95c29351a748face798153026b8f4702db6577ef91578fd703e460f15f64da", + "value": "0x000000000000000000000000564e52bbdf3adf10272f3f33b00d65b2ee48afff" + }, + { + "address": "0x45e5f26451cdb01b0fa1f8582e0aad9a6f27c218", + "key": "0x91a7c876925dedcb0820a54805c3c4ab8c86aee47b88464d8ecbefa0e243d28a", + "value": "0x000000000000000000000000564e52bbdf3adf10272f3f33b00d65b2ee48afff" + }, + { + "address": "0xc577018b3518cd7763d143d7699b280d6e50fdb6", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "address": "0xc577018b3518cd7763d143d7699b280d6e50fdb6", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x0000000000000000000000003bbee2922f47d276a70fbe2d38dcc2a920ed1d05" + }, + { + "address": "0xc577018b3518cd7763d143d7699b280d6e50fdb6", + "key": "0x384a4ef0edab813c6efa34e39e1c8f1e193ae5f98d397e4872078836c2b0ae90", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc577018b3518cd7763d143d7699b280d6e50fdb6", + "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x000000000000000000000000784ad8676ade4dee288fd3f36e2f2ebdfdf70765" + }, + { + "address": "0xc577018b3518cd7763d143d7699b280d6e50fdb6", + "key": "0x8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c", + "value": "0x0000000000000000000000009b0bbcaf24df0cef9ae59ea385aad375b77325ef" + }, + { + "address": "0xc577018b3518cd7763d143d7699b280d6e50fdb6", + "key": "0x5bba7aa98f459870652f1841d6432954c51c2e8453262a0b844d6431d7af0f80", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc577018b3518cd7763d143d7699b280d6e50fdb6", + "key": "0x2dd5a47de1063212ef27f7376ad9ed6b2e4effbfddb8c68a805611415de8c47b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc577018b3518cd7763d143d7699b280d6e50fdb6", + "key": "0x46396191c6599e21b8c913bb629693a139d84bf81a47cde8522f88c064b1b26f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc577018b3518cd7763d143d7699b280d6e50fdb6", + "key": "0x7dde72a8fd7687056caab5c5c2535809220dceda747ed05e05e7c0d734493389", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "key": "0x42bf2d1ccdf234f96bfe1e810e94e6d33cd5452b69bb455b2d9e1c21a5380176", + "value": "0x000000000000000000000000000000000000000000000000000000460269598a" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "key": "0x0000000000000000000000000000000000000000000000000000000000000005", + "value": "0x000000000000000000000000818484227abf04550c6c242b6119b7c94d2e72b3" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "key": "0x42bf2d1ccdf234f96bfe1e810e94e6d33cd5452b69bb455b2d9e1c21a5380175", + "value": "0x00000000000000000000000000000000000da68e25f3de48600f84d914000000" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "key": "0x42bf2d1ccdf234f96bfe1e810e94e6d33cd5452b69bb455b2d9e1c21a5380178", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "key": "0x42bf2d1ccdf234f96bfe1e810e94e6d33cd5452b69bb455b2d9e1c21a5380177", + "value": "0x000000000000000000000000000000000000000000000000000000b728c739d3" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "key": "0x42bf2d1ccdf234f96bfe1e810e94e6d33cd5452b69bb455b2d9e1c21a5380172", + "value": "0x0000000000000000000000013aab2285ddcddad8edf438c1bab47e1a9d05a9b4" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "key": "0x42bf2d1ccdf234f96bfe1e810e94e6d33cd5452b69bb455b2d9e1c21a5380171", + "value": "0x000000000000000000000000176211869ca2b568f2a7d4ee941e073a821ee1ff" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "key": "0x42bf2d1ccdf234f96bfe1e810e94e6d33cd5452b69bb455b2d9e1c21a5380174", + "value": "0x00000000000000000000000000000000000004fe47fd576c20d5e12ecebb4000" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "key": "0x42bf2d1ccdf234f96bfe1e810e94e6d33cd5452b69bb455b2d9e1c21a5380173", + "value": "0x0000000000000000000000000000000000003248ec2c61b10f9764034b140000" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "key": "0x42bf2d1ccdf234f96bfe1e810e94e6d33cd5452b69bb455b2d9e1c21a5380170", + "value": "0x000000000000000000000000712c1703f4670081dd04544048f14d5bafc4a88d" + }, + { + "address": "0xc5f444d25d5013c395f70398350d2969ef0f6aa0", + "key": "0x42bf2d1ccdf234f96bfe1e810e94e6d33cd5452b69bb455b2d9e1c21a5380179", + "value": "0x000000000000000000000000000000000000000000000000000000006602c5d1" + }, + { + "address": "0x0f2af301d159b5894533ecb30cda92aa57eb7d9e", + "key": "0x38f2321f3e1d51e2e78f86f11f415ec2b86fc639c0c17f87c7aa50fbfb0cf89a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0f2af301d159b5894533ecb30cda92aa57eb7d9e", + "key": "0x2a08e110876c05465f9a74f13b7eab6bed61bd56158d0f00f58cbd1776413e64", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0f2af301d159b5894533ecb30cda92aa57eb7d9e", + "key": "0x2065809b144880d97f29b18e295c2992f01e238d042ed4172865a229813ff2c9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0f2af301d159b5894533ecb30cda92aa57eb7d9e", + "key": "0x4818f725e349effd48070899be29148eb0334e7e182972e00c4df9d1e524e3c3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0f2af301d159b5894533ecb30cda92aa57eb7d9e", + "key": "0xd8a4cd2518a533aa9ec9d3ef097c2b1f8e5a22baffda7430b123f1e69f11234a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0f2af301d159b5894533ecb30cda92aa57eb7d9e", + "key": "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b640797", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x0f2af301d159b5894533ecb30cda92aa57eb7d9e", + "key": "0x000000000000000000000000000000000000000000000000000000000000000c", + "value": "0x000000000000000000000000f5b709c209c3ba5e837d517bb2719e3d2da76629" + }, + { + "address": "0x0f2af301d159b5894533ecb30cda92aa57eb7d9e", + "key": "0x000000000000000000000000000000000000000000000000000000000000000a", + "value": "0x00000000000000000000000000000000000000000000000000000000000098b4" + }, + { + "address": "0x0f2af301d159b5894533ecb30cda92aa57eb7d9e", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x00000000000000000000000000000000000000000000000000000000000098b4" + }, + { + "address": "0x704c442bfef3b6b31559085fc67083ca64e30b5c", + "key": "0xa25a49481d75e69e4962ae09926f4d34f733fd60e6d3abe86eec7bb377335f11", + "value": "0x0000000000000000001000000000000001000000000000001000000000000000" + }, + { + "address": "0x704c442bfef3b6b31559085fc67083ca64e30b5c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000004", + "value": "0x000000000000003c000000000000000000000000000000000000000000000000" + }, + { + "address": "0x704c442bfef3b6b31559085fc67083ca64e30b5c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000003", + "value": "0x000000000000000000000eae3c1f60040000000000000000016fe10a2ceb0de6" + }, + { + "address": "0x704c442bfef3b6b31559085fc67083ca64e30b5c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000002", + "value": "0x01000000002c700064fbc8990000000000000000000010c6607b688b60c3364b" + }, + { + "address": "0x704c442bfef3b6b31559085fc67083ca64e30b5c", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0000000000000000000000000000000000000001fe5176d1a4936911c638cef6" + }, + { + "address": "0x718a13230b18d6b7d17baf987ea499a758355557", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x000000000000000000000000f3eee655eab9896bf7537c2d1078669c4fd13b15" + }, + { + "address": "0x718a13230b18d6b7d17baf987ea499a758355557", + "key": "0x49da4db7b430f5e4aac7bba01c84376f18c7c940064f3a7441e8e74a2e86f44c", + "value": "0x000000000000000000000000000000000000b31248f0cae79aef6b6c00000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xdb9ff4cdf74d5c80f11b2970eff2d285d581537f4855709ffece581c7109d502", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x0a64a9c4b0626f462e2520df57f0dd7f026ad9713d5202afcf80360e6d54340e", + "value": "0x0000000000000000000000000000000000000000000000000000000000018077" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x577c348433656daf179f715c9ca04bfc165c2c81f40f1117b63ef30ac57bdb55", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xc1932b07ff8c5ae6e65f25b39002e6a7441501c4b6101522c572bfaae0e7a3f8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xe42edd00220334258889a055c7908c42e66e6b3bf5f030db2dcb7ac42675051b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xfc1f1a7dad2151d7581fc3ce680d54bee09b830d499c7976d6a5ba80c8b815ff", + "value": "0x00000000000000000000000000000000000000000000000000000000003bb5ee" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x9f30942641c0c81b845c81a0edc5c994dfb32a162c985c22d253d79e760f094b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x681b8fe8cd145c93f22440d401f0bfe3fdec0488a516c3be1f24a5f0bba8729c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x217b4fda21e2ae3279272a2e52d286a421e3ee89dcf26ba2f422eeb86fa1b64c", + "value": "0x000000000000000000000000000000000000000000000000000000a5aef6bb6a" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x20c6a407c34c81a6c2e216f7efeb3b44b07f996234b7825e681d4770964db8e6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x4175c49d56cad0bc6d69ef289864fd048386a14da4ac19736c9e074139b2e912", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x47f877770cd86c7be9474d046f79b4b1f987e498b29702de0428672af2ffd39f", + "value": "0x0000000000000000000000000000000000000000000000000000000021f896eb" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x3a7b205a13bbb38e5ca330b6c4de0dc13602ac6c1e65c74cbf46924368f485b3", + "value": "0x0000000000000000000000000000000000000000000000000000000001a35a0a" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x000000000000000000000000a2ee6fce4acb62d95448729cdb781e3beb62504a" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x815cc1e5f6e0a18f93b985dc3776ff50a9e9d7bd2492506fb28d56b50a14a2ef", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xf842ef314f8bb59c276fd152feac0f9100415b1b2abaf99dae95009559695aca", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xc9aff58c719c4995e053813f4de6ebcd321f9dcb4fe0d2dcdfc03a67a4806abd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b", + "value": "0x000000000000000000000000f5cc7604a5ef3565b4d2050d65729a06b68aa0bd" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xfb779924df5e688490af59cd797c3f5c66ad14d2c8280f7bb7d38c21cc62daef", + "value": "0x00000000000000000000000000000000000000000000000000000018820c0f8e" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xf530e3db9373cb78547d0112ee4e2c699a5586f67b6661c3821de80380e326ef", + "value": "0x00000000000000000000000000000000000000000000000000000000061a4a58" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xa5e22508ef2319e880a6728ce220d3a1601f0d52973c10899d07eb4b3bfe4a37", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xb5aadd8b0832ba039a342c51a831687f5d1c7b16fce4491094ab77892ce7edeb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x877a68000283f4b48767998f591359ca4a5a9802c461bc3c5ba542619a786235", + "value": "0x00000000000000000000000000000000000000000000000000000008ce49559c" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xecad04d42daa5bac623e92788df7807447bdd3ef2248e733cb9399d7c3e8a772", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xa73204a6362c12b0454e5ea5c2bd55bc147bd03f7e9426b6ba4facb157672f82", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x765bc28b14e17cc128808a3df6510089cfbfd5680f1557da3c490b5850bac891", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xd16aac2f9234736029a14d3c2cb2a6beda9d5d34f5f55ef56984ee4e28e7166d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x662b0561bd5ca7e22a4ab43e5c808f18cae28ca37998c4c793467968d57f018e", + "value": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffbb1bd9a1a" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x9bc3dbb91f49bfba907a3eb9610113507e90aae03eec64fd5201e402dc64089b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x71d0c09da5da3b5a6ddc73b1f23aecb5db6069ef9bf5c398bc2e1417c2e3d8e9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x1184afa92670258f705d78120abb1afe9f28671ca4e2975e67678cd2b24dd107", + "value": "0x0000000000000000000000000000000000000000000000000000021854c97125" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x73e221adbda23c1a9666a8d6d864823d1c5007b7ab23d1743715b218496a5f04", + "value": "0x0000000000000000000000000000000000000000000000000000009d987f2249" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xd5e363e0e6c22346eb791243a541ac21ba73d3ce75621c07293af1651937e1ba", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xabb75c3a7629ae0c41a3d8e90f5ac55b7cda1442fbc0e8a911c3db951b2d975b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x34c1e510501190bf97f3e1c8e0199b78ab1c3fd692755f590e462ff6af5c3e78", + "value": "0x0000000000000000000000000000000000000000000000000000000036512806" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x075d2f39b5a1f3d5e6b1c6d4f576c62036d9d1c922df5269f9d7c6a592575f9f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x31a98ee871d98bfea13cd4c4396873bdc10287bf985c9a4d2c5b9fe43aaf4c22", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x39949d9d12e0dd3401f651da2640754b490a33c85c5e6e9875e4c066860800cc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3", + "value": "0x000000000000000000000000ab838fe7d492c621a5b1b23952af99cc37a2e0d3" + }, + { + "address": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", + "key": "0xdc56163b26cb6efc0dfbb12be8abbd2c0ab5c959cfd7ddd74a4cc3b56ada0812", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xf15ccfdda3eb59958b5385c686401e18321670ce", + "key": "0x3e7257b7272bb46d49cd6019b04ddee20da7c0cb13f7c1ec3391291b2ccebabc", + "value": "0x0000000000000000000000000000000000000000000000000000000065d29a00" + }, + { + "address": "0xf15ccfdda3eb59958b5385c686401e18321670ce", + "key": "0x3e7257b7272bb46d49cd6019b04ddee20da7c0cb13f7c1ec3391291b2ccebabd", + "value": "0x0000000000000000000000000000000000000000000000000000000000127500" + }, + { + "address": "0xf15ccfdda3eb59958b5385c686401e18321670ce", + "key": "0x3e7257b7272bb46d49cd6019b04ddee20da7c0cb13f7c1ec3391291b2ccebabe", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0xf15ccfdda3eb59958b5385c686401e18321670ce", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000af3c37bd85c24ca6e477941569577bb4a41470b9" + }, + { + "address": "0xf15ccfdda3eb59958b5385c686401e18321670ce", + "key": "0x00000000000000000000000000000000000000000000000000000000000000fb", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x0f95dcec4c7a93f2637eb13b655f2223ea036b59", + "key": "0xb3f3e3d1c4890b4f2debdb3a84a1700ecdfd9f44bcb93f744b5a99ddcce56410", + "value": "0x5275627953636f72654c696e65614c766c330000000000000000000000000024" + }, + { + "address": "0x0f95dcec4c7a93f2637eb13b655f2223ea036b59", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x000000000000000000000000c84059133f74ca991442959c22f8d80d6fad7c23" + }, + { + "address": "0x0f95dcec4c7a93f2637eb13b655f2223ea036b59", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x00000000000000000000000031c2b0c23c0b9afec70229c18efc2c272722c2cf" + }, + { + "address": "0x0f95dcec4c7a93f2637eb13b655f2223ea036b59", + "key": "0x1c2b9500cb4c4b8addb8e75a604707b301585dc01c2666360b1dd02901ab493b", + "value": "0x5472757374612048756d616e697479204174746573746174696f6e7300000038" + }, + { + "address": "0x0f95dcec4c7a93f2637eb13b655f2223ea036b59", + "key": "0x4daef6fe0a31c0bfdd6c6b2b1b7e9d9d6a3ffd1ec9907dfcdd6add47b8b5e1ed", + "value": "0x6f70656e6964330000000000000000000000000000000000000000000000000e" + }, + { + "address": "0x6129f06f872e80e0ff336aa74507ee1136574dfa", + "key": "0x41b0c0e050af77dd2eab5e0732af0f7b5cf999cb238a62d5773ceddcb16e6267", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x6129f06f872e80e0ff336aa74507ee1136574dfa", + "key": "0xb5536d112463b8d22bf0beef82b74c05a7c80402846cdf92513893426701fd2c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x6129f06f872e80e0ff336aa74507ee1136574dfa", + "key": "0x0000000000000000000000000000000000000000000000000000000000000009", + "value": "0x000000000000000000000000000000000000000000000000000000000000a6ad" + }, + { + "address": "0x6129f06f872e80e0ff336aa74507ee1136574dfa", + "key": "0x0000000000000000000000000000000000000000000000000000000000000008", + "value": "0x000000000000000000000000000000000000000000000000000000006615d680" + }, + { + "address": "0x6129f06f872e80e0ff336aa74507ee1136574dfa", + "key": "0x0000000000000000000000000000000000000000000000000000000000000007", + "value": "0x0000000000000000000000000000000000000000000000000000000065f8d580" + }, + { + "address": "0xd3e706d98b588a8f819ec324d0e0934a685bc1d3", + "key": "0xf53dc4be8854a02152e7cbe885af5bb818322e69fa20a7bf042a25f3438e827d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "address": "0xd3e706d98b588a8f819ec324d0e0934a685bc1d3", + "key": "0xa90a1034fcf1fe8f692edd6e49bf8e77b52b9e5f4041d8e15bc961b5ebfe710f", + "value": "0x5553440000000000000000000000000000000000000000000000000000000006" + }, + { + "address": "0xd3e706d98b588a8f819ec324d0e0934a685bc1d3", + "key": "0xa90a1034fcf1fe8f692edd6e49bf8e77b52b9e5f4041d8e15bc961b5ebfe710e", + "value": "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace" + }, + { + "address": "0xd3e706d98b588a8f819ec324d0e0934a685bc1d3", + "key": "0xf53dc4be8854a02152e7cbe885af5bb818322e69fa20a7bf042a25f3438e827b", + "value": "0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a" + }, + { + "address": "0xd3e706d98b588a8f819ec324d0e0934a685bc1d3", + "key": "0xf53dc4be8854a02152e7cbe885af5bb818322e69fa20a7bf042a25f3438e827c", + "value": "0x5553440000000000000000000000000000000000000000000000000000000006" + }, + { + "address": "0xd3e706d98b588a8f819ec324d0e0934a685bc1d3", + "key": "0xa90a1034fcf1fe8f692edd6e49bf8e77b52b9e5f4041d8e15bc961b5ebfe7110", + "value": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + { + "address": "0xd3e706d98b588a8f819ec324d0e0934a685bc1d3", + "key": "0x065cc15a357a020bcb660bf548abca6b2b72433e288f7faef5647e9acc27376a", + "value": "0x2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b" + }, + { + "address": "0xd3e706d98b588a8f819ec324d0e0934a685bc1d3", + "key": "0x065cc15a357a020bcb660bf548abca6b2b72433e288f7faef5647e9acc27376b", + "value": "0x5553440000000000000000000000000000000000000000000000000000000006" + }, + { + "address": "0xd3e706d98b588a8f819ec324d0e0934a685bc1d3", + "key": "0x065cc15a357a020bcb660bf548abca6b2b72433e288f7faef5647e9acc27376c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "address": "0xde1e598b81620773454588b85d6b5d4eec32573e", + "key": "0x70a611af291ba25cf0c6d5837fec89211ffe00502534bd93761bd8fa96a89524", + "value": "0x000000000000000000000004f812ba858d9fa57788df0f792ef35752d54863f1" + }, + { + "address": "0x14c5a2b562754ed412708a103fb9cb65b1b16494", + "key": "0xf21385bf1dc54e8db6a0bd92b0f35252a36840c8979073f7fb61048ed6bc187d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x14c5a2b562754ed412708a103fb9cb65b1b16494", + "key": "0x000000000000000000000000000000000000000000000000000000000000003d", + "value": "0x000000000000000000000000000000000000000000000000000000006602bef1" + }, + { + "address": "0x14c5a2b562754ed412708a103fb9cb65b1b16494", + "key": "0x000000000000000000000000000000000000000000000000000000000000003c", + "value": "0x00000000000000000000000000000000000000000000000008833acfced2a857" + }, + { + "address": "0x14c5a2b562754ed412708a103fb9cb65b1b16494", + "key": "0x000000000000000000000000000000000000000000000000000000000000003b", + "value": "0x0000000000000000000000000000000000000000000c9198764794bd8077d299" + }, + { + "address": "0x34be5b8c30ee4fde069dc878989686abe9884470", + "key": "0x2862cd2b9f090428e098f7f8a5cdf180286d1818da2345914870e88552a121c6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x34be5b8c30ee4fde069dc878989686abe9884470", + "key": "0x3085aa56001e85cdf5716abbde10d6e850974d35808f897c2788d2678ad704b5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x34be5b8c30ee4fde069dc878989686abe9884470", + "key": "0xae05a836414d466d02522f0a8d3b2307a1b3ec62d64b5b473eb012a33aff9903", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x34be5b8c30ee4fde069dc878989686abe9884470", + "key": "0xa6644b60c747db2bb1f1851e078c4f88da47df98dc2007b274f4f24abe4a323b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x34be5b8c30ee4fde069dc878989686abe9884470", + "key": "0x0fada852ed2aee01b4dc05c2dbc1c4ff6cb162df61b096e61b4bee2e5c0ec001", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x34be5b8c30ee4fde069dc878989686abe9884470", + "key": "0xe12d5ff10640a555479d85b7ab5f83b5dbd3cf6ac615eec77e24e0984b75a038", + "value": "0x00000000000000000000000000000000000000000000000000000000000f4240" + }, + { + "address": "0x34be5b8c30ee4fde069dc878989686abe9884470", + "key": "0x8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb458", + "value": "0x000000000000000000000000000000000000000000000000000000000003b35f" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x9f32fdae3b444b89ea5f0bd43523a6e4e4d1ceccde98b0ce948c74d3a9caacdc", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x9f32fdae3b444b89ea5f0bd43523a6e4e4d1ceccde98b0ce948c74d3a9caacdd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x9f32fdae3b444b89ea5f0bd43523a6e4e4d1ceccde98b0ce948c74d3a9caacde", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x9f32fdae3b444b89ea5f0bd43523a6e4e4d1ceccde98b0ce948c74d3a9caacdf", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x9f32fdae3b444b89ea5f0bd43523a6e4e4d1ceccde98b0ce948c74d3a9caace0", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x0210346b61624fa81ebce33fabec0424060f72a1a4edae59146c5d52dc413368", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x9f32fdae3b444b89ea5f0bd43523a6e4e4d1ceccde98b0ce948c74d3a9caace1", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x9f32fdae3b444b89ea5f0bd43523a6e4e4d1ceccde98b0ce948c74d3a9caace2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x9f32fdae3b444b89ea5f0bd43523a6e4e4d1ceccde98b0ce948c74d3a9caace3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xfb42fba1f6cc3a83b60e02cf1a447b2d8ab1fb34235fc4384e6a6363ef70498b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xfb42fba1f6cc3a83b60e02cf1a447b2d8ab1fb34235fc4384e6a6363ef70498c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xfb42fba1f6cc3a83b60e02cf1a447b2d8ab1fb34235fc4384e6a6363ef70498d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x86b93491efb14ac7616e6a553dd45ad2555ab4d597e2b45c3e72738033b14062", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x86b93491efb14ac7616e6a553dd45ad2555ab4d597e2b45c3e72738033b14061", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x296e966fc0ff864d6ef8cb8e0b4c0099f77e4c6cf981af2717511f675359e111", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x296e966fc0ff864d6ef8cb8e0b4c0099f77e4c6cf981af2717511f675359e114", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x873bf067dd65e867101a54d87195cf4b400b92f3255aea869a720f6d96c1409a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x296e966fc0ff864d6ef8cb8e0b4c0099f77e4c6cf981af2717511f675359e112", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x873bf067dd65e867101a54d87195cf4b400b92f3255aea869a720f6d96c1409b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x296e966fc0ff864d6ef8cb8e0b4c0099f77e4c6cf981af2717511f675359e113", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x02a92e18254b1a4acd6844b9332e24d216f4d1b89859abd53f9234d9d33e8dff", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x02a92e18254b1a4acd6844b9332e24d216f4d1b89859abd53f9234d9d33e8dfe", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x02a92e18254b1a4acd6844b9332e24d216f4d1b89859abd53f9234d9d33e8dfd", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x6f52b3a9f806336dc4ffe7aa137c2a2fd4b29c0a19b9eabeda1e247f9982d8e2", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x0000000000000000000000000000000000000000000000000000000000000065", + "value": "0x0000000000000031cca400074d3a380a03f3a18a5dc44b01119839d8674a552e" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x6f52b3a9f806336dc4ffe7aa137c2a2fd4b29c0a19b9eabeda1e247f9982d8e3", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x6f52b3a9f806336dc4ffe7aa137c2a2fd4b29c0a19b9eabeda1e247f9982d8e4", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x6f52b3a9f806336dc4ffe7aa137c2a2fd4b29c0a19b9eabeda1e247f9982d8e5", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xe03587e832b87f0d7d1e0b2656766a7df25d3c82da03bb40af09a6da9a8e6968", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x6f52b3a9f806336dc4ffe7aa137c2a2fd4b29c0a19b9eabeda1e247f9982d8e6", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x6f52b3a9f806336dc4ffe7aa137c2a2fd4b29c0a19b9eabeda1e247f9982d8e7", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x6f52b3a9f806336dc4ffe7aa137c2a2fd4b29c0a19b9eabeda1e247f9982d8e8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xe03587e832b87f0d7d1e0b2656766a7df25d3c82da03bb40af09a6da9a8e6967", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x6f52b3a9f806336dc4ffe7aa137c2a2fd4b29c0a19b9eabeda1e247f9982d8e9", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x0000000000000000000000000000000000000000000000000000000000000067", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x02a92e18254b1a4acd6844b9332e24d216f4d1b89859abd53f9234d9d33e8e04", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x02a92e18254b1a4acd6844b9332e24d216f4d1b89859abd53f9234d9d33e8e03", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x02a92e18254b1a4acd6844b9332e24d216f4d1b89859abd53f9234d9d33e8e02", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x02a92e18254b1a4acd6844b9332e24d216f4d1b89859abd53f9234d9d33e8e01", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x02a92e18254b1a4acd6844b9332e24d216f4d1b89859abd53f9234d9d33e8e00", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xb69b4c600fbf3133f76ccce09dbe5caadc6a469ca1be74bcf3ece9bd40536022", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xb69b4c600fbf3133f76ccce09dbe5caadc6a469ca1be74bcf3ece9bd40536023", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xb69b4c600fbf3133f76ccce09dbe5caadc6a469ca1be74bcf3ece9bd40536024", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xb69b4c600fbf3133f76ccce09dbe5caadc6a469ca1be74bcf3ece9bd40536025", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xb69b4c600fbf3133f76ccce09dbe5caadc6a469ca1be74bcf3ece9bd40536026", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xb69b4c600fbf3133f76ccce09dbe5caadc6a469ca1be74bcf3ece9bd40536027", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xb69b4c600fbf3133f76ccce09dbe5caadc6a469ca1be74bcf3ece9bd40536028", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x5940d90a7f6ed1709e5c2f5a45f007bd5161bf4c4d9f09f36d6e3015f64d6b89", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xb69b4c600fbf3133f76ccce09dbe5caadc6a469ca1be74bcf3ece9bd40536029", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "value": "0x00000000000000000000000031c2b0c23c0b9afec70229c18efc2c272722c2cf" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xa68bdeff47f28672164c6e2ad2eac1c1cefe769ec1400b9e729e1724de2aa49b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xfb42fba1f6cc3a83b60e02cf1a447b2d8ab1fb34235fc4384e6a6363ef704992", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xa68bdeff47f28672164c6e2ad2eac1c1cefe769ec1400b9e729e1724de2aa499", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xa68bdeff47f28672164c6e2ad2eac1c1cefe769ec1400b9e729e1724de2aa49a", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xa68bdeff47f28672164c6e2ad2eac1c1cefe769ec1400b9e729e1724de2aa497", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xfb42fba1f6cc3a83b60e02cf1a447b2d8ab1fb34235fc4384e6a6363ef70498e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xa68bdeff47f28672164c6e2ad2eac1c1cefe769ec1400b9e729e1724de2aa498", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xfb42fba1f6cc3a83b60e02cf1a447b2d8ab1fb34235fc4384e6a6363ef70498f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xa68bdeff47f28672164c6e2ad2eac1c1cefe769ec1400b9e729e1724de2aa495", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xfb42fba1f6cc3a83b60e02cf1a447b2d8ab1fb34235fc4384e6a6363ef704990", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xa68bdeff47f28672164c6e2ad2eac1c1cefe769ec1400b9e729e1724de2aa496", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xfb42fba1f6cc3a83b60e02cf1a447b2d8ab1fb34235fc4384e6a6363ef704991", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xa68bdeff47f28672164c6e2ad2eac1c1cefe769ec1400b9e729e1724de2aa494", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xfb5cd583916ff111013cfb2208759cccb40f9ac67d03639686ac6ebd44ee8bb8", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x00000000000000000000000023178d693eb5d0cb2b4f2e4a4b4cdca9b063dc89" + }, + { + "address": "0x3de3893aa4cdea029e84e75223a152fd08315138", + "key": "0xdb136ce651caba4c008987db6e1538d01922e9ba26567eb6416a2563f8b1320b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x743281db4c21f138a62be1b8e9d3aa0ad167c7ee", + "key": "0x4e2336fefffc72edc4933130a8d98d7f3e55b9435714240aecb95ddd41226f72", + "value": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "address": "0x743281db4c21f138a62be1b8e9d3aa0ad167c7ee", + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", + "value": "0x00000000000000000000000080fff752807758f53dc164874fa4606968db115a" + }, + { + "address": "0x743281db4c21f138a62be1b8e9d3aa0ad167c7ee", + "key": "0x0000000000000000000000000000000000000000000000000000000000000100", + "value": "0x0000000000000000000000000000000000000000000000000000000000000005" + }, + { + "address": "0x743281db4c21f138a62be1b8e9d3aa0ad167c7ee", + "key": "0x45e010b9ae401e2eb71529478da8bd513a9bdc2d095a111e324f5b95c09ed87f", + "value": "0x0000000000000000000000000000000000000000000000000000000000001000" + }, + { + "address": "0x743281db4c21f138a62be1b8e9d3aa0ad167c7ee", + "key": "0x03d616f3758432b4d7452e2e9011612152589bfc903ce751686613c478b2af5f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "address": "0x743281db4c21f138a62be1b8e9d3aa0ad167c7ee", + "key": "0x00000000000000000000000000000000000000000000000000000000000000fd", + "value": "0x000000000000000000000000a3ebaef88ef44b2b3d70ffd77e91cf002e5e72ce" + }, + { + "address": "0x743281db4c21f138a62be1b8e9d3aa0ad167c7ee", + "key": "0x45e010b9ae401e2eb71529478da8bd513a9bdc2d095a111e324f5b95c09ed87d", + "value": "0x0000000000000000000000000000000000000000000000000000000000000400" + }, + { + "address": "0x743281db4c21f138a62be1b8e9d3aa0ad167c7ee", + "key": "0x45e010b9ae401e2eb71529478da8bd513a9bdc2d095a111e324f5b95c09ed87e", + "value": "0x0000000000000000000000000000000000000000000000000000000000000800" + }, + { + "address": "0x743281db4c21f138a62be1b8e9d3aa0ad167c7ee", + "key": "0x45e010b9ae401e2eb71529478da8bd513a9bdc2d095a111e324f5b95c09ed87b", + "value": "0x0000000000000000000000000000000000000000000000000000000000000100" + }, + { + "address": "0x743281db4c21f138a62be1b8e9d3aa0ad167c7ee", + "key": "0x45e010b9ae401e2eb71529478da8bd513a9bdc2d095a111e324f5b95c09ed87c", + "value": "0x0000000000000000000000000000000000000000000000000000000000000200" + }, + { + "address": "0xc64a931356e0e25c280224b80fa4c87e6131e1d6", + "key": "0x5b8b6f6ec973d04f5a1135c7cab601456581e2274097ef743f336f0c6130ef8f", + "value": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + ] +} diff --git a/arithmetization/src/test/resources/replays/3149945-3149946.json.gz b/arithmetization/src/test/resources/replays/3149945-3149946.json.gz new file mode 100644 index 0000000000..460078944b Binary files /dev/null and b/arithmetization/src/test/resources/replays/3149945-3149946.json.gz differ diff --git a/arithmetization/src/test/resources/replays/5995097.json.gz b/arithmetization/src/test/resources/replays/5995097.json.gz new file mode 100644 index 0000000000..f4ea38933c Binary files /dev/null and b/arithmetization/src/test/resources/replays/5995097.json.gz differ diff --git a/arithmetization/src/test/resources/replays/5995162.json.gz b/arithmetization/src/test/resources/replays/5995162.json.gz new file mode 100644 index 0000000000..321b771271 Binary files /dev/null and b/arithmetization/src/test/resources/replays/5995162.json.gz differ diff --git a/arithmetization/src/test/resources/replays/6569423.json.gz b/arithmetization/src/test/resources/replays/6569423.json.gz new file mode 100644 index 0000000000..bed1891c8a Binary files /dev/null and b/arithmetization/src/test/resources/replays/6569423.json.gz differ diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index fe5b008038..0d3ae50043 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -22,11 +22,11 @@ repositories { } dependencies { - implementation 'io.freefair.gradle:lombok-plugin:8.1.0' - implementation 'com.diffplug.spotless:spotless-plugin-gradle:6.20.0' - implementation 'com.github.ben-manes:gradle-versions-plugin:0.11.1' + implementation 'io.freefair.gradle:lombok-plugin:8.6' + implementation 'com.diffplug.spotless:spotless-plugin-gradle:6.25.0' + implementation 'com.github.ben-manes:gradle-versions-plugin:0.51.0' implementation 'com.github.hierynomus.license:com.github.hierynomus.license.gradle.plugin:0.16.1' - implementation 'io.spring.dependency-management:io.spring.dependency-management.gradle.plugin:1.1.2' - implementation 'de.undercouch.download:de.undercouch.download.gradle.plugin:5.4.0' + implementation 'io.spring.dependency-management:io.spring.dependency-management.gradle.plugin:1.1.5' + implementation 'de.undercouch.download:de.undercouch.download.gradle.plugin:5.6.0' } diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml deleted file mode 100644 index 3cc777ba73..0000000000 --- a/config/checkstyle/checkstyle.xml +++ /dev/null @@ -1,383 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml deleted file mode 100644 index 2dd2bc56fa..0000000000 --- a/config/checkstyle/suppressions.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gradle.properties b/gradle.properties index f5b8942e81..34f822580e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ -releaseVersion=0.1.4-SNAPSHOT -besuVersion=24.2.0-SNAPSHOT +releaseVersion=0.2.0-rc1 +besuVersion=24.6-develop-752aeff besuArtifactGroup=io.consensys.linea-besu distributionIdentifier=linea-arithmetization distributionBaseUrl=https://artifacts.consensys.net/public/linea-besu/raw/names/linea-besu.tar.gz/versions/ diff --git a/gradle/corset.gradle b/gradle/corset.gradle index 04d6ae39fc..45f643e654 100644 --- a/gradle/corset.gradle +++ b/gradle/corset.gradle @@ -25,7 +25,7 @@ tasks.register('corsetExists') { } tasks.register('buildZkevmBin', Exec) { - dependsOn corsetExists + // dependsOn corsetExists workingDir "${project.rootDir}/zkevm-constraints/" commandLine 'make', 'zkevm.bin' diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index 4be7dac3f0..020a032a75 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -106,12 +106,12 @@ dependencyManagement { entry 'junit-jupiter-engine' entry 'junit-jupiter-params' } - dependencySet(group: 'org.mockito', version: '5.1.1') { + dependencySet(group: 'org.mockito', version: '5.12.0') { entry 'mockito-core' entry 'mockito-junit-jupiter' } - dependency 'org.assertj:assertj-core:3.24.2' + dependency 'org.assertj:assertj-core:3.25.1' dependency 'org.awaitility:awaitility:4.2.0' dependency 'com.splunk.logging:splunk-library-javalogging:1.11.5' diff --git a/gradle/dist.gradle b/gradle/dist.gradle index 28631a9cc2..f743c05957 100644 --- a/gradle/dist.gradle +++ b/gradle/dist.gradle @@ -27,17 +27,9 @@ tasks.register('javadocJar', Jar) { from javadoc.destinationDir } -tasks.register('downloadLatestLineaBesu', Download) { - src rootProject.besuUrl - dest new File(buildDir, rootProject.besuFilename) - onlyIfModified true -} - version = project.hasProperty('releaseVersion') ? project.getProperty('releaseVersion') : 'snapshot' jar { - dependsOn downloadLatestLineaBesu - archiveBaseName = distributionIdentifier manifest { @@ -50,7 +42,7 @@ jar { } from { - configurations.runtimeClasspath.filter( {! (it.name =~ /log4j.*\.jar/ )} ) + configurations.runtimeClasspath.filter( {! (it.name =~ /log4j.*\.jar/ ) && ! (it.name =~ /vertx.*\.jar/ )} ) .collect {it.isDirectory() ? it : zipTree(it) } } exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA' @@ -72,75 +64,3 @@ static def getCheckedOutGitCommitHash() { def hashLength = 8 "git rev-parse HEAD".execute().text.take(hashLength) } - -tasks.register('distTar', Tar) { - dependsOn jar - dependsOn downloadLatestLineaBesu - - from(tarTree(downloadLatestLineaBesu.dest), { - eachFile { path = path.replaceFirst(rootProject.besuIdentifier, '') } - includeEmptyDirs = false - exclude "**/LICENSE" - }) - - from(configurations.installedJars) { - into "plugins" - exclude "**/common*.jar" - } - - into besuPluginsIdentifier - archiveBaseName = distributionIdentifier - compression = Compression.GZIP - archiveExtension = 'tar.gz' - - exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA' - duplicatesStrategy(DuplicatesStrategy.INCLUDE) -} - -tasks.register('installDist', Copy) { - dependsOn distTar - - from(tarTree(distTar.outputs.getFiles().getSingleFile()), { - eachFile { path = path.replaceFirst(besuPluginsIdentifier, distributionIdentifier) } - includeEmptyDirs = false - }) - into "$buildDir/distributions/install" - duplicatesStrategy(DuplicatesStrategy.INCLUDE) -} - -tasks.register('distZip', Zip) { - dependsOn installDist - - archiveBaseName = distributionIdentifier - from installDist.outputs.getFiles() - archiveBaseName - setArchiveExtension 'zip' - duplicatesStrategy(DuplicatesStrategy.INCLUDE) -} - -tasks.register("copyPluginJar") { - dependsOn installDist - - doLast { - def copyInto = rootProject.besuPluginDir - def copyFrom = new File("${project(":arithmetization").buildDir}/libs") - - copy { - from copyFrom.toString() - into copyInto.toString() - include '*.jar' - } - } -} - -tasks.register('deployPlugins', Copy) { - dependsOn jar - dependsOn installDist - - from(configurations.installedJars) { - into new File(distributionIdentifier, "plugins") - exclude "**/common*.jar" - } - - into installDist.destinationDir -} diff --git a/gradle/java.gradle b/gradle/java.gradle index 41beb9a00d..6891e7fa14 100644 --- a/gradle/java.gradle +++ b/gradle/java.gradle @@ -15,13 +15,13 @@ apply plugin: 'java-library' -if (!JavaVersion.current().java11Compatible) { - throw new GradleException("Java 17 or later is required.\n" + +if (!JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_21)) { + throw new GradleException("Java 21 or later is required to build Besu.\n" + " Detected version ${JavaVersion.current()}") } -sourceCompatibility = 17 -targetCompatibility = 17 +sourceCompatibility = 21 +targetCompatibility = 21 tasks.withType(JavaCompile) { options.compilerArgs += [ diff --git a/gradle/lint.gradle b/gradle/lint.gradle index 0704c43e8f..c68307829d 100644 --- a/gradle/lint.gradle +++ b/gradle/lint.gradle @@ -13,35 +13,36 @@ * SPDX-License-Identifier: Apache-2.0 */ -apply plugin: "checkstyle" -checkstyle { - toolVersion = '10.12.1' - // Following settings will be activated once the entire project complies with the checkstyle rules - // and once achieved all future code that does not comply with the rules will fail the build of the project. - // maxWarnings = 0 - // ignoreFailures = false -} - -tasks.withType(Checkstyle) { - reports { - xml.required = true - html.required = true - } -} - -tasks.named("checkstyleTest", Checkstyle) { - exclude("**/generated/*.java") -} +// TODO: Checkstyle currently breaks the build. Needs to be fixed. +//apply plugin: "checkstyle" +//checkstyle { +// toolVersion = '10.17.0' +// // Following settings will be activated once the entire project complies with the checkstyle rules +// // and once achieved all future code that does not comply with the rules will fail the build of the project. +// // maxWarnings = 0 +// // ignoreFailures = false +//} +// +//tasks.withType(Checkstyle) { +// reports { +// xml.required = true +// html.required = true +// } +//} +// +//tasks.named("checkstyleTest", Checkstyle) { +// exclude("**/generated/*.java") +//} apply plugin: 'com.diffplug.spotless' spotless { - version "6.16.0" + version "6.25.0" java { // This path needs to be relative to each project target 'src/**/*.java' targetExclude '**/src/test/java/**ReferenceTest**', '**/src/main/generated/**', '**/src/test/generated/**', '**/src/jmh/generated/**' removeUnusedImports() - googleJavaFormat('1.15.0') + googleJavaFormat('1.17.0') importOrder '\\#', 'java', 'javax', '' trimTrailingWhitespace() endWithNewline() diff --git a/gradle/publishing.gradle b/gradle/publishing.gradle index 2fa1f3091b..8b98d1933e 100644 --- a/gradle/publishing.gradle +++ b/gradle/publishing.gradle @@ -61,35 +61,12 @@ publishing { } } -artifacts { - archives tasks.distTar - archives tasks.distZip -} - tasks.register('cloudsmithUpload') { - dependsOn([distTar, distZip]) doLast { exec { - executable project.file("scripts/cloudsmith-upload.sh") - args rootProject.version, distTar.archiveFile.get(), distZip.archiveFile.get() + executable rootProject.file("scripts/cloudsmith-upload.sh") + args rootProject.version, project.layout.buildDirectory.get() } } } -tasks.register("verifyDistributions") { - dependsOn distTar - dependsOn distZip - def distTarFile = distTar.outputs.files.singleFile - def distZipFile = distZip.outputs.files.singleFile - def minDistributionSize = 20000000 - - // Sanity check the distributions by checking they are at least a reasonable size - doFirst { - if (distTarFile.length() < minDistributionSize) { - throw new GradleException("Distribution tar is suspiciously small: " + distTarFile.length() + " bytes") - } - if (distZipFile.length() < minDistributionSize) { - throw new GradleException("Distribution zip is suspiciously small: " + distZipFile.length() + " bytes") - } - } -} diff --git a/gradle/tests.gradle b/gradle/tests.gradle index 98a5a59643..4778741245 100644 --- a/gradle/tests.gradle +++ b/gradle/tests.gradle @@ -17,7 +17,7 @@ import java.time.LocalTime apply plugin: 'jacoco' jacoco { - toolVersion = '0.8.8' + toolVersion = '0.8.12' } /* @@ -50,6 +50,7 @@ test { '--add-opens', 'java.base/java.util.concurrent=ALL-UNNAMED' ] + Set toImport = [ 'root.log.level', 'evm.log.level' diff --git a/gradle/trace-files.gradle b/gradle/trace-files.gradle index f4b62a98c3..14c433a041 100644 --- a/gradle/trace-files.gradle +++ b/gradle/trace-files.gradle @@ -68,7 +68,7 @@ tasks.register('binreftable', TraceFilesTask) { // // Put here modules following the conventional MODULE/columns.lisp naming scheme. // -['bin', 'blockhash', 'ecdata', 'euc', 'mmio', 'mxp', 'shf', 'wcp', 'rlptxn', 'rom', 'romlex', 'trm', 'stp', 'loginfo', 'logdata'].each {moduleName -> +['bin', 'blockhash', 'euc', 'mmio', 'shf', 'wcp', 'rlptxn', 'rom', 'romlex', 'trm', 'stp', 'loginfo', 'logdata'].each {moduleName -> tasks.register(moduleName, TraceFilesTask) { group "Trace files generation" dependsOn corsetExists @@ -81,10 +81,10 @@ tasks.register('binreftable', TraceFilesTask) { // // Put here modules following the conventional MODULE/columns.lisp, MODULE/constants.lisp naming scheme. // -['mmu', 'blake2fmodexpdata', 'blockdata', 'oob', 'exp', 'rlptxrcpt', 'rlpaddr'].each {moduleName -> +['mmu', 'blake2fmodexpdata', 'blockdata', 'oob', 'exp', 'rlptxrcpt', 'rlpaddr', 'shakiradata', 'mxp', 'ecdata', 'gas'].each {moduleName -> tasks.register(moduleName, TraceFilesTask) { group "Trace files generation" - dependsOn corsetExists + // dependsOn corsetExists module = moduleName files = ["${moduleName}/columns.lisp", "${moduleName}/constants.lisp"] diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f93135c49..249e5832f0 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9e33c2f3c7..0d1842103b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip -networkTimeout=10000 -validateDistributionUrl=true +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1aa94a4269..a69d9cb6c2 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,11 +80,13 @@ do esac done -# This is normally unused -# shellcheck disable=SC2034 +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -131,29 +133,22 @@ location of your Java installation." fi else JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." - fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -198,15 +193,11 @@ if "$cygwin" || "$msys" ; then done fi - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 6689b85bee..53a6b238d4 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -26,7 +26,6 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% diff --git a/images/idea_disable_corset_expansion.png b/images/idea_disable_corset_expansion.png new file mode 100644 index 0000000000..c4d564645f Binary files /dev/null and b/images/idea_disable_corset_expansion.png differ diff --git a/reference-tests/src/test/java/net/consensys/linea/CorsetBlockProcessor.java b/reference-tests/src/test/java/net/consensys/linea/CorsetBlockProcessor.java index 528a53379d..02e3367820 100644 --- a/reference-tests/src/test/java/net/consensys/linea/CorsetBlockProcessor.java +++ b/reference-tests/src/test/java/net/consensys/linea/CorsetBlockProcessor.java @@ -31,7 +31,6 @@ import org.hyperledger.besu.ethereum.chain.Blockchain; import org.hyperledger.besu.ethereum.core.BlockBody; import org.hyperledger.besu.ethereum.core.BlockHeader; -import org.hyperledger.besu.ethereum.core.Deposit; import org.hyperledger.besu.ethereum.core.MutableWorldState; import org.hyperledger.besu.ethereum.core.Transaction; import org.hyperledger.besu.ethereum.core.TransactionReceipt; @@ -46,10 +45,10 @@ import org.hyperledger.besu.ethereum.mainnet.WithdrawalsProcessor; import org.hyperledger.besu.ethereum.privacy.storage.PrivateMetadataUpdater; import org.hyperledger.besu.ethereum.processing.TransactionProcessingResult; -import org.hyperledger.besu.ethereum.trie.bonsai.worldview.BonsaiWorldState; -import org.hyperledger.besu.ethereum.trie.bonsai.worldview.BonsaiWorldStateUpdateAccumulator; -import org.hyperledger.besu.ethereum.vm.BlockHashLookup; +import org.hyperledger.besu.ethereum.trie.diffbased.bonsai.worldview.BonsaiWorldState; +import org.hyperledger.besu.ethereum.trie.diffbased.bonsai.worldview.BonsaiWorldStateUpdateAccumulator; import org.hyperledger.besu.ethereum.vm.CachingBlockHashLookup; +import org.hyperledger.besu.evm.operation.BlockHashOperation; import org.hyperledger.besu.evm.worldstate.WorldUpdater; @Slf4j @@ -84,7 +83,6 @@ public BlockProcessingResult processBlock( final List transactions, final List ommers, final Optional> maybeWithdrawals, - final Optional> maybeDeposits, final PrivateMetadataUpdater privateMetadataUpdater) { final List receipts = new ArrayList<>(); long currentGasUsed = 0; @@ -105,7 +103,8 @@ public BlockProcessingResult processBlock( final WorldUpdater worldStateUpdater = worldState.updater(); - final BlockHashLookup blockHashLookup = new CachingBlockHashLookup(blockHeader, blockchain); + final BlockHashOperation.BlockHashLookup blockHashLookup = + new CachingBlockHashLookup(blockHeader, blockchain); final Address miningBeneficiary = miningBeneficiaryCalculator.calculateBeneficiary(blockHeader); @@ -126,7 +125,6 @@ public BlockProcessingResult processBlock( zkTracer.traceStartBlock(blockHeader, blockBody); final TransactionProcessingResult result = transactionProcessor.processTransaction( - blockchain, worldStateUpdater, blockHeader, transaction, diff --git a/reference-tests/src/test/java/net/consensys/linea/GeneralStateReferenceTestTools.java b/reference-tests/src/test/java/net/consensys/linea/GeneralStateReferenceTestTools.java index 01fe520c78..2b39868837 100644 --- a/reference-tests/src/test/java/net/consensys/linea/GeneralStateReferenceTestTools.java +++ b/reference-tests/src/test/java/net/consensys/linea/GeneralStateReferenceTestTools.java @@ -175,7 +175,6 @@ public static void executeTest(final GeneralStateTestCaseEipSpec spec) { final TransactionProcessingResult result = processor.processTransaction( - blockchain, worldStateUpdater, blockHeader, transaction, diff --git a/scripts/capture.pl b/scripts/capture.pl index e27baffc80..dccf30dfbc 100755 --- a/scripts/capture.pl +++ b/scripts/capture.pl @@ -48,7 +48,7 @@ my $payload = "{ \\\"jsonrpc\\\":\\\"2.0\\\", - \\\"method\\\":\\\"rollup_captureConflation\\\", + \\\"method\\\":\\\"linea_captureConflation\\\", \\\"params\\\":[\\\"$start\\\", \\\"$end\\\"], \\\"id\\\":\\\"1\\\" }"; diff --git a/scripts/cloudsmith-upload.sh b/scripts/cloudsmith-upload.sh old mode 100644 new mode 100755 index 0bb6fd1a33..8de0acf23e --- a/scripts/cloudsmith-upload.sh +++ b/scripts/cloudsmith-upload.sh @@ -1,9 +1,8 @@ #!/bin/bash set -euo pipefail -LINEA_ARITHMETIZATION_VERSION=${1:?Must specify Linea Arithmetization version} -TAR_DIST=${2:?Must specify path to tar distribution} -ZIP_DIST=${3:?Must specify path to zip distribution} +VERSION=${1:?Must specify Linea Arithmetization version} +BUILD_DIR=${2:?Must specify Linea Arithmetization module build directory} ENV_DIR=./build/tmp/cloudsmith-env if [[ -d ${ENV_DIR} ]] ; then @@ -15,5 +14,5 @@ fi python3 -m pip install --upgrade cloudsmith-cli -cloudsmith push raw consensys/linea-arithmetization $TAR_DIST --republish --name 'linea-arithmetization.tar.gz' --version "${LINEA_ARITHMETIZATION_VERSION}" --summary "Linea Arithmetization ${LINEA_ARITHMETIZATION_VERSION} binary distribution" --description "Binary distribution of Linea Arithmetization ${LINEA_ARITHMETIZATION_VERSION}." --content-type 'application/tar+gzip' -cloudsmith push raw consensys/linea-arithmetization $ZIP_DIST --republish --name 'linea-arithmetization.zip' --version "${LINEA_ARITHMETIZATION_VERSION}" --summary "Linea Arithmetization ${LINEA_ARITHMETIZATION_VERSION} binary distribution" --description "Binary distribution of Linea Arithmetization ${LINEA_ARITHMETIZATION_VERSION}." --content-type 'application/zip' +echo ">>>>>>>>>>>>>> Uploading Maven Artifact for linea-arithmetization-${VERSION} to Cloudsmith ..." +cloudsmith push maven consensys/linea-arithmetization ${BUILD_DIR}/libs/linea-arithmetization-${VERSION}.jar --pom-file ${BUILD_DIR}/publications/mavenJava/pom-default.xml \ No newline at end of file diff --git a/zkevm-constraints b/zkevm-constraints index e201957fa2..4011a9d401 160000 --- a/zkevm-constraints +++ b/zkevm-constraints @@ -1 +1 @@ -Subproject commit e201957fa29b518739a02a4958e1ccee5f5f1764 +Subproject commit 4011a9d401ed6de33b9dc9813522af70e3cc80ca