diff --git a/.circleci/config.yml b/.circleci/config.yml index ebc0f5c8ea9b..4a2fc967519f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 parameters: ci_builder_image: type: string - default: us-docker.pkg.dev/oplabs-tools-artifacts/images/ci-builder:v0.49.0 + default: us-docker.pkg.dev/oplabs-tools-artifacts/images/ci-builder:v0.51.0 ci_builder_rust_image: type: string default: us-docker.pkg.dev/oplabs-tools-artifacts/images/ci-builder-rust:latest @@ -103,6 +103,13 @@ commands: pip3 install -r requirements.txt python3 main.py "<>" + install-contracts-dependencies: + description: "Install the dependencies for the smart contracts" + steps: + - run: + command: just install + working_directory: packages/contracts-bedrock + notify-failures-on-develop: description: "Notify Slack" parameters: @@ -137,7 +144,7 @@ jobs: - run: name: build Cannon example binaries command: make elf # only compile ELF binaries with Go, we do not have MIPS GCC for creating the debug-dumps. - working_directory: cannon/example + working_directory: cannon/testdata/example - run: name: Cannon Go lint command: | @@ -177,44 +184,22 @@ jobs: resource_class: xlarge steps: - checkout - - run: - name: "Check L1 geth version" - command: ./ops/scripts/geth-version-checker.sh || (echo "geth version is wrong, update ci-builder"; false) - - run: - name: git submodules - command: make submodules - - restore_cache: - name: Restore PNPM Package Cache - keys: - - pnpm-packages-v2-{{ checksum "pnpm-lock.yaml" }} +# - run: # temporarily disabled, to update ci-builder. +# name: "Check L1 geth version" +# command: ./ops/scripts/geth-version-checker.sh || (echo "geth version is wrong, update ci-builder"; false) + - install-contracts-dependencies - restore_cache: name: Restore Go modules cache key: gomod-{{ checksum "go.sum" }} - # Fetch node_modules into the pnpm store - # This will cache node_modules based on pnpm-lock so other steps can instantly install them with `pnpm install --prefer-offline` - # --prefer-offline installs node_modules instantly by just reading from cache if it exists rather than fetching from network - # when installing node_modules pnpm simply adds symlinks instead of copying the files which is why it is pretty much instant to run --prefer-offline - # this allows a caching strategy of only checking pnpm-lockfile so we don't have to keep it in sync with our packages - # For more information see https://pnpm.io/cli/fetch - - run: - name: Fetch dependencies - command: pnpm fetch --frozen-lockfile --prefer-offline - - save_cache: - name: Save PNPM Package Cache - key: pnpm-packages-v2-{{ checksum "pnpm-lock.yaml" }} - paths: - - "node_modules" - - run: - name: Install dependencies - command: pnpm install - run: name: print forge version command: forge --version - run: - name: Build monorepo + name: Build contracts environment: FOUNDRY_PROFILE: ci - command: pnpm build + command: just build + working_directory: packages/contracts-bedrock - run: name: Generate L2OO allocs command: DEVNET_L2OO="true" make devnet-allocs @@ -239,32 +224,33 @@ jobs: - persist_to_workspace: root: "." paths: - - "packages/**/dist" - "packages/contracts-bedrock/cache" - "packages/contracts-bedrock/artifacts" - "packages/contracts-bedrock/forge-artifacts" - - "packages/contracts-bedrock/tsconfig.tsbuildinfo" - - "packages/contracts-bedrock/tsconfig.build.tsbuildinfo" - ".devnet/allocs-l1.json" - ".devnet/allocs-l2-delta.json" - ".devnet/allocs-l2-ecotone.json" - ".devnet/allocs-l2-fjord.json" + - ".devnet/allocs-l2-granite.json" - ".devnet/addresses.json" - ".devnet-l2oo/allocs-l1.json" - ".devnet-l2oo/addresses.json" - ".devnet-l2oo/allocs-l2-delta.json" - ".devnet-l2oo/allocs-l2-ecotone.json" - ".devnet-l2oo/allocs-l2-fjord.json" + - ".devnet-l2oo/allocs-l2-granite.json" - ".devnet-plasma/allocs-l1.json" - ".devnet-plasma/addresses.json" - ".devnet-plasma/allocs-l2-delta.json" - ".devnet-plasma/allocs-l2-ecotone.json" - ".devnet-plasma/allocs-l2-fjord.json" + - ".devnet-plasma/allocs-l2-granite.json" - ".devnet-plasma-generic/allocs-l1.json" - ".devnet-plasma-generic/addresses.json" - ".devnet-plasma-generic/allocs-l2-delta.json" - ".devnet-plasma-generic/allocs-l2-ecotone.json" - ".devnet-plasma-generic/allocs-l2-fjord.json" + - ".devnet-plasma-generic/allocs-l2-granite.json" - "packages/contracts-bedrock/deploy-config/devnetL1.json" - "packages/contracts-bedrock/deployments/devnetL1" - notify-failures-on-develop @@ -446,9 +432,9 @@ jobs: - run: name: Sign command: | - git clone https://github.com/ethereum-optimism/binary_signer - cd binary_signer/signer - git checkout tags/v1.0.3 + VER=$(jq -r .binary_signer < versions.json) + wget -O - "https://github.com/ethereum-optimism/binary_signer/archive/refs/tags/v${VER}.tar.gz" | tar xz + cd "binary_signer-${VER}/signer" IMAGE_PATH="<>/<>/<>:<>" echo $IMAGE_PATH @@ -512,9 +498,7 @@ jobs: resource_class: xlarge steps: - checkout - - run: - name: git submodules - command: make submodules + - install-contracts-dependencies - check-changed: patterns: contracts-bedrock,op-node - run: @@ -524,7 +508,7 @@ jobs: # We do not use the pre-built contracts becuase forge coverage uses different optimizer settings - run: name: test and generate coverage - command: pnpm coverage:lcov + command: just coverage-lcov no_output_timeout: 18m environment: FOUNDRY_PROFILE: ci @@ -541,22 +525,31 @@ jobs: resource_class: xlarge steps: - checkout - - run: - name: git submodules - command: make submodules - check-changed: patterns: contracts-bedrock,op-node + - install-contracts-dependencies + - run: + name: print dependencies + command: just dep-status + working_directory: packages/contracts-bedrock - run: name: print forge version command: forge --version working_directory: packages/contracts-bedrock - run: name: run tests - command: pnpm test + command: just test environment: FOUNDRY_PROFILE: ci working_directory: packages/contracts-bedrock no_output_timeout: 15m + - run: + name: print failed test traces + command: just test-rerun + environment: + FOUNDRY_PROFILE: ci + working_directory: packages/contracts-bedrock + when: on_fail contracts-bedrock-checks: docker: @@ -564,33 +557,19 @@ jobs: resource_class: xlarge steps: - checkout - - run: - name: git submodules - command: make submodules - - restore_cache: - name: Restore PNPM Package Cache - keys: - - pnpm-packages-v2-{{ checksum "pnpm-lock.yaml" }} - attach_workspace: { at: "." } + - install-contracts-dependencies - check-changed: patterns: contracts-bedrock,op-node - setup_remote_docker: docker_layer_caching: true - # populate node modules from the cache - - run: - name: Install dependencies - command: pnpm install - working_directory: packages/contracts-bedrock - run: name: forge version command: forge --version - run: - # The solc warnings check must be the first step to build the contracts, that way the - # warnings are output here. On subsequent runs, forge will read artifacts from the cache - # so warnings would not occur. name: solc warnings check command: | - forge build --deny-warnings || echo "export SOLC_WARNINGS_CHECK=1" >> "$BASH_ENV" + forge build --force --deny-warnings || echo "export SOLC_WARNINGS_CHECK=1" >> "$BASH_ENV" environment: FOUNDRY_PROFILE: ci working_directory: packages/contracts-bedrock @@ -598,22 +577,22 @@ jobs: # Semver lock must come second because one of the later steps may modify the cache & force a contracts rebuild. name: semver lock command: | - pnpm semver-lock + just semver-lock git diff --exit-code semver-lock.json || echo "export SEMVER_LOCK_STATUS=1" >> "$BASH_ENV" working_directory: packages/contracts-bedrock - run: name: check deploy configs - command: pnpm validate-deploy-configs || echo "export DEPLOY_CONFIGS_STATUS=1" >> "$BASH_ENV" + command: just validate-deploy-configs || echo "export DEPLOY_CONFIGS_STATUS=1" >> "$BASH_ENV" working_directory: packages/contracts-bedrock - run: name: lint command: | - pnpm lint:check || echo "export LINT_STATUS=1" >> "$BASH_ENV" + just lint-check || echo "export LINT_STATUS=1" >> "$BASH_ENV" working_directory: packages/contracts-bedrock - run: name: gas snapshot command: | - pnpm gas-snapshot --check || echo "export GAS_SNAPSHOT_STATUS=1" >> "$BASH_ENV" + just gas-snapshot-check || echo "export GAS_SNAPSHOT_STATUS=1" >> "$BASH_ENV" environment: FOUNDRY_PROFILE: ci working_directory: packages/contracts-bedrock @@ -621,13 +600,13 @@ jobs: - run: name: invariant docs command: | - pnpm autogen:invariant-docs + just autogen-invariant-docs git diff --exit-code ./invariant-docs/*.md || echo "export INVARIANT_DOCS_STATUS=1" >> "$BASH_ENV" working_directory: packages/contracts-bedrock - run: name: snapshots command: | - pnpm snapshots:check || echo "export SNAPSHOTS_STATUS=1" >> "$BASH_ENV" + just snapshots-check || echo "export SNAPSHOTS_STATUS=1" >> "$BASH_ENV" working_directory: packages/contracts-bedrock - run: name: size check @@ -681,19 +660,12 @@ jobs: resource_class: medium steps: - checkout - - restore_cache: - name: Restore PNPM Package Cache - keys: - - pnpm-packages-v2-{{ checksum "pnpm-lock.yaml" }} - attach_workspace: { at: "." } - - run: - name: Install dependencies - command: pnpm install - check-changed: patterns: contracts-bedrock - run: name: validate spacers - command: pnpm validate-spacers + command: just validate-spacers working_directory: packages/contracts-bedrock todo-issues: @@ -891,6 +863,7 @@ jobs: cp /tmp/workspace/.devnet<>/allocs-l2-delta.json .devnet/allocs-l2-delta.json cp /tmp/workspace/.devnet<>/allocs-l2-ecotone.json .devnet/allocs-l2-ecotone.json cp /tmp/workspace/.devnet<>/allocs-l2-fjord.json .devnet/allocs-l2-fjord.json + cp /tmp/workspace/.devnet<>/allocs-l2-granite.json .devnet/allocs-l2-granite.json cp /tmp/workspace/.devnet<>/allocs-l1.json .devnet/allocs-l1.json cp /tmp/workspace/.devnet<>/addresses.json .devnet/addresses.json cp /tmp/workspace/packages/contracts-bedrock/deploy-config/devnetL1.json packages/contracts-bedrock/deploy-config/devnetL1.json @@ -1066,9 +1039,7 @@ jobs: key: gomod-{{ checksum "go.sum" }} - restore_cache: key: golang-build-cache - - run: - name: git submodules - command: make submodules + - install-contracts-dependencies - run: name: generate devnet allocs command: make devnet-allocs @@ -1078,6 +1049,7 @@ jobs: - ".devnet/allocs-l2-delta.json" - ".devnet/allocs-l2-ecotone.json" - ".devnet/allocs-l2-fjord.json" + - ".devnet/allocs-l2-granite.json" - ".devnet/allocs-l1.json" - ".devnet/addresses.json" - "packages/contracts-bedrock/deploy-config/devnetL1.json" @@ -1119,19 +1091,17 @@ jobs: - run: name: Install latest golang command: | - wget https://go.dev/dl/go1.21.1.linux-amd64.tar.gz + VER=$(jq -r .go < versions.json) sudo rm -rf /usr/local/go - sudo tar -C /usr/local -xzf go1.21.1.linux-amd64.tar.gz + wget "https://go.dev/dl/go${VER}.linux-amd64.tar.gz" -O - | sudo tar -C /usr/local -xz export PATH=$PATH:/usr/local/go/bin go version - run: name: Install Geth command: | - wget https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.13.14-2bd6bd01.tar.gz - # geth only provides md5 sums sadly - echo '76a04354dba9980fcbc35bece2957b30 geth-alltools-linux-amd64-1.13.14-2bd6bd01.tar.gz' | md5sum -c - - tar -xzvf geth-alltools-linux-amd64-1.13.14-2bd6bd01.tar.gz - sudo cp geth-alltools-linux-amd64-1.13.14-2bd6bd01/* /usr/local/bin + VER=$(jq -r .geth_release < versions.json) + wget "https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-${VER}.tar.gz" -O - | tar xz + sudo cp "geth-alltools-linux-amd64-${VER}"/* /usr/local/bin - run: name: Install eth2-testnet-genesis command: | @@ -1146,23 +1116,12 @@ jobs: source $HOME/.bashrc forge --version - run: - name: Install NVM - command: | - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash - source ~/.bashrc - nvm --version - - run: - name: Install Node - command: | - nvm install - nvm use && node --version && npm --version - - run: - name: Install pnpm + name: Install Just command: | - npm i pnpm --global - - run: - name: git submodules - command: make submodules + VER=$(jq -r .just < versions.json) + curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to $HOME/bin --tag "${VER}" + echo 'export PATH="${PATH}:$HOME/bin"' >> $BASH_ENV + - install-contracts-dependencies - attach_workspace: at: "." - when: @@ -1190,9 +1149,9 @@ jobs: docker tag "$IMAGE_BASE_PREFIX/op-challenger:<>" "$IMAGE_BASE_PREFIX/op-challenger:devnet" docker tag "$IMAGE_BASE_PREFIX/da-server:<>" "$IMAGE_BASE_PREFIX/da-server:devnet" - run: - name: pnpm install and build - command: | - pnpm install && pnpm build + name: Build contracts + working_directory: packages/contracts-bedrock + command: just build - run: name: Bring up the stack command: | @@ -1475,9 +1434,7 @@ jobs: resource_class: xlarge steps: - checkout - - run: - name: Checkout Submodule - command: make submodules + - install-contracts-dependencies - check-changed: no_go_deps: "true" patterns: contracts-bedrock/test/kontrol,contracts-bedrock/src/L1/OptimismPortal\.sol,contracts-bedrock/src/L1/OptimismPortal2\.sol,contracts-bedrock/src/L1/L1CrossDomainMessenger\.sol,contracts-bedrock/src/L1/L1ERC721Bridge\.sol,contracts-bedrock/src/L1/L1StandardBridge\.sol,contracts-bedrock/src/L1/ResourceMetering\.sol,contracts-bedrock/src/universal/StandardBridge\.sol,contracts-bedrock/src/universal/ERC721Bridge\.sol,contracts-bedrock/src/universal/CrossDomainMessenger\.sol @@ -1485,7 +1442,7 @@ jobs: docker_layer_caching: true - run: name: Run Kontrol Tests - command: pnpm test:kontrol + command: just test-kontrol working_directory: ./packages/contracts-bedrock - store_artifacts: path: ./packages/contracts-bedrock/test/kontrol/logs/kontrol-results_latest.tar.gz diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 281ccf7b012e..4c8918566485 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -3,29 +3,5 @@ description: Common setup steps used by our workflows runs: using: composite steps: - - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 9 - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version-file: .nvmrc - registry-url: https://registry.npmjs.org - cache: pnpm - - name: Setup foundry uses: foundry-rs/foundry-toolchain@v1 - - - name: Install node dependencies - shell: bash - run: pnpm install --frozen-lockfile - - name: Derive appropriate SHAs for base and head for `nx affected` commands - uses: nrwl/nx-set-shas@v3 - with: - main-branch-name: "develop" - - run: | - echo "nx using following shas:" - echo "BASE: ${{ env.NX_BASE }}" - echo "HEAD: ${{ env.NX_HEAD }}" - shell: bash diff --git a/.github/workflows/slither.yml b/.github/workflows/slither.yml index f863b8de60d8..069c6eb2f0e7 100644 --- a/.github/workflows/slither.yml +++ b/.github/workflows/slither.yml @@ -15,13 +15,6 @@ jobs: steps: - uses: actions/checkout@v4 - # Workaround to prevent slither-action from trying to install JS deps. - # Without this step, it detects the `package.json`, and since there is no - # lockfile it defaults `npm install` which fails due to the preinstall - # script to enforce pnpm. https://github.com/crytic/slither-action/issues/44#issuecomment-1338183656 - - name: Remove package.json - run: rm packages/contracts-bedrock/package.json - - name: Run Slither uses: crytic/slither-action@v0.4.0 id: slither diff --git a/.gitmodules b/.gitmodules index f2b84783c409..21ecaedbb77a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -26,3 +26,6 @@ [submodule "packages/contracts-bedrock/lib/automate"] path = packages/contracts-bedrock/lib/automate url = https://github.com/gelatodigital/automate +[submodule "packages/contracts-bedrock/lib/openzeppelin-contracts-v5"] + path = packages/contracts-bedrock/lib/openzeppelin-contracts-v5 + url = https://github.com/OpenZeppelin/openzeppelin-contracts diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 805b5a4e00bf..000000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v20.9.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 30f9e25db08d..c96ecf7bf165 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,7 +27,7 @@ Interactions within this repository are subject to a [Code of Conduct](https://g | [go](https://go.dev/) | `^1.21` | `go version` | | [node](https://nodejs.org/en/) | `^20` | `node --version` | | [nvm](https://github.com/nvm-sh/nvm) | `^0.39` | `nvm --version` | -| [pnpm](https://pnpm.io/installation) | `^8` | `pnpm --version` | +| [just](https://github.com/casey/just) | `^1.34.0`| `just --version` | | [foundry](https://github.com/foundry-rs/foundry#installation) | `^0.2.0` | `forge --version` | | [make](https://linux.die.net/man/1/make) | `^3` | `make --version` | | [jq](https://github.com/jqlang/jq) | `^1.6` | `jq --version` | @@ -46,7 +46,7 @@ You can use [`nvm`](https://github.com/nvm-sh/nvm) to manage multiple versions o `foundry` is updated frequently and occasionally contains breaking changes. This repository pins a specific version of `foundry` inside of [`versions.json`](./versions.json). -Use the command `pnpm update:foundry` at the root of the monorepo to make sure that your version of `foundry` is the same as the one currently being used in CI. +Use the command `just update-foundry` at the root of the monorepo to make sure that your version of `foundry` is the same as the one currently being used in CI. #### `direnv` @@ -89,19 +89,11 @@ Use the above command to rebuild the monorepo. Before running tests: **follow the above instructions to get everything built.** -#### Running unit tests (typescript) - -Run unit tests for all packages in parallel via: - -```bash -pnpm test -``` - -To run unit tests for a specific package: +#### Running unit tests (solidity) ```bash -cd packages/package-to-test -pnpm test +cd packages/contracts-bedrock +just test ``` #### Running unit tests (Go) @@ -125,7 +117,7 @@ To run `slither` locally, do: ```bash cd packages/contracts-bedrock pip3 install slither-analyzer -pnpm slither +just slither ``` ## Labels diff --git a/Makefile b/Makefile index 51d0d1397b33..4901e756936c 100644 --- a/Makefile +++ b/Makefile @@ -23,14 +23,6 @@ lint-go-fix: ## Lints Go code with specific linters and fixes reported issues golangci-lint run -E goimports,sqlclosecheck,bodyclose,asciicheck,misspell,errorlint --timeout 5m -e "errors.As" -e "errors.Is" ./... --fix .PHONY: lint-go-fix -build-ts: submodules ## Builds TypeScript components - if [ -f "$$NVM_DIR/nvm.sh" ]; then \ - . $$NVM_DIR/nvm.sh && nvm use; \ - fi - pnpm install:ci - pnpm build -.PHONY: build-ts - ci-builder: ## Builds the CI builder Docker image docker build -t ci-builder -f ops/docker/ci-builder/Dockerfile . .PHONY: ci-builder @@ -137,12 +129,24 @@ reproducible-prestate: ## Builds reproducible-prestate binary make -C ./op-program reproducible-prestate .PHONY: reproducible-prestate +# Include any files required for the devnet to build and run. This appears to be the only one that's actually needed. +DEVNET_CANNON_PRESTATE_FILES := op-program/bin/prestate-proof.json op-program/bin/prestate.json + +$(DEVNET_CANNON_PRESTATE_FILES): + make cannon-prestate + cannon-prestate: op-program cannon ## Generates prestate using cannon and op-program ./cannon/bin/cannon load-elf --path op-program/bin/op-program-client.elf --out op-program/bin/prestate.json --meta op-program/bin/meta.json ./cannon/bin/cannon run --proof-at '=0' --stop-at '=1' --input op-program/bin/prestate.json --meta op-program/bin/meta.json --proof-fmt 'op-program/bin/%d.json' --output "" mv op-program/bin/0.json op-program/bin/prestate-proof.json .PHONY: cannon-prestate +cannon-prestate-mt: op-program cannon ## Generates prestate using cannon and op-program in the multithreaded cannon format + ./cannon/bin/cannon load-elf --type mt --path op-program/bin/op-program-client.elf --out op-program/bin/prestate-mt.json --meta op-program/bin/meta-mt.json + ./cannon/bin/cannon run --type mt --proof-at '=0' --stop-at '=1' --input op-program/bin/prestate-mt.json --meta op-program/bin/meta-mt.json --proof-fmt 'op-program/bin/%d-mt.json' --output "" + mv op-program/bin/0-mt.json op-program/bin/prestate-proof-mt.json +.PHONY: cannon-prestate + mod-tidy: ## Cleans up unused dependencies in Go modules # Below GOPRIVATE line allows mod-tidy to be run immediately after # releasing new versions. This bypasses the Go modules proxy, which @@ -160,16 +164,14 @@ nuke: clean devnet-clean ## Completely clean the project directory git clean -Xdf .PHONY: nuke -pre-devnet: submodules ## Prepares for running a local devnet +## Prepares for running a local devnet +pre-devnet: submodules $(DEVNET_CANNON_PRESTATE_FILES) @if ! [ -x "$(command -v geth)" ]; then \ make install-geth; \ fi @if ! [ -x "$(command -v eth2-testnet-genesis)" ]; then \ make install-eth2-testnet-genesis; \ fi - @if [ ! -e op-program/bin ]; then \ - make cannon-prestate; \ - fi .PHONY: pre-devnet devnet-up: pre-devnet ## Starts the local devnet @@ -207,7 +209,7 @@ test-unit: ## Runs unit tests for all components make -C ./op-proposer test make -C ./op-batcher test make -C ./op-e2e test - pnpm test + (cd packages/contracts-bedrock && just test) .PHONY: test-unit # Remove the baseline-commit to generate a base reading & show all issues diff --git a/bedrock-devnet/devnet/__init__.py b/bedrock-devnet/devnet/__init__.py index 3c22de576104..fc265c48f690 100644 --- a/bedrock-devnet/devnet/__init__.py +++ b/bedrock-devnet/devnet/__init__.py @@ -22,7 +22,7 @@ log = logging.getLogger() # Global constants -FORKS = ["delta", "ecotone", "fjord"] +FORKS = ["delta", "ecotone", "fjord", "granite"] # Global environment variables DEVNET_NO_BUILD = os.getenv('DEVNET_NO_BUILD') == "true" diff --git a/cannon/.gitignore b/cannon/.gitignore index fc1a1f3b9949..c3e45199f0ed 100644 --- a/cannon/.gitignore +++ b/cannon/.gitignore @@ -5,7 +5,7 @@ cache venv .idea *.log -example/bin +testdata/example/bin contracts/out state.json *.json diff --git a/cannon/Makefile b/cannon/Makefile index f815b9f37474..0240b7df095f 100644 --- a/cannon/Makefile +++ b/cannon/Makefile @@ -20,7 +20,7 @@ clean: rm -rf bin elf: - make -C ./example elf + make -C ./testdata/example elf contract: cd ../packages/contracts-bedrock && forge build diff --git a/cannon/README.md b/cannon/README.md index 5ff497162f33..e9e751ce2ffe 100644 --- a/cannon/README.md +++ b/cannon/README.md @@ -83,7 +83,7 @@ The smart-contracts are integrated into the Optimism monorepo contracts: Example programs that can be run and proven with Cannon. Optional dependency, but required for `mipsevm` Go tests. -See [`example/Makefile`](./example/Makefile) for building the example MIPS binaries. +See [`testdata/example/Makefile`](./testdata/example/Makefile) for building the example MIPS binaries. ## License diff --git a/cannon/cmd/load_elf.go b/cannon/cmd/load_elf.go index f111d1a8831f..39e389ff23ca 100644 --- a/cannon/cmd/load_elf.go +++ b/cannon/cmd/load_elf.go @@ -4,6 +4,8 @@ import ( "debug/elf" "fmt" + "github.com/ethereum-optimism/optimism/cannon/mipsevm" + "github.com/ethereum-optimism/optimism/cannon/mipsevm/multithreaded" "github.com/urfave/cli/v2" "github.com/ethereum-optimism/optimism/cannon/mipsevm/program" @@ -39,6 +41,28 @@ var ( ) func LoadELF(ctx *cli.Context) error { + var createInitialState func(f *elf.File) (mipsevm.FPVMState, error) + var writeState func(path string, state mipsevm.FPVMState) error + + if vmType, err := vmTypeFromString(ctx); err != nil { + return err + } else if vmType == cannonVMType { + createInitialState = func(f *elf.File) (mipsevm.FPVMState, error) { + return program.LoadELF(f, singlethreaded.CreateInitialState) + } + writeState = func(path string, state mipsevm.FPVMState) error { + return jsonutil.WriteJSON[*singlethreaded.State](path, state.(*singlethreaded.State), OutFilePerm) + } + } else if vmType == mtVMType { + createInitialState = func(f *elf.File) (mipsevm.FPVMState, error) { + return program.LoadELF(f, multithreaded.CreateInitialState) + } + writeState = func(path string, state mipsevm.FPVMState) error { + return jsonutil.WriteJSON[*multithreaded.State](path, state.(*multithreaded.State), OutFilePerm) + } + } else { + return fmt.Errorf("invalid VM type: %q", vmType) + } elfPath := ctx.Path(LoadELFPathFlag.Name) elfProgram, err := elf.Open(elfPath) if err != nil { @@ -47,7 +71,7 @@ func LoadELF(ctx *cli.Context) error { if elfProgram.Machine != elf.EM_MIPS { return fmt.Errorf("ELF is not big-endian MIPS R3000, but got %q", elfProgram.Machine.String()) } - state, err := program.LoadELF(elfProgram, singlethreaded.CreateInitialState) + state, err := createInitialState(elfProgram) if err != nil { return fmt.Errorf("failed to load ELF data into VM state: %w", err) } @@ -71,7 +95,7 @@ func LoadELF(ctx *cli.Context) error { if err := jsonutil.WriteJSON[*program.Metadata](ctx.Path(LoadELFMetaFlag.Name), meta, OutFilePerm); err != nil { return fmt.Errorf("failed to output metadata: %w", err) } - return jsonutil.WriteJSON[*singlethreaded.State](ctx.Path(LoadELFOutFlag.Name), state, OutFilePerm) + return writeState(ctx.Path(LoadELFOutFlag.Name), state) } var LoadELFCommand = &cli.Command{ @@ -80,6 +104,7 @@ var LoadELFCommand = &cli.Command{ Description: "Load ELF file into Cannon JSON state, optionally patch out functions", Action: LoadELF, Flags: []cli.Flag{ + VMTypeFlag, LoadELFPathFlag, LoadELFPatchFlag, LoadELFOutFlag, diff --git a/cannon/cmd/log.go b/cannon/cmd/log.go index 30e92e3e4007..9270b2261709 100644 --- a/cannon/cmd/log.go +++ b/cannon/cmd/log.go @@ -2,9 +2,9 @@ package cmd import ( "io" + "log/slog" "os" - "golang.org/x/exp/slog" "golang.org/x/term" "github.com/ethereum/go-ethereum/log" diff --git a/cannon/cmd/run.go b/cannon/cmd/run.go index 22addbf3eb1c..23b6e1b75719 100644 --- a/cannon/cmd/run.go +++ b/cannon/cmd/run.go @@ -10,6 +10,7 @@ import ( "strings" "time" + "github.com/ethereum-optimism/optimism/cannon/mipsevm/multithreaded" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" @@ -24,13 +25,6 @@ import ( ) var ( - RunType = &cli.StringFlag{ - Name: "type", - Usage: "VM type to run. Options are 'cannon' (default)", - Value: "cannon", - // TODO(client-pod#903): This should be required once we have additional vm types - Required: false, - } RunInputFlag = &cli.PathFlag{ Name: "input", Usage: "path of input JSON state. Stdin if left empty.", @@ -258,20 +252,14 @@ func Guard(proc *os.ProcessState, fn StepFn) StepFn { var _ mipsevm.PreimageOracle = (*ProcessPreimageOracle)(nil) -type VMType string - -var cannonVMType VMType = "cannon" - func Run(ctx *cli.Context) error { if ctx.Bool(RunPProfCPU.Name) { defer profile.Start(profile.NoShutdownHook, profile.ProfilePath("."), profile.CPUProfile).Stop() } - var vmType VMType - if vmTypeStr := ctx.String(RunType.Name); vmTypeStr == string(cannonVMType) { - vmType = cannonVMType - } else { - return fmt.Errorf("unknown VM type %q", vmType) + vmType, err := vmTypeFromString(ctx) + if err != nil { + return err } guestLogger := Logger(os.Stderr, log.LevelInfo) @@ -366,6 +354,7 @@ func Run(ctx *cli.Context) error { var vm mipsevm.FPVM var debugProgram bool if vmType == cannonVMType { + l.Info("Using cannon VM") cannon, err := singlethreaded.NewInstrumentedStateFromFile(ctx.Path(RunInputFlag.Name), po, outLog, errLog, meta) if err != nil { return err @@ -380,6 +369,22 @@ func Run(ctx *cli.Context) error { } } vm = cannon + } else if vmType == mtVMType { + l.Info("Using cannon multithreaded VM") + cannon, err := multithreaded.NewInstrumentedStateFromFile(ctx.Path(RunInputFlag.Name), po, outLog, errLog, l) + if err != nil { + return err + } + debugProgram = ctx.Bool(RunDebugFlag.Name) + if debugProgram { + if metaPath := ctx.Path(RunMetaFlag.Name); metaPath == "" { + return fmt.Errorf("cannot enable debug mode without a metadata file") + } + if err := cannon.InitDebug(meta); err != nil { + return fmt.Errorf("failed to initialize debug mode: %w", err) + } + } + vm = cannon } else { return fmt.Errorf("unknown VM type %q", vmType) } @@ -503,7 +508,7 @@ var RunCommand = &cli.Command{ Description: "Run VM step(s) and generate proof data to replicate onchain. See flags to match when to output a proof, a snapshot, or to stop early.", Action: Run, Flags: []cli.Flag{ - RunType, + VMTypeFlag, RunInputFlag, RunOutputFlag, RunProofAtFlag, diff --git a/cannon/cmd/vmtype.go b/cannon/cmd/vmtype.go new file mode 100644 index 000000000000..0efc22370c94 --- /dev/null +++ b/cannon/cmd/vmtype.go @@ -0,0 +1,29 @@ +package cmd + +import ( + "fmt" + + "github.com/urfave/cli/v2" +) + +type VMType string + +var cannonVMType VMType = "cannon" +var mtVMType VMType = "cannon-mt" + +var VMTypeFlag = &cli.StringFlag{ + Name: "type", + Usage: "VM type to create state for. Options are 'cannon' (default), 'cannon-mt'", + Value: "cannon", + Required: false, +} + +func vmTypeFromString(ctx *cli.Context) (VMType, error) { + if vmTypeStr := ctx.String(VMTypeFlag.Name); vmTypeStr == string(cannonVMType) { + return cannonVMType, nil + } else if vmTypeStr == string(mtVMType) { + return mtVMType, nil + } else { + return "", fmt.Errorf("unknown VM type %q", vmTypeStr) + } +} diff --git a/cannon/cmd/witness.go b/cannon/cmd/witness.go index 656684b691e9..eda5fbca5fa0 100644 --- a/cannon/cmd/witness.go +++ b/cannon/cmd/witness.go @@ -4,6 +4,8 @@ import ( "fmt" "os" + "github.com/ethereum-optimism/optimism/cannon/mipsevm" + "github.com/ethereum-optimism/optimism/cannon/mipsevm/multithreaded" "github.com/urfave/cli/v2" "github.com/ethereum-optimism/optimism/cannon/mipsevm/singlethreaded" @@ -27,10 +29,23 @@ var ( func Witness(ctx *cli.Context) error { input := ctx.Path(WitnessInputFlag.Name) output := ctx.Path(WitnessOutputFlag.Name) - state, err := jsonutil.LoadJSON[singlethreaded.State](input) - if err != nil { - return fmt.Errorf("invalid input state (%v): %w", input, err) + var state mipsevm.FPVMState + if vmType, err := vmTypeFromString(ctx); err != nil { + return err + } else if vmType == cannonVMType { + state, err = jsonutil.LoadJSON[singlethreaded.State](input) + if err != nil { + return fmt.Errorf("invalid input state (%v): %w", input, err) + } + } else if vmType == mtVMType { + state, err = jsonutil.LoadJSON[multithreaded.State](input) + if err != nil { + return fmt.Errorf("invalid input state (%v): %w", input, err) + } + } else { + return fmt.Errorf("invalid VM type: %q", vmType) } + witness, h := state.EncodeWitness() if output != "" { if err := os.WriteFile(output, witness, 0755); err != nil { @@ -47,6 +62,7 @@ var WitnessCommand = &cli.Command{ Description: "Convert a Cannon JSON state into a binary witness. The hash of the witness is written to stdout", Action: Witness, Flags: []cli.Flag{ + VMTypeFlag, WitnessInputFlag, WitnessOutputFlag, }, diff --git a/cannon/example/alloc/go.sum b/cannon/example/alloc/go.sum deleted file mode 100644 index 5b5d4a3a6411..000000000000 --- a/cannon/example/alloc/go.sum +++ /dev/null @@ -1,12 +0,0 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/example/claim/go.sum b/cannon/example/claim/go.sum deleted file mode 100644 index 5b5d4a3a6411..000000000000 --- a/cannon/example/claim/go.sum +++ /dev/null @@ -1,12 +0,0 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/mipsevm/debug.go b/cannon/mipsevm/debug.go index 8c2246b9d580..f05b770c0ea1 100644 --- a/cannon/mipsevm/debug.go +++ b/cannon/mipsevm/debug.go @@ -1,7 +1,10 @@ package mipsevm +import "github.com/ethereum/go-ethereum/common/hexutil" + type DebugInfo struct { - Pages int `json:"pages"` - NumPreimageRequests int `json:"num_preimage_requests"` - TotalPreimageSize int `json:"total_preimage_size"` + Pages int `json:"pages"` + MemoryUsed hexutil.Uint64 `json:"memory_used"` + NumPreimageRequests int `json:"num_preimage_requests"` + TotalPreimageSize int `json:"total_preimage_size"` } diff --git a/cannon/mipsevm/memory/memory.go b/cannon/mipsevm/memory/memory.go index c782bdd00c61..e02720a2c0d6 100644 --- a/cannon/mipsevm/memory/memory.go +++ b/cannon/mipsevm/memory/memory.go @@ -323,8 +323,12 @@ func (m *Memory) ReadMemoryRange(addr uint32, count uint32) io.Reader { return &memReader{m: m, addr: addr, count: count} } +func (m *Memory) UsageRaw() uint64 { + return uint64(len(m.pages)) * PageSize +} + func (m *Memory) Usage() string { - total := uint64(len(m.pages)) * PageSize + total := m.UsageRaw() const unit = 1024 if total < unit { return fmt.Sprintf("%d B", total) diff --git a/cannon/mipsevm/multithreaded/instrumented.go b/cannon/mipsevm/multithreaded/instrumented.go index f318fae2c9d2..3eedab08a5ef 100644 --- a/cannon/mipsevm/multithreaded/instrumented.go +++ b/cannon/mipsevm/multithreaded/instrumented.go @@ -3,6 +3,7 @@ package multithreaded import ( "io" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/cannon/mipsevm" @@ -106,6 +107,7 @@ func (m *InstrumentedState) GetState() mipsevm.FPVMState { func (m *InstrumentedState) GetDebugInfo() *mipsevm.DebugInfo { return &mipsevm.DebugInfo{ Pages: m.state.Memory.PageCount(), + MemoryUsed: hexutil.Uint64(m.state.Memory.UsageRaw()), NumPreimageRequests: m.preimageOracle.NumPreimageRequests(), TotalPreimageSize: m.preimageOracle.TotalPreimageSize(), } diff --git a/cannon/mipsevm/multithreaded/instrumented_test.go b/cannon/mipsevm/multithreaded/instrumented_test.go index 50382ae18536..c20126d3ca22 100644 --- a/cannon/mipsevm/multithreaded/instrumented_test.go +++ b/cannon/mipsevm/multithreaded/instrumented_test.go @@ -32,7 +32,7 @@ func TestInstrumentedState_Claim(t *testing.T) { } func TestInstrumentedState_MultithreadedProgram(t *testing.T) { - state := testutil.LoadELFProgram(t, "../../example/bin/multithreaded.elf", CreateInitialState, false) + state := testutil.LoadELFProgram(t, "../../testdata/example/bin/multithreaded.elf", CreateInitialState, false) oracle := testutil.StaticOracle(t, []byte{}) var stdOutBuf, stdErrBuf bytes.Buffer @@ -56,7 +56,7 @@ func TestInstrumentedState_MultithreadedProgram(t *testing.T) { func TestInstrumentedState_Alloc(t *testing.T) { t.Skip("TODO(client-pod#906): Currently failing - need to debug.") - state := testutil.LoadELFProgram(t, "../../example/bin/alloc.elf", CreateInitialState, false) + state := testutil.LoadELFProgram(t, "../../testdata/example/bin/alloc.elf", CreateInitialState, false) const numAllocs = 100 // where each alloc is a 32 MiB chunk oracle := testutil.AllocOracle(t, numAllocs) diff --git a/cannon/mipsevm/multithreaded/state_test.go b/cannon/mipsevm/multithreaded/state_test.go index e6805423b165..e9dbef2db346 100644 --- a/cannon/mipsevm/multithreaded/state_test.go +++ b/cannon/mipsevm/multithreaded/state_test.go @@ -86,7 +86,7 @@ func TestState_EncodeWitness(t *testing.T) { } func TestState_JSONCodec(t *testing.T) { - elfProgram, err := elf.Open("../../example/bin/hello.elf") + elfProgram, err := elf.Open("../../testdata/example/bin/hello.elf") require.NoError(t, err, "open ELF file") state, err := program.LoadELF(elfProgram, CreateInitialState) require.NoError(t, err, "load ELF into state") diff --git a/cannon/mipsevm/program/patch.go b/cannon/mipsevm/program/patch.go index b26aa4d65b32..c845488dd7b9 100644 --- a/cannon/mipsevm/program/patch.go +++ b/cannon/mipsevm/program/patch.go @@ -47,12 +47,16 @@ func PatchGo(f *elf.File, st mipsevm.FPVMState) error { })); err != nil { return fmt.Errorf("failed to patch Go runtime.gcenable: %w", err) } + case "runtime.MemProfileRate": + if err := st.GetMemory().SetMemoryRange(uint32(s.Value), bytes.NewReader(make([]byte, 4))); err != nil { // disable mem profiling, to avoid a lot of unnecessary floating point ops + return err + } } } return nil } -// TODO(cp-903) Consider setting envar "GODEBUG=memprofilerate=0" for go programs to disable memprofiling +// TODO(cp-903) Consider setting envar "GODEBUG=memprofilerate=0" for go programs to disable memprofiling, instead of patching it out in PatchGo() func PatchStack(st mipsevm.FPVMState) error { // setup stack pointer sp := uint32(0x7f_ff_d0_00) diff --git a/cannon/mipsevm/singlethreaded/instrumented.go b/cannon/mipsevm/singlethreaded/instrumented.go index e6c6de8ff441..657dd0e5e904 100644 --- a/cannon/mipsevm/singlethreaded/instrumented.go +++ b/cannon/mipsevm/singlethreaded/instrumented.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum-optimism/optimism/cannon/mipsevm/exec" "github.com/ethereum-optimism/optimism/cannon/mipsevm/program" "github.com/ethereum-optimism/optimism/op-service/jsonutil" + "github.com/ethereum/go-ethereum/common/hexutil" ) type InstrumentedState struct { @@ -109,6 +110,7 @@ func (m *InstrumentedState) GetState() mipsevm.FPVMState { func (m *InstrumentedState) GetDebugInfo() *mipsevm.DebugInfo { return &mipsevm.DebugInfo{ Pages: m.state.Memory.PageCount(), + MemoryUsed: hexutil.Uint64(m.state.Memory.UsageRaw()), NumPreimageRequests: m.preimageOracle.NumPreimageRequests(), TotalPreimageSize: m.preimageOracle.TotalPreimageSize(), } diff --git a/cannon/mipsevm/singlethreaded/state_test.go b/cannon/mipsevm/singlethreaded/state_test.go index 2ab4a5009b0e..27588f8b67ed 100644 --- a/cannon/mipsevm/singlethreaded/state_test.go +++ b/cannon/mipsevm/singlethreaded/state_test.go @@ -58,7 +58,7 @@ func TestStateHash(t *testing.T) { } func TestStateJSONCodec(t *testing.T) { - elfProgram, err := elf.Open("../../example/bin/hello.elf") + elfProgram, err := elf.Open("../../testdata/example/bin/hello.elf") require.NoError(t, err, "open ELF file") state, err := program.LoadELF(elfProgram, CreateInitialState) require.NoError(t, err, "load ELF into state") diff --git a/cannon/mipsevm/tests/evm_test.go b/cannon/mipsevm/tests/evm_test.go index 361a924eb34d..41826be04d72 100644 --- a/cannon/mipsevm/tests/evm_test.go +++ b/cannon/mipsevm/tests/evm_test.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" "github.com/stretchr/testify/require" @@ -40,7 +41,7 @@ func TestEVM(t *testing.T) { require.NoError(t, err) contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger // no-tracer by default, but test_util.MarkdownTracer + var tracer *tracing.Hooks // no-tracer by default, but test_util.MarkdownTracer for _, f := range testFiles { t.Run(f.Name(), func(t *testing.T) { @@ -102,7 +103,7 @@ func TestEVM(t *testing.T) { func TestEVM_CloneFlags(t *testing.T) { //contracts, addrs := testContractsSetup(t) - //var tracer vm.EVMLogger + //var tracer *tracing.Hooks cases := []struct { name string @@ -156,7 +157,7 @@ func TestEVM_CloneFlags(t *testing.T) { func TestEVMSingleStep(t *testing.T) { contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger + var tracer *tracing.Hooks cases := []struct { name string @@ -194,7 +195,7 @@ func TestEVMSingleStep(t *testing.T) { func TestEVMSysWriteHint(t *testing.T) { contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger + var tracer *tracing.Hooks cases := []struct { name string @@ -375,7 +376,7 @@ func TestEVMSysWriteHint(t *testing.T) { func TestEVMFault(t *testing.T) { contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger // no-tracer by default, but see test_util.MarkdownTracer + var tracer *tracing.Hooks // no-tracer by default, but see test_util.MarkdownTracer sender := common.Address{0x13, 0x37} env, evmState := testutil.NewEVMEnv(contracts, addrs) @@ -422,12 +423,12 @@ func TestEVMFault(t *testing.T) { func TestHelloEVM(t *testing.T) { contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger // no-tracer by default, but see test_util.MarkdownTracer + var tracer *tracing.Hooks // no-tracer by default, but see test_util.MarkdownTracer evm := testutil.NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) testutil.LogStepFailureAtCleanup(t, evm) - state := testutil.LoadELFProgram(t, "../../example/bin/hello.elf", singlethreaded.CreateInitialState, true) + state := testutil.LoadELFProgram(t, "../../testdata/example/bin/hello.elf", singlethreaded.CreateInitialState, true) var stdOutBuf, stdErrBuf bytes.Buffer goState := singlethreaded.NewInstrumentedState(state, nil, io.MultiWriter(&stdOutBuf, os.Stdout), io.MultiWriter(&stdErrBuf, os.Stderr), nil) @@ -464,12 +465,12 @@ func TestHelloEVM(t *testing.T) { func TestClaimEVM(t *testing.T) { contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger // no-tracer by default, but see test_util.MarkdownTracer + var tracer *tracing.Hooks // no-tracer by default, but see test_util.MarkdownTracer evm := testutil.NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) testutil.LogStepFailureAtCleanup(t, evm) - state := testutil.LoadELFProgram(t, "../../example/bin/claim.elf", singlethreaded.CreateInitialState, true) + state := testutil.LoadELFProgram(t, "../../testdata/example/bin/claim.elf", singlethreaded.CreateInitialState, true) oracle, expectedStdOut, expectedStdErr := testutil.ClaimTestOracle(t) var stdOutBuf, stdErrBuf bytes.Buffer diff --git a/cannon/mipsevm/testutil/evm.go b/cannon/mipsevm/testutil/evm.go index 29edd6a63fe5..7cd48403b986 100644 --- a/cannon/mipsevm/testutil/evm.go +++ b/cannon/mipsevm/testutil/evm.go @@ -6,6 +6,7 @@ import ( "math/big" "os" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/ethereum-optimism/optimism/op-chain-ops/foundry" @@ -122,6 +123,6 @@ func (d *testChain) GetHeader(h common.Hash, n uint64) *types.Header { } } -func MarkdownTracer() vm.EVMLogger { - return logger.NewMarkdownLogger(&logger.Config{}, os.Stdout) +func MarkdownTracer() *tracing.Hooks { + return logger.NewMarkdownLogger(&logger.Config{}, os.Stdout).Hooks() } diff --git a/cannon/mipsevm/testutil/mips.go b/cannon/mipsevm/testutil/mips.go index d79b5040c316..2b45ab2d39ce 100644 --- a/cannon/mipsevm/testutil/mips.go +++ b/cannon/mipsevm/testutil/mips.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" "github.com/stretchr/testify/require" @@ -33,7 +34,7 @@ func NewMIPSEVM(artifacts *Artifacts, addrs *Addresses) *MIPSEVM { return &MIPSEVM{env, evmState, addrs, nil, artifacts, math.MaxUint64, nil} } -func (m *MIPSEVM) SetTracer(tracer vm.EVMLogger) { +func (m *MIPSEVM) SetTracer(tracer *tracing.Hooks) { m.env.Config.Tracer = tracer } diff --git a/cannon/mipsevm/testutil/vmtests.go b/cannon/mipsevm/testutil/vmtests.go index 71bb9937f224..c016b91e076a 100644 --- a/cannon/mipsevm/testutil/vmtests.go +++ b/cannon/mipsevm/testutil/vmtests.go @@ -78,7 +78,7 @@ func RunVMTests_OpenMips[T mipsevm.FPVMState](t *testing.T, stateFactory StateFa } func RunVMTest_Hello[T mipsevm.FPVMState](t *testing.T, initState program.CreateInitialFPVMState[T], vmFactory VMFactory[T], doPatchGo bool) { - state := LoadELFProgram(t, "../../example/bin/hello.elf", initState, doPatchGo) + state := LoadELFProgram(t, "../../testdata/example/bin/hello.elf", initState, doPatchGo) var stdOutBuf, stdErrBuf bytes.Buffer us := vmFactory(state, nil, io.MultiWriter(&stdOutBuf, os.Stdout), io.MultiWriter(&stdErrBuf, os.Stderr), CreateLogger()) @@ -99,7 +99,7 @@ func RunVMTest_Hello[T mipsevm.FPVMState](t *testing.T, initState program.Create } func RunVMTest_Claim[T mipsevm.FPVMState](t *testing.T, initState program.CreateInitialFPVMState[T], vmFactory VMFactory[T], doPatchGo bool) { - state := LoadELFProgram(t, "../../example/bin/claim.elf", initState, doPatchGo) + state := LoadELFProgram(t, "../../testdata/example/bin/claim.elf", initState, doPatchGo) oracle, expectedStdOut, expectedStdErr := ClaimTestOracle(t) diff --git a/cannon/testdata/README.md b/cannon/testdata/README.md new file mode 100644 index 000000000000..4730cac00b0d --- /dev/null +++ b/cannon/testdata/README.md @@ -0,0 +1,11 @@ +# Cannon testdata + +These example Go programs are used in tests, +and encapsulated as their own Go modules. + +## Testdata + +The `testdata` directory name (special Go exception) prevents tools like `go mod tidy` +that run from the monorepo root from picking up on the test data, +preventing noisy dependabot PRs. + diff --git a/cannon/example/Makefile b/cannon/testdata/example/Makefile similarity index 100% rename from cannon/example/Makefile rename to cannon/testdata/example/Makefile diff --git a/cannon/example/alloc/go.mod b/cannon/testdata/example/alloc/go.mod similarity index 67% rename from cannon/example/alloc/go.mod rename to cannon/testdata/example/alloc/go.mod index d2e4bd2239f3..a69b250b40af 100644 --- a/cannon/example/alloc/go.mod +++ b/cannon/testdata/example/alloc/go.mod @@ -7,8 +7,8 @@ toolchain go1.21.1 require github.com/ethereum-optimism/optimism v0.0.0 require ( - golang.org/x/crypto v0.25.0 // indirect - golang.org/x/sys v0.22.0 // indirect + golang.org/x/crypto v0.26.0 // indirect + golang.org/x/sys v0.23.0 // indirect ) -replace github.com/ethereum-optimism/optimism v0.0.0 => ../../.. +replace github.com/ethereum-optimism/optimism v0.0.0 => ../../../.. diff --git a/cannon/testdata/example/alloc/go.sum b/cannon/testdata/example/alloc/go.sum new file mode 100644 index 000000000000..18c7fa264e65 --- /dev/null +++ b/cannon/testdata/example/alloc/go.sum @@ -0,0 +1,12 @@ +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/example/alloc/main.go b/cannon/testdata/example/alloc/main.go similarity index 100% rename from cannon/example/alloc/main.go rename to cannon/testdata/example/alloc/main.go diff --git a/cannon/example/claim/go.mod b/cannon/testdata/example/claim/go.mod similarity index 67% rename from cannon/example/claim/go.mod rename to cannon/testdata/example/claim/go.mod index b7417d15317b..ae511e9626f4 100644 --- a/cannon/example/claim/go.mod +++ b/cannon/testdata/example/claim/go.mod @@ -7,8 +7,8 @@ toolchain go1.21.1 require github.com/ethereum-optimism/optimism v0.0.0 require ( - golang.org/x/crypto v0.25.0 // indirect - golang.org/x/sys v0.22.0 // indirect + golang.org/x/crypto v0.26.0 // indirect + golang.org/x/sys v0.23.0 // indirect ) -replace github.com/ethereum-optimism/optimism v0.0.0 => ../../.. +replace github.com/ethereum-optimism/optimism v0.0.0 => ../../../.. diff --git a/cannon/testdata/example/claim/go.sum b/cannon/testdata/example/claim/go.sum new file mode 100644 index 000000000000..18c7fa264e65 --- /dev/null +++ b/cannon/testdata/example/claim/go.sum @@ -0,0 +1,12 @@ +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/example/claim/main.go b/cannon/testdata/example/claim/main.go similarity index 100% rename from cannon/example/claim/main.go rename to cannon/testdata/example/claim/main.go diff --git a/cannon/example/hello/go.mod b/cannon/testdata/example/hello/go.mod similarity index 100% rename from cannon/example/hello/go.mod rename to cannon/testdata/example/hello/go.mod diff --git a/cannon/example/hello/main.go b/cannon/testdata/example/hello/main.go similarity index 100% rename from cannon/example/hello/main.go rename to cannon/testdata/example/hello/main.go diff --git a/cannon/example/multithreaded/go.mod b/cannon/testdata/example/multithreaded/go.mod similarity index 100% rename from cannon/example/multithreaded/go.mod rename to cannon/testdata/example/multithreaded/go.mod diff --git a/cannon/example/multithreaded/main.go b/cannon/testdata/example/multithreaded/main.go similarity index 100% rename from cannon/example/multithreaded/main.go rename to cannon/testdata/example/multithreaded/main.go diff --git a/docs/security-reviews/2022_12-DepositTransaction-RuntimeVerification.pdf b/docs/security-reviews/2022_12-DepositTransaction-RuntimeVerification.pdf new file mode 100644 index 000000000000..36d31dfb7f9c Binary files /dev/null and b/docs/security-reviews/2022_12-DepositTransaction-RuntimeVerification.pdf differ diff --git a/docs/security-reviews/2023_12_Trust_SuperchainConfigUpgrade.pdf b/docs/security-reviews/2023_12_SuperchainConfigUpgrade_Trust.pdf similarity index 100% rename from docs/security-reviews/2023_12_Trust_SuperchainConfigUpgrade.pdf rename to docs/security-reviews/2023_12_SuperchainConfigUpgrade_Trust.pdf diff --git a/docs/security-reviews/README.md b/docs/security-reviews/README.md index 99bde07a77b1..2d86af45b770 100644 --- a/docs/security-reviews/README.md +++ b/docs/security-reviews/README.md @@ -5,21 +5,25 @@ The following is a list of past security reviews. Each review is focused on a different part of the codebase, and at a different point in time. Please see the report for the specific details. -| Date | Reviewer | Focus | Report Link | -| ------- | ------------------- | ------------------------- | ---------------------------------------------------------------------------------------------- | -| 2020-10 | Trail of Bits | Rollup | [2020_10-TrailOfBits.pdf](./2020_10-Rollup-TrailOfBits.pdf) | -| 2020-11 | Dapphub | ECDSA Wallet | [2020_11-Dapphub-ECDSA_Wallet.pdf](./2020_11-Dapphub-ECDSA_Wallet.pdf) | -| 2021-03 | OpenZeppelin | OVM and Rollup | [2021_03-OVM_and_Rollup-OpenZeppelin.pdf](./2021_03-OVM_and_Rollup-OpenZeppelin.pdf) | -| 2021-03 | ConsenSys Diligence | Safety Checker | [2021_03-SafetyChecker-ConsenSysDiligence.pdf](./2021_03-SafetyChecker-ConsenSysDiligence.pdf) | -| 2022-05 | Zeppelin | Bedrock Contracts | [2022_05-Bedrock_Contracts-Zeppelin.pdf](./2022_05-Bedrock_Contracts-Zeppelin.pdf) | -| 2022-05 | Trail of Bits | OpNode | [2022_05-OpNode-TrailOfBits.pdf](./2022_05-OpNode-TrailOfBits.pdf) | -| 2022-08 | Sigma Prime | Bedrock GoLang | [2022_08-Bedrock_GoLang-SigmaPrime.pdf](./2022_08-Bedrock_GoLang-SigmaPrime.pdf) | -| 2022-09 | Zeppelin | Bedrock and Periphery | [2022_09-Bedrock_and_Periphery-Zeppelin.pdf](./2022_09-Bedrock_and_Periphery-Zeppelin.pdf) | -| 2022-10 | Spearbit | Drippie | [2022_10-Drippie-Spearbit.pdf](./2022_10-Drippie-Spearbit.pdf) | -| 2022-11 | Trail of Bits | Invariant Testing | [2022_11-Invariant_Testing-TrailOfBits.pdf](./2022_11-Invariant_Testing-TrailOfBits.pdf) | -| 2023-01 | Trail of Bits | Bedrock Updates | [2023_01-Bedrock_Updates-TrailOfBits.pdf](./2023_01-Bedrock_Updates-TrailOfBits.pdf) | -| 2023-01 | Sherlock | Bedrock | [Sherlock Bedrock Contest](https://audits.sherlock.xyz/contests/38) | -| 2023-03 | Sherlock | Bedrock Fixes | [Sherlock Bedrock Contest - Fix Review](https://audits.sherlock.xyz/contests/63) | -| 2023-12 | Trust | Superchain Config Upgrade | [2023_12_Trust_SuperchainConfigUpgrade.pdf](./2023_12_Trust_SuperchainConfigUpgrade.pdf) | -| 2024-02 | Cantina | MCP L1 | [2024_02-MCP_L1-Cantina.pdf](./2024_02-MCP_L1-Cantina.pdf) | -| 2024-03 | Sherlock | MCP L1 | [Sherlock Optimism Fault Proofs Contest](https://audits.sherlock.xyz/contests/205) | +| Date | Reviewer | Focus | Report Link | +| ------- | -------------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 2020-10 | Trail of Bits | Rollup | [2020_10-TrailOfBits.pdf](./2020_10-Rollup-TrailOfBits.pdf) | +| 2020-11 | Dapphub | ECDSA Wallet | [2020_11-Dapphub-ECDSA_Wallet.pdf](./2020_11-Dapphub-ECDSA_Wallet.pdf) | +| 2021-03 | OpenZeppelin | OVM and Rollup | [2021_03-OVM_and_Rollup-OpenZeppelin.pdf](./2021_03-OVM_and_Rollup-OpenZeppelin.pdf) | +| 2021-03 | ConsenSys Diligence | Safety Checker | [2021_03-SafetyChecker-ConsenSysDiligence.pdf](./2021_03-SafetyChecker-ConsenSysDiligence.pdf) | +| 2022-05 | Zeppelin | Bedrock Contracts | [2022_05-Bedrock_Contracts-Zeppelin.pdf](./2022_05-Bedrock_Contracts-Zeppelin.pdf) | +| 2022-05 | Trail of Bits | OpNode | [2022_05-OpNode-TrailOfBits.pdf](./2022_05-OpNode-TrailOfBits.pdf) | +| 2022-08 | Sigma Prime | Bedrock GoLang | [2022_08-Bedrock_GoLang-SigmaPrime.pdf](./2022_08-Bedrock_GoLang-SigmaPrime.pdf) | +| 2022-09 | Zeppelin | Bedrock and Periphery | [2022_09-Bedrock_and_Periphery-Zeppelin.pdf](./2022_09-Bedrock_and_Periphery-Zeppelin.pdf) | +| 2022-10 | Spearbit | Drippie | [2022_10-Drippie-Spearbit.pdf](./2022_10-Drippie-Spearbit.pdf) | +| 2022-11 | Trail of Bits | Invariant Testing | [2022_11-Invariant_Testing-TrailOfBits.pdf](./2022_11-Invariant_Testing-TrailOfBits.pdf) | +| 2022-12 | Runtime Verification | Deposit Transaction | [2022_12-DepositTransaction-RuntimeVerification.pdf](./2022_12-DepositTransaction-RuntimeVerification.pdf) | +| 2023-01 | Trail of Bits | Bedrock Updates | [2023_01-Bedrock_Updates-TrailOfBits.pdf](./2023_01-Bedrock_Updates-TrailOfBits.pdf) | +| 2023-01 | Sherlock | Bedrock | [Sherlock Bedrock Contest](https://audits.sherlock.xyz/contests/38) | +| 2023-03 | Sherlock | Bedrock Fixes | [Sherlock Bedrock Contest - Fix Review](https://audits.sherlock.xyz/contests/63) | +| 2023-12 | Trust | Superchain Config Upgrade | [2023_12_SuperchainConfigUpgrade_Trust.pdf](./2023_12_SuperchainConfigUpgrade_Trust.pdf) | +| 2024-02 | Runtime Verification | Pausability | [Kontrol Verification][kontrol] | +| 2024-02 | Cantina | MCP L1 | [2024_02-MCP_L1-Cantina.pdf](./2024_02-MCP_L1-Cantina.pdf) | +| 2024-03 | Sherlock | MCP L1 | [Sherlock Optimism Fault Proofs Contest](https://audits.sherlock.xyz/contests/205) | + +[kontrol]: https://github.com/ethereum-optimism/optimism/blob/876e16ad04968f0bb641eb76f98eb77e7e1a3e16/packages/contracts-bedrock/test/kontrol/README.md diff --git a/go.mod b/go.mod index 5229f5abd28f..ae123dc9768a 100644 --- a/go.mod +++ b/go.mod @@ -8,11 +8,11 @@ require ( github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 github.com/cockroachdb/pebble v0.0.0-20231018212520-f6cde3fc2fa4 github.com/consensys/gnark-crypto v0.12.1 - github.com/crate-crypto/go-kzg-4844 v0.7.0 + github.com/crate-crypto/go-kzg-4844 v1.0.0 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 - github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240717194452-c01722001e88 - github.com/ethereum/go-ethereum v1.13.15 + github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240812010938-34a43d577f74 + github.com/ethereum/go-ethereum v1.14.7 github.com/fsnotify/fsnotify v1.7.0 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb github.com/google/go-cmp v0.6.0 @@ -41,19 +41,19 @@ require ( github.com/prometheus/client_golang v1.19.1 github.com/protolambda/ctxlock v0.1.0 github.com/stretchr/testify v1.9.0 - github.com/urfave/cli/v2 v2.27.3 - golang.org/x/crypto v0.25.0 + github.com/urfave/cli/v2 v2.27.4 + golang.org/x/crypto v0.26.0 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 - golang.org/x/sync v0.7.0 - golang.org/x/term v0.22.0 - golang.org/x/time v0.5.0 + golang.org/x/sync v0.8.0 + golang.org/x/term v0.23.0 + golang.org/x/time v0.6.0 ) require ( github.com/BurntSushi/toml v1.4.0 // indirect - github.com/DataDog/zstd v1.5.5 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/VictoriaMetrics/fastcache v1.12.1 // indirect + github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/VictoriaMetrics/fastcache v1.12.2 // indirect github.com/allegro/bigcache v1.2.1 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/benbjohnson/clock v1.3.5 // indirect @@ -63,8 +63,8 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/btcsuite/btcd/btcutil v1.1.5 // indirect github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect @@ -72,28 +72,29 @@ require ( github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 // indirect + github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect - github.com/deckarep/golang-set/v2 v2.3.0 // indirect + github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect github.com/deepmap/oapi-codegen v1.8.2 // indirect github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de // indirect github.com/dlclark/regexp2 v1.7.0 // indirect github.com/docker/go-units v0.5.0 // indirect + github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0 // indirect github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/elastic/gosigar v0.14.2 // indirect - github.com/ethereum/c-kzg-4844 v0.4.0 // indirect - github.com/fatih/color v1.15.0 // indirect + github.com/ethereum/c-kzg-4844 v1.0.0 // indirect + github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0 // indirect + github.com/fatih/color v1.16.0 // indirect github.com/felixge/fgprof v0.9.3 // indirect github.com/ferranbt/fastssz v0.1.2 // indirect github.com/fjl/memsize v0.0.2 // indirect github.com/flynn/noise v1.1.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect - github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect - github.com/getsentry/sentry-go v0.20.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-ini/ini v1.67.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect @@ -103,7 +104,7 @@ require ( github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/gopacket v1.1.19 // indirect github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 // indirect github.com/google/uuid v1.6.0 // indirect @@ -129,7 +130,8 @@ require ( github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 // indirect - github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c // indirect + github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52 // indirect + github.com/kilic/bls12-381 v0.1.0 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/koron/go-ssdp v0.0.4 // indirect github.com/kr/pretty v0.3.1 // indirect @@ -189,6 +191,9 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.48.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect + github.com/protolambda/bls12-381-util v0.1.0 // indirect + github.com/protolambda/zrnt v0.32.2 // indirect + github.com/protolambda/ztyp v0.2.2 // indirect github.com/quic-go/qpack v0.4.0 // indirect github.com/quic-go/quic-go v0.44.0 // indirect github.com/quic-go/webtransport-go v0.8.0 // indirect @@ -217,18 +222,18 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/mod v0.19.0 // indirect golang.org/x/net v0.27.0 // indirect - golang.org/x/sys v0.22.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/sys v0.23.0 // indirect + golang.org/x/text v0.17.0 // indirect golang.org/x/tools v0.23.0 // indirect google.golang.org/protobuf v1.34.1 // indirect - gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect lukechampine.com/blake3 v1.2.1 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) -replace github.com/ethereum/go-ethereum => github.com/ethereum-optimism/op-geth v1.101315.3-rc.1 +replace github.com/ethereum/go-ethereum v1.14.7 => github.com/ethereum-optimism/op-geth v1.101407.0-rc.1.0.20240812224053-8d99ca68bb1a //replace github.com/ethereum/go-ethereum v1.13.9 => ../op-geth @@ -236,3 +241,7 @@ replace github.com/ethereum/go-ethereum => github.com/ethereum-optimism/op-geth // This release keeps breaking Go builds. Stop that. exclude github.com/kataras/iris/v12 v12.2.0-beta5 + +exclude github.com/kataras/iris/v12 v12.2.0 + +exclude github.com/kataras/iris/v12 v12.2.11 diff --git a/go.sum b/go.sum index b1ea2d72af9c..7c1dc9964663 100644 --- a/go.sum +++ b/go.sum @@ -14,13 +14,13 @@ github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0 github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= -github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e h1:ZIWapoIRN1VqT8GR8jAwb1Ie9GyehWjVcGh32Y2MznE= +github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= -github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= +github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= +github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -82,8 +82,9 @@ github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -96,8 +97,8 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/pebble v0.0.0-20231018212520-f6cde3fc2fa4 h1:PuHFhOUMnD62r80dN+Ik5qco2drekgsUSVdcHsvllec= @@ -121,10 +122,10 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= -github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= -github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= +github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLRPrZhHjHxufI8+2UG/i25QG92j0Er9p6I= +github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= +github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= +github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -134,8 +135,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= -github.com/deckarep/golang-set/v2 v2.3.0 h1:qs18EKUfHm2X9fA50Mr/M5hccg2tNnVqsiBImnyDs0g= -github.com/deckarep/golang-set/v2 v2.3.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= +github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= @@ -158,6 +159,8 @@ github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnm github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0 h1:C7t6eeMaEQVy6e8CarIhscYQlNmw5e3G36y7l7Y21Ao= +github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0/go.mod h1:56wL82FO0bfMU5RvfXoIwSOP2ggqqxT+tAfNEIyxuHw= github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127 h1:qwcF+vdFrvPSEUDSX5RVoRccG8a5DhOdWdQ4zN62zzo= github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127/go.mod h1:QMWlm50DNe14hD7t24KEqZuUdC9sOTy8W6XbCU1mlw4= @@ -171,15 +174,17 @@ github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/ github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z8veEq5ZO3DfIhZ7xgRP9WTc= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs= -github.com/ethereum-optimism/op-geth v1.101315.3-rc.1 h1:Q/B0FBdtglzsFtqurvUsiNfH8isCOFFF/pf9ss0L4eY= -github.com/ethereum-optimism/op-geth v1.101315.3-rc.1/go.mod h1:h5C5tP+7gkMrlUGENuiV5ddlwJ4RxLdmdapRuTAGlnw= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240717194452-c01722001e88 h1:pNwXkcFBM230tLKbw9mju6P568x20G6H0ka9y8pKe70= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240717194452-c01722001e88/go.mod h1:zy9f3TNPS7pwW4msMitF83fp0Wf452tZ6+Fg6d4JyXM= -github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= -github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum-optimism/op-geth v1.101407.0-rc.1.0.20240812224053-8d99ca68bb1a h1:OK3wB7HbdhCneSowC1XZusHaLIVdXoRLuCWgXp5Tjuc= +github.com/ethereum-optimism/op-geth v1.101407.0-rc.1.0.20240812224053-8d99ca68bb1a/go.mod h1:9pT+bF20XwCBE7WkjfRSsCg6RN6Njdbr924DtQ3+geY= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240812010938-34a43d577f74 h1:HQZQalpPUXs9qnJgDmEDzpPO70Z1p8Le2l0bZ9eJjCk= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240812010938-34a43d577f74/go.mod h1:zy9f3TNPS7pwW4msMitF83fp0Wf452tZ6+Fg6d4JyXM= +github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA= +github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0 h1:KrE8I4reeVvf7C1tm8elRjj4BdscTYzz/WAbYyf/JI4= +github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0/go.mod h1:D9AJLVXSyZQXJQVk8oh1EwjISE+sJTn2duYIZC0dy3w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= github.com/ferranbt/fastssz v0.1.2 h1:Dky6dXlngF6Qjc+EfDipAkE83N5I5DE68bY6O0VLNPk= @@ -198,12 +203,10 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getsentry/sentry-go v0.20.0 h1:bwXW98iMRIWxn+4FgPW7vMrjmbym6HblXALmhjHmQaQ= -github.com/getsentry/sentry-go v0.20.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= @@ -258,8 +261,8 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= @@ -340,6 +343,7 @@ github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6w github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/holiman/uint256 v1.3.1 h1:JfTzmih28bittyHM8z360dCjIA9dbPIBlcTI6lmctQs= github.com/holiman/uint256 v1.3.1/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -386,8 +390,10 @@ github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c h1:AqsttAyEyIEsNz5WLRwuRwjiT5CMDUfLk6cFJDVPebs= -github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52 h1:msKODTL1m0wigztaqILOtla9HeW1ciscYG4xjLtvk5I= +github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52/go.mod h1:qk1sX/IBgppQNcGCRoj90u6EGC056EBoIc1oEjCWla8= +github.com/kilic/bls12-381 v0.1.0 h1:encrdjqKMEvabVQ7qYOKu1OvhqpK4s47wDYtNiPtlp4= +github.com/kilic/bls12-381 v0.1.0/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -654,8 +660,14 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/protolambda/bls12-381-util v0.1.0 h1:05DU2wJN7DTU7z28+Q+zejXkIsA/MF8JZQGhtBZZiWk= +github.com/protolambda/bls12-381-util v0.1.0/go.mod h1:cdkysJTRpeFeuUVx/TXGDQNMTiRAalk1vQw3TYTHcE4= github.com/protolambda/ctxlock v0.1.0 h1:rCUY3+vRdcdZXqT07iXgyr744J2DU2LCBIXowYAjBCE= github.com/protolambda/ctxlock v0.1.0/go.mod h1:vefhX6rIZH8rsg5ZpOJfEDYQOppZi19SfPiGOFrNnwM= +github.com/protolambda/zrnt v0.32.2 h1:KZ48T+3UhsPXNdtE/5QEvGc9DGjUaRI17nJaoznoIaM= +github.com/protolambda/zrnt v0.32.2/go.mod h1:A0fezkp9Tt3GBLATSPIbuY4ywYESyAuc/FFmPKg8Lqs= +github.com/protolambda/ztyp v0.2.2 h1:rVcL3vBu9W/aV646zF6caLS/dyn9BN8NYiuJzicLNyY= +github.com/protolambda/ztyp v0.2.2/go.mod h1:9bYgKGqg3wJqT9ac1gI2hnVb0STQq7p/1lapqrqY1dU= github.com/prysmaticlabs/gohashtree v0.0.1-alpha.0.20220714111606-acbb2962fb48 h1:cSo6/vk8YpvkLbk9v3FO97cakNmUoxwi2KMP8hd5WIw= github.com/prysmaticlabs/gohashtree v0.0.1-alpha.0.20220714111606-acbb2962fb48/go.mod h1:4pWaT30XoEx1j8KNJf3TV+E3mQkaufn7mf+jRNb/Fuk= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= @@ -751,8 +763,8 @@ github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqri github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.27.3 h1:/POWahRmdh7uztQ3CYnaDddk0Rm90PyOgIxgW2rr41M= -github.com/urfave/cli/v2 v2.27.3/go.mod h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ= +github.com/urfave/cli/v2 v2.27.4 h1:o1owoI+02Eb+K107p27wEX9Bb8eqIoZCfLXloLUSWJ8= +github.com/urfave/cli/v2 v2.27.4/go.mod h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= @@ -810,8 +822,8 @@ golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98y golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= @@ -881,8 +893,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -911,6 +923,7 @@ golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -937,11 +950,12 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -953,8 +967,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= -golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -968,14 +982,14 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= +golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1037,8 +1051,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/justfile b/justfile new file mode 100644 index 000000000000..36b27c7e439e --- /dev/null +++ b/justfile @@ -0,0 +1,44 @@ +issues: + ./ops/scripts/todo-checker.sh + +lint-shellcheck: + find . -type f -name '*.sh' -not -path '*/node_modules/*' -not -path './packages/contracts-bedrock/lib/*' -not -path './packages/contracts-bedrock/kout*/*' -exec sh -c 'echo \"Checking $1\"; shellcheck \"$1\"' _ {} \\; + +install-foundry: + curl -L https://foundry.paradigm.xyz | bash && just update-foundry + +update-foundry: + bash ./ops/scripts/install-foundry.sh + +check-foundry: + bash ./packages/contracts-bedrock/scripts/checks/check-foundry-install.sh + +install-kontrol: + curl -L https://kframework.org/install | bash && just update-kontrol + +update-kontrol: + kup install kontrol --version v$(jq -r .kontrol < versions.json) + +install-abigen: + go install github.com/ethereum/go-ethereum/cmd/abigen@$(jq -r .abigen < versions.json) + +print-abigen: + abigen --version | sed -e 's/[^0-9]/ /g' -e 's/^ *//g' -e 's/ *$//g' -e 's/ /./g' -e 's/^/v/' + +check-abigen: + [[ $(just print-abigen) = $(cat versions.json | jq -r '.abigen') ]] && echo '✓ abigen versions match' || (echo '✗ abigen version mismatch. Run `just upgrade:abigen` to upgrade.' && exit 1) + +upgrade-abigen: + jq '.abigen = $v' --arg v $(just print:abigen) <<<$(cat versions.json) > versions.json + +install-slither: + pip3 install slither-analyzer==$(jq -r .slither < versions.json) + +print-slither: + slither --version + +check-slither: + [[ $(just print-slither) = $(jq -r .slither < versions.json) ]] && echo '✓ slither versions match' || (echo '✗ slither version mismatch. Run `just upgrade-slither` to upgrade.' && exit 1) + +upgrade-slither: + jq '.slither = $v' --arg v $(just print-slither) <<<$(cat versions.json) > versions.json diff --git a/op-batcher/batcher/channel.go b/op-batcher/batcher/channel.go index bf948ff45b65..9a5e6b4c6a2e 100644 --- a/op-batcher/batcher/channel.go +++ b/op-batcher/batcher/channel.go @@ -134,6 +134,9 @@ func (s *channel) updateInclusionBlocks() { func (s *channel) isTimedOut() bool { // Update min/max inclusion blocks for timeout check s.updateInclusionBlocks() + // Prior to the granite hard fork activating, the use of the shorter ChannelTimeout here may cause the batcher + // to believe the channel timed out when it was valid. It would then resubmit the blocks needlessly. + // This wastes batcher funds but doesn't cause any problems for the chain progressing safe head. return s.maxInclusionBlock-s.minInclusionBlock >= s.cfg.ChannelTimeout } diff --git a/op-batcher/batcher/channel_builder_test.go b/op-batcher/batcher/channel_builder_test.go index 188a46ecc82a..2d5187d3b25d 100644 --- a/op-batcher/batcher/channel_builder_test.go +++ b/op-batcher/batcher/channel_builder_test.go @@ -62,7 +62,7 @@ func newMiniL2BlockWithNumberParentAndL1Information(numTx int, l2Number *big.Int Difficulty: common.Big0, Number: big.NewInt(l1Number), Time: blockTime, - }, nil, nil, nil, trie.NewStackTrie(nil)) + }, nil, nil, trie.NewStackTrie(nil)) l1InfoTx, err := derive.L1InfoDeposit(&defaultTestRollupConfig, eth.SystemConfig{}, 0, eth.BlockToInfo(l1Block), blockTime) if err != nil { panic(err) @@ -77,7 +77,7 @@ func newMiniL2BlockWithNumberParentAndL1Information(numTx int, l2Number *big.Int return types.NewBlock(&types.Header{ Number: l2Number, ParentHash: parent, - }, txs, nil, nil, trie.NewStackTrie(nil)) + }, &types.Body{Transactions: txs}, nil, trie.NewStackTrie(nil)) } // addTooManyBlocks adds blocks to the channel until it hits an error, diff --git a/op-batcher/batcher/channel_config_provider_test.go b/op-batcher/batcher/channel_config_provider_test.go index 9e512fbb8867..169d122e210a 100644 --- a/op-batcher/batcher/channel_config_provider_test.go +++ b/op-batcher/batcher/channel_config_provider_test.go @@ -3,6 +3,7 @@ package batcher import ( "context" "errors" + "log/slog" "math/big" "testing" "time" @@ -10,7 +11,6 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" ) type mockGasPricer struct { diff --git a/op-batcher/batcher/channel_manager_test.go b/op-batcher/batcher/channel_manager_test.go index d6c3d2e9336e..474942ce5e87 100644 --- a/op-batcher/batcher/channel_manager_test.go +++ b/op-batcher/batcher/channel_manager_test.go @@ -67,19 +67,19 @@ func ChannelManagerReturnsErrReorg(t *testing.T, batchType uint) { a := types.NewBlock(&types.Header{ Number: big.NewInt(0), - }, nil, nil, nil, nil) + }, nil, nil, nil) b := types.NewBlock(&types.Header{ Number: big.NewInt(1), ParentHash: a.Hash(), - }, nil, nil, nil, nil) + }, nil, nil, nil) c := types.NewBlock(&types.Header{ Number: big.NewInt(2), ParentHash: b.Hash(), - }, nil, nil, nil, nil) + }, nil, nil, nil) x := types.NewBlock(&types.Header{ Number: big.NewInt(2), ParentHash: common.Hash{0xff}, - }, nil, nil, nil, nil) + }, nil, nil, nil) require.NoError(t, m.AddL2Block(a)) require.NoError(t, m.AddL2Block(b)) @@ -169,7 +169,7 @@ func ChannelManager_Clear(t *testing.T, batchType uint) { b := types.NewBlock(&types.Header{ Number: big.NewInt(1), ParentHash: a.Hash(), - }, nil, nil, nil, nil) + }, nil, nil, nil) require.NoError(m.AddL2Block(b)) require.Len(m.blocks, 1) require.Equal(b.Hash(), m.tip) diff --git a/op-batcher/batcher/driver.go b/op-batcher/batcher/driver.go index 0b5286abb3d9..55a8f04ecf57 100644 --- a/op-batcher/batcher/driver.go +++ b/op-batcher/batcher/driver.go @@ -114,6 +114,13 @@ func (l *BatchSubmitter) StartBatchSubmitting() error { l.clearState(l.shutdownCtx) l.lastStoredBlock = eth.BlockID{} + if l.Config.WaitNodeSync { + err := l.waitNodeSync() + if err != nil { + return fmt.Errorf("error waiting for node sync: %w", err) + } + } + l.wg.Add(1) go l.loop() @@ -289,13 +296,6 @@ const ( func (l *BatchSubmitter) loop() { defer l.wg.Done() - if l.Config.WaitNodeSync { - err := l.waitNodeSync() - if err != nil { - l.Log.Error("Error waiting for node sync", "err", err) - return - } - } receiptsCh := make(chan txmgr.TxReceipt[txRef]) queue := txmgr.NewQueue[txRef](l.killCtx, l.Txmgr, l.Config.MaxPendingTransactions) diff --git a/op-batcher/batcher/service.go b/op-batcher/batcher/service.go index f83328b105a1..2c96bc37bfe3 100644 --- a/op-batcher/batcher/service.go +++ b/op-batcher/batcher/service.go @@ -185,9 +185,15 @@ func (bs *BatcherService) initRollupConfig(ctx context.Context) error { } func (bs *BatcherService) initChannelConfig(cfg *CLIConfig) error { + channelTimeout := bs.RollupConfig.ChannelTimeoutBedrock + // Use lower channel timeout if granite is scheduled. + // Ensures channels are restricted to the tighter timeout even if granite hasn't activated yet + if bs.RollupConfig.GraniteTime != nil { + channelTimeout = bs.RollupConfig.ChannelTimeoutGranite + } cc := ChannelConfig{ SeqWindowSize: bs.RollupConfig.SeqWindowSize, - ChannelTimeout: bs.RollupConfig.ChannelTimeout, + ChannelTimeout: channelTimeout, MaxChannelDuration: cfg.MaxChannelDuration, MaxFrameSize: cfg.MaxL1TxSize - 1, // account for version byte prefix; reset for blobs TargetNumFrames: cfg.TargetNumFrames, diff --git a/op-chain-ops/cmd/check-ecotone/main.go b/op-chain-ops/cmd/check-ecotone/main.go index dcdc4c3a29fb..2f46f03d29d0 100644 --- a/op-chain-ops/cmd/check-ecotone/main.go +++ b/op-chain-ops/cmd/check-ecotone/main.go @@ -271,7 +271,8 @@ func check4844Precompile(ctx context.Context, env *actionEnv) error { return fmt.Errorf("failed to compute commitment: %w", err) } point := kzg4844.Point{} - proof, claim, err := kzg4844.ComputeProof(kzg4844.Blob(x), point) + blob := kzg4844.Blob(x) + proof, claim, err := kzg4844.ComputeProof(&blob, point) if err != nil { return fmt.Errorf("failed to compute proof: %w", err) } diff --git a/op-chain-ops/cmd/op-simulate/main.go b/op-chain-ops/cmd/op-simulate/main.go index cec69c2454f7..83aab8714218 100644 --- a/op-chain-ops/cmd/op-simulate/main.go +++ b/op-chain-ops/cmd/op-simulate/main.go @@ -11,6 +11,7 @@ import ( "path" "time" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/holiman/uint256" "github.com/pkg/profile" "github.com/urfave/cli/v2" @@ -258,7 +259,7 @@ func simulate(ctx context.Context, logger log.Logger, conf *params.ChainConfig, } for addr, acc := range dump { state.CreateAccount(addr) - state.SetBalance(addr, uint256.MustFromBig((*big.Int)(&acc.Balance))) + state.SetBalance(addr, uint256.MustFromBig((*big.Int)(&acc.Balance)), tracing.BalanceChangeUnspecified) state.SetNonce(addr, acc.Nonce) state.SetCode(addr, acc.Code) state.SetStorage(addr, acc.Storage) diff --git a/op-chain-ops/cmd/protocol-version/main.go b/op-chain-ops/cmd/protocol-version/main.go index a5bd6b434921..cf4fef1efd06 100644 --- a/op-chain-ops/cmd/protocol-version/main.go +++ b/op-chain-ops/cmd/protocol-version/main.go @@ -3,11 +3,11 @@ package main import ( "encoding/hex" "fmt" + "log/slog" "os" "github.com/mattn/go-isatty" "github.com/urfave/cli/v2" - "golang.org/x/exp/slog" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" diff --git a/op-chain-ops/cmd/receipt-reference-builder/main.go b/op-chain-ops/cmd/receipt-reference-builder/main.go index 0418e92193e7..90cd9bd4568b 100644 --- a/op-chain-ops/cmd/receipt-reference-builder/main.go +++ b/op-chain-ops/cmd/receipt-reference-builder/main.go @@ -1,12 +1,12 @@ package main import ( + "log/slog" "os" "time" "github.com/mattn/go-isatty" "github.com/urfave/cli/v2" - "golang.org/x/exp/slog" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" diff --git a/op-chain-ops/cmd/receipt-reference-builder/pull.go b/op-chain-ops/cmd/receipt-reference-builder/pull.go index d6fa95eef33c..3c692955026c 100644 --- a/op-chain-ops/cmd/receipt-reference-builder/pull.go +++ b/op-chain-ops/cmd/receipt-reference-builder/pull.go @@ -298,7 +298,7 @@ func processBlockRange( // process each transaction in the block for j := 0; j < len(b.Transactions); j++ { tx := b.Transactions[j] - ok, err := checkTransaction(ctx, c, *tx, log) + ok, err := checkTransaction(ctx, c, tx, log) if err != nil { log.Error("Failed to Check Tx", "Err", err) return []result{}, err @@ -346,8 +346,8 @@ func batchBlockByNumber(ctx context.Context, c *ethclient.Client, blockNumbers [ } // checkTransaction will check if a transaction is a user deposit, and not initiated by the system address -func checkTransaction(ctx context.Context, c *ethclient.Client, tx types.Transaction, log log.Logger) (bool, error) { - from, err := types.Sender(types.LatestSignerForChainID(tx.ChainId()), &tx) +func checkTransaction(ctx context.Context, c *ethclient.Client, tx *types.Transaction, log log.Logger) (bool, error) { + from, err := types.Sender(types.LatestSignerForChainID(tx.ChainId()), tx) if err != nil { log.Error("Failed to Get Sender", "Err", err) return false, err @@ -355,7 +355,7 @@ func checkTransaction(ctx context.Context, c *ethclient.Client, tx types.Transac // we are filtering for deposit transactions which are not system transactions if tx.Type() == depositType && from != systemAddress { - log.Info("Got Transaction", "From", from, "Nonce", *tx.EffectiveNonce(), "Type", tx.Type()) + log.Info("Got Transaction", "From", from, "Nonce", tx.EffectiveNonce(), "Type", tx.Type()) return true, nil } return false, nil diff --git a/op-chain-ops/etherscan/client.go b/op-chain-ops/etherscan/client.go deleted file mode 100644 index 5d94a4cdd859..000000000000 --- a/op-chain-ops/etherscan/client.go +++ /dev/null @@ -1,221 +0,0 @@ -package etherscan - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "io" - "net/http" - "net/url" - "time" - - "github.com/ethereum-optimism/optimism/op-service/retry" -) - -type client struct { - baseUrl string - httpClient *http.Client -} - -type apiResponse struct { - Status string `json:"status"` - Message string `json:"message"` - Result json.RawMessage `json:"result"` -} - -type rpcResponse struct { - JsonRpc string `json:"jsonrpc"` - Id int `json:"id"` - Result json.RawMessage `json:"result"` -} - -type Transaction struct { - Hash string `json:"hash"` - Input string `json:"input"` - To string `json:"to"` -} - -const apiMaxRetries = 3 -const apiRetryDelay = time.Duration(2) * time.Second -const errRateLimited = "Max rate limit reached" - -func NewClient(baseUrl, apiKey string) *client { - return &client{ - baseUrl: baseUrl + "/api?apikey=" + apiKey + "&", - httpClient: &http.Client{ - Timeout: time.Second * 10, - }, - } -} - -func NewEthereumClient(apiKey string) *client { - return NewClient("https://api.etherscan.io", apiKey) -} - -func NewOptimismClient(apiKey string) *client { - return NewClient("https://api-optimistic.etherscan.io", apiKey) -} - -func (c *client) fetch(ctx context.Context, url string) ([]byte, error) { - req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) - if err != nil { - return nil, err - } - resp, err := c.httpClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := io.ReadAll(resp.Body) - if err != nil { - return nil, err - } - return body, nil -} - -func (c *client) fetchEtherscanApi(ctx context.Context, url string) (apiResponse, error) { - return retry.Do[apiResponse](ctx, apiMaxRetries, retry.Fixed(apiRetryDelay), func() (apiResponse, error) { - body, err := c.fetch(ctx, url) - if err != nil { - return apiResponse{}, err - } - - var response apiResponse - err = json.Unmarshal(body, &response) - if err != nil { - return apiResponse{}, fmt.Errorf("failed to unmarshal as apiResponse: %w", err) - } - - if response.Message != "OK" { - var resultString string - err = json.Unmarshal(response.Result, &resultString) - if err != nil { - return apiResponse{}, fmt.Errorf("response for %s not OK, returned message: %s", url, response.Message) - } - - if resultString == errRateLimited { - return apiResponse{}, errors.New(errRateLimited) - } - - return apiResponse{}, fmt.Errorf("there was an issue with the Etherscan request to %s, received response: %v", url, response) - } - - return response, nil - }) -} - -func (c *client) fetchEtherscanRpc(ctx context.Context, url string) (rpcResponse, error) { - return retry.Do[rpcResponse](ctx, apiMaxRetries, retry.Fixed(apiRetryDelay), func() (rpcResponse, error) { - body, err := c.fetch(ctx, url) - if err != nil { - return rpcResponse{}, err - } - - var response rpcResponse - err = json.Unmarshal(body, &response) - if err != nil { - return rpcResponse{}, fmt.Errorf("failed to unmarshal as rpcResponse: %w", err) - } - - var resultString string - _ = json.Unmarshal(response.Result, &resultString) - if resultString == errRateLimited { - return rpcResponse{}, errors.New(errRateLimited) - } - - return response, nil - }) -} - -func (c *client) FetchAbi(ctx context.Context, address string) (string, error) { - params := url.Values{} - params.Set("address", address) - url := constructUrl(c.baseUrl, "getabi", "contract", params) - response, err := c.fetchEtherscanApi(ctx, url) - if err != nil { - return "", err - } - - var abi string - err = json.Unmarshal(response.Result, &abi) - if err != nil { - return "", fmt.Errorf("API response result is not expected ABI string: %w", err) - } - - return abi, nil -} - -func (c *client) FetchDeployedBytecode(ctx context.Context, address string) (string, error) { - params := url.Values{} - params.Set("address", address) - url := constructUrl(c.baseUrl, "eth_getCode", "proxy", params) - response, err := c.fetchEtherscanRpc(ctx, url) - if err != nil { - return "", fmt.Errorf("error fetching deployed bytecode: %w", err) - } - - var bytecode string - err = json.Unmarshal(response.Result, &bytecode) - if err != nil { - return "", errors.New("API response result is not expected bytecode string") - } - - return bytecode, nil -} - -func (c *client) FetchDeploymentTxHash(ctx context.Context, address string) (string, error) { - params := url.Values{} - params.Set("contractaddresses", address) - url := constructUrl(c.baseUrl, "getcontractcreation", "contract", params) - response, err := c.fetchEtherscanApi(ctx, url) - if err != nil { - return "", err - } - - var results []struct { - Hash string `json:"txHash"` - } - err = json.Unmarshal(response.Result, &results) - if err != nil { - return "", fmt.Errorf("failed to unmarshal API response as []txInfo: %w", err) - } - - if len(results) == 0 { - return "", fmt.Errorf("API response result is an empty array") - } - - return results[0].Hash, nil -} - -func (c *client) FetchDeploymentTx(ctx context.Context, txHash string) (Transaction, error) { - params := url.Values{} - params.Set("txHash", txHash) - params.Set("tag", "latest") - url := constructUrl(c.baseUrl, "eth_getTransactionByHash", "proxy", params) - response, err := c.fetchEtherscanRpc(ctx, url) - if err != nil { - return Transaction{}, err - } - - resultBytes, err := json.Marshal(response.Result) - if err != nil { - return Transaction{}, fmt.Errorf("failed to marshal Result into JSON: %w", err) - } - - var tx Transaction - err = json.Unmarshal(resultBytes, &tx) - if err != nil { - return Transaction{}, fmt.Errorf("API response result is not expected txInfo struct: %w", err) - } - - return tx, nil -} - -func constructUrl(baseUrl, action, module string, params url.Values) string { - params.Set("action", action) - params.Set("module", module) - queryFragment := params.Encode() - return baseUrl + queryFragment -} diff --git a/op-chain-ops/genesis/config.go b/op-chain-ops/genesis/config.go index 042acc0acf2b..7d3353d0e951 100644 --- a/op-chain-ops/genesis/config.go +++ b/op-chain-ops/genesis/config.go @@ -338,6 +338,9 @@ type UpgradeScheduleDeployConfig struct { // L2GenesisFjordTimeOffset is the number of seconds after genesis block that Fjord hard fork activates. // Set it to 0 to activate at genesis. Nil to disable Fjord. L2GenesisFjordTimeOffset *hexutil.Uint64 `json:"l2GenesisFjordTimeOffset,omitempty"` + // L2GenesisGraniteTimeOffset is the number of seconds after genesis block that Granite hard fork activates. + // Set it to 0 to activate at genesis. Nil to disable Granite. + L2GenesisGraniteTimeOffset *hexutil.Uint64 `json:"l2GenesisGraniteTimeOffset,omitempty"` // L2GenesisInteropTimeOffset is the number of seconds after genesis block that the Interop hard fork activates. // Set it to 0 to activate at genesis. Nil to disable Interop. L2GenesisInteropTimeOffset *hexutil.Uint64 `json:"l2GenesisInteropTimeOffset,omitempty"` @@ -382,6 +385,10 @@ func (d *UpgradeScheduleDeployConfig) FjordTime(genesisTime uint64) *uint64 { return offsetToUpgradeTime(d.L2GenesisFjordTimeOffset, genesisTime) } +func (d *UpgradeScheduleDeployConfig) GraniteTime(genesisTime uint64) *uint64 { + return offsetToUpgradeTime(d.L2GenesisGraniteTimeOffset, genesisTime) +} + func (d *UpgradeScheduleDeployConfig) InteropTime(genesisTime uint64) *uint64 { return offsetToUpgradeTime(d.L2GenesisInteropTimeOffset, genesisTime) } @@ -415,6 +422,9 @@ func (d *UpgradeScheduleDeployConfig) Check(log log.Logger) error { if err := checkFork(d.L2GenesisEcotoneTimeOffset, d.L2GenesisFjordTimeOffset, "ecotone", "fjord"); err != nil { return err } + if err := checkFork(d.L2GenesisFjordTimeOffset, d.L2GenesisGraniteTimeOffset, "fjord", "granite"); err != nil { + return err + } return nil } @@ -438,8 +448,10 @@ type L2CoreDeployConfig struct { MaxSequencerDrift uint64 `json:"maxSequencerDrift"` // SequencerWindowSize is the number of L1 blocks per sequencing window. SequencerWindowSize uint64 `json:"sequencerWindowSize"` - // ChannelTimeout is the number of L1 blocks that a frame stays valid when included in L1. - ChannelTimeout uint64 `json:"channelTimeout"` + // ChannelTimeoutBedrock is the number of L1 blocks that a frame stays valid when included in L1. + ChannelTimeoutBedrock uint64 `json:"channelTimeout"` + // ChannelTimeoutGranite is the number of L1 blocks that a frame stays valid when included in L1 after granite. + ChannelTimeoutGranite uint64 `json:"channelTimeoutGranite,omitempty"` // BatchInboxAddress is the L1 account that batches are sent to. BatchInboxAddress common.Address `json:"batchInboxAddress"` @@ -464,7 +476,7 @@ func (d *L2CoreDeployConfig) Check(log log.Logger) error { if d.SequencerWindowSize == 0 { return fmt.Errorf("%w: SequencerWindowSize cannot be 0", ErrInvalidDeployConfig) } - if d.ChannelTimeout == 0 { + if d.ChannelTimeoutBedrock == 0 { return fmt.Errorf("%w: ChannelTimeout cannot be 0", ErrInvalidDeployConfig) } if d.BatchInboxAddress == (common.Address{}) { @@ -534,7 +546,13 @@ type L2InitializationConfig struct { } func (d *L2InitializationConfig) Check(log log.Logger) error { - return checkConfigBundle(d, log) + if err := checkConfigBundle(d, log); err != nil { + return err + } + if d.ChannelTimeoutGranite == 0 && d.L2GenesisGraniteTimeOffset != nil { + return fmt.Errorf("%w: ChannelTimeoutGranite cannot be 0", ErrInvalidDeployConfig) + } + return nil } // DevL1DeployConfig is used to configure a L1 chain for development/testing purposes. @@ -804,7 +822,9 @@ func (d *DeployConfig) Check(log log.Logger) error { if d.L1BlockTime < d.L2BlockTime { return fmt.Errorf("L2 block time (%d) is larger than L1 block time (%d)", d.L2BlockTime, d.L1BlockTime) } - + if d.ChannelTimeoutGranite == 0 && d.L2GenesisGraniteTimeOffset != nil { + return fmt.Errorf("%w: ChannelTimeoutGranite cannot be 0", ErrInvalidDeployConfig) + } return checkConfigBundle(d, log) } @@ -869,7 +889,8 @@ func (d *DeployConfig) RollupConfig(l1StartBlock *types.Block, l2GenesisBlockHas BlockTime: d.L2BlockTime, MaxSequencerDrift: d.MaxSequencerDrift, SeqWindowSize: d.SequencerWindowSize, - ChannelTimeout: d.ChannelTimeout, + ChannelTimeoutBedrock: d.ChannelTimeoutBedrock, + ChannelTimeoutGranite: d.ChannelTimeoutGranite, L1ChainID: new(big.Int).SetUint64(d.L1ChainID), L2ChainID: new(big.Int).SetUint64(d.L2ChainID), BatchInboxAddress: d.BatchInboxAddress, @@ -880,6 +901,7 @@ func (d *DeployConfig) RollupConfig(l1StartBlock *types.Block, l2GenesisBlockHas DeltaTime: d.DeltaTime(l1StartBlock.Time()), EcotoneTime: d.EcotoneTime(l1StartBlock.Time()), FjordTime: d.FjordTime(l1StartBlock.Time()), + GraniteTime: d.GraniteTime(l1StartBlock.Time()), InteropTime: d.InteropTime(l1StartBlock.Time()), PlasmaConfig: plasma, }, nil diff --git a/op-chain-ops/genesis/genesis.go b/op-chain-ops/genesis/genesis.go index e652c189bb15..f517912e109a 100644 --- a/op-chain-ops/genesis/genesis.go +++ b/op-chain-ops/genesis/genesis.go @@ -67,11 +67,12 @@ func NewL2Genesis(config *DeployConfig, block *types.Block) (*core.Genesis, erro CancunTime: config.EcotoneTime(block.Time()), EcotoneTime: config.EcotoneTime(block.Time()), FjordTime: config.FjordTime(block.Time()), + GraniteTime: config.GraniteTime(block.Time()), InteropTime: config.InteropTime(block.Time()), Optimism: ¶ms.OptimismConfig{ EIP1559Denominator: eip1559Denom, EIP1559Elasticity: eip1559Elasticity, - EIP1559DenominatorCanyon: eip1559DenomCanyon, + EIP1559DenominatorCanyon: &eip1559DenomCanyon, }, } diff --git a/op-chain-ops/genesis/layer_two.go b/op-chain-ops/genesis/layer_two.go index a898afc70aaa..46c17a4f9c76 100644 --- a/op-chain-ops/genesis/layer_two.go +++ b/op-chain-ops/genesis/layer_two.go @@ -23,6 +23,7 @@ const ( L2AllocsDelta L2AllocsMode = "delta" L2AllocsEcotone L2AllocsMode = "ecotone" L2AllocsFjord L2AllocsMode = "fjord" + L2AllocsGranite L2AllocsMode = "granite" ) var ( diff --git a/op-chain-ops/srcmap/solutil.go b/op-chain-ops/srcmap/solutil.go index 01b1add4bc29..9944db558710 100644 --- a/op-chain-ops/srcmap/solutil.go +++ b/op-chain-ops/srcmap/solutil.go @@ -3,7 +3,6 @@ package srcmap import ( "fmt" "io" - "math/big" "os" "strconv" "strings" @@ -192,20 +191,6 @@ type SourceMapTracer struct { out io.Writer } -func (s *SourceMapTracer) CaptureTxStart(gasLimit uint64) {} - -func (s *SourceMapTracer) CaptureTxEnd(restGas uint64) {} - -func (s *SourceMapTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { -} - -func (s *SourceMapTracer) CaptureEnd(output []byte, gasUsed uint64, err error) {} - -func (s *SourceMapTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { -} - -func (s *SourceMapTracer) CaptureExit(output []byte, gasUsed uint64, err error) {} - func (s *SourceMapTracer) info(codeAddr *common.Address, pc uint64) string { info := "non-contract" if codeAddr != nil { @@ -243,5 +228,3 @@ func (s *SourceMapTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64 fmt.Fprintf(s.out, "%3d: %x\n", -i, stack[len(stack)-1-i].Bytes32()) } } - -var _ vm.EVMLogger = (*SourceMapTracer)(nil) diff --git a/op-challenger/config/config.go b/op-challenger/config/config.go index f2725663cd30..a9937a68af86 100644 --- a/op-challenger/config/config.go +++ b/op-challenger/config/config.go @@ -96,9 +96,12 @@ type Config struct { CannonAbsolutePreStateBaseURL *url.URL // Base URL to retrieve absolute pre-states for Cannon traces from // Specific to the asterisc trace provider - Asterisc vm.Config - AsteriscAbsolutePreState string // File to load the absolute pre-state for Asterisc traces from - AsteriscAbsolutePreStateBaseURL *url.URL // Base URL to retrieve absolute pre-states for Asterisc traces from + Asterisc vm.Config + AsteriscAbsolutePreState string // File to load the absolute pre-state for Asterisc traces from + AsteriscAbsolutePreStateBaseURL *url.URL // Base URL to retrieve absolute pre-states for Asterisc traces from + AsteriscKona vm.Config + AsteriscKonaAbsolutePreState string // File to load the absolute pre-state for AsteriscKona traces from + AsteriscKonaAbsolutePreStateBaseURL *url.URL // Base URL to retrieve absolute pre-states for AsteriscKona traces from MaxPendingTx uint64 // Maximum number of pending transactions (0 == no limit) @@ -142,6 +145,7 @@ func NewConfig( L2: l2EthRpc, SnapshotFreq: DefaultCannonSnapshotFreq, InfoFreq: DefaultCannonInfoFreq, + DebugInfo: true, }, Asterisc: vm.Config{ VmType: types.TraceTypeAsterisc, @@ -151,6 +155,14 @@ func NewConfig( SnapshotFreq: DefaultAsteriscSnapshotFreq, InfoFreq: DefaultAsteriscInfoFreq, }, + AsteriscKona: vm.Config{ + VmType: types.TraceTypeAsteriscKona, + L1: l1EthRpc, + L1Beacon: l1BeaconApi, + L2: l2EthRpc, + SnapshotFreq: DefaultAsteriscSnapshotFreq, + InfoFreq: DefaultAsteriscInfoFreq, + }, GameWindow: DefaultGameWindow, } } diff --git a/op-challenger/config/config_test.go b/op-challenger/config/config_test.go index 9c60262c6a76..4181fd069bed 100644 --- a/op-challenger/config/config_test.go +++ b/op-challenger/config/config_test.go @@ -213,6 +213,11 @@ func TestCannonRequiredArgs(t *testing.T) { cfg.Cannon.Network = "unknown" require.ErrorIs(t, cfg.Check(), ErrCannonNetworkUnknown) }) + + t.Run(fmt.Sprintf("TestDebugInfoEnabled-%v", traceType), func(t *testing.T) { + cfg := validConfig(traceType) + require.True(t, cfg.Cannon.DebugInfo) + }) } } @@ -319,6 +324,11 @@ func TestAsteriscRequiredArgs(t *testing.T) { cfg.Asterisc.Network = "unknown" require.ErrorIs(t, cfg.Check(), ErrAsteriscNetworkUnknown) }) + + t.Run(fmt.Sprintf("TestDebugInfoDisabled-%v", traceType), func(t *testing.T) { + cfg := validConfig(traceType) + require.False(t, cfg.Asterisc.DebugInfo) + }) } } diff --git a/op-challenger/flags/flags.go b/op-challenger/flags/flags.go index c128e0fa759d..564027875f10 100644 --- a/op-challenger/flags/flags.go +++ b/op-challenger/flags/flags.go @@ -178,17 +178,33 @@ var ( Usage: "Path to executable to use as pre-image oracle server when generating trace data (asterisc trace type only)", EnvVars: prefixEnvVars("ASTERISC_SERVER"), } + AsteriscKonaServerFlag = &cli.StringFlag{ + Name: "asterisc-kona-server", + Usage: "Path to kona executable to use as pre-image oracle server when generating trace data (asterisc-kona trace type only)", + EnvVars: prefixEnvVars("ASTERISC_KONA_SERVER"), + } AsteriscPreStateFlag = &cli.StringFlag{ Name: "asterisc-prestate", Usage: "Path to absolute prestate to use when generating trace data (asterisc trace type only)", EnvVars: prefixEnvVars("ASTERISC_PRESTATE"), } + AsteriscKonaPreStateFlag = &cli.StringFlag{ + Name: "asterisc-kona-prestate", + Usage: "Path to absolute prestate to use when generating trace data (asterisc-kona trace type only)", + EnvVars: prefixEnvVars("ASTERISC_KONA_PRESTATE"), + } AsteriscPreStatesURLFlag = &cli.StringFlag{ Name: "asterisc-prestates-url", Usage: "Base URL to absolute prestates to use when generating trace data. " + "Prestates in this directory should be name as .json (asterisc trace type only)", EnvVars: prefixEnvVars("ASTERISC_PRESTATES_URL"), } + AsteriscKonaPreStatesURLFlag = &cli.StringFlag{ + Name: "asterisc-kona-prestates-url", + Usage: "Base URL to absolute prestates to use when generating trace data. " + + "Prestates in this directory should be name as .json (asterisc-kona trace type only)", + EnvVars: prefixEnvVars("ASTERISC_KONA_PRESTATES_URL"), + } AsteriscSnapshotFreqFlag = &cli.UintFlag{ Name: "asterisc-snapshot-freq", Usage: "Frequency of asterisc snapshots to generate in VM steps (asterisc trace type only)", @@ -255,8 +271,11 @@ var optionalFlags = []cli.Flag{ AsteriscL2GenesisFlag, AsteriscBinFlag, AsteriscServerFlag, + AsteriscKonaServerFlag, AsteriscPreStateFlag, + AsteriscKonaPreStateFlag, AsteriscPreStatesURLFlag, + AsteriscKonaPreStatesURLFlag, AsteriscSnapshotFreqFlag, AsteriscInfoFreqFlag, GameWindowFlag, @@ -486,6 +505,14 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro } asteriscPreStatesURL = parsed } + var asteriscKonaPreStatesURL *url.URL + if ctx.IsSet(AsteriscKonaPreStatesURLFlag.Name) { + parsed, err := url.Parse(ctx.String(AsteriscKonaPreStatesURLFlag.Name)) + if err != nil { + return nil, fmt.Errorf("invalid asterisc-kona pre states url (%v): %w", ctx.String(AsteriscKonaPreStatesURLFlag.Name), err) + } + asteriscKonaPreStatesURL = parsed + } l2Rpc, err := getL2Rpc(ctx, logger) if err != nil { return nil, err @@ -526,6 +553,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro L2GenesisPath: ctx.String(CannonL2GenesisFlag.Name), SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name), InfoFreq: ctx.Uint(CannonInfoFreqFlag.Name), + DebugInfo: true, }, CannonAbsolutePreState: ctx.String(CannonPreStateFlag.Name), CannonAbsolutePreStateBaseURL: cannonPrestatesURL, @@ -545,10 +573,25 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro }, AsteriscAbsolutePreState: ctx.String(AsteriscPreStateFlag.Name), AsteriscAbsolutePreStateBaseURL: asteriscPreStatesURL, - TxMgrConfig: txMgrConfig, - MetricsConfig: metricsConfig, - PprofConfig: pprofConfig, - SelectiveClaimResolution: ctx.Bool(SelectiveClaimResolutionFlag.Name), - AllowInvalidPrestate: ctx.Bool(UnsafeAllowInvalidPrestate.Name), + AsteriscKona: vm.Config{ + VmType: types.TraceTypeAsteriscKona, + L1: l1EthRpc, + L1Beacon: l1Beacon, + L2: l2Rpc, + VmBin: ctx.String(AsteriscBinFlag.Name), + Server: ctx.String(AsteriscKonaServerFlag.Name), + Network: asteriscNetwork, + RollupConfigPath: ctx.String(AsteriscRollupConfigFlag.Name), + L2GenesisPath: ctx.String(AsteriscL2GenesisFlag.Name), + SnapshotFreq: ctx.Uint(AsteriscSnapshotFreqFlag.Name), + InfoFreq: ctx.Uint(AsteriscInfoFreqFlag.Name), + }, + AsteriscKonaAbsolutePreState: ctx.String(AsteriscKonaPreStateFlag.Name), + AsteriscKonaAbsolutePreStateBaseURL: asteriscKonaPreStatesURL, + TxMgrConfig: txMgrConfig, + MetricsConfig: metricsConfig, + PprofConfig: pprofConfig, + SelectiveClaimResolution: ctx.Bool(SelectiveClaimResolutionFlag.Name), + AllowInvalidPrestate: ctx.Bool(UnsafeAllowInvalidPrestate.Name), }, nil } diff --git a/op-challenger/game/fault/agent.go b/op-challenger/game/fault/agent.go index 46951d23e776..10b28426f4b0 100644 --- a/op-challenger/game/fault/agent.go +++ b/op-challenger/game/fault/agent.go @@ -155,6 +155,11 @@ func (a *Agent) tryResolve(ctx context.Context) bool { a.log.Error("Failed to resolve claims", "err", err) return false } + if a.selective { + // Never resolve games in selective mode as it won't unlock any bonds for us. + // Assume the game is still in progress or the player wouldn't have told us to act. + return false + } status, err := a.responder.CallResolve(ctx) if err != nil || status == gameTypes.GameStatusInProgress { return false diff --git a/op-challenger/game/fault/agent_test.go b/op-challenger/game/fault/agent_test.go index 415edcd9977c..62dc560263e9 100644 --- a/op-challenger/game/fault/agent_test.go +++ b/op-challenger/game/fault/agent_test.go @@ -4,6 +4,7 @@ import ( "context" "errors" "math/big" + "slices" "sync" "testing" "time" @@ -127,20 +128,27 @@ func TestAgent_SelectiveClaimResolution(t *testing.T) { }, } - for _, test := range tests { - test := test - t.Run(test.name, func(t *testing.T) { + for _, tCase := range tests { + tCase := tCase + t.Run(tCase.name, func(t *testing.T) { agent, claimLoader, responder := setupTestAgent(t) - agent.selective = test.selective - agent.claimants = test.claimants + agent.selective = tCase.selective + agent.claimants = tCase.claimants claimLoader.maxLoads = 1 - claimLoader.claims = test.claims - responder.callResolveStatus = test.callResolveStatus + if tCase.selective { + claimLoader.maxLoads = 0 + } + claimLoader.claims = tCase.claims + responder.callResolveStatus = tCase.callResolveStatus require.NoError(t, agent.Act(ctx)) - require.Equal(t, test.expectedResolveCount, responder.callResolveClaimCount, "should check if game is resolvable") - require.Equal(t, test.expectedResolveCount, responder.resolveClaimCount, "should check if game is resolvable") + require.Equal(t, tCase.expectedResolveCount, responder.callResolveClaimCount, "should check if game is resolvable") + require.Equal(t, tCase.expectedResolveCount, responder.resolveClaimCount, "should check if game is resolvable") + if tCase.selective { + require.Equal(t, 0, responder.callResolveCount, "should not resolve game in selective mode") + require.Equal(t, 0, responder.resolveCount, "should not resolve game in selective mode") + } }) } } @@ -230,6 +238,7 @@ type stubResponder struct { callResolveClaimCount int callResolveClaimErr error resolveClaimCount int + resolvedClaims []uint64 } func (s *stubResponder) CallResolve(_ context.Context) (gameTypes.GameStatus, error) { @@ -246,9 +255,12 @@ func (s *stubResponder) Resolve() error { return s.resolveErr } -func (s *stubResponder) CallResolveClaim(_ context.Context, _ uint64) error { +func (s *stubResponder) CallResolveClaim(_ context.Context, idx uint64) error { s.l.Lock() defer s.l.Unlock() + if slices.Contains(s.resolvedClaims, idx) { + return errors.New("already resolved") + } s.callResolveClaimCount++ return s.callResolveClaimErr } @@ -257,6 +269,7 @@ func (s *stubResponder) ResolveClaims(claims ...uint64) error { s.l.Lock() defer s.l.Unlock() s.resolveClaimCount += len(claims) + s.resolvedClaims = append(s.resolvedClaims, claims...) return nil } diff --git a/op-challenger/game/fault/contracts/faultdisputegame.go b/op-challenger/game/fault/contracts/faultdisputegame.go index d2c13060ffe0..1c71d20bebcb 100644 --- a/op-challenger/game/fault/contracts/faultdisputegame.go +++ b/op-challenger/game/fault/contracts/faultdisputegame.go @@ -307,7 +307,7 @@ func (f *FaultDisputeGameContractLatest) ClaimCreditTx(ctx context.Context, reci call := f.contract.Call(methodClaimCredit, recipient) _, err := f.multiCaller.SingleCall(ctx, rpcblock.Latest, call) if err != nil { - return txmgr.TxCandidate{}, fmt.Errorf("%w: %v", ErrSimulationFailed, err.Error()) + return txmgr.TxCandidate{}, fmt.Errorf("%w: %w", ErrSimulationFailed, err) } return call.ToTxCandidate() } diff --git a/op-challenger/game/fault/register.go b/op-challenger/game/fault/register.go index 7009a7b934b5..f8bac805c658 100644 --- a/op-challenger/game/fault/register.go +++ b/op-challenger/game/fault/register.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/outputs" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/prestates" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" faultTypes "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" keccakTypes "github.com/ethereum-optimism/optimism/op-challenger/game/keccak/types" "github.com/ethereum-optimism/optimism/op-challenger/game/scheduler" @@ -74,20 +75,29 @@ func RegisterGameTypes( syncValidator := newSyncStatusValidator(rollupClient) if cfg.TraceTypeEnabled(faultTypes.TraceTypeCannon) { - if err := registerCannon(faultTypes.CannonGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, cfg, syncValidator, rollupClient, txSender, gameFactory, caller, l2Client, l1HeaderSource, selective, claimants); err != nil { + vmConfig := vm.NewOpProgramVmConfig() + if err := registerCannon(faultTypes.CannonGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, cfg, vmConfig, syncValidator, rollupClient, txSender, gameFactory, caller, l2Client, l1HeaderSource, selective, claimants); err != nil { return nil, fmt.Errorf("failed to register cannon game type: %w", err) } } if cfg.TraceTypeEnabled(faultTypes.TraceTypePermissioned) { - if err := registerCannon(faultTypes.PermissionedGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, cfg, syncValidator, rollupClient, txSender, gameFactory, caller, l2Client, l1HeaderSource, selective, claimants); err != nil { + vmConfig := vm.NewOpProgramVmConfig() + if err := registerCannon(faultTypes.PermissionedGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, cfg, vmConfig, syncValidator, rollupClient, txSender, gameFactory, caller, l2Client, l1HeaderSource, selective, claimants); err != nil { return nil, fmt.Errorf("failed to register permissioned cannon game type: %w", err) } } if cfg.TraceTypeEnabled(faultTypes.TraceTypeAsterisc) { - if err := registerAsterisc(faultTypes.AsteriscGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, cfg, syncValidator, rollupClient, txSender, gameFactory, caller, l2Client, l1HeaderSource, selective, claimants); err != nil { + vmConfig := vm.NewOpProgramVmConfig() + if err := registerAsterisc(faultTypes.AsteriscGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, cfg, vmConfig, syncValidator, rollupClient, txSender, gameFactory, caller, l2Client, l1HeaderSource, selective, claimants); err != nil { return nil, fmt.Errorf("failed to register asterisc game type: %w", err) } } + if cfg.TraceTypeEnabled(faultTypes.TraceTypeAsteriscKona) { + vmConfig := vm.NewKonaVmConfig() + if err := registerAsterisc(faultTypes.AsteriscKonaGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, cfg, vmConfig, syncValidator, rollupClient, txSender, gameFactory, caller, l2Client, l1HeaderSource, selective, claimants); err != nil { + return nil, fmt.Errorf("failed to register asterisc kona game type: %w", err) + } + } if cfg.TraceTypeEnabled(faultTypes.TraceTypeFast) { if err := registerAlphabet(faultTypes.FastGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, syncValidator, rollupClient, l2Client, txSender, gameFactory, caller, l1HeaderSource, selective, claimants); err != nil { return nil, fmt.Errorf("failed to register fast game type: %w", err) @@ -194,6 +204,7 @@ func registerAsterisc( logger log.Logger, m metrics.Metricer, cfg *config.Config, + vmCfg vm.OracleServerExecutor, syncValidator SyncValidator, rollupClient outputs.OutputRollupClient, txSender TxSender, @@ -249,7 +260,7 @@ func registerAsterisc( if err != nil { return nil, fmt.Errorf("failed to get asterisc prestate: %w", err) } - accessor, err := outputs.NewOutputAsteriscTraceAccessor(logger, m, cfg.Asterisc, l2Client, prestateProvider, asteriscPrestate, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock) + accessor, err := outputs.NewOutputAsteriscTraceAccessor(logger, m, cfg.Asterisc, vmCfg, l2Client, prestateProvider, asteriscPrestate, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock) if err != nil { return nil, err } @@ -282,6 +293,7 @@ func registerCannon( logger log.Logger, m metrics.Metricer, cfg *config.Config, + vmCfg vm.OracleServerExecutor, syncValidator SyncValidator, rollupClient outputs.OutputRollupClient, txSender TxSender, @@ -311,7 +323,6 @@ func registerCannon( } cannonPrestateProvider, err := prestateProviderCache.GetOrCreate(requiredPrestatehash) - if err != nil { return nil, fmt.Errorf("required prestate %v not available for game %v: %w", requiredPrestatehash, game.Proxy, err) } @@ -339,7 +350,7 @@ func registerCannon( if err != nil { return nil, fmt.Errorf("failed to get cannon prestate: %w", err) } - accessor, err := outputs.NewOutputCannonTraceAccessor(logger, m, cfg.Cannon, l2Client, prestateProvider, cannonPrestate, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock) + accessor, err := outputs.NewOutputCannonTraceAccessor(logger, m, cfg.Cannon, vmCfg, l2Client, prestateProvider, cannonPrestate, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock) if err != nil { return nil, err } diff --git a/op-challenger/game/fault/trace/asterisc/provider.go b/op-challenger/game/fault/trace/asterisc/provider.go index 5c481777b6ce..8caa8a2b0a4e 100644 --- a/op-challenger/game/fault/trace/asterisc/provider.go +++ b/op-challenger/game/fault/trace/asterisc/provider.go @@ -35,12 +35,12 @@ type AsteriscTraceProvider struct { lastStep uint64 } -func NewTraceProvider(logger log.Logger, m vm.Metricer, cfg vm.Config, prestateProvider types.PrestateProvider, asteriscPrestate string, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *AsteriscTraceProvider { +func NewTraceProvider(logger log.Logger, m vm.Metricer, cfg vm.Config, vmCfg vm.OracleServerExecutor, prestateProvider types.PrestateProvider, asteriscPrestate string, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *AsteriscTraceProvider { return &AsteriscTraceProvider{ logger: logger, dir: dir, prestate: asteriscPrestate, - generator: vm.NewExecutor(logger, m, cfg, asteriscPrestate, localInputs), + generator: vm.NewExecutor(logger, m, cfg, vmCfg, asteriscPrestate, localInputs), gameDepth: gameDepth, preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(vm.PreimageDir(dir)).Get), PrestateProvider: prestateProvider, @@ -177,7 +177,7 @@ func NewTraceProviderForTest(logger log.Logger, m vm.Metricer, cfg *config.Confi logger: logger, dir: dir, prestate: cfg.AsteriscAbsolutePreState, - generator: vm.NewExecutor(logger, m, cfg.Asterisc, cfg.AsteriscAbsolutePreState, localInputs), + generator: vm.NewExecutor(logger, m, cfg.Asterisc, vm.NewOpProgramVmConfig(), cfg.AsteriscAbsolutePreState, localInputs), gameDepth: gameDepth, preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(vm.PreimageDir(dir)).Get), } diff --git a/op-challenger/game/fault/trace/cannon/provider.go b/op-challenger/game/fault/trace/cannon/provider.go index 2db146829a0a..9be1cf63deea 100644 --- a/op-challenger/game/fault/trace/cannon/provider.go +++ b/op-challenger/game/fault/trace/cannon/provider.go @@ -38,12 +38,12 @@ type CannonTraceProvider struct { lastStep uint64 } -func NewTraceProvider(logger log.Logger, m vm.Metricer, cfg vm.Config, prestateProvider types.PrestateProvider, prestate string, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *CannonTraceProvider { +func NewTraceProvider(logger log.Logger, m vm.Metricer, cfg vm.Config, vmCfg vm.OracleServerExecutor, prestateProvider types.PrestateProvider, prestate string, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *CannonTraceProvider { return &CannonTraceProvider{ logger: logger, dir: dir, prestate: prestate, - generator: vm.NewExecutor(logger, m, cfg, prestate, localInputs), + generator: vm.NewExecutor(logger, m, cfg, vmCfg, prestate, localInputs), gameDepth: gameDepth, preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(vm.PreimageDir(dir)).Get), PrestateProvider: prestateProvider, @@ -181,7 +181,7 @@ func NewTraceProviderForTest(logger log.Logger, m vm.Metricer, cfg *config.Confi logger: logger, dir: dir, prestate: cfg.CannonAbsolutePreState, - generator: vm.NewExecutor(logger, m, cfg.Cannon, cfg.CannonAbsolutePreState, localInputs), + generator: vm.NewExecutor(logger, m, cfg.Cannon, vm.NewOpProgramVmConfig(), cfg.CannonAbsolutePreState, localInputs), gameDepth: gameDepth, preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(vm.PreimageDir(dir)).Get), } diff --git a/op-challenger/game/fault/trace/outputs/output_asterisc.go b/op-challenger/game/fault/trace/outputs/output_asterisc.go index ac129dbb26c8..726b57e551d7 100644 --- a/op-challenger/game/fault/trace/outputs/output_asterisc.go +++ b/op-challenger/game/fault/trace/outputs/output_asterisc.go @@ -22,6 +22,7 @@ func NewOutputAsteriscTraceAccessor( logger log.Logger, m metrics.Metricer, cfg vm.Config, + vmCfg vm.OracleServerExecutor, l2Client utils.L2HeaderSource, prestateProvider types.PrestateProvider, asteriscPrestate string, @@ -40,7 +41,7 @@ func NewOutputAsteriscTraceAccessor( if err != nil { return nil, fmt.Errorf("failed to fetch asterisc local inputs: %w", err) } - provider := asterisc.NewTraceProvider(logger, m, cfg, prestateProvider, asteriscPrestate, localInputs, subdir, depth) + provider := asterisc.NewTraceProvider(logger, m, cfg, vmCfg, prestateProvider, asteriscPrestate, localInputs, subdir, depth) return provider, nil } diff --git a/op-challenger/game/fault/trace/outputs/output_cannon.go b/op-challenger/game/fault/trace/outputs/output_cannon.go index ecc710380bfb..521b35b1e92e 100644 --- a/op-challenger/game/fault/trace/outputs/output_cannon.go +++ b/op-challenger/game/fault/trace/outputs/output_cannon.go @@ -22,6 +22,7 @@ func NewOutputCannonTraceAccessor( logger log.Logger, m metrics.Metricer, cfg vm.Config, + vmCfg vm.OracleServerExecutor, l2Client utils.L2HeaderSource, prestateProvider types.PrestateProvider, cannonPrestate string, @@ -40,7 +41,7 @@ func NewOutputCannonTraceAccessor( if err != nil { return nil, fmt.Errorf("failed to fetch cannon local inputs: %w", err) } - provider := cannon.NewTraceProvider(logger, m, cfg, prestateProvider, cannonPrestate, localInputs, subdir, depth) + provider := cannon.NewTraceProvider(logger, m, cfg, vmCfg, prestateProvider, cannonPrestate, localInputs, subdir, depth) return provider, nil } diff --git a/op-challenger/game/fault/trace/utils/preimage.go b/op-challenger/game/fault/trace/utils/preimage.go index b13333a566f6..09a48ee912f6 100644 --- a/op-challenger/game/fault/trace/utils/preimage.go +++ b/op-challenger/game/fault/trace/utils/preimage.go @@ -89,7 +89,8 @@ func (l *PreimageLoader) loadBlobPreimage(proof *ProofData) (*types.PreimageOrac // Compute the KZG proof for the required field element var point kzg4844.Point new(big.Int).SetUint64(requiredFieldElement).FillBytes(point[:]) - kzgProof, claim, err := kzg4844.ComputeProof(kzg4844.Blob(blob), point) + data := kzg4844.Blob(blob) + kzgProof, claim, err := kzg4844.ComputeProof(&data, point) if err != nil { return nil, fmt.Errorf("failed to compute kzg proof: %w", err) } diff --git a/op-challenger/game/fault/trace/utils/preimage_test.go b/op-challenger/game/fault/trace/utils/preimage_test.go index e2c9e87ede75..46778f080c37 100644 --- a/op-challenger/game/fault/trace/utils/preimage_test.go +++ b/op-challenger/game/fault/trace/utils/preimage_test.go @@ -63,15 +63,15 @@ func TestPreimageLoader_SimpleTypes(t *testing.T) { } func TestPreimageLoader_BlobPreimage(t *testing.T) { - blob := testBlob() - commitment, err := kzg4844.BlobToCommitment(kzg4844.Blob(blob)) + blob := kzg4844.Blob(testBlob()) + commitment, err := kzg4844.BlobToCommitment(&blob) require.NoError(t, err) fieldIndex := uint64(24) elementData := blob[fieldIndex<<5 : (fieldIndex+1)<<5] var point kzg4844.Point new(big.Int).SetUint64(fieldIndex).FillBytes(point[:]) - kzgProof, claim, err := kzg4844.ComputeProof(kzg4844.Blob(blob), point) + kzgProof, claim, err := kzg4844.ComputeProof(&blob, point) require.NoError(t, err) elementDataWithLengthPrefix := make([]byte, len(elementData)+lengthPrefixSize) binary.BigEndian.PutUint64(elementDataWithLengthPrefix[:lengthPrefixSize], uint64(len(elementData))) @@ -129,7 +129,7 @@ func TestPreimageLoader_BlobPreimage(t *testing.T) { t.Run("Valid", func(t *testing.T) { kv := kvstore.NewMemKV() loader := NewPreimageLoader(kv.Get) - storeBlob(t, kv, gokzg4844.KZGCommitment(commitment), blob) + storeBlob(t, kv, gokzg4844.KZGCommitment(commitment), gokzg4844.Blob(blob)) actual, err := loader.LoadPreimage(proof) require.NoError(t, err) diff --git a/op-challenger/game/fault/trace/vm/executor.go b/op-challenger/game/fault/trace/vm/executor.go index a26133e083b3..65c18d67d221 100644 --- a/op-challenger/game/fault/trace/vm/executor.go +++ b/op-challenger/game/fault/trace/vm/executor.go @@ -12,29 +12,45 @@ import ( "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" + "github.com/ethereum-optimism/optimism/op-service/jsonutil" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" ) +const ( + debugFilename = "debug-info.json" +) + type Metricer interface { RecordVmExecutionTime(vmType string, t time.Duration) + RecordVmMemoryUsed(vmType string, memoryUsed uint64) } type Config struct { - VmType types.TraceType + // VM Configuration + VmType types.TraceType + VmBin string // Path to the vm executable to run when generating trace data + SnapshotFreq uint // Frequency of snapshots to create when executing (in VM instructions) + InfoFreq uint // Frequency of progress log messages (in VM instructions) + DebugInfo bool + + // Host Configuration L1 string L1Beacon string L2 string - VmBin string // Path to the vm executable to run when generating trace data Server string // Path to the executable that provides the pre-image oracle server Network string RollupConfigPath string L2GenesisPath string - SnapshotFreq uint // Frequency of snapshots to create when executing (in VM instructions) - InfoFreq uint // Frequency of progress log messages (in VM instructions) +} + +type OracleServerExecutor interface { + OracleCommand(cfg Config, dataDir string, inputs utils.LocalGameInputs) ([]string, error) } type Executor struct { cfg Config + oracleServer OracleServerExecutor logger log.Logger metrics Metricer absolutePreState string @@ -43,9 +59,10 @@ type Executor struct { cmdExecutor CmdExecutor } -func NewExecutor(logger log.Logger, m Metricer, cfg Config, prestate string, inputs utils.LocalGameInputs) *Executor { +func NewExecutor(logger log.Logger, m Metricer, cfg Config, oracleServer OracleServerExecutor, prestate string, inputs utils.LocalGameInputs) *Executor { return &Executor{ cfg: cfg, + oracleServer: oracleServer, logger: logger, metrics: m, inputs: inputs, @@ -86,29 +103,16 @@ func (e *Executor) DoGenerateProof(ctx context.Context, dir string, begin uint64 if end < math.MaxUint64 { args = append(args, "--stop-at", "="+strconv.FormatUint(end+1, 10)) } - args = append(args, extraVmArgs...) - args = append(args, - "--", - e.cfg.Server, "--server", - "--l1", e.cfg.L1, - "--l1.beacon", e.cfg.L1Beacon, - "--l2", e.cfg.L2, - "--datadir", dataDir, - "--l1.head", e.inputs.L1Head.Hex(), - "--l2.head", e.inputs.L2Head.Hex(), - "--l2.outputroot", e.inputs.L2OutputRoot.Hex(), - "--l2.claim", e.inputs.L2Claim.Hex(), - "--l2.blocknumber", e.inputs.L2BlockNumber.Text(10), - ) - if e.cfg.Network != "" { - args = append(args, "--network", e.cfg.Network) - } - if e.cfg.RollupConfigPath != "" { - args = append(args, "--rollup.config", e.cfg.RollupConfigPath) + if e.cfg.DebugInfo { + args = append(args, "--debug-info", filepath.Join(dataDir, debugFilename)) } - if e.cfg.L2GenesisPath != "" { - args = append(args, "--l2.genesis", e.cfg.L2GenesisPath) + args = append(args, extraVmArgs...) + args = append(args, "--") + oracleArgs, err := e.oracleServer.OracleCommand(e.cfg, dataDir, e.inputs) + if err != nil { + return err } + args = append(args, oracleArgs...) if err := os.MkdirAll(snapshotDir, 0755); err != nil { return fmt.Errorf("could not create snapshot directory %v: %w", snapshotDir, err) @@ -122,6 +126,21 @@ func (e *Executor) DoGenerateProof(ctx context.Context, dir string, begin uint64 e.logger.Info("Generating trace", "proof", end, "cmd", e.cfg.VmBin, "args", strings.Join(args, ", ")) execStart := time.Now() err = e.cmdExecutor(ctx, e.logger.New("proof", end), e.cfg.VmBin, args...) - e.metrics.RecordVmExecutionTime(e.cfg.VmType.String(), time.Since(execStart)) + execTime := time.Since(execStart) + memoryUsed := "unknown" + e.metrics.RecordVmExecutionTime(e.cfg.VmType.String(), execTime) + if e.cfg.DebugInfo && err == nil { + if info, err := jsonutil.LoadJSON[debugInfo](filepath.Join(dataDir, debugFilename)); err != nil { + e.logger.Warn("Failed to load debug metrics", "err", err) + } else { + e.metrics.RecordVmMemoryUsed(e.cfg.VmType.String(), uint64(info.MemoryUsed)) + memoryUsed = fmt.Sprintf("%d", uint64(info.MemoryUsed)) + } + } + e.logger.Info("VM execution complete", "time", execTime, "memory", memoryUsed) return err } + +type debugInfo struct { + MemoryUsed hexutil.Uint64 `json:"memory_used"` +} diff --git a/op-challenger/game/fault/trace/vm/executor_test.go b/op-challenger/game/fault/trace/vm/executor_test.go index 00078bd2078e..14496e769b06 100644 --- a/op-challenger/game/fault/trace/vm/executor_test.go +++ b/op-challenger/game/fault/trace/vm/executor_test.go @@ -42,7 +42,7 @@ func TestGenerateProof(t *testing.T) { } captureExec := func(t *testing.T, cfg Config, proofAt uint64) (string, string, map[string]string) { m := &stubVmMetrics{} - executor := NewExecutor(testlog.Logger(t, log.LevelInfo), m, cfg, prestate, inputs) + executor := NewExecutor(testlog.Logger(t, log.LevelInfo), m, cfg, NewOpProgramVmConfig(), prestate, inputs) executor.selectSnapshot = func(logger log.Logger, dir string, absolutePreState string, i uint64) (string, error) { return input, nil } diff --git a/op-challenger/game/fault/trace/vm/kona_vm_config.go b/op-challenger/game/fault/trace/vm/kona_vm_config.go new file mode 100644 index 000000000000..919375e6a2c1 --- /dev/null +++ b/op-challenger/game/fault/trace/vm/kona_vm_config.go @@ -0,0 +1,39 @@ +package vm + +import ( + "errors" + "strconv" + + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum-optimism/optimism/op-node/chaincfg" +) + +type KonaVmConfig struct { +} + +var _ OracleServerExecutor = (*KonaVmConfig)(nil) + +func NewKonaVmConfig() *KonaVmConfig { + return &KonaVmConfig{} +} + +func (s *KonaVmConfig) OracleCommand(cfg Config, dataDir string, inputs utils.LocalGameInputs) ([]string, error) { + if cfg.Network == "" { + return nil, errors.New("network is not defined") + } + + chainCfg := chaincfg.ChainByName(cfg.Network) + return []string{ + cfg.Server, "--server", + "--l1-node-address", cfg.L1, + "--l1-beacon-address", cfg.L1Beacon, + "--l2-node-address", cfg.L2, + "--data-dir", dataDir, + "--l2-chain-id", strconv.FormatUint(chainCfg.ChainID, 10), + "--l1-head", inputs.L1Head.Hex(), + "--l2-head", inputs.L2Head.Hex(), + "--l2-output-root", inputs.L2OutputRoot.Hex(), + "--l2-claim", inputs.L2Claim.Hex(), + "--l2-block-number", inputs.L2BlockNumber.Text(10), + }, nil +} diff --git a/op-challenger/game/fault/trace/vm/kona_vm_config_test.go b/op-challenger/game/fault/trace/vm/kona_vm_config_test.go new file mode 100644 index 000000000000..4e6662946799 --- /dev/null +++ b/op-challenger/game/fault/trace/vm/kona_vm_config_test.go @@ -0,0 +1,45 @@ +package vm + +import ( + "math/big" + "slices" + "testing" + + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum/go-ethereum/common" + "github.com/stretchr/testify/require" +) + +func TestKonaFillHostCommand(t *testing.T) { + dir := "mockdir" + cfg := Config{ + L1: "http://localhost:8888", + L1Beacon: "http://localhost:9000", + L2: "http://localhost:9999", + Server: "./bin/mockserver", + Network: "op-mainnet", + } + inputs := utils.LocalGameInputs{ + L1Head: common.Hash{0x11}, + L2Head: common.Hash{0x22}, + L2OutputRoot: common.Hash{0x33}, + L2Claim: common.Hash{0x44}, + L2BlockNumber: big.NewInt(3333), + } + vmConfig := NewKonaVmConfig() + + args, err := vmConfig.OracleCommand(cfg, dir, inputs) + require.NoError(t, err) + + require.True(t, slices.Contains(args, "--server")) + require.True(t, slices.Contains(args, "--l1-node-address")) + require.True(t, slices.Contains(args, "--l1-beacon-address")) + require.True(t, slices.Contains(args, "--l2-node-address")) + require.True(t, slices.Contains(args, "--data-dir")) + require.True(t, slices.Contains(args, "--l2-chain-id")) + require.True(t, slices.Contains(args, "--l1-head")) + require.True(t, slices.Contains(args, "--l2-head")) + require.True(t, slices.Contains(args, "--l2-output-root")) + require.True(t, slices.Contains(args, "--l2-claim")) + require.True(t, slices.Contains(args, "--l2-block-number")) +} diff --git a/op-challenger/game/fault/trace/vm/op_program_vm_config.go b/op-challenger/game/fault/trace/vm/op_program_vm_config.go new file mode 100644 index 000000000000..9cf04ef5b46a --- /dev/null +++ b/op-challenger/game/fault/trace/vm/op_program_vm_config.go @@ -0,0 +1,39 @@ +package vm + +import ( + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" +) + +type OpProgramVmConfig struct { +} + +var _ OracleServerExecutor = (*OpProgramVmConfig)(nil) + +func NewOpProgramVmConfig() *OpProgramVmConfig { + return &OpProgramVmConfig{} +} + +func (s *OpProgramVmConfig) OracleCommand(cfg Config, dataDir string, inputs utils.LocalGameInputs) ([]string, error) { + args := []string{ + cfg.Server, "--server", + "--l1", cfg.L1, + "--l1.beacon", cfg.L1Beacon, + "--l2", cfg.L2, + "--datadir", dataDir, + "--l1.head", inputs.L1Head.Hex(), + "--l2.head", inputs.L2Head.Hex(), + "--l2.outputroot", inputs.L2OutputRoot.Hex(), + "--l2.claim", inputs.L2Claim.Hex(), + "--l2.blocknumber", inputs.L2BlockNumber.Text(10), + } + if cfg.Network != "" { + args = append(args, "--network", cfg.Network) + } + if cfg.RollupConfigPath != "" { + args = append(args, "--rollup.config", cfg.RollupConfigPath) + } + if cfg.L2GenesisPath != "" { + args = append(args, "--l2.genesis", cfg.L2GenesisPath) + } + return args, nil +} diff --git a/op-challenger/game/fault/trace/vm/op_program_vm_config_test.go b/op-challenger/game/fault/trace/vm/op_program_vm_config_test.go new file mode 100644 index 000000000000..7279daa142be --- /dev/null +++ b/op-challenger/game/fault/trace/vm/op_program_vm_config_test.go @@ -0,0 +1,98 @@ +package vm + +import ( + "math/big" + "slices" + "testing" + + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum/go-ethereum/common" + "github.com/stretchr/testify/require" +) + +func TestOpProgramFillHostCommand(t *testing.T) { + dir := "mockdir" + cfg := Config{ + L1: "http://localhost:8888", + L1Beacon: "http://localhost:9000", + L2: "http://localhost:9999", + Server: "./bin/mockserver", + } + inputs := utils.LocalGameInputs{ + L1Head: common.Hash{0x11}, + L2Head: common.Hash{0x22}, + L2OutputRoot: common.Hash{0x33}, + L2Claim: common.Hash{0x44}, + L2BlockNumber: big.NewInt(3333), + } + + validateStandard := func(t *testing.T, args []string) { + require.True(t, slices.Contains(args, "--server")) + require.True(t, slices.Contains(args, "--l1")) + require.True(t, slices.Contains(args, "--l1.beacon")) + require.True(t, slices.Contains(args, "--l2")) + require.True(t, slices.Contains(args, "--datadir")) + require.True(t, slices.Contains(args, "--l1.head")) + require.True(t, slices.Contains(args, "--l2.head")) + require.True(t, slices.Contains(args, "--l2.outputroot")) + require.True(t, slices.Contains(args, "--l2.claim")) + require.True(t, slices.Contains(args, "--l2.blocknumber")) + } + + t.Run("NoExtras", func(t *testing.T) { + vmConfig := NewOpProgramVmConfig() + + args, err := vmConfig.OracleCommand(cfg, dir, inputs) + require.NoError(t, err) + + validateStandard(t, args) + }) + + t.Run("WithNetwork", func(t *testing.T) { + cfg.Network = "op-test" + vmConfig := NewOpProgramVmConfig() + + args, err := vmConfig.OracleCommand(cfg, dir, inputs) + require.NoError(t, err) + + validateStandard(t, args) + require.True(t, slices.Contains(args, "--network")) + }) + + t.Run("WithRollupConfigPath", func(t *testing.T) { + cfg.RollupConfigPath = "rollup.config" + vmConfig := NewOpProgramVmConfig() + + args, err := vmConfig.OracleCommand(cfg, dir, inputs) + require.NoError(t, err) + + validateStandard(t, args) + require.True(t, slices.Contains(args, "--rollup.config")) + }) + + t.Run("WithL2GenesisPath", func(t *testing.T) { + cfg.L2GenesisPath = "l2.genesis" + vmConfig := NewOpProgramVmConfig() + + args, err := vmConfig.OracleCommand(cfg, dir, inputs) + require.NoError(t, err) + + validateStandard(t, args) + require.True(t, slices.Contains(args, "--l2.genesis")) + }) + + t.Run("WithAllExtras", func(t *testing.T) { + cfg.Network = "op-test" + cfg.RollupConfigPath = "rollup.config" + cfg.L2GenesisPath = "l2.genesis" + vmConfig := NewOpProgramVmConfig() + + args, err := vmConfig.OracleCommand(cfg, dir, inputs) + require.NoError(t, err) + + validateStandard(t, args) + require.True(t, slices.Contains(args, "--network")) + require.True(t, slices.Contains(args, "--rollup.config")) + require.True(t, slices.Contains(args, "--l2.genesis")) + }) +} diff --git a/op-challenger/game/fault/types/types.go b/op-challenger/game/fault/types/types.go index aca80577b36a..d1d887910de8 100644 --- a/op-challenger/game/fault/types/types.go +++ b/op-challenger/game/fault/types/types.go @@ -26,6 +26,7 @@ const ( CannonGameType GameType = 0 PermissionedGameType GameType = 1 AsteriscGameType GameType = 2 + AsteriscKonaGameType GameType = 3 FastGameType GameType = 254 AlphabetGameType GameType = 255 UnknownGameType GameType = math.MaxUint32 @@ -43,6 +44,8 @@ func (t GameType) String() string { return "permissioned" case AsteriscGameType: return "asterisc" + case AsteriscKonaGameType: + return "asterisc-kona" case FastGameType: return "fast" case AlphabetGameType: @@ -59,6 +62,7 @@ const ( TraceTypeFast TraceType = "fast" TraceTypeCannon TraceType = "cannon" TraceTypeAsterisc TraceType = "asterisc" + TraceTypeAsteriscKona TraceType = "asterisc-kona" TraceTypePermissioned TraceType = "permissioned" ) diff --git a/op-challenger/game/keccak/fetcher/fetcher_test.go b/op-challenger/game/keccak/fetcher/fetcher_test.go index cedff735e9f9..2a976b3e6df0 100644 --- a/op-challenger/game/keccak/fetcher/fetcher_test.go +++ b/op-challenger/game/keccak/fetcher/fetcher_test.go @@ -437,7 +437,7 @@ func (s *stubL1Source) BlockByNumber(_ context.Context, number *big.Int) (*types if !ok { return nil, errors.New("not found") } - return (&types.Block{}).WithBody(txs, nil), nil + return (&types.Block{}).WithBody(types.Body{Transactions: txs}), nil } func (s *stubL1Source) TransactionReceipt(_ context.Context, txHash common.Hash) (*types.Receipt, error) { diff --git a/op-challenger/metrics/metrics.go b/op-challenger/metrics/metrics.go index b5c9d19e298f..fdea90841a04 100644 --- a/op-challenger/metrics/metrics.go +++ b/op-challenger/metrics/metrics.go @@ -39,6 +39,7 @@ type Metricer interface { RecordGameMove() RecordGameL2Challenge() RecordVmExecutionTime(vmType string, t time.Duration) + RecordVmMemoryUsed(vmType string, memoryUsed uint64) RecordClaimResolutionTime(t float64) RecordGameActTime(t float64) @@ -94,6 +95,7 @@ type Metrics struct { claimResolutionTime prometheus.Histogram gameActTime prometheus.Histogram vmExecutionTime *prometheus.HistogramVec + vmMemoryUsed *prometheus.HistogramVec trackedGames prometheus.GaugeVec inflightGames prometheus.Gauge @@ -176,6 +178,13 @@ func NewMetrics() *Metrics { []float64{1.0, 10.0}, prometheus.ExponentialBuckets(30.0, 2.0, 14)...), }, []string{"vm"}), + vmMemoryUsed: factory.NewHistogramVec(prometheus.HistogramOpts{ + Namespace: Namespace, + Name: "vm_memory_used", + Help: "Memory used (in bytes) to execute the fault proof VM", + // 100MiB increments from 0 to 1.5GiB + Buckets: prometheus.LinearBuckets(0, 1024*1024*100, 15), + }, []string{"vm"}), bondClaimFailures: factory.NewCounter(prometheus.CounterOpts{ Namespace: Namespace, Name: "claim_failures", @@ -285,6 +294,10 @@ func (m *Metrics) RecordVmExecutionTime(vmType string, dur time.Duration) { m.vmExecutionTime.WithLabelValues(vmType).Observe(dur.Seconds()) } +func (m *Metrics) RecordVmMemoryUsed(vmType string, memoryUsed uint64) { + m.vmMemoryUsed.WithLabelValues(vmType).Observe(float64(memoryUsed)) +} + func (m *Metrics) RecordClaimResolutionTime(t float64) { m.claimResolutionTime.Observe(t) } diff --git a/op-challenger/metrics/noop.go b/op-challenger/metrics/noop.go index 1a3faf00b213..99a89965aa21 100644 --- a/op-challenger/metrics/noop.go +++ b/op-challenger/metrics/noop.go @@ -40,6 +40,7 @@ func (*NoopMetricsImpl) RecordBondClaimFailed() {} func (*NoopMetricsImpl) RecordBondClaimed(uint64) {} func (*NoopMetricsImpl) RecordVmExecutionTime(_ string, _ time.Duration) {} +func (*NoopMetricsImpl) RecordVmMemoryUsed(_ string, _ uint64) {} func (*NoopMetricsImpl) RecordClaimResolutionTime(t float64) {} func (*NoopMetricsImpl) RecordGameActTime(t float64) {} diff --git a/op-challenger/runner/factory.go b/op-challenger/runner/factory.go index 4b1ca45031ff..2840d25a82c2 100644 --- a/op-challenger/runner/factory.go +++ b/op-challenger/runner/factory.go @@ -3,6 +3,8 @@ package runner import ( "errors" "fmt" + "net/url" + "path/filepath" "github.com/ethereum-optimism/optimism/op-challenger/config" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/asterisc" @@ -19,24 +21,49 @@ func createTraceProvider( logger log.Logger, m vm.Metricer, cfg *config.Config, - prestateSource prestates.PrestateSource, prestateHash common.Hash, traceType types.TraceType, localInputs utils.LocalGameInputs, dir string, ) (types.TraceProvider, error) { - prestate, err := prestateSource.PrestatePath(prestateHash) - if err != nil { - return nil, fmt.Errorf("failed to get prestate %v: %w", prestateHash, err) - } - switch traceType { case types.TraceTypeCannon: + vmConfig := vm.NewOpProgramVmConfig() + prestate, err := getPrestate(prestateHash, cfg.CannonAbsolutePreStateBaseURL, cfg.CannonAbsolutePreState, dir) + if err != nil { + return nil, err + } prestateProvider := cannon.NewPrestateProvider(prestate) - return cannon.NewTraceProvider(logger, m, cfg.Cannon, prestateProvider, prestate, localInputs, dir, 42), nil + return cannon.NewTraceProvider(logger, m, cfg.Cannon, vmConfig, prestateProvider, prestate, localInputs, dir, 42), nil case types.TraceTypeAsterisc: + vmConfig := vm.NewOpProgramVmConfig() + prestate, err := getPrestate(prestateHash, cfg.AsteriscAbsolutePreStateBaseURL, cfg.AsteriscAbsolutePreState, dir) + if err != nil { + return nil, err + } + prestateProvider := asterisc.NewPrestateProvider(prestate) + return asterisc.NewTraceProvider(logger, m, cfg.Asterisc, vmConfig, prestateProvider, prestate, localInputs, dir, 42), nil + case types.TraceTypeAsteriscKona: + vmConfig := vm.NewKonaVmConfig() + prestate, err := getPrestate(prestateHash, cfg.AsteriscAbsolutePreStateBaseURL, cfg.AsteriscAbsolutePreState, dir) + if err != nil { + return nil, err + } prestateProvider := asterisc.NewPrestateProvider(prestate) - return asterisc.NewTraceProvider(logger, m, cfg.Asterisc, prestateProvider, prestate, localInputs, dir, 42), nil + return asterisc.NewTraceProvider(logger, m, cfg.Asterisc, vmConfig, prestateProvider, prestate, localInputs, dir, 42), nil } return nil, errors.New("invalid trace type") } + +func getPrestate(prestateHash common.Hash, prestateBaseUrl *url.URL, prestatePath string, dataDir string) (string, error) { + prestateSource := prestates.NewPrestateSource( + prestateBaseUrl, + prestatePath, + filepath.Join(dataDir, "prestates")) + + prestate, err := prestateSource.PrestatePath(prestateHash) + if err != nil { + return "", fmt.Errorf("failed to get prestate %v: %w", prestateHash, err) + } + return prestate, nil +} diff --git a/op-challenger/runner/metrics.go b/op-challenger/runner/metrics.go index 44e303583f6d..e15ad95adc1b 100644 --- a/op-challenger/runner/metrics.go +++ b/op-challenger/runner/metrics.go @@ -17,10 +17,13 @@ type Metrics struct { factory opmetrics.Factory *contractMetrics.ContractMetrics - vmExecutionTime *prometheus.HistogramVec - successTotal *prometheus.CounterVec - failuresTotal *prometheus.CounterVec - invalidTotal *prometheus.CounterVec + vmExecutionTime *prometheus.HistogramVec + vmLastExecutionTime *prometheus.GaugeVec + vmMemoryUsed *prometheus.HistogramVec + vmLastMemoryUsed *prometheus.GaugeVec + successTotal *prometheus.CounterVec + failuresTotal *prometheus.CounterVec + invalidTotal *prometheus.CounterVec } var _ Metricer = (*Metrics)(nil) @@ -47,6 +50,23 @@ func NewMetrics() *Metrics { []float64{1.0, 10.0}, prometheus.ExponentialBuckets(30.0, 2.0, 14)...), }, []string{"vm"}), + vmLastExecutionTime: factory.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: Namespace, + Name: "vm_last_execution_time", + Help: "Time (in seconds) taken for the last execution of the fault proof VM", + }, []string{"vm"}), + vmMemoryUsed: factory.NewHistogramVec(prometheus.HistogramOpts{ + Namespace: Namespace, + Name: "vm_memory_used", + Help: "Memory used (in bytes) to execute the fault proof VM", + // 100MiB increments from 0 to 1.5GiB + Buckets: prometheus.LinearBuckets(0, 1024*1024*100, 15), + }, []string{"vm"}), + vmLastMemoryUsed: factory.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: Namespace, + Name: "vm_last_memory_used", + Help: "Memory used (in bytes) for the last execution of the fault proof VM", + }, []string{"vm"}), successTotal: factory.NewCounterVec(prometheus.CounterOpts{ Namespace: Namespace, Name: "success_total", @@ -70,7 +90,14 @@ func (m *Metrics) Registry() *prometheus.Registry { } func (m *Metrics) RecordVmExecutionTime(vmType string, dur time.Duration) { - m.vmExecutionTime.WithLabelValues(vmType).Observe(dur.Seconds()) + val := dur.Seconds() + m.vmExecutionTime.WithLabelValues(vmType).Observe(val) + m.vmLastExecutionTime.WithLabelValues(vmType).Set(val) +} + +func (m *Metrics) RecordVmMemoryUsed(vmType string, memoryUsed uint64) { + m.vmMemoryUsed.WithLabelValues(vmType).Observe(float64(memoryUsed)) + m.vmLastMemoryUsed.WithLabelValues(vmType).Set(float64(memoryUsed)) } func (m *Metrics) RecordSuccess(vmType types.TraceType) { diff --git a/op-challenger/runner/runner.go b/op-challenger/runner/runner.go index 01aee19b1781..8c46f0f0a6bf 100644 --- a/op-challenger/runner/runner.go +++ b/op-challenger/runner/runner.go @@ -15,7 +15,6 @@ import ( "github.com/ethereum-optimism/optimism/op-challenger/config" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts" contractMetrics "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts/metrics" - "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/prestates" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" @@ -130,12 +129,8 @@ func (r *Runner) runOnce(ctx context.Context, traceType types.TraceType, client if err != nil { return err } - prestateSource := prestates.NewPrestateSource( - r.cfg.CannonAbsolutePreStateBaseURL, - r.cfg.CannonAbsolutePreState, - filepath.Join(dir, "prestates")) logger := r.log.New("l1", localInputs.L1Head, "l2", localInputs.L2Head, "l2Block", localInputs.L2BlockNumber, "claim", localInputs.L2Claim, "type", traceType) - provider, err := createTraceProvider(logger, r.m, r.cfg, prestateSource, prestateHash, traceType, localInputs, dir) + provider, err := createTraceProvider(logger, r.m, r.cfg, prestateHash, traceType, localInputs, dir) if err != nil { return fmt.Errorf("failed to create trace provider: %w", err) } @@ -166,33 +161,72 @@ func (r *Runner) createGameInputs(ctx context.Context, client *sources.RollupCli return utils.LocalGameInputs{}, fmt.Errorf("failed to get rollup sync status: %w", err) } - if status.SafeL2.Number == 0 { + if status.FinalizedL2.Number == 0 { return utils.LocalGameInputs{}, errors.New("safe head is 0") } - claimOutput, err := client.OutputAtBlock(ctx, status.SafeL2.Number) + l1Head := status.FinalizedL1 + if status.FinalizedL1.Number > status.CurrentL1.Number { + // Restrict the L1 head to a block that has actually be processed by op-node. + // This only matters if op-node is behind and hasn't processed all finalized L1 blocks yet. + l1Head = status.CurrentL1 + } + blockNumber, err := r.findL2BlockNumberToDispute(ctx, client, l1Head.Number, status.FinalizedL2.Number) + if err != nil { + return utils.LocalGameInputs{}, fmt.Errorf("failed to find l2 block number to dispute: %w", err) + } + claimOutput, err := client.OutputAtBlock(ctx, blockNumber) if err != nil { return utils.LocalGameInputs{}, fmt.Errorf("failed to get claim output: %w", err) } - parentOutput, err := client.OutputAtBlock(ctx, status.SafeL2.Number-1) + parentOutput, err := client.OutputAtBlock(ctx, blockNumber-1) if err != nil { return utils.LocalGameInputs{}, fmt.Errorf("failed to get claim output: %w", err) } localInputs := utils.LocalGameInputs{ - L1Head: status.HeadL1.Hash, + L1Head: l1Head.Hash, L2Head: parentOutput.BlockRef.Hash, L2OutputRoot: common.Hash(parentOutput.OutputRoot), L2Claim: common.Hash(claimOutput.OutputRoot), - L2BlockNumber: new(big.Int).SetUint64(status.SafeL2.Number), + L2BlockNumber: new(big.Int).SetUint64(blockNumber), } return localInputs, nil } +func (r *Runner) findL2BlockNumberToDispute(ctx context.Context, client *sources.RollupClient, l1HeadNum uint64, l2BlockNum uint64) (uint64, error) { + // Try to find a L1 block prior to the batch that make l2BlockNum safe + // Limits how far back we search to 10 * 32 blocks + const skipSize = uint64(32) + for i := 0; i < 10; i++ { + if l1HeadNum < skipSize { + // Too close to genesis, give up and just use the original block + r.log.Info("Failed to find prior batch.") + return l2BlockNum, nil + } + l1HeadNum -= skipSize + priorSafeHead, err := client.SafeHeadAtL1Block(ctx, l1HeadNum) + if err != nil { + return 0, fmt.Errorf("failed to get prior safe head at L1 block %v: %w", l1HeadNum, err) + } + if priorSafeHead.SafeHead.Number < l2BlockNum { + // We walked back far enough to be before the batch that included l2BlockNum + // So use the first block after the prior safe head as the disputed block. + // It must be the first block in a batch. + return priorSafeHead.SafeHead.Number + 1, nil + } + } + r.log.Warn("Failed to find prior batch", "l2BlockNum", l2BlockNum, "earliestCheckL1Block", l1HeadNum) + return l2BlockNum, nil +} + func (r *Runner) getPrestateHash(ctx context.Context, traceType types.TraceType, caller *batching.MultiCaller) (common.Hash, error) { gameFactory := contracts.NewDisputeGameFactoryContract(r.m, r.cfg.GameFactoryAddress, caller) gameImplAddr, err := gameFactory.GetGameImpl(ctx, traceType.GameType()) if err != nil { return common.Hash{}, fmt.Errorf("failed to load game impl: %w", err) } + if gameImplAddr == (common.Address{}) { + return common.Hash{}, nil // No prestate is set, will only work if a single prestate is specified + } gameImpl, err := contracts.NewFaultDisputeGameContract(ctx, r.m, gameImplAddr, caller) if err != nil { return common.Hash{}, fmt.Errorf("failed to create fault dispute game contract bindings for %v: %w", gameImplAddr, err) diff --git a/op-conductor/conductor/service_test.go b/op-conductor/conductor/service_test.go index 4e19925baa4b..d0c256f000a4 100644 --- a/op-conductor/conductor/service_test.go +++ b/op-conductor/conductor/service_test.go @@ -64,7 +64,8 @@ func mockConfig(t *testing.T) Config { BlockTime: 2, MaxSequencerDrift: 600, SeqWindowSize: 3600, - ChannelTimeout: 300, + ChannelTimeoutBedrock: 300, + ChannelTimeoutGranite: 50, L1ChainID: big.NewInt(1), L2ChainID: big.NewInt(2), RegolithTime: &now, diff --git a/op-e2e/README.md b/op-e2e/README.md index 28fdb06dad1b..11705aa980b4 100644 --- a/op-e2e/README.md +++ b/op-e2e/README.md @@ -29,6 +29,6 @@ make test-http ### Troubleshooting If you encounter errors: -* ensure you have the latest version of foundry installed: `pnpm update:foundry` +* ensure you have the latest version of foundry installed: `just update-foundry` * try deleting the `packages/contracts-bedrock/forge-artifacts` directory * if the above step doesn't fix the error, try `pnpm clean` diff --git a/op-e2e/actions/dencun_fork_test.go b/op-e2e/actions/dencun_fork_test.go index 5e0f1706cb31..9b411e28f1e7 100644 --- a/op-e2e/actions/dencun_fork_test.go +++ b/op-e2e/actions/dencun_fork_test.go @@ -62,8 +62,7 @@ func TestDencunL1ForkAfterGenesis(gt *testing.T) { func TestDencunL1ForkAtGenesis(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - offset := hexutil.Uint64(0) - dp.DeployConfig.L1CancunTimeOffset = &offset + require.Zero(t, *dp.DeployConfig.L1CancunTimeOffset) sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) _, _, miner, sequencer, _, verifier, _, batcher := setupReorgTestActors(t, dp, sd, log) @@ -120,14 +119,13 @@ func verifyEcotoneBlock(gt *testing.T, header *types.Header) { func TestDencunL2ForkAfterGenesis(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - - cancunOffset := hexutil.Uint64(0) - dp.DeployConfig.L1CancunTimeOffset = &cancunOffset + require.Zero(t, *dp.DeployConfig.L1CancunTimeOffset) // This test wil fork on the second block offset := hexutil.Uint64(dp.DeployConfig.L2BlockTime * 2) - dp.DeployConfig.L2GenesisCanyonTimeOffset = &offset - dp.DeployConfig.L2GenesisDeltaTimeOffset = &offset dp.DeployConfig.L2GenesisEcotoneTimeOffset = &offset + dp.DeployConfig.L2GenesisFjordTimeOffset = nil + dp.DeployConfig.L2GenesisGraniteTimeOffset = nil + // New forks have to be added here, after changing the default deploy config! sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) @@ -159,12 +157,7 @@ func TestDencunL2ForkAfterGenesis(gt *testing.T) { func TestDencunL2ForkAtGenesis(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - offset := hexutil.Uint64(0) - dp.DeployConfig.L2GenesisRegolithTimeOffset = &offset - dp.DeployConfig.L1CancunTimeOffset = &offset - dp.DeployConfig.L2GenesisCanyonTimeOffset = &offset - dp.DeployConfig.L2GenesisDeltaTimeOffset = &offset - dp.DeployConfig.L2GenesisEcotoneTimeOffset = &offset + require.Zero(t, *dp.DeployConfig.L2GenesisEcotoneTimeOffset) sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) @@ -202,11 +195,6 @@ func newEngine(t Testing, sd *e2eutils.SetupData, log log.Logger) *L2Engine { func TestDencunBlobTxRPC(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - offset := hexutil.Uint64(0) - dp.DeployConfig.L2GenesisRegolithTimeOffset = &offset - dp.DeployConfig.L2GenesisCanyonTimeOffset = &offset - dp.DeployConfig.L2GenesisDeltaTimeOffset = &offset - dp.DeployConfig.L2GenesisEcotoneTimeOffset = &offset sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) @@ -221,11 +209,6 @@ func TestDencunBlobTxRPC(gt *testing.T) { func TestDencunBlobTxInTxPool(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - offset := hexutil.Uint64(0) - dp.DeployConfig.L2GenesisRegolithTimeOffset = &offset - dp.DeployConfig.L2GenesisCanyonTimeOffset = &offset - dp.DeployConfig.L2GenesisDeltaTimeOffset = &offset - dp.DeployConfig.L2GenesisEcotoneTimeOffset = &offset sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) @@ -239,11 +222,6 @@ func TestDencunBlobTxInTxPool(gt *testing.T) { func TestDencunBlobTxInclusion(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - offset := hexutil.Uint64(0) - dp.DeployConfig.L2GenesisRegolithTimeOffset = &offset - dp.DeployConfig.L2GenesisCanyonTimeOffset = &offset - dp.DeployConfig.L2GenesisDeltaTimeOffset = &offset - dp.DeployConfig.L2GenesisEcotoneTimeOffset = &offset sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) diff --git a/op-e2e/actions/ecotone_fork_test.go b/op-e2e/actions/ecotone_fork_test.go index 54802816322d..260a7960089a 100644 --- a/op-e2e/actions/ecotone_fork_test.go +++ b/op-e2e/actions/ecotone_fork_test.go @@ -42,18 +42,16 @@ func verifyCodeHashMatches(t Testing, client *ethclient.Client, address common.A func TestEcotoneNetworkUpgradeTransactions(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - genesisBlock := hexutil.Uint64(0) ecotoneOffset := hexutil.Uint64(4) log := testlog.Logger(t, log.LevelDebug) - dp.DeployConfig.L1CancunTimeOffset = &genesisBlock // can be removed once Cancun on L1 is the default - + require.Zero(t, *dp.DeployConfig.L1CancunTimeOffset) // Activate all forks at genesis, and schedule Ecotone the block after - dp.DeployConfig.L2GenesisRegolithTimeOffset = &genesisBlock - dp.DeployConfig.L2GenesisCanyonTimeOffset = &genesisBlock - dp.DeployConfig.L2GenesisDeltaTimeOffset = &genesisBlock dp.DeployConfig.L2GenesisEcotoneTimeOffset = &ecotoneOffset + dp.DeployConfig.L2GenesisFjordTimeOffset = nil + dp.DeployConfig.L2GenesisGraniteTimeOffset = nil + // New forks have to be added here... require.NoError(t, dp.DeployConfig.Check(log), "must have valid config") sd := e2eutils.Setup(t, dp, defaultAlloc) diff --git a/op-e2e/actions/l1_miner.go b/op-e2e/actions/l1_miner.go index c378cd9f5cfd..9026d74db178 100644 --- a/op-e2e/actions/l1_miner.go +++ b/op-e2e/actions/l1_miner.go @@ -109,10 +109,10 @@ func (s *L1Miner) ActL1StartBlock(timeDelta uint64) Action { context := core.NewEVMBlockContext(header, s.l1Chain, nil, s.l1Chain.Config(), statedb) // NOTE: Unlikely to be needed for the beacon block root, but we setup any precompile overrides anyways for forwards-compatibility var precompileOverrides vm.PrecompileOverrides - if vmConfig := s.l1Chain.GetVMConfig(); vmConfig != nil && vmConfig.OptimismPrecompileOverrides != nil { - precompileOverrides = vmConfig.OptimismPrecompileOverrides + if vmConfig := s.l1Chain.GetVMConfig(); vmConfig != nil && vmConfig.PrecompileOverrides != nil { + precompileOverrides = vmConfig.PrecompileOverrides } - vmenv := vm.NewEVM(context, vm.TxContext{}, statedb, s.l1Chain.Config(), vm.Config{OptimismPrecompileOverrides: precompileOverrides}) + vmenv := vm.NewEVM(context, vm.TxContext{}, statedb, s.l1Chain.Config(), vm.Config{PrecompileOverrides: precompileOverrides}) core.ProcessBeaconBlockRoot(*header.ParentBeaconRoot, vmenv, statedb) } @@ -207,10 +207,13 @@ func (s *L1Miner) ActL1EndBlock(t Testing) { s.l1Building = false s.l1BuildingHeader.GasUsed = s.l1BuildingHeader.GasLimit - uint64(*s.l1GasPool) s.l1BuildingHeader.Root = s.l1BuildingState.IntermediateRoot(s.l1Cfg.Config.IsEIP158(s.l1BuildingHeader.Number)) - block := types.NewBlock(s.l1BuildingHeader, s.l1Transactions, nil, s.l1Receipts, trie.NewStackTrie(nil)) + + var withdrawals []*types.Withdrawal if s.l1Cfg.Config.IsShanghai(s.l1BuildingHeader.Number, s.l1BuildingHeader.Time) { - block = block.WithWithdrawals(make([]*types.Withdrawal, 0)) + withdrawals = make([]*types.Withdrawal, 0) } + + block := types.NewBlock(s.l1BuildingHeader, &types.Body{Transactions: s.l1Transactions, Withdrawals: withdrawals}, s.l1Receipts, trie.NewStackTrie(nil)) if s.l1Cfg.Config.IsCancun(s.l1BuildingHeader.Number, s.l1BuildingHeader.Time) { parent := s.l1Chain.GetHeaderByHash(s.l1BuildingHeader.ParentHash) var ( diff --git a/op-e2e/actions/l1_replica.go b/op-e2e/actions/l1_replica.go index 430dffa3920d..fb042757065e 100644 --- a/op-e2e/actions/l1_replica.go +++ b/op-e2e/actions/l1_replica.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/txpool/blobpool" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" @@ -54,6 +55,8 @@ func NewL1Replica(t Testing, log log.Logger, genesis *core.Genesis) *L1Replica { NetworkId: genesis.Config.ChainID.Uint64(), Genesis: genesis, RollupDisableTxPoolGossip: true, + StateScheme: rawdb.HashScheme, + NoPruning: true, BlobPool: blobpool.Config{ Datadir: t.TempDir(), Datacap: blobpool.DefaultConfig.Datacap, @@ -80,7 +83,6 @@ func NewL1Replica(t Testing, log log.Logger, genesis *core.Genesis) *L1Replica { backend, err := eth.New(n, ethCfg) require.NoError(t, err) - backend.Merger().FinalizePoS() n.RegisterAPIs(tracers.APIs(backend.APIBackend)) diff --git a/op-e2e/actions/l2_engine.go b/op-e2e/actions/l2_engine.go index 88d40ec2a3b9..54267ee9da58 100644 --- a/op-e2e/actions/l2_engine.go +++ b/op-e2e/actions/l2_engine.go @@ -5,6 +5,7 @@ import ( "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/stretchr/testify/require" "github.com/ethereum/go-ethereum/common" @@ -83,8 +84,10 @@ func NewL2Engine(t Testing, log log.Logger, genesis *core.Genesis, rollupGenesis func newBackend(t e2eutils.TestingBase, genesis *core.Genesis, jwtPath string, options []EngineOption) (*node.Node, *geth.Ethereum, *engineApiBackend) { ethCfg := ðconfig.Config{ - NetworkId: genesis.Config.ChainID.Uint64(), - Genesis: genesis, + NetworkId: genesis.Config.ChainID.Uint64(), + Genesis: genesis, + StateScheme: rawdb.HashScheme, + NoPruning: true, } nodeCfg := &node.Config{ Name: "l2-geth", diff --git a/op-e2e/actions/l2_engine_test.go b/op-e2e/actions/l2_engine_test.go index 6a113e086940..5d7a537b5d03 100644 --- a/op-e2e/actions/l2_engine_test.go +++ b/op-e2e/actions/l2_engine_test.go @@ -1,26 +1,28 @@ package actions import ( + "encoding/binary" "errors" "math/big" "testing" - "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi" - "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi/test" + "github.com/stretchr/testify/require" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/beacon" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/triedb" "github.com/ethereum/go-ethereum/triedb/hashdb" - "github.com/stretchr/testify/require" - - "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" + "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi" + "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi/test" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -44,50 +46,62 @@ func TestL2EngineAPI(gt *testing.T) { require.NoError(t, err) // build an empty block - chainA, _ := core.GenerateChain(sd.L2Cfg.Config, genesisBlock, consensus, db, 1, func(i int, gen *core.BlockGen) { + chainA, _ := core.GenerateChain(sd.L2Cfg.Config, genesisBlock, consensus, db, 1, func(n int, gen *core.BlockGen) { gen.SetCoinbase(common.Address{'A'}) + if sd.L2Cfg.Config.IsCancun(gen.Number(), gen.Timestamp()) { + root := crypto.Keccak256Hash([]byte("A"), binary.BigEndian.AppendUint64(nil, uint64(n))) + gen.SetParentBeaconRoot(root) + } }) - payloadA, err := eth.BlockAsPayload(chainA[0], sd.RollupCfg.CanyonTime) + + payloadA, err := eth.BlockAsPayloadEnv(chainA[0], sd.RollupCfg.CanyonTime) require.NoError(t, err) // apply the payload - status, err := l2Cl.NewPayload(t.Ctx(), payloadA, nil) + status, err := l2Cl.NewPayload(t.Ctx(), payloadA.ExecutionPayload, payloadA.ParentBeaconBlockRoot) require.NoError(t, err) - require.Equal(t, status.Status, eth.ExecutionValid) + require.Equal(t, eth.ExecutionValid, status.Status) require.Equal(t, genesisBlock.Hash(), engine.l2Chain.CurrentBlock().Hash(), "processed payloads are not immediately canonical") // recognize the payload as canonical fcRes, err := l2Cl.ForkchoiceUpdate(t.Ctx(), ð.ForkchoiceState{ - HeadBlockHash: payloadA.BlockHash, + HeadBlockHash: payloadA.ExecutionPayload.BlockHash, SafeBlockHash: genesisBlock.Hash(), FinalizedBlockHash: genesisBlock.Hash(), }, nil) require.NoError(t, err) + require.Equal(t, fcRes.PayloadStatus.Status, eth.ExecutionValid) - require.Equal(t, payloadA.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "now payload A is canonical") + require.Equal(t, payloadA.ExecutionPayload.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "now payload A is canonical") // build an alternative block - chainB, _ := core.GenerateChain(sd.L2Cfg.Config, genesisBlock, consensus, db, 1, func(i int, gen *core.BlockGen) { + chainB, _ := core.GenerateChain(sd.L2Cfg.Config, genesisBlock, consensus, db, 1, func(n int, gen *core.BlockGen) { gen.SetCoinbase(common.Address{'B'}) + if sd.L2Cfg.Config.IsCancun(gen.Number(), gen.Timestamp()) { + root := crypto.Keccak256Hash([]byte("A"), binary.BigEndian.AppendUint64(nil, uint64(n))) + gen.SetParentBeaconRoot(root) + } }) - payloadB, err := eth.BlockAsPayload(chainB[0], sd.RollupCfg.CanyonTime) + + payloadB, err := eth.BlockAsPayloadEnv(chainB[0], sd.RollupCfg.CanyonTime) require.NoError(t, err) // apply the payload - status, err = l2Cl.NewPayload(t.Ctx(), payloadB, nil) + status, err = l2Cl.NewPayload(t.Ctx(), payloadB.ExecutionPayload, payloadB.ParentBeaconBlockRoot) require.NoError(t, err) require.Equal(t, status.Status, eth.ExecutionValid) - require.Equal(t, payloadA.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "processed payloads are not immediately canonical") + require.Equal(t, payloadA.ExecutionPayload.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "processed payloads are not immediately canonical") // reorg block A in favor of block B fcRes, err = l2Cl.ForkchoiceUpdate(t.Ctx(), ð.ForkchoiceState{ - HeadBlockHash: payloadB.BlockHash, + HeadBlockHash: payloadB.ExecutionPayload.BlockHash, SafeBlockHash: genesisBlock.Hash(), FinalizedBlockHash: genesisBlock.Hash(), }, nil) require.NoError(t, err) require.Equal(t, fcRes.PayloadStatus.Status, eth.ExecutionValid) - require.Equal(t, payloadB.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "now payload B is canonical") + require.Equal(t, payloadB.ExecutionPayload.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "now payload B is canonical") + } func TestL2EngineAPIBlockBuilding(gt *testing.T) { @@ -133,6 +147,11 @@ func TestL2EngineAPIBlockBuilding(gt *testing.T) { w = &types.Withdrawals{} } + var parentBeaconBlockRoot *common.Hash + if sd.RollupCfg.IsEcotone(uint64(nextBlockTime)) { + parentBeaconBlockRoot = &common.Hash{} + } + // Now let's ask the engine to build a block fcRes, err := l2Cl.ForkchoiceUpdate(t.Ctx(), ð.ForkchoiceState{ HeadBlockHash: parent.Hash(), @@ -146,6 +165,7 @@ func TestL2EngineAPIBlockBuilding(gt *testing.T) { NoTxPool: false, GasLimit: (*eth.Uint64Quantity)(&sd.RollupCfg.Genesis.SystemConfig.GasLimit), Withdrawals: w, + ParentBeaconBlockRoot: parentBeaconBlockRoot, }) require.NoError(t, err) require.Equal(t, fcRes.PayloadStatus.Status, eth.ExecutionValid) @@ -161,7 +181,7 @@ func TestL2EngineAPIBlockBuilding(gt *testing.T) { require.Equal(t, parent.Hash(), payload.ParentHash, "block builds on parent block") // apply the payload - status, err := l2Cl.NewPayload(t.Ctx(), payload, nil) + status, err := l2Cl.NewPayload(t.Ctx(), payload, envelope.ParentBeaconBlockRoot) require.NoError(t, err) require.Equal(t, status.Status, eth.ExecutionValid) require.Equal(t, parent.Hash(), engine.l2Chain.CurrentBlock().Hash(), "processed payloads are not immediately canonical") diff --git a/op-e2e/actions/l2_proposer.go b/op-e2e/actions/l2_proposer.go index 9d0260700512..6a9c2fe4c4b5 100644 --- a/op-e2e/actions/l2_proposer.go +++ b/op-e2e/actions/l2_proposer.go @@ -3,6 +3,7 @@ package actions import ( "context" "crypto/ecdsa" + "encoding/binary" "math/big" "time" @@ -31,6 +32,7 @@ type ProposerCfg struct { OutputOracleAddr *common.Address DisputeGameFactoryAddr *common.Address ProposalInterval time.Duration + ProposalRetryInterval time.Duration DisputeGameType uint32 ProposerKey *ecdsa.PrivateKey AllowNonFinalized bool @@ -77,6 +79,7 @@ func NewL2Proposer(t Testing, log log.Logger, cfg *ProposerCfg, l1 *ethclient.Cl PollInterval: time.Second, NetworkTimeout: time.Second, ProposalInterval: cfg.ProposalInterval, + OutputRetryInterval: cfg.ProposalRetryInterval, L2OutputOracleAddr: cfg.OutputOracleAddr, DisputeGameFactoryAddr: cfg.DisputeGameFactoryAddr, DisputeGameType: cfg.DisputeGameType, @@ -206,18 +209,12 @@ func toCallArg(msg ethereum.CallMsg) interface{} { func (p *L2Proposer) fetchNextOutput(t Testing) (*eth.OutputResponse, bool, error) { if e2eutils.UseFaultProofs() { - blockNumber, err := p.driver.FetchCurrentBlockNumber(t.Ctx()) + output, err := p.driver.FetchDGFOutput(t.Ctx()) if err != nil { return nil, false, err } - - output, _, err := p.driver.FetchOutput(t.Ctx(), blockNumber) - if err != nil { - return nil, false, err - } - encodedBlockNumber := make([]byte, 32) - copy(encodedBlockNumber[32-len(blockNumber.Bytes()):], blockNumber.Bytes()) + binary.BigEndian.PutUint64(encodedBlockNumber[24:], output.BlockRef.Number) game, err := p.disputeGameFactory.Games(&bind.CallOpts{}, p.driver.Cfg.DisputeGameType, output.OutputRoot, encodedBlockNumber) if err != nil { return nil, false, err @@ -228,7 +225,7 @@ func (p *L2Proposer) fetchNextOutput(t Testing) (*eth.OutputResponse, bool, erro return output, true, nil } else { - return p.driver.FetchNextOutputInfo(t.Ctx()) + return p.driver.FetchL2OOOutput(t.Ctx()) } } diff --git a/op-e2e/actions/l2_proposer_test.go b/op-e2e/actions/l2_proposer_test.go index ef7966eb8e43..bed138cdb3a7 100644 --- a/op-e2e/actions/l2_proposer_test.go +++ b/op-e2e/actions/l2_proposer_test.go @@ -64,15 +64,17 @@ func RunProposerTest(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { proposer = NewL2Proposer(t, log, &ProposerCfg{ DisputeGameFactoryAddr: &sd.DeploymentsL1.DisputeGameFactoryProxy, ProposalInterval: 6 * time.Second, + ProposalRetryInterval: 3 * time.Second, DisputeGameType: respectedGameType, ProposerKey: dp.Secrets.Proposer, AllowNonFinalized: true, }, miner.EthClient(), rollupSeqCl) } else { proposer = NewL2Proposer(t, log, &ProposerCfg{ - OutputOracleAddr: &sd.DeploymentsL1.L2OutputOracleProxy, - ProposerKey: dp.Secrets.Proposer, - AllowNonFinalized: false, + OutputOracleAddr: &sd.DeploymentsL1.L2OutputOracleProxy, + ProposerKey: dp.Secrets.Proposer, + ProposalRetryInterval: 3 * time.Second, + AllowNonFinalized: false, }, miner.EthClient(), rollupSeqCl) } diff --git a/op-e2e/actions/l2_sequencer.go b/op-e2e/actions/l2_sequencer.go index afa54e2ea75c..8bf28631f546 100644 --- a/op-e2e/actions/l2_sequencer.go +++ b/op-e2e/actions/l2_sequencer.go @@ -202,3 +202,10 @@ func (s *L2Sequencer) ActBuildL2ToFjord(t Testing) { s.ActL2EndBlock(t) } } +func (s *L2Sequencer) ActBuildL2ToGranite(t Testing) { + require.NotNil(t, s.rollupCfg.GraniteTime, "cannot activate GraniteTime when it is not scheduled") + for s.L2Unsafe().Time < *s.rollupCfg.GraniteTime { + s.ActL2StartBlock(t) + s.ActL2EndBlock(t) + } +} diff --git a/op-e2e/actions/reorg_test.go b/op-e2e/actions/reorg_test.go index 66273bd62457..2370c9774f13 100644 --- a/op-e2e/actions/reorg_test.go +++ b/op-e2e/actions/reorg_test.go @@ -397,7 +397,7 @@ func DeepReorg(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { // Create a var to store the ref for the second to last block of the second sequencing window var blockA39 eth.L1BlockRef - var aliceL2TxBlock types.Block + var aliceL2TxBlock *types.Block // Mine enough empty blocks on L1 to reach two sequence windows. for i := uint64(0); i < sd.RollupCfg.SeqWindowSize*3; i++ { // At block #50, send a batch to L1 containing all L2 blocks built up to this point. @@ -448,7 +448,7 @@ func DeepReorg(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { b0, err := l2Client.BlockByNumber(t.Ctx(), big.NewInt(int64(sequencer.L2Unsafe().Number))) require.NoError(t, err, "failed to fetch unsafe head of L2 after submitting alice's transaction") - aliceL2TxBlock = *b0 + aliceL2TxBlock = b0 } // Ask sequencer to handle new L1 head and build L2 blocks up to the L1 head @@ -572,6 +572,8 @@ func DeepReorg(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { require.Equal(t, verifier.L2Safe(), verifier.L2Unsafe(), "L2 safe and unsafe head should be equal") checkVerifEngine() + require.NotNil(gt, aliceL2TxBlock) + // Ensure that the parent of the L2 block containing Alice's transaction still exists b0, err := l2Client.BlockByHash(t.Ctx(), aliceL2TxBlock.ParentHash()) require.NoError(t, err, "Parent of the L2 block containing Alice's transaction should still exist on L2") diff --git a/op-e2e/actions/span_batch_test.go b/op-e2e/actions/span_batch_test.go index 85da7d5b3894..23f5963fa97a 100644 --- a/op-e2e/actions/span_batch_test.go +++ b/op-e2e/actions/span_batch_test.go @@ -132,6 +132,11 @@ func TestHardforkMiddleOfSpanBatch(gt *testing.T) { // Activate HF in the middle of the first epoch deltaOffset := hexutil.Uint64(6) applyDeltaTimeOffset(dp, &deltaOffset) + // Applies to HF that goes into Delta. Otherwise we end up with more upgrade txs and things during this case. + dp.DeployConfig.L2GenesisEcotoneTimeOffset = nil + dp.DeployConfig.L2GenesisFjordTimeOffset = nil + dp.DeployConfig.L2GenesisGraniteTimeOffset = nil + sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelError) miner, seqEngine, sequencer := setupSequencerTest(t, sd, log) diff --git a/op-e2e/actions/sync_test.go b/op-e2e/actions/sync_test.go index e8c6b9a7824f..7ff35eab47dc 100644 --- a/op-e2e/actions/sync_test.go +++ b/op-e2e/actions/sync_test.go @@ -243,12 +243,12 @@ func TestBackupUnsafe(gt *testing.T) { To: &dp.Addresses.Bob, Value: e2eutils.Ether(2), }) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], validTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], validTx}}) } if i == 3 { // Make block B3 as an invalid block invalidTx := testutils.RandomTx(rng, big.NewInt(100), signer) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], invalidTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], invalidTx}}) } // Add A1, B2, B3, B4, B5 into the channel err = channelOut.AddBlock(sd.RollupCfg, block) @@ -404,12 +404,12 @@ func TestBackupUnsafeReorgForkChoiceInputError(gt *testing.T) { To: &dp.Addresses.Bob, Value: e2eutils.Ether(2), }) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], validTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], validTx}}) } if i == 3 { // Make block B3 as an invalid block invalidTx := testutils.RandomTx(rng, big.NewInt(100), signer) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], invalidTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], invalidTx}}) } // Add A1, B2, B3, B4, B5 into the channel err = channelOut.AddBlock(sd.RollupCfg, block) @@ -537,12 +537,12 @@ func TestBackupUnsafeReorgForkChoiceNotInputError(gt *testing.T) { To: &dp.Addresses.Bob, Value: e2eutils.Ether(2), }) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], validTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], validTx}}) } if i == 3 { // Make block B3 as an invalid block invalidTx := testutils.RandomTx(rng, big.NewInt(100), signer) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], invalidTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], invalidTx}}) } // Add A1, B2, B3, B4, B5 into the channel err = channelOut.AddBlock(sd.RollupCfg, block) @@ -919,7 +919,7 @@ func TestInvalidPayloadInSpanBatch(gt *testing.T) { if i == 8 { // Make block A8 as an invalid block invalidTx := testutils.RandomTx(rng, big.NewInt(100), signer) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], invalidTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], invalidTx}}) } // Add A1 ~ A12 into the channel err = channelOut.AddBlock(sd.RollupCfg, block) @@ -968,7 +968,7 @@ func TestInvalidPayloadInSpanBatch(gt *testing.T) { Data: data, }) // Create valid new block B1 at the same height as A1 - block = block.WithBody([]*types.Transaction{block.Transactions()[0], tx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], tx}}) } // Add B1, A2 ~ A12 into the channel err = channelOut.AddBlock(sd.RollupCfg, block) diff --git a/op-e2e/actions/system_config_test.go b/op-e2e/actions/system_config_test.go index d6d97a3b1964..452d5dbc300b 100644 --- a/op-e2e/actions/system_config_test.go +++ b/op-e2e/actions/system_config_test.go @@ -228,6 +228,14 @@ func GPOParamsChange(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) applyDeltaTimeOffset(dp, deltaTimeOffset) + + // activating Delta only, not Ecotone and further: + // the GPO change assertions here all apply only for the Delta transition. + // Separate tests cover Ecotone GPO changes. + dp.DeployConfig.L2GenesisEcotoneTimeOffset = nil + dp.DeployConfig.L2GenesisFjordTimeOffset = nil + dp.DeployConfig.L2GenesisGraniteTimeOffset = nil + sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) miner, seqEngine, sequencer := setupSequencerTest(t, sd, log) diff --git a/op-e2e/actions/user_test.go b/op-e2e/actions/user_test.go index c9692c91f0aa..3a0b079cb3e4 100644 --- a/op-e2e/actions/user_test.go +++ b/op-e2e/actions/user_test.go @@ -144,15 +144,17 @@ func runCrossLayerUserTest(gt *testing.T, test hardforkScheduledTest) { proposer = NewL2Proposer(t, log, &ProposerCfg{ DisputeGameFactoryAddr: &sd.DeploymentsL1.DisputeGameFactoryProxy, ProposalInterval: 6 * time.Second, + ProposalRetryInterval: 3 * time.Second, DisputeGameType: respectedGameType, ProposerKey: dp.Secrets.Proposer, AllowNonFinalized: true, }, miner.EthClient(), seq.RollupClient()) } else { proposer = NewL2Proposer(t, log, &ProposerCfg{ - OutputOracleAddr: &sd.DeploymentsL1.L2OutputOracleProxy, - ProposerKey: dp.Secrets.Proposer, - AllowNonFinalized: true, + OutputOracleAddr: &sd.DeploymentsL1.L2OutputOracleProxy, + ProposerKey: dp.Secrets.Proposer, + ProposalRetryInterval: 3 * time.Second, + AllowNonFinalized: true, }, miner.EthClient(), seq.RollupClient()) } diff --git a/op-e2e/config/init.go b/op-e2e/config/init.go index c5a38ad5a6af..526c7a96b389 100644 --- a/op-e2e/config/init.go +++ b/op-e2e/config/init.go @@ -5,13 +5,12 @@ import ( "errors" "flag" "fmt" + "log/slog" "os" "path/filepath" "testing" "time" - "golang.org/x/exp/slog" - "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" @@ -121,6 +120,7 @@ func init() { } l2Allocs[mode] = allocs } + mustL2Allocs(genesis.L2AllocsGranite) mustL2Allocs(genesis.L2AllocsFjord) mustL2Allocs(genesis.L2AllocsEcotone) mustL2Allocs(genesis.L2AllocsDelta) diff --git a/op-e2e/devnet/devnet_test.go b/op-e2e/devnet/devnet_test.go index f8bbf865c13f..2a9b4be8aa5d 100644 --- a/op-e2e/devnet/devnet_test.go +++ b/op-e2e/devnet/devnet_test.go @@ -2,6 +2,7 @@ package devnet import ( "context" + "log/slog" "testing" "time" @@ -10,7 +11,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" ) func TestDevnet(t *testing.T) { diff --git a/op-e2e/e2eutils/disputegame/output_cannon_helper.go b/op-e2e/e2eutils/disputegame/output_cannon_helper.go index e2f72c4915d9..7053ee5bbc8a 100644 --- a/op-e2e/e2eutils/disputegame/output_cannon_helper.go +++ b/op-e2e/e2eutils/disputegame/output_cannon_helper.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/outputs" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/split" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-challenger/metrics" "github.com/ethereum-optimism/optimism/op-e2e/bindings" @@ -62,7 +63,7 @@ func (g *OutputCannonGameHelper) CreateHonestActor(ctx context.Context, l2Node s prestateProvider := outputs.NewPrestateProvider(rollupClient, prestateBlock) l1Head := g.GetL1Head(ctx) accessor, err := outputs.NewOutputCannonTraceAccessor( - logger, metrics.NoopMetrics, cfg.Cannon, l2Client, prestateProvider, cfg.CannonAbsolutePreState, rollupClient, dir, l1Head, splitDepth, prestateBlock, poststateBlock) + logger, metrics.NoopMetrics, cfg.Cannon, vm.NewOpProgramVmConfig(), l2Client, prestateProvider, cfg.CannonAbsolutePreState, rollupClient, dir, l1Head, splitDepth, prestateBlock, poststateBlock) g.Require.NoError(err, "Failed to create output cannon trace accessor") return NewOutputHonestHelper(g.T, g.Require, &g.OutputGameHelper, g.Game, accessor) } diff --git a/op-e2e/e2eutils/geth/geth.go b/op-e2e/e2eutils/geth/geth.go index d79900bf717d..ee03b82c1546 100644 --- a/op-e2e/e2eutils/geth/geth.go +++ b/op-e2e/e2eutils/geth/geth.go @@ -3,11 +3,13 @@ package geth import ( "fmt" "math/big" + "time" "github.com/ethereum-optimism/optimism/op-service/clock" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/txpool/blobpool" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth/catalyst" @@ -31,6 +33,15 @@ func InitL1(chainID uint64, blockTime uint64, finalizedDistance uint64, genesis Datacap: blobpool.DefaultConfig.Datacap, PriceBump: blobpool.DefaultConfig.PriceBump, }, + StateScheme: rawdb.HashScheme, + Miner: miner.Config{ + PendingFeeRecipient: common.Address{}, + ExtraData: nil, + GasCeil: 0, + GasPrice: nil, + // enough to build blocks within 1 second, but high enough to avoid unnecessary test CPU cycles. + Recommit: time.Millisecond * 400, + }, } nodeConfig := &node.Config{ Name: "l1-geth", @@ -46,8 +57,6 @@ func InitL1(chainID uint64, blockTime uint64, finalizedDistance uint64, genesis if err != nil { return nil, nil, err } - // Activate merge - l1Eth.Merger().FinalizePoS() // Instead of running a whole beacon node, we run this fake-proof-of-stake sidecar that sequences L1 blocks using the Engine API. l1Node.RegisterLifecycle(&fakePoS{ @@ -84,16 +93,16 @@ type GethOption func(ethCfg *ethconfig.Config, nodeCfg *node.Config) error // InitL2 inits a L2 geth node. func InitL2(name string, l2ChainID *big.Int, genesis *core.Genesis, jwtPath string, opts ...GethOption) (*node.Node, *eth.Ethereum, error) { ethConfig := ðconfig.Config{ - NetworkId: l2ChainID.Uint64(), - Genesis: genesis, + NetworkId: l2ChainID.Uint64(), + Genesis: genesis, + StateScheme: rawdb.HashScheme, Miner: miner.Config{ - Etherbase: common.Address{}, - ExtraData: nil, - GasFloor: 0, - GasCeil: 0, - GasPrice: nil, - Recommit: 0, - NewPayloadTimeout: 0, + PendingFeeRecipient: common.Address{}, + ExtraData: nil, + GasCeil: 0, + GasPrice: nil, + // enough to build blocks within 1 second, but high enough to avoid unnecessary test CPU cycles. + Recommit: time.Millisecond * 400, }, } nodeConfig := defaultNodeConfig(fmt.Sprintf("l2-geth-%v", name), jwtPath) @@ -110,6 +119,7 @@ func createGethNode(l2 bool, nodeCfg *node.Config, ethCfg *ethconfig.Config, opt return nil, nil, fmt.Errorf("failed to apply geth option %d: %w", i, err) } } + ethCfg.StateScheme = rawdb.HashScheme ethCfg.NoPruning = true // force everything to be an archive node n, err := node.New(nodeCfg) if err != nil { diff --git a/op-e2e/e2eutils/setup.go b/op-e2e/e2eutils/setup.go index a94070ed78e6..b33076da2cb1 100644 --- a/op-e2e/e2eutils/setup.go +++ b/op-e2e/e2eutils/setup.go @@ -59,7 +59,8 @@ func MakeDeployParams(t require.TestingT, tp *TestParams) *DeployParams { deployConfig := config.DeployConfig.Copy() deployConfig.MaxSequencerDrift = tp.MaxSequencerDrift deployConfig.SequencerWindowSize = tp.SequencerWindowSize - deployConfig.ChannelTimeout = tp.ChannelTimeout + deployConfig.ChannelTimeoutBedrock = tp.ChannelTimeout + deployConfig.ChannelTimeoutGranite = tp.ChannelTimeout deployConfig.L1BlockTime = tp.L1BlockTime deployConfig.UsePlasma = tp.UsePlasma ApplyDeployConfigForks(deployConfig) @@ -173,7 +174,8 @@ func Setup(t require.TestingT, deployParams *DeployParams, alloc *AllocParams) * BlockTime: deployConf.L2BlockTime, MaxSequencerDrift: deployConf.MaxSequencerDrift, SeqWindowSize: deployConf.SequencerWindowSize, - ChannelTimeout: deployConf.ChannelTimeout, + ChannelTimeoutBedrock: deployConf.ChannelTimeoutBedrock, + ChannelTimeoutGranite: deployConf.ChannelTimeoutGranite, L1ChainID: new(big.Int).SetUint64(deployConf.L1ChainID), L2ChainID: new(big.Int).SetUint64(deployConf.L2ChainID), BatchInboxAddress: deployConf.BatchInboxAddress, @@ -184,6 +186,7 @@ func Setup(t require.TestingT, deployParams *DeployParams, alloc *AllocParams) * DeltaTime: deployConf.DeltaTime(uint64(deployConf.L1GenesisBlockTimestamp)), EcotoneTime: deployConf.EcotoneTime(uint64(deployConf.L1GenesisBlockTimestamp)), FjordTime: deployConf.FjordTime(uint64(deployConf.L1GenesisBlockTimestamp)), + GraniteTime: deployConf.GraniteTime(uint64(deployConf.L1GenesisBlockTimestamp)), InteropTime: deployConf.InteropTime(uint64(deployConf.L1GenesisBlockTimestamp)), PlasmaConfig: pcfg, } @@ -214,7 +217,8 @@ func SystemConfigFromDeployConfig(deployConfig *genesis.DeployConfig) eth.System } func ApplyDeployConfigForks(deployConfig *genesis.DeployConfig) { - isFjord := os.Getenv("OP_E2E_USE_FJORD") == "true" + isGranite := os.Getenv("OP_E2E_USE_GRANITE") == "true" + isFjord := isGranite || os.Getenv("OP_E2E_USE_FJORD") == "true" isEcotone := isFjord || os.Getenv("OP_E2E_USE_ECOTONE") == "true" isDelta := isEcotone || os.Getenv("OP_E2E_USE_DELTA") == "true" if isDelta { @@ -226,6 +230,9 @@ func ApplyDeployConfigForks(deployConfig *genesis.DeployConfig) { if isFjord { deployConfig.L2GenesisFjordTimeOffset = new(hexutil.Uint64) } + if isGranite { + deployConfig.L2GenesisGraniteTimeOffset = new(hexutil.Uint64) + } // Canyon and lower is activated by default deployConfig.L2GenesisCanyonTimeOffset = new(hexutil.Uint64) deployConfig.L2GenesisRegolithTimeOffset = new(hexutil.Uint64) diff --git a/op-e2e/e2eutils/transactions/blobs.go b/op-e2e/e2eutils/transactions/blobs.go index 980c357a1b68..e176ca7c91b2 100644 --- a/op-e2e/e2eutils/transactions/blobs.go +++ b/op-e2e/e2eutils/transactions/blobs.go @@ -8,14 +8,14 @@ import ( ) var ( - emptyBlob kzg4844.Blob + emptyBlob *kzg4844.Blob emptyBlobCommit kzg4844.Commitment emptyBlobProof kzg4844.Proof ) func init() { var err error - emptyBlob = kzg4844.Blob{} + emptyBlob = &kzg4844.Blob{} emptyBlobCommit, err = kzg4844.BlobToCommitment(emptyBlob) if err != nil { panic("failed to create empty blob commitment: " + err.Error()) @@ -30,7 +30,7 @@ func init() { // https://github.com/ethereum/go-ethereum/commit/2a6beb6a39d7cb3c5906dd4465d65da6efcc73cd func CreateEmptyBlobTx(withSidecar bool, chainID uint64) *types.BlobTx { sidecar := &types.BlobTxSidecar{ - Blobs: []kzg4844.Blob{emptyBlob}, + Blobs: []kzg4844.Blob{*emptyBlob}, Commitments: []kzg4844.Commitment{emptyBlobCommit}, Proofs: []kzg4844.Proof{emptyBlobProof}, } diff --git a/op-e2e/external_geth/main.go b/op-e2e/external_geth/main.go index f68fbd073be2..c97061d868ff 100644 --- a/op-e2e/external_geth/main.go +++ b/op-e2e/external_geth/main.go @@ -111,6 +111,7 @@ func initialize(binPath string, config external.Config) error { cmd := exec.Command( binPath, "--datadir", config.DataDir, + "--state.scheme=hash", "init", config.GenesisPath, ) return cmd.Run() @@ -146,6 +147,7 @@ func execute(binPath string, config external.Config) (*gethSession, error) { "--ws.port", "0", "--ws.api", "debug,eth,txpool,net,engine", "--syncmode=full", + "--state.scheme=hash", "--nodiscover", "--port", "0", "--maxpeers", "0", diff --git a/op-e2e/faultproofs/precompile_test.go b/op-e2e/faultproofs/precompile_test.go index ed08c3ea582b..38c6486abf9d 100644 --- a/op-e2e/faultproofs/precompile_test.go +++ b/op-e2e/faultproofs/precompile_test.go @@ -5,12 +5,15 @@ import ( "encoding/json" "fmt" "math" + "math/big" "path/filepath" "testing" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" "github.com/stretchr/testify/require" @@ -134,6 +137,82 @@ func TestPrecompiles(t *testing.T) { } } +func TestGranitePrecompiles(t *testing.T) { + op_e2e.InitParallel(t, op_e2e.UsesCannon) + ctx := context.Background() + genesisTime := hexutil.Uint64(0) + cfg := op_e2e.GraniteSystemConfig(t, &genesisTime) + // We don't need a verifier - just the sequencer is enough + delete(cfg.Nodes, "verifier") + // Use a small sequencer window size to avoid test timeout while waiting for empty blocks + // But not too small to ensure that our claim and subsequent state change is published + cfg.DeployConfig.SequencerWindowSize = 16 + + sys, err := cfg.Start(t) + require.Nil(t, err, "Error starting up system") + defer sys.Close() + + log := testlog.Logger(t, log.LevelInfo) + log.Info("genesis", "l2", sys.RollupConfig.Genesis.L2, "l1", sys.RollupConfig.Genesis.L1, "l2_time", sys.RollupConfig.Genesis.L2Time) + + l1Client := sys.Clients["l1"] + l2Seq := sys.Clients["sequencer"] + rollupRPCClient, err := rpc.DialContext(context.Background(), sys.RollupNodes["sequencer"].HTTPEndpoint()) + require.Nil(t, err) + rollupClient := sources.NewRollupClient(client.NewBaseRPCClient(rollupRPCClient)) + + aliceKey := cfg.Secrets.Alice + + t.Log("Capture current L2 head as agreed starting point") + latestBlock, err := l2Seq.BlockByNumber(ctx, nil) + require.NoError(t, err) + agreedL2Output, err := rollupClient.OutputAtBlock(ctx, latestBlock.NumberU64()) + require.NoError(t, err, "could not retrieve l2 agreed block") + l2Head := agreedL2Output.BlockRef.Hash + l2OutputRoot := agreedL2Output.OutputRoot + + precompile := common.BytesToAddress([]byte{0x08}) + input := make([]byte, 113_000) + tx := types.MustSignNewTx(aliceKey, types.LatestSignerForChainID(cfg.L2ChainIDBig()), &types.DynamicFeeTx{ + ChainID: cfg.L2ChainIDBig(), + Nonce: 0, + GasTipCap: big.NewInt(1 * params.GWei), + GasFeeCap: big.NewInt(10 * params.GWei), + Gas: 25_000_000, + To: &precompile, + Value: big.NewInt(0), + Data: input, + }) + err = l2Seq.SendTransaction(ctx, tx) + require.NoError(t, err, "Should send bn256Pairing transaction") + // Expect a successful receipt to retrieve the EVM call trace so we can inspect the revert reason + receipt, err := wait.ForReceiptMaybe(ctx, l2Seq, tx.Hash(), types.ReceiptStatusSuccessful, false) + require.NotNil(t, err) + require.Contains(t, err.Error(), "bad elliptic curve pairing input size") + + t.Logf("Transaction hash %v", tx.Hash()) + t.Log("Determine L2 claim") + l2ClaimBlockNumber := receipt.BlockNumber + l2Output, err := rollupClient.OutputAtBlock(ctx, l2ClaimBlockNumber.Uint64()) + require.NoError(t, err, "could not get expected output") + l2Claim := l2Output.OutputRoot + + t.Log("Determine L1 head that includes all batches required for L2 claim block") + require.NoError(t, wait.ForSafeBlock(ctx, rollupClient, l2ClaimBlockNumber.Uint64())) + l1HeadBlock, err := l1Client.BlockByNumber(ctx, nil) + require.NoError(t, err, "get l1 head block") + l1Head := l1HeadBlock.Hash() + + inputs := utils.LocalGameInputs{ + L1Head: l1Head, + L2Head: l2Head, + L2Claim: common.Hash(l2Claim), + L2OutputRoot: common.Hash(l2OutputRoot), + L2BlockNumber: l2ClaimBlockNumber, + } + runCannon(t, ctx, sys, inputs, "sequencer") +} + func runCannon(t *testing.T, ctx context.Context, sys *op_e2e.System, inputs utils.LocalGameInputs, l2Node string, extraVmArgs ...string) { l1Endpoint := sys.NodeEndpoint("l1") l1Beacon := sys.L1BeaconEndpoint() @@ -146,7 +225,7 @@ func runCannon(t *testing.T, ctx context.Context, sys *op_e2e.System, inputs uti cannonOpts(&cfg) logger := testlog.Logger(t, log.LevelInfo).New("role", "cannon") - executor := vm.NewExecutor(logger, metrics.NoopMetrics, cfg.Cannon, cfg.CannonAbsolutePreState, inputs) + executor := vm.NewExecutor(logger, metrics.NoopMetrics, cfg.Cannon, vm.NewOpProgramVmConfig(), cfg.CannonAbsolutePreState, inputs) t.Log("Running cannon") err := executor.DoGenerateProof(ctx, proofsDir, math.MaxUint, math.MaxUint, extraVmArgs...) diff --git a/op-e2e/op_geth.go b/op-e2e/op_geth.go index 1f277e22a997..56a0a44e5549 100644 --- a/op-e2e/op_geth.go +++ b/op-e2e/op_geth.go @@ -60,7 +60,9 @@ func NewOpGeth(t testing.TB, ctx context.Context, cfg *SystemConfig) (*OpGeth, e var allocsMode genesis.L2AllocsMode allocsMode = genesis.L2AllocsDelta - if fjordTime := cfg.DeployConfig.FjordTime(l1Block.Time()); fjordTime != nil && *fjordTime <= 0 { + if graniteTime := cfg.DeployConfig.GraniteTime(l1Block.Time()); graniteTime != nil && *graniteTime <= 0 { + allocsMode = genesis.L2AllocsGranite + } else if fjordTime := cfg.DeployConfig.FjordTime(l1Block.Time()); fjordTime != nil && *fjordTime <= 0 { allocsMode = genesis.L2AllocsFjord } else if ecotoneTime := cfg.DeployConfig.EcotoneTime(l1Block.Time()); ecotoneTime != nil && *ecotoneTime <= 0 { allocsMode = genesis.L2AllocsEcotone diff --git a/op-e2e/setup.go b/op-e2e/setup.go index a443fa0405da..32c48ddee7f7 100644 --- a/op-e2e/setup.go +++ b/op-e2e/setup.go @@ -184,6 +184,7 @@ func RegolithSystemConfig(t *testing.T, regolithTimeOffset *hexutil.Uint64) Syst cfg.DeployConfig.L2GenesisDeltaTimeOffset = nil cfg.DeployConfig.L2GenesisEcotoneTimeOffset = nil cfg.DeployConfig.L2GenesisFjordTimeOffset = nil + cfg.DeployConfig.L2GenesisGraniteTimeOffset = nil // ADD NEW FORKS HERE! return cfg } @@ -214,6 +215,13 @@ func FjordSystemConfig(t *testing.T, fjordTimeOffset *hexutil.Uint64) SystemConf return cfg } +func GraniteSystemConfig(t *testing.T, graniteTimeOffset *hexutil.Uint64) SystemConfig { + cfg := FjordSystemConfig(t, &genesisTime) + cfg.DeployConfig.L2GenesisGraniteTimeOffset = graniteTimeOffset + cfg.DeployConfig.ChannelTimeoutGranite = 20 + return cfg +} + func writeDefaultJWT(t testing.TB) string { // Sadly the geth node config cannot load JWT secret from memory, it has to be a file jwtPath := path.Join(t.TempDir(), "jwt_secret") @@ -540,7 +548,9 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste l1Block := l1Genesis.ToBlock() var allocsMode genesis.L2AllocsMode allocsMode = genesis.L2AllocsDelta - if fjordTime := cfg.DeployConfig.FjordTime(l1Block.Time()); fjordTime != nil && *fjordTime <= 0 { + if graniteTime := cfg.DeployConfig.GraniteTime(l1Block.Time()); graniteTime != nil && *graniteTime <= 0 { + allocsMode = genesis.L2AllocsGranite + } else if fjordTime := cfg.DeployConfig.FjordTime(l1Block.Time()); fjordTime != nil && *fjordTime <= 0 { allocsMode = genesis.L2AllocsFjord } else if ecotoneTime := cfg.DeployConfig.EcotoneTime(l1Block.Time()); ecotoneTime != nil && *ecotoneTime <= 0 { allocsMode = genesis.L2AllocsEcotone @@ -585,7 +595,8 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste BlockTime: cfg.DeployConfig.L2BlockTime, MaxSequencerDrift: cfg.DeployConfig.MaxSequencerDrift, SeqWindowSize: cfg.DeployConfig.SequencerWindowSize, - ChannelTimeout: cfg.DeployConfig.ChannelTimeout, + ChannelTimeoutBedrock: cfg.DeployConfig.ChannelTimeoutBedrock, + ChannelTimeoutGranite: cfg.DeployConfig.ChannelTimeoutGranite, L1ChainID: cfg.L1ChainIDBig(), L2ChainID: cfg.L2ChainIDBig(), BatchInboxAddress: cfg.DeployConfig.BatchInboxAddress, @@ -596,6 +607,7 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste DeltaTime: cfg.DeployConfig.DeltaTime(uint64(cfg.DeployConfig.L1GenesisBlockTimestamp)), EcotoneTime: cfg.DeployConfig.EcotoneTime(uint64(cfg.DeployConfig.L1GenesisBlockTimestamp)), FjordTime: cfg.DeployConfig.FjordTime(uint64(cfg.DeployConfig.L1GenesisBlockTimestamp)), + GraniteTime: cfg.DeployConfig.GraniteTime(uint64(cfg.DeployConfig.L1GenesisBlockTimestamp)), InteropTime: cfg.DeployConfig.InteropTime(uint64(cfg.DeployConfig.L1GenesisBlockTimestamp)), ProtocolVersionsAddress: cfg.L1Deployments.ProtocolVersionsProxy, } @@ -834,14 +846,15 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste var proposerCLIConfig *l2os.CLIConfig if e2eutils.UseFaultProofs() { proposerCLIConfig = &l2os.CLIConfig{ - L1EthRpc: sys.EthInstances[RoleL1].WSEndpoint(), - RollupRpc: sys.RollupNodes[RoleSeq].HTTPEndpoint(), - DGFAddress: config.L1Deployments.DisputeGameFactoryProxy.Hex(), - ProposalInterval: 6 * time.Second, - DisputeGameType: 254, // Fast game type - PollInterval: 50 * time.Millisecond, - TxMgrConfig: newTxMgrConfig(sys.EthInstances[RoleL1].WSEndpoint(), cfg.Secrets.Proposer), - AllowNonFinalized: cfg.NonFinalizedProposals, + L1EthRpc: sys.EthInstances[RoleL1].WSEndpoint(), + RollupRpc: sys.RollupNodes[RoleSeq].HTTPEndpoint(), + DGFAddress: config.L1Deployments.DisputeGameFactoryProxy.Hex(), + ProposalInterval: 6 * time.Second, + DisputeGameType: 254, // Fast game type + PollInterval: 50 * time.Millisecond, + OutputRetryInterval: 10 * time.Millisecond, + TxMgrConfig: newTxMgrConfig(sys.EthInstances[RoleL1].WSEndpoint(), cfg.Secrets.Proposer), + AllowNonFinalized: cfg.NonFinalizedProposals, LogConfig: oplog.CLIConfig{ Level: log.LvlInfo, Format: oplog.FormatText, @@ -849,12 +862,13 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste } } else { proposerCLIConfig = &l2os.CLIConfig{ - L1EthRpc: sys.EthInstances[RoleL1].WSEndpoint(), - RollupRpc: sys.RollupNodes[RoleSeq].HTTPEndpoint(), - L2OOAddress: config.L1Deployments.L2OutputOracleProxy.Hex(), - PollInterval: 50 * time.Millisecond, - TxMgrConfig: newTxMgrConfig(sys.EthInstances[RoleL1].WSEndpoint(), cfg.Secrets.Proposer), - AllowNonFinalized: cfg.NonFinalizedProposals, + L1EthRpc: sys.EthInstances[RoleL1].WSEndpoint(), + RollupRpc: sys.RollupNodes[RoleSeq].HTTPEndpoint(), + L2OOAddress: config.L1Deployments.L2OutputOracleProxy.Hex(), + PollInterval: 50 * time.Millisecond, + OutputRetryInterval: 10 * time.Millisecond, + TxMgrConfig: newTxMgrConfig(sys.EthInstances[RoleL1].WSEndpoint(), cfg.Secrets.Proposer), + AllowNonFinalized: cfg.NonFinalizedProposals, LogConfig: oplog.CLIConfig{ Level: log.LvlInfo, Format: oplog.FormatText, diff --git a/op-e2e/system_adminrpc_test.go b/op-e2e/system_adminrpc_test.go index e7c0af673b84..c0b9e60abd81 100644 --- a/op-e2e/system_adminrpc_test.go +++ b/op-e2e/system_adminrpc_test.go @@ -198,19 +198,19 @@ func TestPostUnsafePayload(t *testing.T) { blockNumberOne, err := l2Seq.BlockByNumber(ctx, big.NewInt(1)) require.NoError(t, err) - payload, err := eth.BlockAsPayload(blockNumberOne, sys.RollupConfig.CanyonTime) + payloadEnv, err := eth.BlockAsPayloadEnv(blockNumberOne, sys.RollupConfig.CanyonTime) require.NoError(t, err) - err = rollupClient.PostUnsafePayload(ctx, ð.ExecutionPayloadEnvelope{ExecutionPayload: payload}) + err = rollupClient.PostUnsafePayload(ctx, payloadEnv) require.NoError(t, err) require.NoError(t, wait.ForUnsafeBlock(ctx, rollupClient, 1), "Chain did not advance after posting payload") // Test validation blockNumberTwo, err := l2Seq.BlockByNumber(ctx, big.NewInt(2)) require.NoError(t, err) - payload, err = eth.BlockAsPayload(blockNumberTwo, sys.RollupConfig.CanyonTime) + payloadEnv, err = eth.BlockAsPayloadEnv(blockNumberTwo, sys.RollupConfig.CanyonTime) require.NoError(t, err) - payload.BlockHash = common.Hash{0xaa} - err = rollupClient.PostUnsafePayload(ctx, ð.ExecutionPayloadEnvelope{ExecutionPayload: payload}) + payloadEnv.ExecutionPayload.BlockHash = common.Hash{0xaa} + err = rollupClient.PostUnsafePayload(ctx, payloadEnv) require.ErrorContains(t, err, "payload has bad block hash") } diff --git a/op-e2e/system_tob_test.go b/op-e2e/system_tob_test.go index ce3ddf46c5f0..284c775a8ca7 100644 --- a/op-e2e/system_tob_test.go +++ b/op-e2e/system_tob_test.go @@ -5,6 +5,7 @@ import ( "context" "crypto/ecdsa" "fmt" + "math" "math/big" "math/rand" "testing" @@ -19,10 +20,10 @@ import ( "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" "github.com/ethereum-optimism/optimism/op-node/bindings" bindingspreview "github.com/ethereum-optimism/optimism/op-node/bindings/preview" + "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/predeploys" "github.com/ethereum-optimism/optimism/op-service/testutils/fuzzerutils" "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" @@ -41,17 +42,16 @@ func TestGasPriceOracleFeeUpdates(t *testing.T) { defer ctxCancel() InitParallel(t) - // Define our values to set in the GasPriceOracle (we set them high to see if it can lock L2 or stop bindings - // from updating the prices once again. - overheadValue := new(big.Int).Set(abi.MaxUint256) - // Ensure the most significant byte is 0x00 - scalarValue := new(big.Int).Rsh(new(big.Int).Set(abi.MaxUint256), 8) + maxScalars := eth.EcotoneScalars{ + BaseFeeScalar: math.MaxUint32, + BlobBaseFeeScalar: math.MaxUint32, + } var cancel context.CancelFunc // Create our system configuration for L1/L2 and start it cfg := DefaultSystemConfig(t) sys, err := cfg.Start(t) - require.Nil(t, err, "Error starting up system") + require.NoError(t, err, "Error starting up system") defer sys.Close() // Obtain our sequencer, verifier, and transactor keypair. @@ -62,66 +62,61 @@ func TestGasPriceOracleFeeUpdates(t *testing.T) { // Bind to the SystemConfig & GasPriceOracle contracts sysconfig, err := legacybindings.NewSystemConfig(cfg.L1Deployments.SystemConfigProxy, l1Client) - require.Nil(t, err) + require.NoError(t, err) gpoContract, err := legacybindings.NewGasPriceOracleCaller(predeploys.GasPriceOracleAddr, l2Seq) - require.Nil(t, err) + require.NoError(t, err) // Obtain our signer. opts, err := bind.NewKeyedTransactorWithChainID(ethPrivKey, cfg.L1ChainIDBig()) - require.Nil(t, err) + require.NoError(t, err) // Define our L1 transaction timeout duration. txTimeoutDuration := 10 * time.Duration(cfg.DeployConfig.L1BlockTime) * time.Second // Update the gas config, wait for it to show up on L2, & verify that it was set as intended opts.Context, cancel = context.WithTimeout(ctx, txTimeoutDuration) - tx, err := sysconfig.SetGasConfig(opts, overheadValue, scalarValue) + tx, err := sysconfig.SetGasConfigEcotone(opts, maxScalars.BaseFeeScalar, maxScalars.BlobBaseFeeScalar) cancel() - require.Nil(t, err, "sending overhead update tx") + require.NoError(t, err, "SetGasConfigEcotone update tx") receipt, err := wait.ForReceiptOK(ctx, l1Client, tx.Hash()) - require.Nil(t, err, "Waiting for sysconfig set gas config update tx") + require.NoError(t, err, "Waiting for sysconfig set gas config update tx") _, err = geth.WaitForL1OriginOnL2(sys.RollupConfig, receipt.BlockNumber.Uint64(), l2Seq, txTimeoutDuration) require.NoError(t, err, "waiting for L2 block to include the sysconfig update") - gpoOverhead, err := gpoContract.Overhead(&bind.CallOpts{}) - require.Nil(t, err, "reading gpo overhead") - gpoScalar, err := gpoContract.Scalar(&bind.CallOpts{}) - require.Nil(t, err, "reading gpo scalar") + baseFeeScalar, err := gpoContract.BaseFeeScalar(&bind.CallOpts{}) + require.NoError(t, err, "reading base fee scalar") + require.Equal(t, baseFeeScalar, maxScalars.BaseFeeScalar) - if gpoOverhead.Cmp(overheadValue) != 0 { - t.Errorf("overhead that was found (%v) is not what was set (%v)", gpoOverhead, overheadValue) - } - if gpoScalar.Cmp(scalarValue) != 0 { - t.Errorf("scalar that was found (%v) is not what was set (%v)", gpoScalar, scalarValue) - } + blobBaseFeeScalar, err := gpoContract.BlobBaseFeeScalar(&bind.CallOpts{}) + require.NoError(t, err, "reading blob base fee scalar") + require.Equal(t, blobBaseFeeScalar, maxScalars.BlobBaseFeeScalar) // Now modify the scalar value & ensure that the gas params can be modified - scalarValue = big.NewInt(params.Ether) + normalScalars := eth.EcotoneScalars{ + BaseFeeScalar: 1e6, + BlobBaseFeeScalar: 1e6, + } opts.Context, cancel = context.WithTimeout(context.Background(), txTimeoutDuration) - tx, err = sysconfig.SetGasConfig(opts, overheadValue, scalarValue) + tx, err = sysconfig.SetGasConfigEcotone(opts, normalScalars.BaseFeeScalar, normalScalars.BlobBaseFeeScalar) cancel() - require.Nil(t, err, "sending overhead update tx") + require.NoError(t, err, "SetGasConfigEcotone update tx") receipt, err = wait.ForReceiptOK(ctx, l1Client, tx.Hash()) - require.Nil(t, err, "Waiting for sysconfig set gas config update tx") + require.NoError(t, err, "Waiting for sysconfig set gas config update tx") _, err = geth.WaitForL1OriginOnL2(sys.RollupConfig, receipt.BlockNumber.Uint64(), l2Seq, txTimeoutDuration) require.NoError(t, err, "waiting for L2 block to include the sysconfig update") - gpoOverhead, err = gpoContract.Overhead(&bind.CallOpts{}) - require.Nil(t, err, "reading gpo overhead") - gpoScalar, err = gpoContract.Scalar(&bind.CallOpts{}) - require.Nil(t, err, "reading gpo scalar") + baseFeeScalar, err = gpoContract.BaseFeeScalar(&bind.CallOpts{}) + require.NoError(t, err, "reading base fee scalar") + require.Equal(t, baseFeeScalar, normalScalars.BaseFeeScalar) - if gpoOverhead.Cmp(overheadValue) != 0 { - t.Errorf("overhead that was found (%v) is not what was set (%v)", gpoOverhead, overheadValue) - } - if gpoScalar.Cmp(scalarValue) != 0 { - t.Errorf("scalar that was found (%v) is not what was set (%v)", gpoScalar, scalarValue) - } + blobBaseFeeScalar, err = gpoContract.BlobBaseFeeScalar(&bind.CallOpts{}) + require.NoError(t, err, "reading blob base fee scalar") + require.Equal(t, blobBaseFeeScalar, normalScalars.BlobBaseFeeScalar) } // TestL2SequencerRPCDepositTx checks that the L2 sequencer will not accept DepositTx type transactions. diff --git a/op-node/chaincfg/chains_test.go b/op-node/chaincfg/chains_test.go index 3c152f1e56b5..7ac80202edbe 100644 --- a/op-node/chaincfg/chains_test.go +++ b/op-node/chaincfg/chains_test.go @@ -55,7 +55,8 @@ var mainnetCfg = rollup.Config{ BlockTime: 2, MaxSequencerDrift: 600, SeqWindowSize: 3600, - ChannelTimeout: 300, + ChannelTimeoutBedrock: 300, + ChannelTimeoutGranite: 50, L1ChainID: big.NewInt(1), L2ChainID: big.NewInt(10), BatchInboxAddress: common.HexToAddress("0xff00000000000000000000000000000000000010"), @@ -90,7 +91,8 @@ var sepoliaCfg = rollup.Config{ BlockTime: 2, MaxSequencerDrift: 600, SeqWindowSize: 3600, - ChannelTimeout: 300, + ChannelTimeoutBedrock: 300, + ChannelTimeoutGranite: 50, L1ChainID: big.NewInt(11155111), L2ChainID: big.NewInt(11155420), BatchInboxAddress: common.HexToAddress("0xff00000000000000000000000000000011155420"), @@ -101,6 +103,7 @@ var sepoliaCfg = rollup.Config{ DeltaTime: u64Ptr(1703203200), EcotoneTime: u64Ptr(1708534800), FjordTime: u64Ptr(1716998400), + GraniteTime: u64Ptr(1723478400), ProtocolVersionsAddress: common.HexToAddress("0x79ADD5713B383DAa0a138d3C4780C7A1804a8090"), } @@ -125,7 +128,8 @@ var sepoliaDev0Cfg = rollup.Config{ BlockTime: 2, MaxSequencerDrift: 600, SeqWindowSize: 3600, - ChannelTimeout: 300, + ChannelTimeoutBedrock: 300, + ChannelTimeoutGranite: 50, L1ChainID: big.NewInt(11155111), L2ChainID: big.NewInt(11155421), BatchInboxAddress: common.HexToAddress("0xff00000000000000000000000000000011155421"), @@ -136,6 +140,7 @@ var sepoliaDev0Cfg = rollup.Config{ DeltaTime: u64Ptr(0), EcotoneTime: u64Ptr(1706634000), FjordTime: u64Ptr(1715961600), + GraniteTime: u64Ptr(1723046400), ProtocolVersionsAddress: common.HexToAddress("0x252CbE9517F731C618961D890D534183822dcC8d"), } diff --git a/op-node/p2p/gating/expiry.go b/op-node/p2p/gating/expiry.go index e6f1662b3597..b1d22ce87454 100644 --- a/op-node/p2p/gating/expiry.go +++ b/op-node/p2p/gating/expiry.go @@ -61,7 +61,7 @@ func (g *ExpiryConnectionGater) UnblockPeer(p peer.ID) error { func (g *ExpiryConnectionGater) peerBanExpiryCheck(p peer.ID) (allow bool) { // if the peer is blocked, check if it's time to unblock expiry, err := g.store.GetPeerBanExpiration(p) - if errors.Is(err, store.UnknownBanErr) { + if errors.Is(err, store.ErrUnknownBan) { return true // peer is allowed if it has not been banned } if err != nil { @@ -88,7 +88,7 @@ func (g *ExpiryConnectionGater) addrBanExpiryCheck(ma multiaddr.Multiaddr) (allo } // if just the IP is blocked, check if it's time to unblock expiry, err := g.store.GetIPBanExpiration(ip) - if errors.Is(err, store.UnknownBanErr) { + if errors.Is(err, store.ErrUnknownBan) { return true // IP is allowed if it has not been banned } if err != nil { diff --git a/op-node/p2p/gating/expiry_test.go b/op-node/p2p/gating/expiry_test.go index 453e1d3fe2cb..45b819aa0bf3 100644 --- a/op-node/p2p/gating/expiry_test.go +++ b/op-node/p2p/gating/expiry_test.go @@ -47,7 +47,7 @@ func TestExpiryConnectionGater_InterceptPeerDial(t *testing.T) { t.Run("unknown expiring ban", func(t *testing.T) { _, mockExpiryStore, mockGater, gater := expiryTestSetup(t) mockGater.EXPECT().InterceptPeerDial(mallory).Return(true) - mockExpiryStore.EXPECT().GetPeerBanExpiration(mallory).Return(time.Time{}, store.UnknownBanErr) + mockExpiryStore.EXPECT().GetPeerBanExpiration(mallory).Return(time.Time{}, store.ErrUnknownBan) allow := gater.InterceptPeerDial(mallory) require.True(t, allow) }) @@ -68,7 +68,7 @@ func TestExpiryConnectionGater_InterceptAddrDial(t *testing.T) { t.Run("expired IP ban", func(t *testing.T) { cl, mockExpiryStore, mockGater, gater := expiryTestSetup(t) mockGater.EXPECT().InterceptAddrDial(mallory, addr).Return(true) - mockExpiryStore.EXPECT().GetPeerBanExpiration(mallory).Return(time.Time{}, store.UnknownBanErr) + mockExpiryStore.EXPECT().GetPeerBanExpiration(mallory).Return(time.Time{}, store.ErrUnknownBan) mockExpiryStore.EXPECT().GetIPBanExpiration(ip.To4()).Return(cl.Now().Add(-time.Second), nil) mockExpiryStore.EXPECT().SetIPBanExpiration(ip.To4(), time.Time{}).Return(nil) allow := gater.InterceptAddrDial(mallory, addr) @@ -77,7 +77,7 @@ func TestExpiryConnectionGater_InterceptAddrDial(t *testing.T) { t.Run("active IP ban", func(t *testing.T) { cl, mockExpiryStore, mockGater, gater := expiryTestSetup(t) mockGater.EXPECT().InterceptAddrDial(mallory, addr).Return(true) - mockExpiryStore.EXPECT().GetPeerBanExpiration(mallory).Return(time.Time{}, store.UnknownBanErr) + mockExpiryStore.EXPECT().GetPeerBanExpiration(mallory).Return(time.Time{}, store.ErrUnknownBan) mockExpiryStore.EXPECT().GetIPBanExpiration(ip.To4()).Return(cl.Now().Add(time.Second), nil) allow := gater.InterceptAddrDial(mallory, addr) require.False(t, allow) @@ -85,8 +85,8 @@ func TestExpiryConnectionGater_InterceptAddrDial(t *testing.T) { t.Run("unknown IP ban expiry", func(t *testing.T) { _, mockExpiryStore, mockGater, gater := expiryTestSetup(t) mockGater.EXPECT().InterceptAddrDial(mallory, addr).Return(true) - mockExpiryStore.EXPECT().GetPeerBanExpiration(mallory).Return(time.Time{}, store.UnknownBanErr) - mockExpiryStore.EXPECT().GetIPBanExpiration(ip.To4()).Return(time.Time{}, store.UnknownBanErr) + mockExpiryStore.EXPECT().GetPeerBanExpiration(mallory).Return(time.Time{}, store.ErrUnknownBan) + mockExpiryStore.EXPECT().GetIPBanExpiration(ip.To4()).Return(time.Time{}, store.ErrUnknownBan) allow := gater.InterceptAddrDial(mallory, addr) require.True(t, allow) }) @@ -165,7 +165,7 @@ func TestExpiryConnectionGater_InterceptAccept(t *testing.T) { t.Run("unknown expiry", func(t *testing.T) { _, mockExpiryStore, mockGater, gater := expiryTestSetup(t) mockGater.EXPECT().InterceptAccept(mas).Return(true) - mockExpiryStore.EXPECT().GetIPBanExpiration(ip.To4()).Return(time.Time{}, store.UnknownBanErr) + mockExpiryStore.EXPECT().GetIPBanExpiration(ip.To4()).Return(time.Time{}, store.ErrUnknownBan) allow := gater.InterceptAccept(mas) require.True(t, allow) }) @@ -201,7 +201,7 @@ func TestExpiryConnectionGater_InterceptSecured(t *testing.T) { t.Run("unknown expiry", func(t *testing.T) { _, mockExpiryStore, mockGater, gater := expiryTestSetup(t) mockGater.EXPECT().InterceptSecured(network.DirInbound, mallory, mas).Return(true) - mockExpiryStore.EXPECT().GetPeerBanExpiration(mallory).Return(time.Time{}, store.UnknownBanErr) + mockExpiryStore.EXPECT().GetPeerBanExpiration(mallory).Return(time.Time{}, store.ErrUnknownBan) allow := gater.InterceptSecured(network.DirInbound, mallory, mas) require.True(t, allow) }) diff --git a/op-node/p2p/host.go b/op-node/p2p/host.go index 5e3fba21efca..4e8476267fa4 100644 --- a/op-node/p2p/host.go +++ b/op-node/p2p/host.go @@ -280,10 +280,13 @@ func (conf *Config) Host(log log.Logger, reporter metrics.Reporter, metrics Host } if conf.EnablePingService { - out.pinging = NewPingService(log, + out.pinging = NewPingService( + log, func(ctx context.Context, peerID peer.ID) <-chan ping.Result { return ping.Ping(ctx, h, peerID) - }, h.Network().Peers, clock.SystemClock) + }, + h.Network().Peers, + ) } out.initStaticPeers() diff --git a/op-node/p2p/monitor/peer_monitor_test.go b/op-node/p2p/monitor/peer_monitor_test.go index 815e0531497c..ffca429b8a52 100644 --- a/op-node/p2p/monitor/peer_monitor_test.go +++ b/op-node/p2p/monitor/peer_monitor_test.go @@ -30,10 +30,15 @@ func TestPeriodicallyCheckNextPeer(t *testing.T) { // Each time a step is performed, it calls Done on the wait group so we can wait for it to be performed stepCh := make(chan struct{}, 10) monitor.bgTasks.Add(1) - var actionErr error + actionErr := make(chan error, 1) go monitor.background(func() error { stepCh <- struct{}{} - return actionErr + select { + case err := <-actionErr: + return err + default: + return nil + } }) defer monitor.Stop() // Wait for the step ticker to be started @@ -47,7 +52,7 @@ func TestPeriodicallyCheckNextPeer(t *testing.T) { } // Should continue executing periodically even after an error - actionErr = errors.New("boom") + actionErr <- errors.New("boom") for i := 0; i < 5; i++ { clock.AdvanceTime(checkInterval) waitForChan(t, stepCh, fmt.Sprintf("Did not perform step %v", i)) diff --git a/op-node/p2p/pings.go b/op-node/p2p/pings.go index bae2630959f2..9d1c8f5d9ead 100644 --- a/op-node/p2p/pings.go +++ b/op-node/p2p/pings.go @@ -41,7 +41,21 @@ type PingService struct { wg sync.WaitGroup } -func NewPingService(log log.Logger, ping PingFn, peers PeersFn, clock clock.Clock) *PingService { +func NewPingService( + log log.Logger, + ping PingFn, + peers PeersFn, +) *PingService { + return newTracedPingService(log, ping, peers, clock.SystemClock, nil) +} + +func newTracedPingService( + log log.Logger, + ping PingFn, + peers PeersFn, + clock clock.Clock, + trace func(work string), +) *PingService { ctx, cancel := context.WithCancel(context.Background()) srv := &PingService{ ping: ping, @@ -50,6 +64,7 @@ func NewPingService(log log.Logger, ping PingFn, peers PeersFn, clock clock.Cloc clock: clock, ctx: ctx, cancel: cancel, + trace: trace, } srv.wg.Add(1) go srv.pingPeersBackground() diff --git a/op-node/p2p/pings_test.go b/op-node/p2p/pings_test.go index 75aa6fd93595..fce3ad6c0ffe 100644 --- a/op-node/p2p/pings_test.go +++ b/op-node/p2p/pings_test.go @@ -3,6 +3,7 @@ package p2p import ( "context" "errors" + "log/slog" "sync/atomic" "testing" "time" @@ -10,7 +11,6 @@ import ( "github.com/libp2p/go-libp2p/core/peer" "github.com/libp2p/go-libp2p/p2p/protocol/ping" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" "github.com/ethereum-optimism/optimism/op-service/clock" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -51,12 +51,10 @@ func TestPingService(t *testing.T) { return peers }) - srv := NewPingService(log, pingFn, peersFn, fakeClock) - trace := make(chan string) - srv.trace = func(work string) { + srv := newTracedPingService(log, pingFn, peersFn, fakeClock, func(work string) { trace <- work - } + }) // wait for ping service to get online require.Equal(t, "started", <-trace) diff --git a/op-node/p2p/store/iface.go b/op-node/p2p/store/iface.go index 5961481bf28a..a83b5ae06e43 100644 --- a/op-node/p2p/store/iface.go +++ b/op-node/p2p/store/iface.go @@ -102,13 +102,13 @@ type ScoreDiff interface { Apply(score *scoreRecord) } -var UnknownBanErr = errors.New("unknown ban") +var ErrUnknownBan = errors.New("unknown ban") type PeerBanStore interface { // SetPeerBanExpiration create the peer ban with expiration time. // If expiry == time.Time{} then the ban is deleted. SetPeerBanExpiration(id peer.ID, expiry time.Time) error - // GetPeerBanExpiration gets the peer ban expiration time, or UnknownBanErr error if none exists. + // GetPeerBanExpiration gets the peer ban expiration time, or ErrUnknownBan error if none exists. GetPeerBanExpiration(id peer.ID) (time.Time, error) } @@ -116,7 +116,7 @@ type IPBanStore interface { // SetIPBanExpiration create the IP ban with expiration time. // If expiry == time.Time{} then the ban is deleted. SetIPBanExpiration(ip net.IP, expiry time.Time) error - // GetIPBanExpiration gets the IP ban expiration time, or UnknownBanErr error if none exists. + // GetIPBanExpiration gets the IP ban expiration time, or ErrUnknownBan error if none exists. GetIPBanExpiration(ip net.IP) (time.Time, error) } diff --git a/op-node/p2p/store/ip_ban_book.go b/op-node/p2p/store/ip_ban_book.go index 475bf21a791c..8ba4d151cd58 100644 --- a/op-node/p2p/store/ip_ban_book.go +++ b/op-node/p2p/store/ip_ban_book.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "net" + "sync" "time" "github.com/ethereum-optimism/optimism/op-service/clock" @@ -46,19 +47,16 @@ func (p ipBanUpdate) Apply(rec *ipBanRecord) { } type ipBanBook struct { + mu sync.RWMutex book *recordsBook[string, *ipBanRecord] } -func newIPBanRecord() *ipBanRecord { - return new(ipBanRecord) -} - func ipKey(ip string) ds.Key { return ds.NewKey(ip) } func newIPBanBook(ctx context.Context, logger log.Logger, clock clock.Clock, store ds.Batching) (*ipBanBook, error) { - book, err := newRecordsBook[string, *ipBanRecord](ctx, logger, clock, store, ipBanCacheSize, ipBanRecordExpiration, ipBanExpirationsBase, newIPBanRecord, ipKey) + book, err := newRecordsBook[string, *ipBanRecord](ctx, logger, clock, store, ipBanCacheSize, ipBanRecordExpiration, ipBanExpirationsBase, genNew, ipKey) if err != nil { return nil, err } @@ -70,9 +68,11 @@ func (d *ipBanBook) startGC() { } func (d *ipBanBook) GetIPBanExpiration(ip net.IP) (time.Time, error) { + d.mu.RLock() + defer d.mu.RUnlock() rec, err := d.book.getRecord(ip.To16().String()) - if err == UnknownRecordErr { - return time.Time{}, UnknownBanErr + if err == errUnknownRecord { + return time.Time{}, ErrUnknownBan } if err != nil { return time.Time{}, err @@ -81,10 +81,12 @@ func (d *ipBanBook) GetIPBanExpiration(ip net.IP) (time.Time, error) { } func (d *ipBanBook) SetIPBanExpiration(ip net.IP, expirationTime time.Time) error { + d.mu.Lock() + defer d.mu.Unlock() if expirationTime == (time.Time{}) { return d.book.deleteRecord(ip.To16().String()) } - _, err := d.book.SetRecord(ip.To16().String(), ipBanUpdate(expirationTime)) + _, err := d.book.setRecord(ip.To16().String(), ipBanUpdate(expirationTime)) return err } diff --git a/op-node/p2p/store/ip_ban_book_test.go b/op-node/p2p/store/ip_ban_book_test.go index 24d3574e0c93..d699c007eb5e 100644 --- a/op-node/p2p/store/ip_ban_book_test.go +++ b/op-node/p2p/store/ip_ban_book_test.go @@ -18,7 +18,7 @@ func TestGetUnknownIPBan(t *testing.T) { book := createMemoryIPBanBook(t) defer book.Close() exp, err := book.GetIPBanExpiration(net.IPv4(1, 2, 3, 4)) - require.Same(t, UnknownBanErr, err) + require.Same(t, ErrUnknownBan, err) require.Equal(t, time.Time{}, exp) } diff --git a/op-node/p2p/store/mdbook.go b/op-node/p2p/store/mdbook.go index 6c1362674956..eeac94d06c76 100644 --- a/op-node/p2p/store/mdbook.go +++ b/op-node/p2p/store/mdbook.go @@ -3,6 +3,7 @@ package store import ( "context" "encoding/json" + "sync" "sync/atomic" "time" @@ -47,6 +48,7 @@ func (m *metadataRecord) UnmarshalBinary(data []byte) error { } type metadataBook struct { + mu sync.RWMutex book *recordsBook[peer.ID, *metadataRecord] } @@ -55,7 +57,7 @@ func newMetadataRecord() *metadataRecord { } func newMetadataBook(ctx context.Context, logger log.Logger, clock clock.Clock, store ds.Batching) (*metadataBook, error) { - book, err := newRecordsBook[peer.ID, *metadataRecord](ctx, logger, clock, store, mdCacheSize, mdRecordExpiration, metadataBase, newMetadataRecord, peerIDKey) + book, err := newRecordsBook[peer.ID, *metadataRecord](ctx, logger, clock, store, mdCacheSize, mdRecordExpiration, metadataBase, genNew, peerIDKey) if err != nil { return nil, err } @@ -67,9 +69,11 @@ func (m *metadataBook) startGC() { } func (m *metadataBook) GetPeerMetadata(id peer.ID) (PeerMetadata, error) { + m.mu.RLock() + defer m.mu.RUnlock() record, err := m.book.getRecord(id) // If the record is not found, return an empty PeerMetadata - if err == UnknownRecordErr { + if err == errUnknownRecord { return PeerMetadata{}, nil } if err != nil { @@ -89,7 +93,9 @@ func (m *metadataBook) SetPeerMetadata(id peer.ID, md PeerMetadata) (PeerMetadat rec := newMetadataRecord() rec.PeerMetadata = md rec.SetLastUpdated(m.book.clock.Now()) - v, err := m.book.SetRecord(id, rec) + m.mu.Lock() + defer m.mu.Unlock() + v, err := m.book.setRecord(id, rec) return v.PeerMetadata, err } diff --git a/op-node/p2p/store/peer_ban_book.go b/op-node/p2p/store/peer_ban_book.go index 1e61f8c6eae9..cb61ef38f4e9 100644 --- a/op-node/p2p/store/peer_ban_book.go +++ b/op-node/p2p/store/peer_ban_book.go @@ -3,6 +3,7 @@ package store import ( "context" "encoding/json" + "sync" "time" "github.com/ethereum-optimism/optimism/op-service/clock" @@ -46,15 +47,12 @@ func (p peerBanUpdate) Apply(rec *peerBanRecord) { } type peerBanBook struct { + mu sync.RWMutex book *recordsBook[peer.ID, *peerBanRecord] } -func newPeerBanRecord() *peerBanRecord { - return new(peerBanRecord) -} - func newPeerBanBook(ctx context.Context, logger log.Logger, clock clock.Clock, store ds.Batching) (*peerBanBook, error) { - book, err := newRecordsBook[peer.ID, *peerBanRecord](ctx, logger, clock, store, peerBanCacheSize, peerBanRecordExpiration, peerBanExpirationsBase, newPeerBanRecord, peerIDKey) + book, err := newRecordsBook[peer.ID, *peerBanRecord](ctx, logger, clock, store, peerBanCacheSize, peerBanRecordExpiration, peerBanExpirationsBase, genNew, peerIDKey) if err != nil { return nil, err } @@ -66,9 +64,11 @@ func (d *peerBanBook) startGC() { } func (d *peerBanBook) GetPeerBanExpiration(id peer.ID) (time.Time, error) { + d.mu.RLock() + defer d.mu.RUnlock() rec, err := d.book.getRecord(id) - if err == UnknownRecordErr { - return time.Time{}, UnknownBanErr + if err == errUnknownRecord { + return time.Time{}, ErrUnknownBan } if err != nil { return time.Time{}, err @@ -77,10 +77,12 @@ func (d *peerBanBook) GetPeerBanExpiration(id peer.ID) (time.Time, error) { } func (d *peerBanBook) SetPeerBanExpiration(id peer.ID, expirationTime time.Time) error { + d.mu.Lock() + defer d.mu.Unlock() if expirationTime == (time.Time{}) { return d.book.deleteRecord(id) } - _, err := d.book.SetRecord(id, peerBanUpdate(expirationTime)) + _, err := d.book.setRecord(id, peerBanUpdate(expirationTime)) return err } diff --git a/op-node/p2p/store/peer_ban_book_test.go b/op-node/p2p/store/peer_ban_book_test.go index 580dea3a3e8e..f63206ff0076 100644 --- a/op-node/p2p/store/peer_ban_book_test.go +++ b/op-node/p2p/store/peer_ban_book_test.go @@ -17,7 +17,7 @@ func TestGetUnknownPeerBan(t *testing.T) { book := createMemoryPeerBanBook(t) defer book.Close() exp, err := book.GetPeerBanExpiration("a") - require.Same(t, UnknownBanErr, err) + require.Same(t, ErrUnknownBan, err) require.Equal(t, time.Time{}, exp) } diff --git a/op-node/p2p/store/records_book.go b/op-node/p2p/store/records_book.go index 9afac37abfbb..0c573df4d984 100644 --- a/op-node/p2p/store/records_book.go +++ b/op-node/p2p/store/records_book.go @@ -30,11 +30,15 @@ type recordDiff[V record] interface { Apply(v V) } -var UnknownRecordErr = errors.New("unknown record") +var errUnknownRecord = errors.New("unknown record") + +func genNew[T any]() *T { + return new(T) +} // recordsBook is a generic K-V store to embed in the extended-peerstore. // It prunes old entries to keep the store small. -// The recordsBook can be wrapped to customize typing more. +// The recordsBook can be wrapped to customize typing and introduce synchronization. type recordsBook[K ~string, V record] struct { ctx context.Context cancelFn context.CancelFunc @@ -47,7 +51,6 @@ type recordsBook[K ~string, V record] struct { dsBaseKey ds.Key dsEntryKey func(K) ds.Key recordExpiry time.Duration // pruning is disabled if this is 0 - sync.RWMutex } func newRecordsBook[K ~string, V record](ctx context.Context, logger log.Logger, clock clock.Clock, store ds.Batching, cacheSize int, recordExpiry time.Duration, @@ -80,36 +83,34 @@ func (d *recordsBook[K, V]) startGC() { startGc(d.ctx, d.log, d.clock, &d.bgTasks, d.prune) } -func (d *recordsBook[K, V]) GetRecord(key K) (V, error) { - d.RLock() - defer d.RUnlock() - rec, err := d.getRecord(key) - return rec, err -} - func (d *recordsBook[K, V]) dsKey(key K) ds.Key { return d.dsBaseKey.Child(d.dsEntryKey(key)) } func (d *recordsBook[K, V]) deleteRecord(key K) error { - d.cache.Remove(key) + // If access to this isn't synchronized, removing from the cache first can result in the stored + // item being cached again before it is deleted. err := d.store.Delete(d.ctx, d.dsKey(key)) + d.cache.Remove(key) if err == nil || errors.Is(err, ds.ErrNotFound) { return nil } return fmt.Errorf("failed to delete entry with key %v: %w", key, err) } +// You must read lock the recordsBook before calling this, and only unlock when you have extracted +// the values you want from the value of type V. There's no way to conveniently pass an extractor +// function parameterized on V here without breaking this out into a top-level function. func (d *recordsBook[K, V]) getRecord(key K) (v V, err error) { if val, ok := d.cache.Get(key); ok { if d.hasExpired(val) { - return v, UnknownRecordErr + return v, errUnknownRecord } return val, nil } data, err := d.store.Get(d.ctx, d.dsKey(key)) if errors.Is(err, ds.ErrNotFound) { - return v, UnknownRecordErr + return v, errUnknownRecord } else if err != nil { return v, fmt.Errorf("failed to load value of key %v: %w", key, err) } @@ -118,17 +119,18 @@ func (d *recordsBook[K, V]) getRecord(key K) (v V, err error) { return v, fmt.Errorf("invalid value for key %v: %w", key, err) } if d.hasExpired(v) { - return v, UnknownRecordErr + return v, errUnknownRecord } + // This is safe with a read lock as it's self-synchronized. d.cache.Add(key, v) return v, nil } -func (d *recordsBook[K, V]) SetRecord(key K, diff recordDiff[V]) (V, error) { - d.Lock() - defer d.Unlock() +// You should lock the records book before calling this, and unlock it when you copy any values out +// of the returned value. +func (d *recordsBook[K, V]) setRecord(key K, diff recordDiff[V]) (V, error) { rec, err := d.getRecord(key) - if err == UnknownRecordErr { // instantiate new record if it does not exist yet + if err == errUnknownRecord { // instantiate new record if it does not exist yet rec = d.newRecord() } else if err != nil { return d.newRecord(), err diff --git a/op-node/p2p/store/scorebook.go b/op-node/p2p/store/scorebook.go index 68043ef8a9e1..9a7c03d4b841 100644 --- a/op-node/p2p/store/scorebook.go +++ b/op-node/p2p/store/scorebook.go @@ -2,6 +2,7 @@ package store import ( "context" + "sync" "sync/atomic" "time" @@ -18,7 +19,8 @@ const ( var scoresBase = ds.NewKey("/peers/scores") -// LastUpdate requires atomic update operations. Use the helper functions SetLastUpdated and LastUpdated to modify and access this field. +// LastUpdate requires atomic update operations. Use the helper functions SetLastUpdated and +// LastUpdated to modify and access this field. type scoreRecord struct { LastUpdate int64 `json:"lastUpdate"` // unix timestamp in seconds PeerScores PeerScores `json:"peerScores"` @@ -46,19 +48,16 @@ func (s *scoreRecord) UnmarshalBinary(data []byte) error { } type scoreBook struct { + mu sync.RWMutex book *recordsBook[peer.ID, *scoreRecord] } -func newScoreRecord() *scoreRecord { - return new(scoreRecord) -} - func peerIDKey(id peer.ID) ds.Key { return ds.NewKey(base32.RawStdEncoding.EncodeToString([]byte(id))) } func newScoreBook(ctx context.Context, logger log.Logger, clock clock.Clock, store ds.Batching, retain time.Duration) (*scoreBook, error) { - book, err := newRecordsBook[peer.ID, *scoreRecord](ctx, logger, clock, store, scoreCacheSize, retain, scoresBase, newScoreRecord, peerIDKey) + book, err := newRecordsBook[peer.ID, *scoreRecord](ctx, logger, clock, store, scoreCacheSize, retain, scoresBase, genNew, peerIDKey) if err != nil { return nil, err } @@ -70,8 +69,10 @@ func (d *scoreBook) startGC() { } func (d *scoreBook) GetPeerScores(id peer.ID) (PeerScores, error) { + d.mu.RLock() + defer d.mu.RUnlock() record, err := d.book.getRecord(id) - if err == UnknownRecordErr { + if err == errUnknownRecord { return PeerScores{}, nil // return zeroed scores by default } if err != nil { @@ -89,7 +90,9 @@ func (d *scoreBook) GetPeerScore(id peer.ID) (float64, error) { } func (d *scoreBook) SetScore(id peer.ID, diff ScoreDiff) (PeerScores, error) { - v, err := d.book.SetRecord(id, diff) + d.mu.Lock() + defer d.mu.Unlock() + v, err := d.book.setRecord(id, diff) return v.PeerScores, err } diff --git a/op-node/p2p/sync.go b/op-node/p2p/sync.go index b165e52f4c84..b838d000caf4 100644 --- a/op-node/p2p/sync.go +++ b/op-node/p2p/sync.go @@ -833,7 +833,7 @@ func (srv *ReqRespServer) HandleSyncRequest(ctx context.Context, log log.Logger, log.Warn("failed to serve p2p sync request", "req", req, "err", err) if errors.Is(err, ethereum.NotFound) { resultCode = ResultCodeNotFoundErr - } else if errors.Is(err, invalidRequestErr) { + } else if errors.Is(err, errInvalidRequest) { resultCode = ResultCodeInvalidErr } else { resultCode = ResultCodeUnknownErr @@ -846,7 +846,7 @@ func (srv *ReqRespServer) HandleSyncRequest(ctx context.Context, log log.Logger, srv.metrics.ServerPayloadByNumberEvent(req, resultCode, time.Since(start)) } -var invalidRequestErr = errors.New("invalid request") +var errInvalidRequest = errors.New("invalid request") func (srv *ReqRespServer) handleSyncRequest(ctx context.Context, stream network.Stream) (uint64, error) { peerId := stream.Conn().RemotePeer() @@ -892,14 +892,14 @@ func (srv *ReqRespServer) handleSyncRequest(ctx context.Context, stream network. // Check the request is within the expected range of blocks if req < srv.cfg.Genesis.L2.Number { - return req, fmt.Errorf("cannot serve request for L2 block %d before genesis %d: %w", req, srv.cfg.Genesis.L2.Number, invalidRequestErr) + return req, fmt.Errorf("cannot serve request for L2 block %d before genesis %d: %w", req, srv.cfg.Genesis.L2.Number, errInvalidRequest) } max, err := srv.cfg.TargetBlockNumber(uint64(time.Now().Unix())) if err != nil { - return req, fmt.Errorf("cannot determine max target block number to verify request: %w", invalidRequestErr) + return req, fmt.Errorf("cannot determine max target block number to verify request: %w", errInvalidRequest) } if req > max { - return req, fmt.Errorf("cannot serve request for L2 block %d after max expected block (%v): %w", req, max, invalidRequestErr) + return req, fmt.Errorf("cannot serve request for L2 block %d after max expected block (%v): %w", req, max, errInvalidRequest) } envelope, err := srv.l2.PayloadByNumber(ctx, req) diff --git a/op-node/p2p/sync_test.go b/op-node/p2p/sync_test.go index 516e55758160..7c0b3350df04 100644 --- a/op-node/p2p/sync_test.go +++ b/op-node/p2p/sync_test.go @@ -390,8 +390,13 @@ func TestNetworkNotifyAddPeerAndRemovePeer(t *testing.T) { // wait for async removing process done <-waitChan + syncCl.peersLock.Lock() + // Technically this can't fail since SyncClient.RemovePeer also deletes from the + // SyncClient.peers, so unless that action is deferred to SyncClient.peerLoop it's not very + // interesting. _, peerBExist3 := syncCl.peers[hostB.ID()] - require.True(t, !peerBExist3, "peerB should not exist in syncClient") + syncCl.peersLock.Unlock() + require.False(t, peerBExist3, "peerB should not exist in syncClient") } func TestPanicGuard(t *testing.T) { diff --git a/op-node/rollup/chain_spec.go b/op-node/rollup/chain_spec.go index a94a7cd1d05e..e4a0de07e260 100644 --- a/op-node/rollup/chain_spec.go +++ b/op-node/rollup/chain_spec.go @@ -35,6 +35,8 @@ const ( Delta ForkName = "delta" Ecotone ForkName = "ecotone" Fjord ForkName = "fjord" + Granite ForkName = "granite" + Holocene ForkName = "holocene" Interop ForkName = "interop" None ForkName = "none" ) @@ -45,7 +47,9 @@ var nextFork = map[ForkName]ForkName{ Canyon: Delta, Delta: Ecotone, Ecotone: Fjord, - Fjord: Interop, + Fjord: Granite, + Granite: Holocene, + Holocene: Interop, Interop: None, } @@ -73,8 +77,11 @@ func (s *ChainSpec) MaxChannelBankSize(t uint64) uint64 { } // ChannelTimeout returns the channel timeout constant. -func (s *ChainSpec) ChannelTimeout() uint64 { - return s.config.ChannelTimeout +func (s *ChainSpec) ChannelTimeout(t uint64) uint64 { + if s.config.IsGranite(t) { + return s.config.ChannelTimeoutGranite + } + return s.config.ChannelTimeoutBedrock } // MaxRLPBytesPerChannel returns the maximum amount of bytes that will be read from @@ -125,6 +132,12 @@ func (s *ChainSpec) CheckForkActivation(log log.Logger, block eth.L2BlockRef) { if s.config.IsFjord(block.Time) { s.currentFork = Fjord } + if s.config.IsGranite(block.Time) { + s.currentFork = Granite + } + if s.config.IsHolocene(block.Time) { + s.currentFork = Holocene + } if s.config.IsInterop(block.Time) { s.currentFork = Interop } @@ -145,6 +158,10 @@ func (s *ChainSpec) CheckForkActivation(log log.Logger, block eth.L2BlockRef) { foundActivationBlock = s.config.IsEcotoneActivationBlock(block.Time) case Fjord: foundActivationBlock = s.config.IsFjordActivationBlock(block.Time) + case Granite: + foundActivationBlock = s.config.IsGraniteActivationBlock(block.Time) + case Holocene: + foundActivationBlock = s.config.IsHoloceneActivationBlock(block.Time) case Interop: foundActivationBlock = s.config.IsInteropActivationBlock(block.Time) } diff --git a/op-node/rollup/chain_spec_test.go b/op-node/rollup/chain_spec_test.go index b6547835cdba..231aca92bc7e 100644 --- a/op-node/rollup/chain_spec_test.go +++ b/op-node/rollup/chain_spec_test.go @@ -1,6 +1,7 @@ package rollup import ( + "log/slog" "math/big" "testing" @@ -8,7 +9,6 @@ import ( "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" ) func u64ptr(n uint64) *uint64 { @@ -36,7 +36,8 @@ var testConfig = Config{ BlockTime: 2, MaxSequencerDrift: 600, SeqWindowSize: 3600, - ChannelTimeout: 300, + ChannelTimeoutBedrock: 300, + ChannelTimeoutGranite: 50, L1ChainID: big.NewInt(1), L2ChainID: big.NewInt(10), RegolithTime: u64ptr(10), @@ -44,6 +45,7 @@ var testConfig = Config{ DeltaTime: u64ptr(30), EcotoneTime: u64ptr(40), FjordTime: u64ptr(50), + GraniteTime: u64ptr(60), InteropTime: nil, BatchInboxAddress: common.HexToAddress("0xff00000000000000000000000000000000000010"), DepositContractAddress: common.HexToAddress("0xbEb5Fc579115071764c7423A4f12eDde41f106Ed"), @@ -170,10 +172,16 @@ func TestCheckForkActivation(t *testing.T) { expectedCurrentFork: Canyon, expectedLog: "Detected hardfork activation block", }, + { + name: "Granite activation", + block: eth.L2BlockRef{Time: 60, Number: 8, Hash: common.Hash{0x7}}, + expectedCurrentFork: Granite, + expectedLog: "Detected hardfork activation block", + }, { name: "No more hardforks", - block: eth.L2BlockRef{Time: 700, Number: 8, Hash: common.Hash{0x8}}, - expectedCurrentFork: Fjord, + block: eth.L2BlockRef{Time: 700, Number: 9, Hash: common.Hash{0x8}}, + expectedCurrentFork: Granite, expectedLog: "", }, } diff --git a/op-node/rollup/derive/batch_test.go b/op-node/rollup/derive/batch_test.go index 3dc554a59325..9e48f265d745 100644 --- a/op-node/rollup/derive/batch_test.go +++ b/op-node/rollup/derive/batch_test.go @@ -6,12 +6,11 @@ import ( "math/rand" "testing" - "github.com/stretchr/testify/require" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/rlp" + "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-service/eth" diff --git a/op-node/rollup/derive/batch_test_utils.go b/op-node/rollup/derive/batch_test_utils.go index 3b931cc4f03b..5783b5ec39bf 100644 --- a/op-node/rollup/derive/batch_test_utils.go +++ b/op-node/rollup/derive/batch_test_utils.go @@ -21,7 +21,7 @@ func RandomSingularBatch(rng *rand.Rand, txCount int, chainID *big.Int) *Singula if err != nil { panic("tx Marshal binary" + err.Error()) } - txsEncoded = append(txsEncoded, hexutil.Bytes(txEncoded)) + txsEncoded = append(txsEncoded, txEncoded) } return &SingularBatch{ ParentHash: testutils.RandomHash(rng), diff --git a/op-node/rollup/derive/channel_bank.go b/op-node/rollup/derive/channel_bank.go index 2a821bb868b1..b2efb0d3ce16 100644 --- a/op-node/rollup/derive/channel_bank.go +++ b/op-node/rollup/derive/channel_bank.go @@ -98,7 +98,7 @@ func (cb *ChannelBank) IngestFrame(f Frame) { } // check if the channel is not timed out - if currentCh.OpenBlockNumber()+cb.spec.ChannelTimeout() < origin.Number { + if currentCh.OpenBlockNumber()+cb.spec.ChannelTimeout(origin.Time) < origin.Number { log.Warn("channel is timed out, ignore frame") return } @@ -125,7 +125,7 @@ func (cb *ChannelBank) Read() (data []byte, err error) { // channels at the head of the queue and we want to remove them all. first := cb.channelQueue[0] ch := cb.channels[first] - timedOut := ch.OpenBlockNumber()+cb.spec.ChannelTimeout() < cb.Origin().Number + timedOut := ch.OpenBlockNumber()+cb.spec.ChannelTimeout(cb.Origin().Time) < cb.Origin().Number if timedOut { cb.log.Info("channel timed out", "channel", first, "frames", len(ch.inputs)) cb.metrics.RecordChannelTimedOut() @@ -157,7 +157,7 @@ func (cb *ChannelBank) Read() (data []byte, err error) { func (cb *ChannelBank) tryReadChannelAtIndex(i int) (data []byte, err error) { chanID := cb.channelQueue[i] ch := cb.channels[chanID] - timedOut := ch.OpenBlockNumber()+cb.spec.ChannelTimeout() < cb.Origin().Number + timedOut := ch.OpenBlockNumber()+cb.spec.ChannelTimeout(cb.Origin().Time) < cb.Origin().Number if timedOut || !ch.IsReady() { return nil, io.EOF } diff --git a/op-node/rollup/derive/channel_bank_test.go b/op-node/rollup/derive/channel_bank_test.go index a4485834ece6..99c4381350ed 100644 --- a/op-node/rollup/derive/channel_bank_test.go +++ b/op-node/rollup/derive/channel_bank_test.go @@ -100,7 +100,7 @@ func TestChannelBankSimple(t *testing.T) { input.AddFrames("a:1:second") input.AddFrame(Frame{}, io.EOF) - cfg := &rollup.Config{ChannelTimeout: 10} + cfg := &rollup.Config{ChannelTimeoutBedrock: 10, ChannelTimeoutGranite: 10} cb := NewChannelBank(testlog.Logger(t, log.LevelCrit), cfg, input, nil, metrics.NoopMetrics) @@ -144,7 +144,7 @@ func TestChannelBankInterleavedPreCanyon(t *testing.T) { input.AddFrames("a:1:second") input.AddFrame(Frame{}, io.EOF) - cfg := &rollup.Config{ChannelTimeout: 10, CanyonTime: nil} + cfg := &rollup.Config{ChannelTimeoutBedrock: 10, ChannelTimeoutGranite: 10, CanyonTime: nil} cb := NewChannelBank(testlog.Logger(t, log.LevelCrit), cfg, input, nil, metrics.NoopMetrics) @@ -209,7 +209,7 @@ func TestChannelBankInterleaved(t *testing.T) { input.AddFrame(Frame{}, io.EOF) ct := uint64(0) - cfg := &rollup.Config{ChannelTimeout: 10, CanyonTime: &ct} + cfg := &rollup.Config{ChannelTimeoutBedrock: 10, ChannelTimeoutGranite: 10, CanyonTime: &ct} cb := NewChannelBank(testlog.Logger(t, log.LevelCrit), cfg, input, nil, metrics.NoopMetrics) @@ -269,7 +269,7 @@ func TestChannelBankDuplicates(t *testing.T) { input.AddFrames("a:1:second") input.AddFrame(Frame{}, io.EOF) - cfg := &rollup.Config{ChannelTimeout: 10} + cfg := &rollup.Config{ChannelTimeoutBedrock: 10, ChannelTimeoutGranite: 10} cb := NewChannelBank(testlog.Logger(t, log.LevelCrit), cfg, input, nil, metrics.NoopMetrics) diff --git a/op-node/rollup/derive/channel_out_test.go b/op-node/rollup/derive/channel_out_test.go index 0c82bbb9895b..e2eda7344eb5 100644 --- a/op-node/rollup/derive/channel_out_test.go +++ b/op-node/rollup/derive/channel_out_test.go @@ -63,10 +63,11 @@ func TestChannelOutAddBlock(t *testing.T) { cout := tcase.ChannelOut(t, &rollupCfg) header := &types.Header{Number: big.NewInt(1), Difficulty: big.NewInt(100)} block := types.NewBlockWithHeader(header).WithBody( - []*types.Transaction{ - types.NewTx(&types.DynamicFeeTx{}), + types.Body{ + Transactions: []*types.Transaction{ + types.NewTx(&types.DynamicFeeTx{}), + }, }, - nil, ) err := cout.AddBlock(&rollupCfg, block) require.Error(t, err) diff --git a/op-node/rollup/derive/fuzz_parsers_test.go b/op-node/rollup/derive/fuzz_parsers_test.go index 4054eb7f2370..95ce94bc7cc8 100644 --- a/op-node/rollup/derive/fuzz_parsers_test.go +++ b/op-node/rollup/derive/fuzz_parsers_test.go @@ -5,6 +5,7 @@ import ( "math/big" "testing" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/google/go-cmp/cmp" "github.com/holiman/uint256" "github.com/stretchr/testify/require" @@ -234,7 +235,7 @@ func FuzzUnmarshallLogEvent(f *testing.F) { // Set the EVM state up once to fuzz against state, err := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) require.NoError(f, err) - state.SetBalance(from, uint256.MustFromBig(BytesToBigInt([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}))) + state.SetBalance(from, uint256.MustFromBig(BytesToBigInt([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff})), tracing.BalanceChangeUnspecified) _, addr, _, err := runtime.Create(common.FromHex(bindings.OptimismPortalMetaData.Bin), &runtime.Config{ Origin: from, State: state, diff --git a/op-node/rollup/derive/pipeline.go b/op-node/rollup/derive/pipeline.go index 7d74fb9da800..65103f51edcc 100644 --- a/op-node/rollup/derive/pipeline.go +++ b/op-node/rollup/derive/pipeline.go @@ -197,29 +197,36 @@ func (dp *DerivationPipeline) initialReset(ctx context.Context, resetL2Safe eth. dp.log.Info("Rewinding derivation-pipeline L1 traversal to handle reset") dp.metrics.RecordPipelineReset() + spec := rollup.NewChainSpec(dp.rollupCfg) // Walk back L2 chain to find the L1 origin that is old enough to start buffering channel data from. pipelineL2 := resetL2Safe l1Origin := resetL2Safe.L1Origin + + pipelineOrigin, err := dp.l1Fetcher.L1BlockRefByHash(ctx, l1Origin.Hash) + if err != nil { + return NewTemporaryError(fmt.Errorf("failed to fetch the new L1 progress: origin: %s; err: %w", pipelineL2.L1Origin, err)) + } + for { afterL2Genesis := pipelineL2.Number > dp.rollupCfg.Genesis.L2.Number afterL1Genesis := pipelineL2.L1Origin.Number > dp.rollupCfg.Genesis.L1.Number - afterChannelTimeout := pipelineL2.L1Origin.Number+dp.rollupCfg.ChannelTimeout > l1Origin.Number + afterChannelTimeout := pipelineL2.L1Origin.Number+spec.ChannelTimeout(pipelineOrigin.Time) > l1Origin.Number if afterL2Genesis && afterL1Genesis && afterChannelTimeout { parent, err := dp.l2.L2BlockRefByHash(ctx, pipelineL2.ParentHash) if err != nil { return NewResetError(fmt.Errorf("failed to fetch L2 parent block %s", pipelineL2.ParentID())) } pipelineL2 = parent + pipelineOrigin, err = dp.l1Fetcher.L1BlockRefByHash(ctx, pipelineL2.L1Origin.Hash) + if err != nil { + return NewTemporaryError(fmt.Errorf("failed to fetch the new L1 progress: origin: %s; err: %w", pipelineL2.L1Origin, err)) + } } else { break } } - pipelineOrigin, err := dp.l1Fetcher.L1BlockRefByHash(ctx, pipelineL2.L1Origin.Hash) - if err != nil { - return NewTemporaryError(fmt.Errorf("failed to fetch the new L1 progress: origin: %s; err: %w", pipelineL2.L1Origin, err)) - } sysCfg, err := dp.l2.SystemConfigByL2Hash(ctx, pipelineL2.Hash) if err != nil { return NewTemporaryError(fmt.Errorf("failed to fetch L1 config of L2 block %s: %w", pipelineL2.ID(), err)) diff --git a/op-node/rollup/derive/span_batch_tx.go b/op-node/rollup/derive/span_batch_tx.go index cd0a471ab266..5f5bffb02b8b 100644 --- a/op-node/rollup/derive/span_batch_tx.go +++ b/op-node/rollup/derive/span_batch_tx.go @@ -175,7 +175,7 @@ func (tx *spanBatchTx) convertToFullTx(nonce, gas uint64, to *common.Address, ch } // newSpanBatchTx converts types.Transaction to spanBatchTx -func newSpanBatchTx(tx types.Transaction) (*spanBatchTx, error) { +func newSpanBatchTx(tx *types.Transaction) (*spanBatchTx, error) { var inner spanBatchTxData switch tx.Type() { case types.LegacyTxType: diff --git a/op-node/rollup/derive/span_batch_tx_test.go b/op-node/rollup/derive/span_batch_tx_test.go index c846f65812b9..55a9101da5e7 100644 --- a/op-node/rollup/derive/span_batch_tx_test.go +++ b/op-node/rollup/derive/span_batch_tx_test.go @@ -39,7 +39,7 @@ func TestSpanBatchTxConvert(t *testing.T) { tx := testCase.mkTx(rng, signer) v, r, s := tx.RawSignatureValues() - sbtx, err := newSpanBatchTx(*tx) + sbtx, err := newSpanBatchTx(tx) require.NoError(t, err) tx2, err := sbtx.convertToFullTx(tx.Nonce(), tx.Gas(), tx.To(), chainID, v, r, s) @@ -77,7 +77,7 @@ func TestSpanBatchTxRoundTrip(t *testing.T) { for txIdx := 0; txIdx < testCase.trials; txIdx++ { tx := testCase.mkTx(rng, signer) - sbtx, err := newSpanBatchTx(*tx) + sbtx, err := newSpanBatchTx(tx) require.NoError(t, err) sbtxEncoded, err := sbtx.MarshalBinary() @@ -100,7 +100,7 @@ func (txData *spanBatchDummyTxData) txType() byte { return types.DepositTxType } func TestSpanBatchTxInvalidTxType(t *testing.T) { // span batch never contain deposit tx depositTx := types.NewTx(&types.DepositTx{}) - _, err := newSpanBatchTx(*depositTx) + _, err := newSpanBatchTx(depositTx) require.ErrorContains(t, err, "invalid tx type") var sbtx spanBatchTx diff --git a/op-node/rollup/derive/span_batch_txs.go b/op-node/rollup/derive/span_batch_txs.go index 305aafefe9da..e4bc73d0f987 100644 --- a/op-node/rollup/derive/span_batch_txs.go +++ b/op-node/rollup/derive/span_batch_txs.go @@ -424,7 +424,7 @@ func (sbtx *spanBatchTxs) AddTxs(txs [][]byte, chainID *big.Int) error { totalBlockTxCount := uint64(len(txs)) offset := sbtx.totalBlockTxCount for idx := 0; idx < int(totalBlockTxCount); idx++ { - var tx types.Transaction + tx := &types.Transaction{} if err := tx.UnmarshalBinary(txs[idx]); err != nil { return errors.New("failed to decode tx") } diff --git a/op-node/rollup/derive/test/random.go b/op-node/rollup/derive/test/random.go index 57ad0d8d9579..ba9600da8c82 100644 --- a/op-node/rollup/derive/test/random.go +++ b/op-node/rollup/derive/test/random.go @@ -16,7 +16,8 @@ import ( // RandomL2Block returns a random block whose first transaction is a random pre-Ecotone upgrade // L1 Info Deposit transaction. func RandomL2Block(rng *rand.Rand, txCount int, t time.Time) (*types.Block, []*types.Receipt) { - l1Block := types.NewBlock(testutils.RandomHeader(rng), nil, nil, nil, trie.NewStackTrie(nil)) + body := types.Body{} + l1Block := types.NewBlock(testutils.RandomHeader(rng), &body, nil, trie.NewStackTrie(nil)) rollupCfg := rollup.Config{} if testutils.RandomBool(rng) { t := uint64(0) @@ -45,5 +46,5 @@ func RandomL2BlockWithChainIdAndTime(rng *rand.Rand, txCount int, chainId *big.I for i := 0; i < txCount; i++ { txs = append(txs, testutils.RandomTx(rng, big.NewInt(int64(rng.Uint32())), signer)) } - return block.WithBody(txs, nil) + return block.WithBody(types.Body{Transactions: txs}) } diff --git a/op-node/rollup/event/tracer_log.go b/op-node/rollup/event/tracer_log.go index 483fb9781326..a699df2e29d6 100644 --- a/op-node/rollup/event/tracer_log.go +++ b/op-node/rollup/event/tracer_log.go @@ -1,10 +1,9 @@ package event import ( + "log/slog" "time" - "golang.org/x/exp/slog" - "github.com/ethereum/go-ethereum/log" ) diff --git a/op-node/rollup/sequencing/sequencer.go b/op-node/rollup/sequencing/sequencer.go index 74f5478e9fe5..118cdf4be3fa 100644 --- a/op-node/rollup/sequencing/sequencer.go +++ b/op-node/rollup/sequencing/sequencer.go @@ -268,6 +268,7 @@ func (d *Sequencer) onBuildSealed(x engine.BuildSealedEvent) { if err := d.conductor.CommitUnsafePayload(ctx, x.Envelope); err != nil { d.emitter.Emit(rollup.EngineTemporaryErrorEvent{ Err: fmt.Errorf("failed to commit unsafe payload to conductor: %w", err)}) + return } // begin gossiping as soon as possible @@ -526,6 +527,11 @@ func (d *Sequencer) startBuildingBlock() { d.log.Info("Sequencing Fjord upgrade block") } + // For the Fjord activation block we shouldn't include any sequencer transactions. + if d.rollupCfg.IsGraniteActivationBlock(uint64(attrs.Timestamp)) { + d.log.Info("Sequencing Granite upgrade block") + } + d.log.Debug("prepared attributes for new block", "num", l2Head.Number+1, "time", uint64(attrs.Timestamp), "origin", l1Origin, "origin_time", l1Origin.Time, "noTxPool", attrs.NoTxPool) diff --git a/op-node/rollup/superchain.go b/op-node/rollup/superchain.go index d5106103f4ed..cd6f5d6169e8 100644 --- a/op-node/rollup/superchain.go +++ b/op-node/rollup/superchain.go @@ -78,7 +78,8 @@ func LoadOPStackRollupConfig(chainID uint64) (*Config, error) { BlockTime: chConfig.BlockTime, MaxSequencerDrift: 600, SeqWindowSize: chConfig.SequencerWindowSize, - ChannelTimeout: 300, + ChannelTimeoutBedrock: 300, + ChannelTimeoutGranite: 50, L1ChainID: new(big.Int).SetUint64(superChain.Config.L1.ChainID), L2ChainID: new(big.Int).SetUint64(chConfig.ChainID), RegolithTime: ®olithTime, @@ -86,6 +87,7 @@ func LoadOPStackRollupConfig(chainID uint64) (*Config, error) { DeltaTime: chConfig.DeltaTime, EcotoneTime: chConfig.EcotoneTime, FjordTime: chConfig.FjordTime, + GraniteTime: chConfig.GraniteTime, BatchInboxAddress: common.Address(chConfig.BatchInboxAddr), DepositContractAddress: common.Address(addrs.OptimismPortalProxy), L1SystemConfigAddress: common.Address(addrs.SystemConfigProxy), diff --git a/op-node/rollup/types.go b/op-node/rollup/types.go index 6e3f8282dbbb..f4d57db830ca 100644 --- a/op-node/rollup/types.go +++ b/op-node/rollup/types.go @@ -19,6 +19,7 @@ import ( var ( ErrBlockTimeZero = errors.New("block time cannot be 0") ErrMissingChannelTimeout = errors.New("channel timeout must be set, this should cover at least a L1 block time") + ErrInvalidGraniteChannelTimeout = errors.New("channel timeout granite must be less than channel timeout") ErrInvalidSeqWindowSize = errors.New("sequencing window size must at least be 2") ErrMissingGenesisL1Hash = errors.New("genesis L1 hash cannot be empty") ErrMissingGenesisL2Hash = errors.New("genesis L2 hash cannot be empty") @@ -81,7 +82,8 @@ type Config struct { // Number of epochs (L1 blocks) per sequencing window, including the epoch L1 origin block itself SeqWindowSize uint64 `json:"seq_window_size"` // Number of L1 blocks between when a channel can be opened and when it must be closed by. - ChannelTimeout uint64 `json:"channel_timeout"` + ChannelTimeoutBedrock uint64 `json:"channel_timeout"` + ChannelTimeoutGranite uint64 `json:"channel_timeout_granite"` // Required to verify L1 signatures L1ChainID *big.Int `json:"l1_chain_id"` // Required to identify the L2 network and create p2p signatures unique for this chain. @@ -109,6 +111,14 @@ type Config struct { // Active if FjordTime != nil && L2 block timestamp >= *FjordTime, inactive otherwise. FjordTime *uint64 `json:"fjord_time,omitempty"` + // GraniteTime sets the activation time of the Granite network upgrade. + // Active if GraniteTime != nil && L2 block timestamp >= *GraniteTime, inactive otherwise. + GraniteTime *uint64 `json:"granite_time,omitempty"` + + // HoloceneTime sets the activation time of the Holocene network upgrade. + // Active if HoloceneTime != nil && L2 block timestamp >= *HoloceneTime, inactive otherwise. + HoloceneTime *uint64 `json:"holocene_time,omitempty"` + // InteropTime sets the activation time for an experimental feature-set, activated like a hardfork. // Active if InteropTime != nil && L2 block timestamp >= *InteropTime, inactive otherwise. InteropTime *uint64 `json:"interop_time,omitempty"` @@ -258,9 +268,17 @@ func (cfg *Config) Check() error { if cfg.BlockTime == 0 { return ErrBlockTimeZero } - if cfg.ChannelTimeout == 0 { + if cfg.ChannelTimeoutBedrock == 0 { return ErrMissingChannelTimeout } + if cfg.GraniteTime != nil { + if cfg.ChannelTimeoutGranite == 0 { + return ErrMissingChannelTimeout + } + if cfg.ChannelTimeoutGranite > cfg.ChannelTimeoutBedrock { + return ErrInvalidGraniteChannelTimeout + } + } if cfg.SeqWindowSize < 2 { return ErrInvalidSeqWindowSize } @@ -322,6 +340,12 @@ func (cfg *Config) Check() error { if err := checkFork(cfg.EcotoneTime, cfg.FjordTime, Ecotone, Fjord); err != nil { return err } + if err := checkFork(cfg.FjordTime, cfg.GraniteTime, Fjord, Granite); err != nil { + return err + } + if err := checkFork(cfg.GraniteTime, cfg.HoloceneTime, Granite, Holocene); err != nil { + return err + } return nil } @@ -410,12 +434,14 @@ func (c *Config) IsFjord(timestamp uint64) bool { return c.FjordTime != nil && timestamp >= *c.FjordTime } -// IsFjordActivationBlock returns whether the specified block is the first block subject to the -// Fjord upgrade. -func (c *Config) IsFjordActivationBlock(l2BlockTime uint64) bool { - return c.IsFjord(l2BlockTime) && - l2BlockTime >= c.BlockTime && - !c.IsFjord(l2BlockTime-c.BlockTime) +// IsGranite returns true if the Granite hardfork is active at or past the given timestamp. +func (c *Config) IsGranite(timestamp uint64) bool { + return c.GraniteTime != nil && timestamp >= *c.GraniteTime +} + +// IsHolocene returns true if the Holocene hardfork is active at or past the given timestamp. +func (c *Config) IsHolocene(timestamp uint64) bool { + return c.HoloceneTime != nil && timestamp >= *c.HoloceneTime } // IsInterop returns true if the Interop hardfork is active at or past the given timestamp. @@ -449,6 +475,30 @@ func (c *Config) IsEcotoneActivationBlock(l2BlockTime uint64) bool { !c.IsEcotone(l2BlockTime-c.BlockTime) } +// IsFjordActivationBlock returns whether the specified block is the first block subject to the +// Fjord upgrade. +func (c *Config) IsFjordActivationBlock(l2BlockTime uint64) bool { + return c.IsFjord(l2BlockTime) && + l2BlockTime >= c.BlockTime && + !c.IsFjord(l2BlockTime-c.BlockTime) +} + +// IsGraniteActivationBlock returns whether the specified block is the first block subject to the +// Granite upgrade. +func (c *Config) IsGraniteActivationBlock(l2BlockTime uint64) bool { + return c.IsGranite(l2BlockTime) && + l2BlockTime >= c.BlockTime && + !c.IsGranite(l2BlockTime-c.BlockTime) +} + +// IsHoloceneActivationBlock returns whether the specified block is the first block subject to the +// Holocene upgrade. +func (c *Config) IsHoloceneActivationBlock(l2BlockTime uint64) bool { + return c.IsHolocene(l2BlockTime) && + l2BlockTime >= c.BlockTime && + !c.IsHolocene(l2BlockTime-c.BlockTime) +} + func (c *Config) IsInteropActivationBlock(l2BlockTime uint64) bool { return c.IsInterop(l2BlockTime) && l2BlockTime >= c.BlockTime && @@ -564,6 +614,8 @@ func (c *Config) Description(l2Chains map[string]string) string { banner += fmt.Sprintf(" - Delta: %s\n", fmtForkTimeOrUnset(c.DeltaTime)) banner += fmt.Sprintf(" - Ecotone: %s\n", fmtForkTimeOrUnset(c.EcotoneTime)) banner += fmt.Sprintf(" - Fjord: %s\n", fmtForkTimeOrUnset(c.FjordTime)) + banner += fmt.Sprintf(" - Granite: %s\n", fmtForkTimeOrUnset(c.GraniteTime)) + banner += fmt.Sprintf(" - Holocene: %s\n", fmtForkTimeOrUnset(c.HoloceneTime)) banner += fmt.Sprintf(" - Interop: %s\n", fmtForkTimeOrUnset(c.InteropTime)) // Report the protocol version banner += fmt.Sprintf("Node supports up to OP-Stack Protocol Version: %s\n", OPStackSupport) @@ -598,6 +650,8 @@ func (c *Config) LogDescription(log log.Logger, l2Chains map[string]string) { "delta_time", fmtForkTimeOrUnset(c.DeltaTime), "ecotone_time", fmtForkTimeOrUnset(c.EcotoneTime), "fjord_time", fmtForkTimeOrUnset(c.FjordTime), + "granite_time", fmtForkTimeOrUnset(c.GraniteTime), + "holocene_time", fmtForkTimeOrUnset(c.HoloceneTime), "interop_time", fmtForkTimeOrUnset(c.InteropTime), "plasma_mode", c.PlasmaConfig != nil, ) diff --git a/op-node/rollup/types_test.go b/op-node/rollup/types_test.go index 46d232a3ad06..2b00e12fd7aa 100644 --- a/op-node/rollup/types_test.go +++ b/op-node/rollup/types_test.go @@ -42,7 +42,8 @@ func randConfig() *Config { BlockTime: 2, MaxSequencerDrift: 100, SeqWindowSize: 2, - ChannelTimeout: 123, + ChannelTimeoutBedrock: 123, + ChannelTimeoutGranite: 45, L1ChainID: big.NewInt(900), L2ChainID: big.NewInt(901), BatchInboxAddress: randAddr(), @@ -232,6 +233,15 @@ func TestActivations(t *testing.T) { return c.IsFjord(t) }, }, + { + name: "Granite", + setUpgradeTime: func(t *uint64, c *Config) { + c.GraniteTime = t + }, + checkEnabled: func(t uint64, c *Config) bool { + return c.IsGranite(t) + }, + }, { name: "Interop", setUpgradeTime: func(t *uint64, c *Config) { @@ -366,8 +376,27 @@ func TestConfig_Check(t *testing.T) { expectedErr: ErrBlockTimeZero, }, { - name: "ChannelTimeoutZero", - modifier: func(cfg *Config) { cfg.ChannelTimeout = 0 }, + name: "ChannelTimeoutBedrockZero", + modifier: func(cfg *Config) { cfg.ChannelTimeoutBedrock = 0 }, + expectedErr: ErrMissingChannelTimeout, + }, + { + name: "ChannelTimeoutGraniteZeroNotEnabled", + modifier: func(cfg *Config) { cfg.ChannelTimeoutGranite = 0 }, + expectedErr: nil, + }, + { + name: "ChannelTimeoutGraniteZeroEnabled", + modifier: func(cfg *Config) { + genesis := uint64(0) + cfg.ChannelTimeoutGranite = 0 + cfg.RegolithTime = &genesis + cfg.CanyonTime = &genesis + cfg.DeltaTime = &genesis + cfg.EcotoneTime = &genesis + cfg.FjordTime = &genesis + cfg.GraniteTime = &genesis + }, expectedErr: ErrMissingChannelTimeout, }, { @@ -466,7 +495,7 @@ func TestConfig_Check(t *testing.T) { cfg := randConfig() test.modifier(cfg) err := cfg.Check() - assert.Same(t, err, test.expectedErr) + assert.ErrorIs(t, err, test.expectedErr) }) } diff --git a/op-node/service.go b/op-node/service.go index 28afbfbd3d3c..10a053d8e178 100644 --- a/op-node/service.go +++ b/op-node/service.go @@ -260,6 +260,14 @@ func applyOverrides(ctx *cli.Context, rollupConfig *rollup.Config) { fjord := ctx.Uint64(opflags.FjordOverrideFlagName) rollupConfig.FjordTime = &fjord } + if ctx.IsSet(opflags.GraniteOverrideFlagName) { + granite := ctx.Uint64(opflags.GraniteOverrideFlagName) + rollupConfig.GraniteTime = &granite + } + if ctx.IsSet(opflags.HoloceneOverrideFlagName) { + holocene := ctx.Uint64(opflags.HoloceneOverrideFlagName) + rollupConfig.HoloceneTime = &holocene + } } func NewSyncConfig(ctx *cli.Context, log log.Logger) (*sync.Config, error) { diff --git a/op-program/client/cmd/main.go b/op-program/client/cmd/main.go index ec6576984749..d075083e5aa1 100644 --- a/op-program/client/cmd/main.go +++ b/op-program/client/cmd/main.go @@ -2,7 +2,6 @@ package main import ( "os" - "runtime" "github.com/ethereum/go-ethereum/log" @@ -10,13 +9,6 @@ import ( oplog "github.com/ethereum-optimism/optimism/op-service/log" ) -var _ = func() bool { - // Disable mem profiling, to avoid a lot of unnecessary floating point ops - // TODO(cp-903) Consider cutting this in favor patching envar "GODEBUG=memprofilerate=0" into cannon go programs - runtime.MemProfileRate = 0 - return true -}() - func main() { // Default to a machine parsable but relatively human friendly log format. // Don't do anything fancy to detect if color output is supported. diff --git a/op-program/client/l2/db.go b/op-program/client/l2/db.go index 018b79ed9356..3dfa5ec0d6b9 100644 --- a/op-program/client/l2/db.go +++ b/op-program/client/l2/db.go @@ -74,7 +74,7 @@ func (o *OracleKeyValueStore) Delete(key []byte) error { panic("not supported") } -func (o *OracleKeyValueStore) Stat(property string) (string, error) { +func (o *OracleKeyValueStore) Stat() (string, error) { panic("not supported") } diff --git a/op-program/client/l2/db_test.go b/op-program/client/l2/db_test.go index 00b70c810d73..c85f99e2c55f 100644 --- a/op-program/client/l2/db_test.go +++ b/op-program/client/l2/db_test.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" @@ -130,12 +131,12 @@ func TestUpdateState(t *testing.T) { statedb, err := state.New(genesisBlock.Root(), state.NewDatabase(rawdb.NewDatabase(db)), nil) require.NoError(t, err) - statedb.SetBalance(userAccount, uint256.NewInt(50)) + statedb.SetBalance(userAccount, uint256.NewInt(50), tracing.BalanceChangeUnspecified) require.Equal(t, uint256.NewInt(50), statedb.GetBalance(userAccount)) statedb.SetNonce(userAccount, uint64(5)) require.Equal(t, uint64(5), statedb.GetNonce(userAccount)) - statedb.SetBalance(unknownAccount, uint256.NewInt(60)) + statedb.SetBalance(unknownAccount, uint256.NewInt(60), tracing.BalanceChangeUnspecified) require.Equal(t, uint256.NewInt(60), statedb.GetBalance(unknownAccount)) statedb.SetCode(codeAccount, []byte{1}) require.Equal(t, []byte{1}, statedb.GetCode(codeAccount)) diff --git a/op-program/client/l2/engine_backend.go b/op-program/client/l2/engine_backend.go index 3880056e3376..08eafc9a0506 100644 --- a/op-program/client/l2/engine_backend.go +++ b/op-program/client/l2/engine_backend.go @@ -67,7 +67,7 @@ func NewOracleBackedL2Chain(logger log.Logger, oracle Oracle, precompileOracle e blocks: make(map[common.Hash]*types.Block), db: NewOracleBackedDB(oracle), vmCfg: vm.Config{ - OptimismPrecompileOverrides: engineapi.CreatePrecompileOverrides(precompileOracle), + PrecompileOverrides: engineapi.CreatePrecompileOverrides(precompileOracle), }, }, nil } diff --git a/op-program/client/l2/engine_test.go b/op-program/client/l2/engine_test.go index 18d9a4c26cf6..28c9f8006dce 100644 --- a/op-program/client/l2/engine_test.go +++ b/op-program/client/l2/engine_test.go @@ -179,7 +179,10 @@ func createL2Block(t *testing.T, number int) *types.Block { Number: big.NewInt(int64(number)), BaseFee: big.NewInt(7), } - return types.NewBlock(header, []*types.Transaction{types.NewTx(tx)}, nil, nil, trie.NewStackTrie(nil)) + body := &types.Body{ + Transactions: []*types.Transaction{types.NewTx(tx)}, + } + return types.NewBlock(header, body, nil, trie.NewStackTrie(nil)) } type stubEngineBackend struct { diff --git a/op-program/client/l2/engineapi/block_processor.go b/op-program/client/l2/engineapi/block_processor.go index d81212db206c..2e6cc5beade4 100644 --- a/op-program/client/l2/engineapi/block_processor.go +++ b/op-program/client/l2/engineapi/block_processor.go @@ -86,10 +86,10 @@ func NewBlockProcessorFromHeader(provider BlockDataProvider, h *types.Header) (* context := core.NewEVMBlockContext(header, provider, nil, provider.Config(), statedb) // NOTE: Unlikely to be needed for the beacon block root, but we setup any precompile overrides anyways for forwards-compatibility var precompileOverrides vm.PrecompileOverrides - if vmConfig := provider.GetVMConfig(); vmConfig != nil && vmConfig.OptimismPrecompileOverrides != nil { - precompileOverrides = vmConfig.OptimismPrecompileOverrides + if vmConfig := provider.GetVMConfig(); vmConfig != nil && vmConfig.PrecompileOverrides != nil { + precompileOverrides = vmConfig.PrecompileOverrides } - vmenv := vm.NewEVM(context, vm.TxContext{}, statedb, provider.Config(), vm.Config{OptimismPrecompileOverrides: precompileOverrides}) + vmenv := vm.NewEVM(context, vm.TxContext{}, statedb, provider.Config(), vm.Config{PrecompileOverrides: precompileOverrides}) core.ProcessBeaconBlockRoot(*header.ParentBeaconRoot, vmenv, statedb) } return &BlockProcessor{ @@ -124,7 +124,11 @@ func (b *BlockProcessor) AddTx(tx *types.Transaction) error { } func (b *BlockProcessor) Assemble() (*types.Block, error) { - return b.dataProvider.Engine().FinalizeAndAssemble(b.dataProvider, b.header, b.state, b.transactions, nil, b.receipts, nil) + body := types.Body{ + Transactions: b.transactions, + } + + return b.dataProvider.Engine().FinalizeAndAssemble(b.dataProvider, b.header, b.state, &body, b.receipts) } func (b *BlockProcessor) Commit() error { diff --git a/op-program/client/l2/engineapi/precompiles.go b/op-program/client/l2/engineapi/precompiles.go index 5ef77663d5bb..0c53d632ee77 100644 --- a/op-program/client/l2/engineapi/precompiles.go +++ b/op-program/client/l2/engineapi/precompiles.go @@ -50,17 +50,20 @@ type PrecompileOracle interface { } func CreatePrecompileOverrides(precompileOracle PrecompileOracle) vm.PrecompileOverrides { - return func(rules params.Rules, orig vm.PrecompiledContract, address common.Address) (vm.PrecompiledContract, bool) { + return func(rules params.Rules, orig vm.PrecompiledContract, address common.Address) vm.PrecompiledContract { + if orig == nil { // Only override existing contracts. Never introduce a precompile that is not there. + return nil + } // NOTE: Ignoring chain rules for now. We assume that precompile behavior won't change for the foreseeable future switch address { case ecrecoverPrecompileAddress: - return &ecrecoverOracle{Orig: orig, Oracle: precompileOracle}, true + return &ecrecoverOracle{Orig: orig, Oracle: precompileOracle} case bn256PairingPrecompileAddress: - return &bn256PairingOracle{Orig: orig, Oracle: precompileOracle}, true + return &bn256PairingOracle{Orig: orig, Oracle: precompileOracle} case kzgPointEvaluationPrecompileAddress: - return &kzgPointEvaluationOracle{Orig: orig, Oracle: precompileOracle}, true + return &kzgPointEvaluationOracle{Orig: orig, Oracle: precompileOracle} default: - return nil, false + return orig } } } diff --git a/op-program/client/l2/engineapi/test/l2_engine_api_tests.go b/op-program/client/l2/engineapi/test/l2_engine_api_tests.go index 1d8a9ff61ff7..4a78e258e780 100644 --- a/op-program/client/l2/engineapi/test/l2_engine_api_tests.go +++ b/op-program/client/l2/engineapi/test/l2_engine_api_tests.go @@ -2,18 +2,21 @@ package test import ( "context" + "math/big" "testing" + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/params" - "github.com/stretchr/testify/require" ) var gasLimit = eth.Uint64Quantity(30_000_000) @@ -109,7 +112,7 @@ func RunEngineAPITests(t *testing.T, createBackend func(t *testing.T) engineapi. payload := envelope.ExecutionPayload api.assert.Equal(genesis.Hash(), payload.ParentHash, "should have old block as parent") - api.newPayload(payload) + api.newPayload(envelope) api.forkChoiceUpdated(payload.BlockHash, genesis.Hash(), genesis.Hash()) api.assert.Equal(payload.BlockHash, api.headHash(), "should reorg to block built on old parent") }) @@ -138,13 +141,12 @@ func RunEngineAPITests(t *testing.T, createBackend func(t *testing.T) engineapi. // Build a valid block payloadID := api.startBlockBuilding(genesis, eth.Uint64Quantity(genesis.Time+2)) envelope := api.getPayload(payloadID) - newBlock := envelope.ExecutionPayload // But then make it invalid by changing the state root - newBlock.StateRoot = eth.Bytes32(genesis.TxHash) + envelope.ExecutionPayload.StateRoot = eth.Bytes32(genesis.TxHash) updateBlockHash(envelope) - r, err := api.engine.NewPayloadV2(api.ctx, newBlock) + r, err := api.callNewPayload(envelope) api.assert.NoError(err) api.assert.Equal(eth.ExecutionInvalid, r.Status) }) @@ -156,13 +158,12 @@ func RunEngineAPITests(t *testing.T, createBackend func(t *testing.T) engineapi. // Start with a valid time payloadID := api.startBlockBuilding(genesis, eth.Uint64Quantity(genesis.Time+1)) envelope := api.getPayload(payloadID) - newBlock := envelope.ExecutionPayload // Then make it invalid to check NewPayload rejects it - newBlock.Timestamp = eth.Uint64Quantity(genesis.Time) + envelope.ExecutionPayload.Timestamp = eth.Uint64Quantity(genesis.Time) updateBlockHash(envelope) - r, err := api.engine.NewPayloadV2(api.ctx, newBlock) + r, err := api.callNewPayload(envelope) api.assert.NoError(err) api.assert.Equal(eth.ExecutionInvalid, r.Status) }) @@ -174,13 +175,12 @@ func RunEngineAPITests(t *testing.T, createBackend func(t *testing.T) engineapi. // Start with a valid time payloadID := api.startBlockBuilding(genesis, eth.Uint64Quantity(genesis.Time+1)) envelope := api.getPayload(payloadID) - newBlock := envelope.ExecutionPayload // Then make it invalid to check NewPayload rejects it - newBlock.Timestamp = eth.Uint64Quantity(genesis.Time - 1) + envelope.ExecutionPayload.Timestamp = eth.Uint64Quantity(genesis.Time - 1) updateBlockHash(envelope) - r, err := api.engine.NewPayloadV2(api.ctx, newBlock) + r, err := api.callNewPayload(envelope) api.assert.NoError(err) api.assert.Equal(eth.ExecutionInvalid, r.Status) }) @@ -363,7 +363,7 @@ func (h *testHelper) addBlockWithParent(head *types.Header, timestamp eth.Uint64 h.assert.Equal(head.Hash(), block.ParentHash, "should have correct parent") h.assert.Len(block.Transactions, len(txs)) - h.newPayload(block) + h.newPayload(envelope) // Should not have changed the chain head yet h.assert.Equal(prevHead, h.backend.CurrentHeader()) @@ -395,25 +395,35 @@ func (h *testHelper) startBlockBuilding(head *types.Header, newBlockTimestamp et txData = append(txData, rlp) } - canyonTime := h.backend.Config().CanyonTime - var w *types.Withdrawals - if canyonTime != nil && *canyonTime <= uint64(newBlockTimestamp) { - w = &types.Withdrawals{} - } - - result, err := h.engine.ForkchoiceUpdatedV2(h.ctx, ð.ForkchoiceState{ - HeadBlockHash: head.Hash(), - SafeBlockHash: head.Hash(), - FinalizedBlockHash: head.Hash(), - }, ð.PayloadAttributes{ + attr := ð.PayloadAttributes{ Timestamp: newBlockTimestamp, PrevRandao: eth.Bytes32(head.MixDigest), SuggestedFeeRecipient: feeRecipient, Transactions: txData, NoTxPool: true, GasLimit: &gasLimit, - Withdrawals: w, - }) + } + n := new(big.Int).Add(head.Number, big.NewInt(1)) + if h.backend.Config().IsShanghai(n, uint64(newBlockTimestamp)) { + attr.Withdrawals = &types.Withdrawals{} + } + if h.backend.Config().IsCancun(n, uint64(newBlockTimestamp)) { + attr.ParentBeaconBlockRoot = &common.Hash{} + } + fcState := ð.ForkchoiceState{ + HeadBlockHash: head.Hash(), + SafeBlockHash: head.Hash(), + FinalizedBlockHash: head.Hash(), + } + var result *eth.ForkchoiceUpdatedResult + var err error + if h.backend.Config().IsCancun(n, uint64(newBlockTimestamp)) { + result, err = h.engine.ForkchoiceUpdatedV3(h.ctx, fcState, attr) + } else if h.backend.Config().IsShanghai(n, uint64(newBlockTimestamp)) { + result, err = h.engine.ForkchoiceUpdatedV2(h.ctx, fcState, attr) + } else { + result, err = h.engine.ForkchoiceUpdatedV1(h.ctx, fcState, attr) + } h.assert.NoError(err) h.assert.Equal(eth.ExecutionValid, result.PayloadStatus.Status) id := result.PayloadID @@ -423,16 +433,25 @@ func (h *testHelper) startBlockBuilding(head *types.Header, newBlockTimestamp et func (h *testHelper) getPayload(id *eth.PayloadID) *eth.ExecutionPayloadEnvelope { h.Log("getPayload", "id", id) - envelope, err := h.engine.GetPayloadV2(h.ctx, *id) + envelope, err := h.engine.GetPayloadV2(h.ctx, *id) // calls the same underlying function as V1 and V3 h.assert.NoError(err) h.assert.NotNil(envelope) h.assert.NotNil(envelope.ExecutionPayload) return envelope } -func (h *testHelper) newPayload(block *eth.ExecutionPayload) { - h.Log("newPayload", "hash", block.BlockHash) - r, err := h.engine.NewPayloadV2(h.ctx, block) +func (h *testHelper) callNewPayload(envelope *eth.ExecutionPayloadEnvelope) (*eth.PayloadStatusV1, error) { + n := new(big.Int).SetUint64(uint64(envelope.ExecutionPayload.BlockNumber)) + if h.backend.Config().IsCancun(n, uint64(envelope.ExecutionPayload.Timestamp)) { + return h.engine.NewPayloadV3(h.ctx, envelope.ExecutionPayload, []common.Hash{}, envelope.ParentBeaconBlockRoot) + } else { + return h.engine.NewPayloadV2(h.ctx, envelope.ExecutionPayload) + } +} + +func (h *testHelper) newPayload(envelope *eth.ExecutionPayloadEnvelope) { + h.Log("newPayload", "hash", envelope.ExecutionPayload.BlockHash) + r, err := h.callNewPayload(envelope) h.assert.NoError(err) h.assert.Equal(eth.ExecutionValid, r.Status) h.assert.Nil(r.ValidationError) diff --git a/op-program/client/l2/oracle.go b/op-program/client/l2/oracle.go index 6aa049e15992..0563079a830e 100644 --- a/op-program/client/l2/oracle.go +++ b/op-program/client/l2/oracle.go @@ -66,7 +66,7 @@ func (p *PreimageOracle) BlockByHash(blockHash common.Hash) *types.Block { header := p.headerByBlockHash(blockHash) txs := p.LoadTransactions(blockHash, header.TxHash) - return types.NewBlockWithHeader(header).WithBody(txs, nil) + return types.NewBlockWithHeader(header).WithBody(types.Body{Transactions: txs}) } func (p *PreimageOracle) LoadTransactions(blockHash common.Hash, txHash common.Hash) []*types.Transaction { diff --git a/op-program/client/mpt/db.go b/op-program/client/mpt/db.go index fe9e234cf2df..5d9e9147ced9 100644 --- a/op-program/client/mpt/db.go +++ b/op-program/client/mpt/db.go @@ -31,7 +31,7 @@ func (p DB) Delete(key []byte) error { return nil } -func (p DB) Stat(property string) (string, error) { +func (p DB) Stat() (string, error) { panic("not supported") } diff --git a/op-proposer/flags/flags.go b/op-proposer/flags/flags.go index 4321e000fe2f..d4ca19150c47 100644 --- a/op-proposer/flags/flags.go +++ b/op-proposer/flags/flags.go @@ -41,8 +41,8 @@ var ( } PollIntervalFlag = &cli.DurationFlag{ Name: "poll-interval", - Usage: "How frequently to poll L2 for new blocks", - Value: 6 * time.Second, + Usage: "How frequently to poll L2 for new blocks (legacy L2OO)", + Value: 12 * time.Second, EnvVars: prefixEnvVars("POLL_INTERVAL"), } AllowNonFinalizedFlag = &cli.BoolFlag{ @@ -60,6 +60,12 @@ var ( Usage: "Interval between submitting L2 output proposals when the dispute game factory address is set", EnvVars: prefixEnvVars("PROPOSAL_INTERVAL"), } + OutputRetryIntervalFlag = &cli.DurationFlag{ + Name: "output-retry-interval", + Usage: "Interval between retrying output fetching (DGF)", + Value: 12 * time.Second, + EnvVars: prefixEnvVars("OUTPUT_RETRY_INTERVAL"), + } DisputeGameTypeFlag = &cli.UintFlag{ Name: "game-type", Usage: "Dispute game type to create via the configured DisputeGameFactory", @@ -95,6 +101,7 @@ var optionalFlags = []cli.Flag{ L2OutputHDPathFlag, DisputeGameFactoryAddressFlag, ProposalIntervalFlag, + OutputRetryIntervalFlag, DisputeGameTypeFlag, ActiveSequencerCheckDurationFlag, WaitNodeSyncFlag, diff --git a/op-proposer/proposer/config.go b/op-proposer/proposer/config.go index 8786da0c0daa..892d4686b3a9 100644 --- a/op-proposer/proposer/config.go +++ b/op-proposer/proposer/config.go @@ -53,6 +53,9 @@ type CLIConfig struct { // ProposalInterval is the delay between submitting L2 output proposals when the DGFAddress is set. ProposalInterval time.Duration + // OutputRetryInterval is the delay between retrying output fetch if one fails. + OutputRetryInterval time.Duration + // DisputeGameType is the type of dispute game to create when submitting an output proposal. DisputeGameType uint32 @@ -110,6 +113,7 @@ func NewConfig(ctx *cli.Context) *CLIConfig { PprofConfig: oppprof.ReadCLIConfig(ctx), DGFAddress: ctx.String(flags.DisputeGameFactoryAddressFlag.Name), ProposalInterval: ctx.Duration(flags.ProposalIntervalFlag.Name), + OutputRetryInterval: ctx.Duration(flags.OutputRetryIntervalFlag.Name), DisputeGameType: uint32(ctx.Uint(flags.DisputeGameTypeFlag.Name)), ActiveSequencerCheckDuration: ctx.Duration(flags.ActiveSequencerCheckDurationFlag.Name), WaitNodeSync: ctx.Bool(flags.WaitNodeSyncFlag.Name), diff --git a/op-proposer/proposer/driver.go b/op-proposer/proposer/driver.go index 4138deda1bfd..171595946bb2 100644 --- a/op-proposer/proposer/driver.go +++ b/op-proposer/proposer/driver.go @@ -39,6 +39,11 @@ type L1Client interface { CallContract(ctx context.Context, call ethereum.CallMsg, blockNumber *big.Int) ([]byte, error) } +type L2OOContract interface { + Version(*bind.CallOpts) (string, error) + NextBlockNumber(*bind.CallOpts) (*big.Int, error) +} + type RollupClient interface { SyncStatus(ctx context.Context) (*eth.SyncStatus, error) OutputAtBlock(ctx context.Context, blockNum uint64) (*eth.OutputResponse, error) @@ -68,7 +73,7 @@ type L2OutputSubmitter struct { mutex sync.Mutex running bool - l2ooContract *bindings.L2OutputOracleCaller + l2ooContract L2OOContract l2ooABI *abi.ABI dgfContract *bindings.DisputeGameFactoryCaller @@ -173,6 +178,13 @@ func (l *L2OutputSubmitter) StartL2OutputSubmitting() error { } l.running = true + if l.Cfg.WaitNodeSync { + err := l.waitNodeSync() + if err != nil { + return fmt.Errorf("error waiting for node sync: %w", err) + } + } + l.wg.Add(1) go l.loop() @@ -207,9 +219,12 @@ func (l *L2OutputSubmitter) StopL2OutputSubmitting() error { return nil } -// FetchNextOutputInfo gets the block number of the next proposal. -// It returns: the next block number, if the proposal should be made, error -func (l *L2OutputSubmitter) FetchNextOutputInfo(ctx context.Context) (*eth.OutputResponse, bool, error) { +// FetchL2OOOutput gets the next output proposal for the L2OO. +// It queries the L2OO for the earliest next block number that should be proposed. +// It returns the output to propose, and whether the proposal should be submitted at all. +// The passed context is expected to be a lifecycle context. A network timeout +// context will be derived from it. +func (l *L2OutputSubmitter) FetchL2OOOutput(ctx context.Context) (*eth.OutputResponse, bool, error) { if l.l2ooContract == nil { return nil, false, fmt.Errorf("L2OutputOracle contract not set, cannot fetch next output info") } @@ -220,11 +235,11 @@ func (l *L2OutputSubmitter) FetchNextOutputInfo(ctx context.Context) (*eth.Outpu From: l.Txmgr.From(), Context: cCtx, } - nextCheckpointBlock, err := l.l2ooContract.NextBlockNumber(callOpts) + nextCheckpointBlockBig, err := l.l2ooContract.NextBlockNumber(callOpts) if err != nil { - l.Log.Error("Proposer unable to get next block number", "err", err) - return nil, false, err + return nil, false, fmt.Errorf("querying next block number: %w", err) } + nextCheckpointBlock := nextCheckpointBlockBig.Uint64() // Fetch the current L2 heads currentBlockNumber, err := l.FetchCurrentBlockNumber(ctx) if err != nil { @@ -232,76 +247,79 @@ func (l *L2OutputSubmitter) FetchNextOutputInfo(ctx context.Context) (*eth.Outpu } // Ensure that we do not submit a block in the future - if currentBlockNumber.Cmp(nextCheckpointBlock) < 0 { + if currentBlockNumber < nextCheckpointBlock { l.Log.Debug("Proposer submission interval has not elapsed", "currentBlockNumber", currentBlockNumber, "nextBlockNumber", nextCheckpointBlock) return nil, false, nil } - return l.FetchOutput(ctx, nextCheckpointBlock) + output, err := l.FetchOutput(ctx, nextCheckpointBlock) + if err != nil { + return nil, false, fmt.Errorf("fetching output: %w", err) + } + + // Always propose if it's part of the Finalized L2 chain. Or if allowed, if it's part of the safe L2 chain. + if output.BlockRef.Number > output.Status.FinalizedL2.Number && (!l.Cfg.AllowNonFinalized || output.BlockRef.Number > output.Status.SafeL2.Number) { + l.Log.Debug("Not proposing yet, L2 block is not ready for proposal", + "l2_proposal", output.BlockRef, + "l2_safe", output.Status.SafeL2, + "l2_finalized", output.Status.FinalizedL2, + "allow_non_finalized", l.Cfg.AllowNonFinalized) + return output, false, nil + } + return output, true, nil +} + +// FetchDGFOutput gets the next output proposal for the DGF. +// The passed context is expected to be a lifecycle context. A network timeout +// context will be derived from it. +func (l *L2OutputSubmitter) FetchDGFOutput(ctx context.Context) (*eth.OutputResponse, error) { + ctx, cancel := context.WithTimeout(ctx, l.Cfg.NetworkTimeout) + defer cancel() + + blockNum, err := l.FetchCurrentBlockNumber(ctx) + if err != nil { + return nil, err + } + return l.FetchOutput(ctx, blockNum) } // FetchCurrentBlockNumber gets the current block number from the [L2OutputSubmitter]'s [RollupClient]. If the `AllowNonFinalized` configuration // option is set, it will return the safe head block number, and if not, it will return the finalized head block number. -func (l *L2OutputSubmitter) FetchCurrentBlockNumber(ctx context.Context) (*big.Int, error) { +func (l *L2OutputSubmitter) FetchCurrentBlockNumber(ctx context.Context) (uint64, error) { rollupClient, err := l.RollupProvider.RollupClient(ctx) if err != nil { - l.Log.Error("Proposer unable to get rollup client", "err", err) - return nil, err + return 0, fmt.Errorf("getting rollup client: %w", err) } - cCtx, cancel := context.WithTimeout(ctx, l.Cfg.NetworkTimeout) - defer cancel() - - status, err := rollupClient.SyncStatus(cCtx) + status, err := rollupClient.SyncStatus(ctx) if err != nil { - l.Log.Error("Proposer unable to get sync status", "err", err) - return nil, err + return 0, fmt.Errorf("getting sync status: %w", err) } // Use either the finalized or safe head depending on the config. Finalized head is default & safer. - var currentBlockNumber *big.Int if l.Cfg.AllowNonFinalized { - currentBlockNumber = new(big.Int).SetUint64(status.SafeL2.Number) - } else { - currentBlockNumber = new(big.Int).SetUint64(status.FinalizedL2.Number) + return status.SafeL2.Number, nil } - return currentBlockNumber, nil + return status.FinalizedL2.Number, nil } -func (l *L2OutputSubmitter) FetchOutput(ctx context.Context, block *big.Int) (*eth.OutputResponse, bool, error) { +func (l *L2OutputSubmitter) FetchOutput(ctx context.Context, block uint64) (*eth.OutputResponse, error) { rollupClient, err := l.RollupProvider.RollupClient(ctx) if err != nil { - l.Log.Error("Proposer unable to get rollup client", "err", err) - return nil, false, err + return nil, fmt.Errorf("getting rollup client: %w", err) } - cCtx, cancel := context.WithTimeout(ctx, l.Cfg.NetworkTimeout) - defer cancel() - - output, err := rollupClient.OutputAtBlock(cCtx, block.Uint64()) + output, err := rollupClient.OutputAtBlock(ctx, block) if err != nil { - l.Log.Error("Failed to fetch output at block", "block", block, "err", err) - return nil, false, err + return nil, fmt.Errorf("fetching output at block %d: %w", block, err) } if output.Version != supportedL2OutputVersion { - l.Log.Error("Unsupported l2 output version", "output_version", output.Version, "supported_version", supportedL2OutputVersion) - return nil, false, errors.New("unsupported l2 output version") + return nil, fmt.Errorf("unsupported l2 output version: %v, supported: %v", output.Version, supportedL2OutputVersion) } - if output.BlockRef.Number != block.Uint64() { // sanity check, e.g. in case of bad RPC caching - l.Log.Error("Invalid blockNumber", "next_block", block, "output_block", output.BlockRef.Number) - return nil, false, errors.New("invalid blockNumber") + if onum := output.BlockRef.Number; onum != block { // sanity check, e.g. in case of bad RPC caching + return nil, fmt.Errorf("output block number %d mismatches requested %d", output.BlockRef.Number, block) } - - // Always propose if it's part of the Finalized L2 chain. Or if allowed, if it's part of the safe L2 chain. - if output.BlockRef.Number > output.Status.FinalizedL2.Number && (!l.Cfg.AllowNonFinalized || output.BlockRef.Number > output.Status.SafeL2.Number) { - l.Log.Debug("Not proposing yet, L2 block is not ready for proposal", - "l2_proposal", output.BlockRef, - "l2_safe", output.Status.SafeL2, - "l2_finalized", output.Status.FinalizedL2, - "allow_non_finalized", l.Cfg.AllowNonFinalized) - return nil, false, nil - } - return output, true, nil + return output, nil } // ProposeL2OutputTxData creates the transaction data for the ProposeL2Output function @@ -418,14 +436,6 @@ func (l *L2OutputSubmitter) loop() { defer l.wg.Done() ctx := l.ctx - if l.Cfg.WaitNodeSync { - err := l.waitNodeSync() - if err != nil { - l.Log.Error("Error waiting for node sync", "err", err) - return - } - } - if l.dgfContract == nil { l.loopL2OO(ctx) } else { @@ -450,15 +460,33 @@ func (l *L2OutputSubmitter) waitNodeSync() error { return dial.WaitRollupSync(l.ctx, l.Log, rollupClient, l1head, time.Second*12) } +// The loopL2OO regularly polls the L2OO for the next block to propose, +// and if the current finalized (or safe) block is past that next block, it +// proposes it. func (l *L2OutputSubmitter) loopL2OO(ctx context.Context) { + defer l.Log.Info("loopL2OO returning") ticker := time.NewTicker(l.Cfg.PollInterval) defer ticker.Stop() for { select { case <-ticker.C: - output, shouldPropose, err := l.FetchNextOutputInfo(ctx) - if err != nil || !shouldPropose { - break + // prioritize quit signal + select { + case <-l.done: + return + default: + } + + // A note on retrying: the outer ticker already runs on a short + // poll interval, which has a default value of 6 seconds. So no + // retry logic is needed around output fetching here. + output, shouldPropose, err := l.FetchL2OOOutput(ctx) + if err != nil { + l.Log.Warn("Error getting L2OO output", "err", err) + continue + } else if !shouldPropose { + // debug logging already in FetchL2OOOutput + continue } l.proposeOutput(ctx, output) @@ -468,20 +496,36 @@ func (l *L2OutputSubmitter) loopL2OO(ctx context.Context) { } } +// The loopDGF proposes a new output every proposal interval. It does _not_ query +// the DGF for when to next propose, as the DGF doesn't have the concept of a +// proposal interval, like in the L2OO case. For this reason, it has to keep track +// of the interval itself, for which it uses an internal ticker. func (l *L2OutputSubmitter) loopDGF(ctx context.Context) { + defer l.Log.Info("loopDGF returning") ticker := time.NewTicker(l.Cfg.ProposalInterval) defer ticker.Stop() for { select { case <-ticker.C: - blockNumber, err := l.FetchCurrentBlockNumber(ctx) - if err != nil { - break - } - - output, shouldPropose, err := l.FetchOutput(ctx, blockNumber) - if err != nil || !shouldPropose { - break + var ( + output *eth.OutputResponse + err error + ) + // A note on retrying: because the proposal interval is usually much + // larger than the interval at which to retry proposing on a failed attempt, + // we want to keep retrying getting the output proposal until we succeed. + for output == nil || err != nil { + select { + case <-l.done: + return + default: + } + + output, err = l.FetchDGFOutput(ctx) + if err != nil { + l.Log.Warn("Error getting DGF output, retrying...", "err", err) + time.Sleep(l.Cfg.OutputRetryInterval) + } } l.proposeOutput(ctx, output) diff --git a/op-proposer/proposer/driver_test.go b/op-proposer/proposer/driver_test.go new file mode 100644 index 000000000000..c0dd4d3d3daf --- /dev/null +++ b/op-proposer/proposer/driver_test.go @@ -0,0 +1,150 @@ +package proposer + +import ( + "context" + "fmt" + "math/big" + "testing" + "time" + + "github.com/ethereum-optimism/optimism/op-proposer/bindings" + "github.com/ethereum-optimism/optimism/op-proposer/metrics" + "github.com/ethereum-optimism/optimism/op-service/dial" + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum-optimism/optimism/op-service/testutils" + txmgrmocks "github.com/ethereum-optimism/optimism/op-service/txmgr/mocks" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +type MockL2OOContract struct { + mock.Mock +} + +func (m *MockL2OOContract) Version(opts *bind.CallOpts) (string, error) { + args := m.Called(opts) + return args.String(0), args.Error(1) +} + +func (m *MockL2OOContract) NextBlockNumber(opts *bind.CallOpts) (*big.Int, error) { + args := m.Called(opts) + return args.Get(0).(*big.Int), args.Error(1) +} + +type mockRollupEndpointProvider struct { + rollupClient *testutils.MockRollupClient + rollupClientErr error +} + +func newEndpointProvider() *mockRollupEndpointProvider { + return &mockRollupEndpointProvider{ + rollupClient: new(testutils.MockRollupClient), + } +} + +func (p *mockRollupEndpointProvider) RollupClient(context.Context) (dial.RollupClientInterface, error) { + return p.rollupClient, p.rollupClientErr +} + +func (p *mockRollupEndpointProvider) Close() {} + +func setup(t *testing.T) (*L2OutputSubmitter, *mockRollupEndpointProvider, *MockL2OOContract, *txmgrmocks.TxManager, *testlog.CapturingHandler) { + ep := newEndpointProvider() + + l2OutputOracleAddr := common.HexToAddress("0x3F8A862E63E759a77DA22d384027D21BF096bA9E") + + proposerConfig := ProposerConfig{ + PollInterval: time.Microsecond, + ProposalInterval: time.Microsecond, + OutputRetryInterval: time.Microsecond, + L2OutputOracleAddr: &l2OutputOracleAddr, + } + + txmgr := txmgrmocks.NewTxManager(t) + + lgr, logs := testlog.CaptureLogger(t, log.LevelDebug) + setup := DriverSetup{ + Log: lgr, + Metr: metrics.NoopMetrics, + Cfg: proposerConfig, + Txmgr: txmgr, + RollupProvider: ep, + } + + parsed, err := bindings.L2OutputOracleMetaData.GetAbi() + require.NoError(t, err) + + ctx, cancel := context.WithCancel(context.Background()) + l2ooContract := new(MockL2OOContract) + l2OutputSubmitter := L2OutputSubmitter{ + DriverSetup: setup, + done: make(chan struct{}), + l2ooContract: l2ooContract, + l2ooABI: parsed, + ctx: ctx, + cancel: cancel, + } + + txmgr.On("BlockNumber", mock.Anything).Return(uint64(100), nil).Once() + txmgr.On("Send", mock.Anything, mock.Anything). + Return(&types.Receipt{Status: uint64(1), TxHash: common.Hash{}}, nil). + Once(). + Run(func(_ mock.Arguments) { + // let loops return after first Send call + t.Log("Closing proposer.") + close(l2OutputSubmitter.done) + }) + + return &l2OutputSubmitter, ep, l2ooContract, txmgr, logs +} + +func TestL2OutputSubmitter_OutputRetry(t *testing.T) { + tests := []struct { + name string + }{ + {name: "L2OO"}, + {name: "DGF"}, + } + + const numFails = 3 + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ps, ep, l2ooContract, txmgr, logs := setup(t) + + ep.rollupClient.On("SyncStatus").Return(ð.SyncStatus{FinalizedL2: eth.L2BlockRef{Number: 42}}, nil).Times(numFails + 1) + ep.rollupClient.ExpectOutputAtBlock(42, nil, fmt.Errorf("TEST: failed to fetch output")).Times(numFails) + ep.rollupClient.ExpectOutputAtBlock( + 42, + ð.OutputResponse{ + Version: supportedL2OutputVersion, + BlockRef: eth.L2BlockRef{Number: 42}, + Status: ð.SyncStatus{ + CurrentL1: eth.L1BlockRef{Hash: common.Hash{}}, + FinalizedL2: eth.L2BlockRef{Number: 42}, + }, + }, + nil, + ) + + if tt.name == "DGF" { + ps.loopDGF(ps.ctx) + } else { + txmgr.On("From").Return(common.Address{}).Times(numFails + 1) + l2ooContract.On("NextBlockNumber", mock.AnythingOfType("*bind.CallOpts")).Return(big.NewInt(42), nil).Times(numFails + 1) + ps.loopL2OO(ps.ctx) + } + + ep.rollupClient.AssertExpectations(t) + l2ooContract.AssertExpectations(t) + require.Len(t, logs.FindLogs(testlog.NewMessageContainsFilter("Error getting "+tt.name)), numFails) + require.NotNil(t, logs.FindLog(testlog.NewMessageFilter("Proposer tx successfully published"))) + require.NotNil(t, logs.FindLog(testlog.NewMessageFilter("loop"+tt.name+" returning"))) + }) + } +} diff --git a/op-proposer/proposer/service.go b/op-proposer/proposer/service.go index f40fdf0b496a..8b3d3c553cce 100644 --- a/op-proposer/proposer/service.go +++ b/op-proposer/proposer/service.go @@ -32,6 +32,9 @@ type ProposerConfig struct { PollInterval time.Duration NetworkTimeout time.Duration + // How frequently to retry fetching an output if one fails + OutputRetryInterval time.Duration + // How frequently to post L2 outputs when the DisputeGameFactory is configured ProposalInterval time.Duration @@ -89,6 +92,7 @@ func (ps *ProposerService) initFromCLIConfig(ctx context.Context, version string ps.initMetrics(cfg) ps.PollInterval = cfg.PollInterval + ps.OutputRetryInterval = cfg.OutputRetryInterval ps.NetworkTimeout = cfg.TxMgrConfig.NetworkTimeout ps.AllowNonFinalized = cfg.AllowNonFinalized ps.WaitNodeSync = cfg.WaitNodeSync diff --git a/op-service/client/http_test.go b/op-service/client/http_test.go index 60fd9fd9873f..df84e48299c2 100644 --- a/op-service/client/http_test.go +++ b/op-service/client/http_test.go @@ -2,13 +2,12 @@ package client import ( "context" + "log/slog" "net/http" "net/http/httptest" "net/url" "testing" - "golang.org/x/exp/slog" - "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/stretchr/testify/require" ) diff --git a/op-service/crypto/signature.go b/op-service/crypto/signature.go index c0abd3ef2afd..0b0afc02ecef 100644 --- a/op-service/crypto/signature.go +++ b/op-service/crypto/signature.go @@ -91,6 +91,9 @@ func SignerFactoryFromConfig(l log.Logger, privateKey, mnemonic, hdPath string, return nil, common.Address{}, fmt.Errorf("failed to parse the private key: %w", err) } } + // we force the curve to Geth's instance, because Geth does an equality check in the nocgo version: + // https://github.com/ethereum/go-ethereum/blob/723b1e36ad6a9e998f06f74cc8b11d51635c6402/crypto/signature_nocgo.go#L82 + privKey.PublicKey.Curve = crypto.S256() fromAddress = crypto.PubkeyToAddress(privKey.PublicKey) signer = func(chainID *big.Int) SignerFn { s := PrivateKeySignerFn(privKey, chainID) diff --git a/op-service/crypto/signature_test.go b/op-service/crypto/signature_test.go new file mode 100644 index 000000000000..1cd52165bf5b --- /dev/null +++ b/op-service/crypto/signature_test.go @@ -0,0 +1,56 @@ +package crypto + +import ( + "context" + "math/big" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-service/signer" + "github.com/ethereum-optimism/optimism/op-service/testlog" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" +) + +// should be run with CGO_ENABLED=0 + +func TestSignerFactoryFromMnemonic(t *testing.T) { + mnemonic := "test test test test test test test test test test test junk" + hdPath := "m/44'/60'/0'/0/1" + testSigner(t, "", mnemonic, hdPath, signer.CLIConfig{}) +} + +func TestSignerFactoryFromKey(t *testing.T) { + priv := "59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" + testSigner(t, priv, "", "", signer.CLIConfig{}) +} + +func testSigner(t *testing.T, priv, mnemonic, hdPath string, cfg signer.CLIConfig) { + logger := testlog.Logger(t, log.LevelDebug) + + factoryFn, addr, err := SignerFactoryFromConfig(logger, priv, mnemonic, hdPath, cfg) + require.NoError(t, err) + expectedAddr := common.HexToAddress("0x70997970C51812dc3A010C7d01b50e0d17dc79C8") + require.Equal(t, expectedAddr, addr) + chainID := big.NewInt(10) + signerFn := factoryFn(chainID) // for chain ID 10 + tx := types.NewTx(&types.DynamicFeeTx{ + ChainID: chainID, + Nonce: 0, + GasTipCap: big.NewInt(1), + GasFeeCap: big.NewInt(1), + Gas: 21000, + To: nil, + Value: big.NewInt(0), + Data: []byte("test"), + }) + signedTx, err := signerFn(context.Background(), addr, tx) + require.NoError(t, err) + gethSigner := types.LatestSignerForChainID(chainID) + sender, err := gethSigner.Sender(signedTx) + require.NoError(t, err) + require.Equal(t, expectedAddr, sender) +} diff --git a/op-service/dial/rollup_sync_test.go b/op-service/dial/rollup_sync_test.go index 1d3898e8fdb8..9ed3e2a39bdd 100644 --- a/op-service/dial/rollup_sync_test.go +++ b/op-service/dial/rollup_sync_test.go @@ -3,6 +3,7 @@ package dial import ( "context" "errors" + "log/slog" "testing" "time" @@ -10,7 +11,6 @@ import ( "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum-optimism/optimism/op-service/testutils" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" ) func TestWaitRollupSync(t *testing.T) { diff --git a/op-service/eth/blob.go b/op-service/eth/blob.go index da871215da85..9e51c568634f 100644 --- a/op-service/eth/blob.go +++ b/op-service/eth/blob.go @@ -57,7 +57,7 @@ func (b *Blob) TerminalString() string { } func (b *Blob) ComputeKZGCommitment() (kzg4844.Commitment, error) { - return kzg4844.BlobToCommitment(*b.KZGBlob()) + return kzg4844.BlobToCommitment(b.KZGBlob()) } // KZGToVersionedHash computes the "blob hash" (a.k.a. versioned-hash) of a blob-commitment, as used in a blob-tx. @@ -70,7 +70,7 @@ func KZGToVersionedHash(commitment kzg4844.Commitment) (out common.Hash) { // VerifyBlobProof verifies that the given blob and proof corresponds to the given commitment, // returning error if the verification fails. func VerifyBlobProof(blob *Blob, commitment kzg4844.Commitment, proof kzg4844.Proof) error { - return kzg4844.VerifyBlobProof(*blob.KZGBlob(), commitment, proof) + return kzg4844.VerifyBlobProof(blob.KZGBlob(), commitment, proof) } // FromData encodes the given input data into this blob. The encoding scheme is as follows: diff --git a/op-service/flags/flags.go b/op-service/flags/flags.go index f607bbf73dd6..f8be269303b3 100644 --- a/op-service/flags/flags.go +++ b/op-service/flags/flags.go @@ -11,12 +11,14 @@ import ( ) const ( - RollupConfigFlagName = "rollup.config" - NetworkFlagName = "network" - CanyonOverrideFlagName = "override.canyon" - DeltaOverrideFlagName = "override.delta" - EcotoneOverrideFlagName = "override.ecotone" - FjordOverrideFlagName = "override.fjord" + RollupConfigFlagName = "rollup.config" + NetworkFlagName = "network" + CanyonOverrideFlagName = "override.canyon" + DeltaOverrideFlagName = "override.delta" + EcotoneOverrideFlagName = "override.ecotone" + FjordOverrideFlagName = "override.fjord" + GraniteOverrideFlagName = "override.granite" + HoloceneOverrideFlagName = "override.holocene" ) func CLIFlags(envPrefix string, category string) []cli.Flag { @@ -49,6 +51,20 @@ func CLIFlags(envPrefix string, category string) []cli.Flag { Hidden: false, Category: category, }, + &cli.Uint64Flag{ + Name: GraniteOverrideFlagName, + Usage: "Manually specify the Granite fork timestamp, overriding the bundled setting", + EnvVars: opservice.PrefixEnvVar(envPrefix, "OVERRIDE_GRANITE"), + Hidden: false, + Category: category, + }, + &cli.Uint64Flag{ + Name: HoloceneOverrideFlagName, + Usage: "Manually specify the Holocene fork timestamp, overriding the bundled setting", + EnvVars: opservice.PrefixEnvVar(envPrefix, "OVERRIDE_HOLOCENE"), + Hidden: false, + Category: category, + }, CLINetworkFlag(envPrefix, category), CLIRollupConfigFlag(envPrefix, category), } diff --git a/op-service/log/cli.go b/op-service/log/cli.go index ab4718d5e4a2..b51a48930b42 100644 --- a/op-service/log/cli.go +++ b/op-service/log/cli.go @@ -3,11 +3,11 @@ package log import ( "fmt" "io" + "log/slog" "os" "strings" "github.com/urfave/cli/v2" - "golang.org/x/exp/slog" "golang.org/x/term" "github.com/ethereum/go-ethereum/log" @@ -140,7 +140,7 @@ func FormatHandler(ft FormatType, color bool) func(io.Writer) slog.Handler { case FormatJSON: return log.JSONHandler case FormatText: - if term.IsTerminal(int(os.Stdout.Fd())) { + if color { return termColorHandler } else { return logfmtHandler diff --git a/op-service/log/dynamic.go b/op-service/log/dynamic.go index 72f23f505bbc..0259fb15b201 100644 --- a/op-service/log/dynamic.go +++ b/op-service/log/dynamic.go @@ -2,8 +2,7 @@ package log import ( "context" - - "golang.org/x/exp/slog" + "log/slog" ) type LvlSetter interface { diff --git a/op-service/log/dynamic_test.go b/op-service/log/dynamic_test.go index 3a992710b4d8..25076246364c 100644 --- a/op-service/log/dynamic_test.go +++ b/op-service/log/dynamic_test.go @@ -2,10 +2,10 @@ package log import ( "context" + "log/slog" "testing" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" "github.com/ethereum/go-ethereum/log" ) diff --git a/op-service/log/writer.go b/op-service/log/writer.go index 0a1731383068..e3c658d3a7b8 100644 --- a/op-service/log/writer.go +++ b/op-service/log/writer.go @@ -1,10 +1,9 @@ package log import ( + "log/slog" "sync" - "golang.org/x/exp/slog" - "github.com/ethereum/go-ethereum/log" ) diff --git a/op-service/log/writer_test.go b/op-service/log/writer_test.go index 2e9cf14b3a75..274a2aa2a3d0 100644 --- a/op-service/log/writer_test.go +++ b/op-service/log/writer_test.go @@ -2,10 +2,10 @@ package log_test import ( "io" + "log/slog" "testing" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" "github.com/ethereum/go-ethereum/log" diff --git a/op-service/predeploys/addresses.go b/op-service/predeploys/addresses.go index c9b6bcfd6317..a03fcf29188a 100644 --- a/op-service/predeploys/addresses.go +++ b/op-service/predeploys/addresses.go @@ -26,6 +26,7 @@ const ( SchemaRegistry = "0x4200000000000000000000000000000000000020" EAS = "0x4200000000000000000000000000000000000021" CrossL2Inbox = "0x4200000000000000000000000000000000000022" + L2toL2CrossDomainMessenger = "0x4200000000000000000000000000000000000023" Create2Deployer = "0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2" MultiCall3 = "0xcA11bde05977b3631167028862bE2a173976CA11" Safe_v130 = "0x69f4D1788e39c87893C980c06EdF4b7f686e2938" @@ -62,6 +63,7 @@ var ( SchemaRegistryAddr = common.HexToAddress(SchemaRegistry) EASAddr = common.HexToAddress(EAS) CrossL2InboxAddr = common.HexToAddress(CrossL2Inbox) + L2toL2CrossDomainMessengerAddr = common.HexToAddress(L2toL2CrossDomainMessenger) Create2DeployerAddr = common.HexToAddress(Create2Deployer) MultiCall3Addr = common.HexToAddress(MultiCall3) Safe_v130Addr = common.HexToAddress(Safe_v130) @@ -91,6 +93,8 @@ func init() { Predeploys["L1BlockNumber"] = &Predeploy{Address: L1BlockNumberAddr} Predeploys["GasPriceOracle"] = &Predeploy{Address: GasPriceOracleAddr} Predeploys["L1Block"] = &Predeploy{Address: L1BlockAddr} + Predeploys["CrossL2Inbox"] = &Predeploy{Address: CrossL2InboxAddr} + Predeploys["L2toL2CrossDomainMessenger"] = &Predeploy{Address: L2toL2CrossDomainMessengerAddr} Predeploys["GovernanceToken"] = &Predeploy{ Address: GovernanceTokenAddr, ProxyDisabled: true, diff --git a/op-service/sources/batching/bound.go b/op-service/sources/batching/bound.go index 33e19c3dfbfa..75a2a3f12a03 100644 --- a/op-service/sources/batching/bound.go +++ b/op-service/sources/batching/bound.go @@ -43,11 +43,11 @@ func (b *BoundContract) DecodeCall(data []byte) (string, *CallResult, error) { method, err := b.abi.MethodById(data[:4]) if err != nil { // ABI doesn't return a nicely typed error so treat any failure to find the method as unknown - return "", nil, fmt.Errorf("%w: %v", ErrUnknownMethod, err.Error()) + return "", nil, fmt.Errorf("%w: %w", ErrUnknownMethod, err) } args, err := method.Inputs.Unpack(data[4:]) if err != nil { - return "", nil, fmt.Errorf("%w: %v", ErrInvalidCall, err.Error()) + return "", nil, fmt.Errorf("%w: %w", ErrInvalidCall, err) } return method.Name, &CallResult{args}, nil } @@ -58,7 +58,7 @@ func (b *BoundContract) DecodeEvent(log *types.Log) (string, *CallResult, error) } event, err := b.abi.EventByID(log.Topics[0]) if err != nil { - return "", nil, fmt.Errorf("%w: %v", ErrUnknownEvent, err.Error()) + return "", nil, fmt.Errorf("%w: %w", ErrUnknownEvent, err) } argsMap := make(map[string]interface{}) @@ -69,13 +69,13 @@ func (b *BoundContract) DecodeEvent(log *types.Log) (string, *CallResult, error) } } if err := abi.ParseTopicsIntoMap(argsMap, indexed, log.Topics[1:]); err != nil { - return "", nil, fmt.Errorf("%w indexed topics: %v", ErrInvalidEvent, err.Error()) + return "", nil, fmt.Errorf("%w indexed topics: %w", ErrInvalidEvent, err) } nonIndexed := event.Inputs.NonIndexed() if len(nonIndexed) > 0 { if err := nonIndexed.UnpackIntoMap(argsMap, log.Data); err != nil { - return "", nil, fmt.Errorf("%w non-indexed topics: %v", ErrInvalidEvent, err.Error()) + return "", nil, fmt.Errorf("%w non-indexed topics: %w", ErrInvalidEvent, err) } } args := make([]interface{}, 0, len(event.Inputs)) diff --git a/op-service/sources/l1_beacon_client_test.go b/op-service/sources/l1_beacon_client_test.go index ef4ede18c68d..086cb0f9dae4 100644 --- a/op-service/sources/l1_beacon_client_test.go +++ b/op-service/sources/l1_beacon_client_test.go @@ -25,8 +25,8 @@ func makeTestBlobSidecar(index uint64) (eth.IndexedBlobHash, *eth.BlobSidecar) { // make first byte of test blob match its index so we can easily verify if is returned in the // expected order blob[0] = byte(index) - commit, _ := kzg4844.BlobToCommitment(blob) - proof, _ := kzg4844.ComputeBlobProof(blob, commit) + commit, _ := kzg4844.BlobToCommitment(&blob) + proof, _ := kzg4844.ComputeBlobProof(&blob, commit) hash := eth.KZGToVersionedHash(commit) idh := eth.IndexedBlobHash{ diff --git a/op-service/sources/rollupclient.go b/op-service/sources/rollupclient.go index 14c38d35b4e8..acd0f84b3917 100644 --- a/op-service/sources/rollupclient.go +++ b/op-service/sources/rollupclient.go @@ -2,10 +2,10 @@ package sources import ( "context" + "log/slog" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "golang.org/x/exp/slog" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-service/client" diff --git a/op-service/testlog/capturing.go b/op-service/testlog/capturing.go index 6e1edb09b504..28a8a4926078 100644 --- a/op-service/testlog/capturing.go +++ b/op-service/testlog/capturing.go @@ -2,10 +2,9 @@ package testlog import ( "context" + "log/slog" "strings" - "golang.org/x/exp/slog" - "github.com/ethereum/go-ethereum/log" ) diff --git a/op-service/testlog/testlog.go b/op-service/testlog/testlog.go index 0ff544225599..fe7ede207cbc 100644 --- a/op-service/testlog/testlog.go +++ b/op-service/testlog/testlog.go @@ -21,14 +21,13 @@ import ( "bufio" "bytes" "context" + "log/slog" "os" "runtime" "strconv" "strings" "sync" - "golang.org/x/exp/slog" - "github.com/ethereum/go-ethereum/log" ) diff --git a/op-service/testutils/mock_rollup_client.go b/op-service/testutils/mock_rollup_client.go index a7a42e878481..2ed6d54a00d0 100644 --- a/op-service/testutils/mock_rollup_client.go +++ b/op-service/testutils/mock_rollup_client.go @@ -18,8 +18,8 @@ func (m *MockRollupClient) OutputAtBlock(ctx context.Context, blockNum uint64) ( return out.Get(0).(*eth.OutputResponse), out.Error(1) } -func (m *MockRollupClient) ExpectOutputAtBlock(blockNum uint64, response *eth.OutputResponse, err error) { - m.Mock.On("OutputAtBlock", blockNum).Once().Return(response, err) +func (m *MockRollupClient) ExpectOutputAtBlock(blockNum uint64, response *eth.OutputResponse, err error) *mock.Call { + return m.Mock.On("OutputAtBlock", blockNum).Once().Return(response, err) } func (m *MockRollupClient) SyncStatus(ctx context.Context) (*eth.SyncStatus, error) { diff --git a/op-service/testutils/random.go b/op-service/testutils/random.go index f065d2583765..a3021ad463b6 100644 --- a/op-service/testutils/random.go +++ b/op-service/testutils/random.go @@ -299,7 +299,10 @@ func RandomBlockPrependTxsWithTime(rng *rand.Rand, txCount int, t uint64, ptxs . } header.GasUsed = cumulativeGasUsed header.GasLimit = cumulativeGasUsed + uint64(rng.Int63n(int64(cumulativeGasUsed))) - block := types.NewBlock(header, txs, nil, receipts, trie.NewStackTrie(nil)) + body := types.Body{ + Transactions: txs, + } + block := types.NewBlock(header, &body, receipts, trie.NewStackTrie(nil)) logIndex := uint(0) for i, r := range receipts { r.BlockHash = block.Hash() diff --git a/op-service/txmgr/txmgr.go b/op-service/txmgr/txmgr.go index 72ef1d1c7518..602ed863a7a3 100644 --- a/op-service/txmgr/txmgr.go +++ b/op-service/txmgr/txmgr.go @@ -326,8 +326,8 @@ func MakeSidecar(blobs []*eth.Blob) (*types.BlobTxSidecar, []common.Hash, error) sidecar := &types.BlobTxSidecar{} blobHashes := make([]common.Hash, 0, len(blobs)) for i, blob := range blobs { - rawBlob := *blob.KZGBlob() - sidecar.Blobs = append(sidecar.Blobs, rawBlob) + rawBlob := blob.KZGBlob() + sidecar.Blobs = append(sidecar.Blobs, *rawBlob) commitment, err := kzg4844.BlobToCommitment(rawBlob) if err != nil { return nil, nil, fmt.Errorf("cannot compute KZG commitment of blob %d in tx candidate: %w", i, err) diff --git a/op-service/txmgr/txmgr_test.go b/op-service/txmgr/txmgr_test.go index 330f2482b1a2..0b1ad933b37a 100644 --- a/op-service/txmgr/txmgr_test.go +++ b/op-service/txmgr/txmgr_test.go @@ -564,7 +564,7 @@ func TestTxMgr_CraftBlobTx(t *testing.T) { // verify the blobs for i := range sidecar.Blobs { - require.NoError(t, kzg4844.VerifyBlobProof(sidecar.Blobs[i], sidecar.Commitments[i], sidecar.Proofs[i])) + require.NoError(t, kzg4844.VerifyBlobProof(&sidecar.Blobs[i], sidecar.Commitments[i], sidecar.Proofs[i])) } b1 := eth.Blob(sidecar.Blobs[0]) d1, err := b1.ToData() diff --git a/op-supervisor/supervisor/backend/source/contracts/l2inbox.go b/op-supervisor/supervisor/backend/source/contracts/l2inbox.go new file mode 100644 index 000000000000..b490b612e6c6 --- /dev/null +++ b/op-supervisor/supervisor/backend/source/contracts/l2inbox.go @@ -0,0 +1,134 @@ +package contracts + +import ( + "bytes" + "errors" + "fmt" + "io" + "math/big" + + "github.com/ethereum-optimism/optimism/op-service/predeploys" + "github.com/ethereum-optimism/optimism/op-service/solabi" + "github.com/ethereum-optimism/optimism/op-service/sources/batching" + backendTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" + "github.com/ethereum-optimism/optimism/packages/contracts-bedrock/snapshots" + "github.com/ethereum/go-ethereum/common" + ethTypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" +) + +const ( + eventExecutingMessage = "ExecutingMessage" +) + +var ( + ErrEventNotFound = errors.New("event not found") +) + +type contractIdentifier struct { + // Origin represents the address that initiated the message + // it is used in combination with the MsgHash to uniquely identify a message + // and is hashed into the log hash, not stored directly. + Origin common.Address + LogIndex *big.Int + BlockNumber *big.Int + ChainId *big.Int + Timestamp *big.Int +} + +type CrossL2Inbox struct { + contract *batching.BoundContract +} + +func NewCrossL2Inbox() *CrossL2Inbox { + abi := snapshots.LoadCrossL2InboxABI() + return &CrossL2Inbox{ + contract: batching.NewBoundContract(abi, predeploys.CrossL2InboxAddr), + } +} + +func (i *CrossL2Inbox) DecodeExecutingMessageLog(l *ethTypes.Log) (backendTypes.ExecutingMessage, error) { + if l.Address != i.contract.Addr() { + return backendTypes.ExecutingMessage{}, fmt.Errorf("%w: log not from CrossL2Inbox", ErrEventNotFound) + } + // use DecodeEvent to check the name of the event + // but the actual decoding is done manually to extract the contract identifier + name, _, err := i.contract.DecodeEvent(l) + if errors.Is(err, batching.ErrUnknownEvent) { + return backendTypes.ExecutingMessage{}, fmt.Errorf("%w: %v", ErrEventNotFound, err.Error()) + } else if err != nil { + return backendTypes.ExecutingMessage{}, fmt.Errorf("failed to decode event: %w", err) + } + if name != eventExecutingMessage { + return backendTypes.ExecutingMessage{}, fmt.Errorf("%w: event %v not an ExecutingMessage event", ErrEventNotFound, name) + } + // the second topic is the hash of the payload (the first is the event ID) + msgHash := l.Topics[1] + // the first 32 bytes of the data are the msgHash, so we skip them + identifierBytes := bytes.NewReader(l.Data[32:]) + identifier, err := identifierFromBytes(identifierBytes) + if err != nil { + return backendTypes.ExecutingMessage{}, fmt.Errorf("failed to read contract identifier: %w", err) + } + chainID, err := types.ChainIDFromBig(identifier.ChainId).ToUInt32() + if err != nil { + return backendTypes.ExecutingMessage{}, fmt.Errorf("failed to convert chain ID %v to uint32: %w", identifier.ChainId, err) + } + hash := payloadHashToLogHash(msgHash, identifier.Origin) + return backendTypes.ExecutingMessage{ + Chain: chainID, + Hash: hash, + BlockNum: identifier.BlockNumber.Uint64(), + LogIdx: uint32(identifier.LogIndex.Uint64()), + Timestamp: identifier.Timestamp.Uint64(), + }, nil +} + +// identifierFromBytes reads a contract identifier from a byte stream. +// it follows the spec and matches the CrossL2Inbox.json definition, +// rather than relying on reflection, as that can be error-prone regarding struct ordering +func identifierFromBytes(identifierBytes io.Reader) (contractIdentifier, error) { + origin, err := solabi.ReadAddress(identifierBytes) + if err != nil { + return contractIdentifier{}, fmt.Errorf("failed to read origin address: %w", err) + } + originAddr := common.BytesToAddress(origin[:]) + blockNumber, err := solabi.ReadUint256(identifierBytes) + if err != nil { + return contractIdentifier{}, fmt.Errorf("failed to read block number: %w", err) + } + logIndex, err := solabi.ReadUint256(identifierBytes) + if err != nil { + return contractIdentifier{}, fmt.Errorf("failed to read log index: %w", err) + } + timestamp, err := solabi.ReadUint256(identifierBytes) + if err != nil { + return contractIdentifier{}, fmt.Errorf("failed to read timestamp: %w", err) + } + chainID, err := solabi.ReadUint256(identifierBytes) + if err != nil { + return contractIdentifier{}, fmt.Errorf("failed to read chain ID: %w", err) + } + return contractIdentifier{ + Origin: originAddr, + BlockNumber: blockNumber, + LogIndex: logIndex, + Timestamp: timestamp, + ChainId: chainID, + }, nil +} + +// payloadHashToLogHash converts the payload hash to the log hash +// it is the concatenation of the log's address and the hash of the log's payload, +// which is then hashed again. This is the hash that is stored in the log storage. +// The logHash can then be used to traverse from the executing message +// to the log the referenced initiating message. +// TODO: this function is duplicated between contracts and backend/source/log_processor.go +// to avoid a circular dependency. It should be reorganized to avoid this duplication. +func payloadHashToLogHash(payloadHash common.Hash, addr common.Address) backendTypes.TruncatedHash { + msg := make([]byte, 0, 2*common.HashLength) + msg = append(msg, addr.Bytes()...) + msg = append(msg, payloadHash.Bytes()...) + return backendTypes.TruncateHash(crypto.Keccak256Hash(msg)) +} diff --git a/op-supervisor/supervisor/backend/source/contracts/l2inbox_test.go b/op-supervisor/supervisor/backend/source/contracts/l2inbox_test.go new file mode 100644 index 000000000000..b343519a48fc --- /dev/null +++ b/op-supervisor/supervisor/backend/source/contracts/l2inbox_test.go @@ -0,0 +1,75 @@ +package contracts + +import ( + "bytes" + "math/big" + "testing" + + "github.com/ethereum-optimism/optimism/op-service/predeploys" + "github.com/ethereum-optimism/optimism/op-service/sources/batching" + backendTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" + "github.com/ethereum-optimism/optimism/packages/contracts-bedrock/snapshots" + "github.com/ethereum/go-ethereum/common" + ethTypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/stretchr/testify/require" +) + +func TestDecodeExecutingMessageEvent(t *testing.T) { + inbox := NewCrossL2Inbox() + payload := bytes.Repeat([]byte{0xaa, 0xbb}, 50) + payloadHash := crypto.Keccak256Hash(payload) + expected := backendTypes.ExecutingMessage{ + Chain: 42424, + BlockNum: 12345, + LogIdx: 98, + Timestamp: 9578295, + } + contractIdent := contractIdentifier{ + Origin: common.Address{0xbb, 0xcc}, + ChainId: new(big.Int).SetUint64(uint64(expected.Chain)), + BlockNumber: new(big.Int).SetUint64(expected.BlockNum), + Timestamp: new(big.Int).SetUint64(expected.Timestamp), + LogIndex: new(big.Int).SetUint64(uint64(expected.LogIdx)), + } + expected.Hash = payloadHashToLogHash(payloadHash, contractIdent.Origin) + abi := snapshots.LoadCrossL2InboxABI() + validData, err := abi.Events[eventExecutingMessage].Inputs.Pack(payloadHash, contractIdent) + require.NoError(t, err) + createValidLog := func() *ethTypes.Log { + //protoHack := bytes.Repeat([]byte{0x00}, 32*5) + return ðTypes.Log{ + Address: predeploys.CrossL2InboxAddr, + Topics: []common.Hash{abi.Events[eventExecutingMessage].ID, payloadHash}, + Data: validData, + } + } + + t.Run("ParseValid", func(t *testing.T) { + l := createValidLog() + result, err := inbox.DecodeExecutingMessageLog(l) + require.NoError(t, err) + require.Equal(t, expected, result) + }) + + t.Run("IgnoreIncorrectContract", func(t *testing.T) { + l := createValidLog() + l.Address = common.Address{0xff} + _, err := inbox.DecodeExecutingMessageLog(l) + require.ErrorIs(t, err, ErrEventNotFound) + }) + + t.Run("IgnoreWrongEvent", func(t *testing.T) { + l := createValidLog() + l.Topics[0] = common.Hash{0xbb} + _, err := inbox.DecodeExecutingMessageLog(l) + require.ErrorIs(t, err, ErrEventNotFound) + }) + + t.Run("ErrorOnInvalidEvent", func(t *testing.T) { + l := createValidLog() + l.Data = []byte{0xbb, 0xcc} + _, err := inbox.DecodeExecutingMessageLog(l) + require.ErrorIs(t, err, batching.ErrInvalidEvent) + }) +} diff --git a/op-supervisor/supervisor/backend/source/log_processor.go b/op-supervisor/supervisor/backend/source/log_processor.go index 3fa513588d30..3fd96476d41f 100644 --- a/op-supervisor/supervisor/backend/source/log_processor.go +++ b/op-supervisor/supervisor/backend/source/log_processor.go @@ -2,10 +2,12 @@ package source import ( "context" + "errors" "fmt" "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/source/contracts" + backendTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" supTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" "github.com/ethereum/go-ethereum/common" ethTypes "github.com/ethereum/go-ethereum/core/types" @@ -13,23 +15,46 @@ import ( ) type LogStorage interface { - AddLog(chain supTypes.ChainID, logHash types.TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32, execMsg *types.ExecutingMessage) error + AddLog(chain supTypes.ChainID, logHash backendTypes.TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32, execMsg *backendTypes.ExecutingMessage) error +} + +type EventDecoder interface { + DecodeExecutingMessageLog(log *ethTypes.Log) (backendTypes.ExecutingMessage, error) } type logProcessor struct { - chain supTypes.ChainID - logStore LogStorage + chain supTypes.ChainID + logStore LogStorage + eventDecoder EventDecoder } func newLogProcessor(chain supTypes.ChainID, logStore LogStorage) *logProcessor { - return &logProcessor{chain: chain, logStore: logStore} + return &logProcessor{ + chain: chain, + logStore: logStore, + eventDecoder: contracts.NewCrossL2Inbox(), + } } +// ProcessLogs processes logs from a block and stores them in the log storage +// for any logs that are related to executing messages, they are decoded and stored func (p *logProcessor) ProcessLogs(_ context.Context, block eth.L1BlockRef, rcpts ethTypes.Receipts) error { for _, rcpt := range rcpts { for _, l := range rcpt.Logs { - logHash := logToHash(l) - err := p.logStore.AddLog(p.chain, logHash, block.ID(), block.Time, uint32(l.Index), nil) + // log hash represents the hash of *this* log as a potentially initiating message + logHash := logToLogHash(l) + var execMsg *backendTypes.ExecutingMessage + msg, err := p.eventDecoder.DecodeExecutingMessageLog(l) + if err != nil && !errors.Is(err, contracts.ErrEventNotFound) { + return fmt.Errorf("failed to decode executing message log: %w", err) + } else if err == nil { + // if the log is an executing message, store the message + execMsg = &msg + } + // executing messages have multiple entries in the database + // they should start with the initiating message and then include the execution + fmt.Println("p.chain", p.chain) + err = p.logStore.AddLog(p.chain, logHash, block.ID(), block.Time, uint32(l.Index), execMsg) if err != nil { return fmt.Errorf("failed to add log %d from block %v: %w", l.Index, block.ID(), err) } @@ -38,15 +63,20 @@ func (p *logProcessor) ProcessLogs(_ context.Context, block eth.L1BlockRef, rcpt return nil } -func logToHash(l *ethTypes.Log) types.TruncatedHash { - payloadHash := crypto.Keccak256(logToPayload(l)) - msg := make([]byte, 0, 2*common.HashLength) - msg = append(msg, l.Address.Bytes()...) - msg = append(msg, payloadHash...) - return types.TruncateHash(crypto.Keccak256Hash(msg)) +// logToLogHash transforms a log into a hash that represents the log. +// it is the concatenation of the log's address and the hash of the log's payload, +// which is then hashed again. This is the hash that is stored in the log storage. +// The address is hashed into the payload hash to save space in the log storage, +// and because they represent paired data. +func logToLogHash(l *ethTypes.Log) backendTypes.TruncatedHash { + payloadHash := crypto.Keccak256(logToMessagePayload(l)) + return payloadHashToLogHash(common.Hash(payloadHash), l.Address) } -func logToPayload(l *ethTypes.Log) []byte { +// logToMessagePayload is the data that is hashed to get the logHash +// it is the concatenation of the log's topics and data +// the implementation is based on the interop messaging spec +func logToMessagePayload(l *ethTypes.Log) []byte { msg := make([]byte, 0) for _, topic := range l.Topics { msg = append(msg, topic.Bytes()...) @@ -54,3 +84,15 @@ func logToPayload(l *ethTypes.Log) []byte { msg = append(msg, l.Data...) return msg } + +// payloadHashToLogHash converts the payload hash to the log hash +// it is the concatenation of the log's address and the hash of the log's payload, +// which is then hashed. This is the hash that is stored in the log storage. +// The logHash can then be used to traverse from the executing message +// to the log the referenced initiating message. +func payloadHashToLogHash(payloadHash common.Hash, addr common.Address) backendTypes.TruncatedHash { + msg := make([]byte, 0, 2*common.HashLength) + msg = append(msg, addr.Bytes()...) + msg = append(msg, payloadHash.Bytes()...) + return backendTypes.TruncateHash(crypto.Keccak256Hash(msg)) +} diff --git a/op-supervisor/supervisor/backend/source/log_processor_test.go b/op-supervisor/supervisor/backend/source/log_processor_test.go index f83fea250784..5c65973ab4e4 100644 --- a/op-supervisor/supervisor/backend/source/log_processor_test.go +++ b/op-supervisor/supervisor/backend/source/log_processor_test.go @@ -6,7 +6,8 @@ import ( "testing" "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" + "github.com/ethereum-optimism/optimism/op-service/predeploys" + backendTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" supTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" "github.com/ethereum/go-ethereum/common" ethTypes "github.com/ethereum/go-ethereum/core/types" @@ -63,26 +64,66 @@ func TestLogProcessor(t *testing.T) { block: block1.ID(), timestamp: block1.Time, logIdx: 0, - logHash: logToHash(rcpts[0].Logs[0]), + logHash: logToLogHash(rcpts[0].Logs[0]), execMsg: nil, }, { block: block1.ID(), timestamp: block1.Time, logIdx: 0, - logHash: logToHash(rcpts[0].Logs[1]), + logHash: logToLogHash(rcpts[0].Logs[1]), execMsg: nil, }, { block: block1.ID(), timestamp: block1.Time, logIdx: 0, - logHash: logToHash(rcpts[1].Logs[0]), + logHash: logToLogHash(rcpts[1].Logs[0]), execMsg: nil, }, } require.Equal(t, expected, store.logs) }) + + t.Run("IncludeExecutingMessage", func(t *testing.T) { + rcpts := ethTypes.Receipts{ + { + Logs: []*ethTypes.Log{ + { + Address: predeploys.CrossL2InboxAddr, + Topics: []common.Hash{}, + Data: []byte{0xff}, + }, + }, + }, + } + execMsg := backendTypes.ExecutingMessage{ + Chain: 4, + BlockNum: 6, + LogIdx: 8, + Timestamp: 10, + Hash: backendTypes.TruncatedHash{0xaa}, + } + store := &stubLogStorage{} + processor := newLogProcessor(supTypes.ChainID{4}, store) + processor.eventDecoder = EventDecoderFn(func(l *ethTypes.Log) (backendTypes.ExecutingMessage, error) { + require.Equal(t, rcpts[0].Logs[0], l) + return execMsg, nil + }) + + err := processor.ProcessLogs(ctx, block1, rcpts) + require.NoError(t, err) + expected := []storedLog{ + { + block: block1.ID(), + timestamp: block1.Time, + logIdx: 0, + logHash: logToLogHash(rcpts[0].Logs[0]), + execMsg: &execMsg, + }, + } + require.Equal(t, expected, store.logs) + }) } func TestToLogHash(t *testing.T) { @@ -119,24 +160,24 @@ func TestToLogHash(t *testing.T) { func(l *ethTypes.Log) { l.Index = 98 }, func(l *ethTypes.Log) { l.Removed = true }, } - refHash := logToHash(mkLog()) + refHash := logToLogHash(mkLog()) // The log hash is stored in the database so test that it matches the actual value. - // If this changes compatibility with existing databases may be affected - expectedRefHash := types.TruncateHash(common.HexToHash("0x4e1dc08fddeb273275f787762cdfe945cf47bb4e80a1fabbc7a825801e81b73f")) + // If this changes, compatibility with existing databases may be affected + expectedRefHash := backendTypes.TruncateHash(common.HexToHash("0x4e1dc08fddeb273275f787762cdfe945cf47bb4e80a1fabbc7a825801e81b73f")) require.Equal(t, expectedRefHash, refHash, "reference hash changed, check that database compatibility is not broken") // Check that the hash is changed when any data it should include changes for i, mod := range relevantMods { l := mkLog() mod(l) - hash := logToHash(l) + hash := logToLogHash(l) require.NotEqualf(t, refHash, hash, "expected relevant modification %v to affect the hash but it did not", i) } // Check that the hash is not changed when any data it should not include changes for i, mod := range irrelevantMods { l := mkLog() mod(l) - hash := logToHash(l) + hash := logToLogHash(l) require.Equal(t, refHash, hash, "expected irrelevant modification %v to not affect the hash but it did", i) } } @@ -145,7 +186,7 @@ type stubLogStorage struct { logs []storedLog } -func (s *stubLogStorage) AddLog(chainID supTypes.ChainID, logHash types.TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32, execMsg *types.ExecutingMessage) error { +func (s *stubLogStorage) AddLog(chainID supTypes.ChainID, logHash backendTypes.TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32, execMsg *backendTypes.ExecutingMessage) error { if logProcessorChainID != chainID { return fmt.Errorf("chain id mismatch, expected %v but got %v", logProcessorChainID, chainID) } @@ -163,6 +204,12 @@ type storedLog struct { block eth.BlockID timestamp uint64 logIdx uint32 - logHash types.TruncatedHash - execMsg *types.ExecutingMessage + logHash backendTypes.TruncatedHash + execMsg *backendTypes.ExecutingMessage +} + +type EventDecoderFn func(*ethTypes.Log) (backendTypes.ExecutingMessage, error) + +func (f EventDecoderFn) DecodeExecutingMessageLog(log *ethTypes.Log) (backendTypes.ExecutingMessage, error) { + return f(log) } diff --git a/op-supervisor/supervisor/types/types.go b/op-supervisor/supervisor/types/types.go index 7e39628bdcf5..41d66611c20f 100644 --- a/op-supervisor/supervisor/types/types.go +++ b/op-supervisor/supervisor/types/types.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "math" "math/big" "github.com/holiman/uint256" @@ -17,7 +18,7 @@ type Identifier struct { BlockNumber uint64 LogIndex uint64 Timestamp uint64 - ChainID uint256.Int // flat, not a pointer, to make Identifier safe as map key + ChainID ChainID // flat, not a pointer, to make Identifier safe as map key } type identifierMarshaling struct { @@ -47,7 +48,7 @@ func (id *Identifier) UnmarshalJSON(input []byte) error { id.BlockNumber = uint64(dec.BlockNumber) id.LogIndex = uint64(dec.LogIndex) id.Timestamp = uint64(dec.Timestamp) - id.ChainID = (uint256.Int)(dec.ChainID) + id.ChainID = (ChainID)(dec.ChainID) return nil } @@ -102,3 +103,15 @@ func ChainIDFromUInt64(i uint64) ChainID { func (id ChainID) String() string { return ((*uint256.Int)(&id)).Dec() } + +func (id ChainID) ToUInt32() (uint32, error) { + v := (*uint256.Int)(&id) + if !v.IsUint64() { + return 0, fmt.Errorf("ChainID too large for uint32: %v", id) + } + v64 := v.Uint64() + if v64 > math.MaxUint32 { + return 0, fmt.Errorf("ChainID too large for uint32: %v", id) + } + return uint32(v64), nil +} diff --git a/op-supervisor/supervisor/types/types_test.go b/op-supervisor/supervisor/types/types_test.go index f089a25665fa..50c856bdc794 100644 --- a/op-supervisor/supervisor/types/types_test.go +++ b/op-supervisor/supervisor/types/types_test.go @@ -3,6 +3,7 @@ package types import ( "encoding/json" "math" + "math/big" "testing" "github.com/stretchr/testify/require" @@ -22,9 +23,8 @@ func FuzzRoundtripIdentifierJSONMarshal(f *testing.F) { BlockNumber: blockNumber, LogIndex: logIndex, Timestamp: timestamp, - ChainID: uint256.Int{}, + ChainID: ChainIDFromBig(new(big.Int).SetBytes(chainID)), } - id.ChainID.SetBytes(chainID) raw, err := json.Marshal(&id) require.NoError(t, err) diff --git a/op-wheel/cheat/cheat.go b/op-wheel/cheat/cheat.go index 61c8d74d09f3..26138dfc2875 100644 --- a/op-wheel/cheat/cheat.go +++ b/op-wheel/cheat/cheat.go @@ -10,6 +10,7 @@ import ( "path/filepath" "strings" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/holiman/uint256" "github.com/ethereum/go-ethereum/common" @@ -337,7 +338,7 @@ func StoragePatch(patch io.Reader, address common.Address) HeadFn { func SetBalance(addr common.Address, amount *big.Int) HeadFn { return func(_ *types.Header, headState *state.StateDB) error { - headState.SetBalance(addr, uint256.MustFromBig(amount)) + headState.SetBalance(addr, uint256.MustFromBig(amount), tracing.BalanceChangeUnspecified) return nil } } diff --git a/op-wheel/cmd/main.go b/op-wheel/cmd/main.go index 03d29c72c055..9da15270eda9 100644 --- a/op-wheel/cmd/main.go +++ b/op-wheel/cmd/main.go @@ -31,9 +31,9 @@ func main() { oplog.SetGlobalLogHandler(log.NewTerminalHandlerWithLevel(os.Stdout, lvl, true)) return nil } - app.Action = cli.ActionFunc(func(c *cli.Context) error { + app.Action = func(c *cli.Context) error { return errors.New("see 'cheat' and 'engine' subcommands and --help") - }) + } app.Writer = os.Stdout app.ErrWriter = os.Stderr app.Commands = []*cli.Command{ diff --git a/op-wheel/commands.go b/op-wheel/commands.go index 908e62275879..b7556cb1aea0 100644 --- a/op-wheel/commands.go +++ b/op-wheel/commands.go @@ -229,6 +229,7 @@ func rollupFromGethConfig(cfg *params.ChainConfig) *rollup.Config { RegolithTime: cfg.RegolithTime, CanyonTime: cfg.CanyonTime, EcotoneTime: cfg.EcotoneTime, + GraniteTime: cfg.GraniteTime, InteropTime: cfg.InteropTime, } } diff --git a/op-wheel/engine/engine.go b/op-wheel/engine/engine.go index f76fc753ac4b..bd834ec032ef 100644 --- a/op-wheel/engine/engine.go +++ b/op-wheel/engine/engine.go @@ -44,7 +44,7 @@ func getBlock(ctx context.Context, client client.RPC, method string, tag string) if err != nil { return nil, err } - return types.NewBlockWithHeader(&bl.Header).WithBody(bl.Transactions, nil), nil + return types.NewBlockWithHeader(&bl.Header).WithBody(types.Body{Transactions: bl.Transactions}), nil } func getHeader(ctx context.Context, client client.RPC, method string, tag string) (*types.Header, error) { diff --git a/ops-bedrock/beacon-data/config.yaml b/ops-bedrock/beacon-data/config.yaml index 0e2be808bbe5..0358aef31768 100644 --- a/ops-bedrock/beacon-data/config.yaml +++ b/ops-bedrock/beacon-data/config.yaml @@ -48,8 +48,7 @@ CAPELLA_FORK_VERSION: 0x03000001 CAPELLA_FORK_EPOCH: 0 # DENEB DENEB_FORK_VERSION: 0x04000001 -# TODO: activate Deneb at genesis -DENEB_FORK_EPOCH: 1 +DENEB_FORK_EPOCH: 0 # EIP6110 EIP6110_FORK_VERSION: 0x05000001 diff --git a/ops-bedrock/l1-generate-beacon-genesis.sh b/ops-bedrock/l1-generate-beacon-genesis.sh index 04ea8d111434..2fa3534659dd 100644 --- a/ops-bedrock/l1-generate-beacon-genesis.sh +++ b/ops-bedrock/l1-generate-beacon-genesis.sh @@ -4,7 +4,7 @@ set -eu echo "eth2-testnet-genesis path: $(which eth2-testnet-genesis)" -eth2-testnet-genesis capella \ +eth2-testnet-genesis deneb \ --config=./beacon-data/config.yaml \ --preset-phase0=minimal \ --preset-altair=minimal \ diff --git a/ops-bedrock/l1-geth-entrypoint.sh b/ops-bedrock/l1-geth-entrypoint.sh index 2c515e63a989..b6cf5350dfbb 100644 --- a/ops-bedrock/l1-geth-entrypoint.sh +++ b/ops-bedrock/l1-geth-entrypoint.sh @@ -14,6 +14,7 @@ if [ ! -d "$GETH_CHAINDATA_DIR" ]; then echo "Initializing genesis." geth --verbosity="$VERBOSITY" init \ --datadir="$GETH_DATA_DIR" \ + --state.scheme=hash \ "$GENESIS_FILE_PATH" else echo "$GETH_CHAINDATA_DIR exists." @@ -45,6 +46,7 @@ exec geth \ --authrpc.vhosts="*" \ --authrpc.jwtsecret=/config/jwt-secret.txt \ --gcmode=archive \ + --state.scheme=hash \ --metrics \ --metrics.addr=0.0.0.0 \ --metrics.port=6060 \ diff --git a/ops-bedrock/l1-geth.Dockerfile b/ops-bedrock/l1-geth.Dockerfile index 988d79bec023..90d1f69840f9 100644 --- a/ops-bedrock/l1-geth.Dockerfile +++ b/ops-bedrock/l1-geth.Dockerfile @@ -1,4 +1,4 @@ -FROM ethereum/client-go:v1.13.15 +FROM ethereum/client-go:v1.14.8 RUN apk add --no-cache jq bash diff --git a/ops-bedrock/l2-op-geth-entrypoint.sh b/ops-bedrock/l2-op-geth-entrypoint.sh index 4325a75f50d0..f760a87f1875 100644 --- a/ops-bedrock/l2-op-geth-entrypoint.sh +++ b/ops-bedrock/l2-op-geth-entrypoint.sh @@ -14,6 +14,7 @@ if [ ! -d "$GETH_CHAINDATA_DIR" ]; then echo "Initializing genesis." geth --verbosity="$VERBOSITY" init \ --datadir="$GETH_DATA_DIR" \ + --state.scheme=hash \ "$GENESIS_FILE_PATH" else echo "$GETH_CHAINDATA_DIR exists." @@ -46,6 +47,7 @@ exec geth \ --authrpc.vhosts="*" \ --authrpc.jwtsecret=/config/jwt-secret.txt \ --gcmode=archive \ + --state.scheme=hash \ --metrics \ --metrics.addr=0.0.0.0 \ --metrics.port=6060 \ diff --git a/ops/docker/Dockerfile.packages b/ops/docker/Dockerfile.packages index 76599b4e9032..598f40b3e3bb 100644 --- a/ops/docker/Dockerfile.packages +++ b/ops/docker/Dockerfile.packages @@ -1,92 +1,52 @@ -# This Dockerfile builds all the dependencies needed by the monorepo, and should -# be used to build any of the follow-on services -# - -# Stage 0 (named `manifests`) collects -# dependency manifest files (`package.json` and `pnpm-lock.yaml`) which are then -# used by stage 1 to install these dependencies -# development. The only reason we need a separate stage just for collecting the -# dependency manifests is that Docker's `COPY` command still does not allow -# copying based on a glob pattern (see this GitHub issue for more details -# https://github.com/moby/moby/issues/15858). Being able to copy only manifests -# into stage 1 (the `COPY --from=manifests` statement) is important to maximize -# Docker build cache hit rate. `alpine` is chosen as the base image for the -# first stage because it's the smallest image that have access to the `cp -# --parents -t` command (by installing the `coreutils` package). -FROM alpine:3.16 as manifests -RUN apk add coreutils - -WORKDIR /tmp -COPY pnpm-lock.yaml pnpm-workspace.yaml .nvmrc package.json ./src/ -COPY packages src/packages/ -RUN mkdir manifests && \ - cd src && \ - # copy package.json recursively - find . -name 'package.json' | xargs cp --parents -t ../manifests/ && \ - # pnpm-lock.yaml - cp pnpm-lock.yaml ../manifests/ && \ - # pnpm-workspace.yaml - cp pnpm-workspace.yaml ../manifests/ && \ - # .nvmrc - cp .nvmrc ../manifests/ +# This Dockerfile builds all the dependencies needed by the smart-contracts, excluding Go and Python. FROM us-docker.pkg.dev/oplabs-tools-artifacts/images/ci-builder:latest as foundry -# bullseye-slim is debian based -# we use it rather than alpine because it's not much -# bigger and alpine is often missing packages for node applications -# alpine is not officially supported by node.js -FROM node:20.8.1-bullseye-slim as base + +# Historically the contracts-bedrock was on the node image based on Debian 11 (bullseye), +# for Node / PNPM compatibility reasons. +# We no longer use Node JS, but continue to use the same Debian version for compatibility. +FROM debian:bullseye-slim as base # Base: install deps RUN apt-get update && apt-get install -y \ curl \ jq \ - python3 \ ca-certificates \ git \ - g++ \ make \ - gcc \ - musl-dev \ bash \ - # the following 4 deps are needed for node-hid - # which is a deep sub dependency of ethers to install - # correctly - pkg-config \ - libusb-1.0-0-dev \ - libudev-dev \ --no-install-recommends COPY /ops/docker/oplabs.crt /usr/local/share/ca-certificates/oplabs.crt RUN chmod 644 /usr/local/share/ca-certificates/oplabs.crt \ && update-ca-certificates -RUN npm install pnpm --global +# Note: "just" is only available on Debian 13. Instead, pull it from the foundry image. +COPY --from=foundry /usr/local/bin/just /usr/local/bin/just COPY --from=foundry /usr/local/bin/forge /usr/local/bin/forge COPY --from=foundry /usr/local/bin/cast /usr/local/bin/cast WORKDIR /opt/optimism -# Copy manifest files into the image in -# preparation for `pnpm install`. -COPY --from=manifests /tmp/manifests ./ -COPY *.json ./ - -RUN pnpm install --frozen-lockfile - +COPY ./versions.json ./versions.json COPY ./packages ./packages COPY .git/ ./.git COPY .gitmodules ./.gitmodules RUN git submodule update --init --recursive +# Not to be confused with OP, this is a OnePassword CLI tool. COPY --from=1password/op:2 /usr/local/bin/op /usr/local/bin/op -RUN pnpm build - -ENTRYPOINT ["pnpm", "run"] +# prebuild the smart-contracts for the convenience of the user +RUN cd packages/contracts-bedrock && just build FROM base as contracts-bedrock WORKDIR /opt/optimism/packages/contracts-bedrock + +# Set "just" as entrypoint, so the default args (the Dockerfile CMD) +# are passed in to it. This was previously "pnpm run" + "deploy". +ENTRYPOINT ["just"] + CMD ["deploy"] diff --git a/ops/docker/ci-builder/Dockerfile b/ops/docker/ci-builder/Dockerfile index 5946b1784829..3c1956987b55 100644 --- a/ops/docker/ci-builder/Dockerfile +++ b/ops/docker/ci-builder/Dockerfile @@ -92,33 +92,25 @@ COPY --from=rust-build /root/.foundry/bin/anvil /usr/local/bin/anvil COPY --from=rust-build /root/.cargo/bin/svm /usr/local/bin/svm COPY --from=rust-build /root/.cargo/bin/just /usr/local/bin/just -COPY .nvmrc .nvmrc COPY ./versions.json ./versions.json -ENV NODE_MAJOR=20 - RUN /bin/sh -c set -eux; \ apt-get update; \ apt-get install -y --no-install-recommends bash curl openssh-client git build-essential ca-certificates jq gnupg binutils-mips-linux-gnu python3 python3-pip python3-setuptools; \ mkdir -p /etc/apt/keyrings; \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg; \ - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list; \ curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg; \ chmod a+r /etc/apt/keyrings/docker.gpg; \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null; \ apt-get update; \ - apt-get install -y nodejs docker-ce-cli; \ + apt-get install -y docker-ce-cli; \ ln -s /usr/local/go/bin/gofmt /usr/local/bin/gofmt; \ pip install capstone pyelftools; \ curl -fLSs https://raw.githubusercontent.com/CircleCI-Public/circleci-cli/master/install.sh | bash; \ apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ rm -rf /var/lib/apt/lists/*; \ - rm -rf /root/.cache/pip; \ - rm -rf /root/.cache/npm; - -RUN npm i -g pnpm && npm i -g yarn@1 && pnpm --version && yarn --version + rm -rf /root/.cache/pip; -RUN svm install 0.5.17 && \ +RUN svm install 0.8.25 && \ svm install 0.8.15 && \ svm install 0.8.19 diff --git a/package.json b/package.json deleted file mode 100644 index 1cfe0a2d4377..000000000000 --- a/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "optimism", - "version": "1.0.0", - "author": "OP Labs PBC", - "license": "MIT", - "scripts": { - "clean": "rm -rf node_modules packages/**/node_modules", - "build": "cd packages/contracts-bedrock && pnpm build", - "test": "cd packages/contracts-bedrock && pnpm test", - "issues": "./ops/scripts/todo-checker.sh", - "lint:shellcheck": "find . -type f -name '*.sh' -not -path '*/node_modules/*' -not -path './packages/contracts-bedrock/lib/*' -not -path './packages/contracts-bedrock/kout*/*' -exec sh -c 'echo \"Checking $1\"; shellcheck \"$1\"' _ {} \\;", - "install:foundry": "curl -L https://foundry.paradigm.xyz | bash && pnpm update:foundry", - "update:foundry": "bash ./ops/scripts/install-foundry.sh", - "check:foundry": "bash ./packages/contracts-bedrock/scripts/checks/check-foundry-install.sh", - "install:kontrol": "curl -L https://kframework.org/install | bash && pnpm update:kontrol", - "update:kontrol": "kup install kontrol --version v$(jq -r .kontrol < versions.json)", - "install:abigen": "go install github.com/ethereum/go-ethereum/cmd/abigen@$(jq -r .abigen < versions.json)", - "print:abigen": "abigen --version | sed -e 's/[^0-9]/ /g' -e 's/^ *//g' -e 's/ *$//g' -e 's/ /./g' -e 's/^/v/'", - "check:abigen": "[[ $(pnpm -s print:abigen) = $(cat versions.json | jq -r '.abigen') ]] && echo '✓ abigen versions match' || (echo '✗ abigen version mismatch. Run `pnpm upgrade:abigen` to upgrade.' && exit 1)", - "upgrade:abigen": "jq '.abigen = $v' --arg v $(pnpm -s print:abigen) <<<$(cat versions.json) > versions.json", - "install:slither": "pip3 install slither-analyzer==$(jq -r .slither < versions.json)", - "print:slither": "slither --version", - "check:slither": "[[ $(pnpm -s print:slither) = $(jq -r .slither < versions.json) ]] && echo '✓ slither versions match' || (echo '✗ slither version mismatch. Run `pnpm upgrade:slither` to upgrade.' && exit 1)", - "upgrade:slither": "jq '.slither = $v' --arg v $(pnpm -s print:slither) <<<$(cat versions.json) > versions.json" - } -} diff --git a/packages/contracts-bedrock/.eslintignore b/packages/contracts-bedrock/.eslintignore deleted file mode 100644 index d8eb5b7a65a2..000000000000 --- a/packages/contracts-bedrock/.eslintignore +++ /dev/null @@ -1,9 +0,0 @@ -# Deps and test files -lib - -# build output -artifacts -forge-artifacts -cache -coverage* -deployments diff --git a/packages/contracts-bedrock/.eslintrc.js b/packages/contracts-bedrock/.eslintrc.js deleted file mode 100644 index 1895c21485d1..000000000000 --- a/packages/contracts-bedrock/.eslintrc.js +++ /dev/null @@ -1,185 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es6: true, - }, - ignorePatterns: ['dist', 'coverage'], - extends: ['plugin:prettier/recommended'], - parser: '@babel/eslint-parser', - parserOptions: { - es6: true, - ecmaVersion: 6, - sourceType: 'module', - requireConfigFile: false, - }, - plugins: [ - 'eslint-plugin-import', - 'eslint-plugin-jsdoc', - 'eslint-plugin-prefer-arrow', - '@typescript-eslint', - ], - overrides: [ - { - files: ['**/*.ts'], - parser: '@typescript-eslint/parser', - parserOptions: { - project: './packages/**/tsconfig.json', - sourceType: 'module', - allowAutomaticSingleRunInference: true, - }, - rules: { - '@typescript-eslint/adjacent-overload-signatures': 'error', - '@typescript-eslint/array-type': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/consistent-type-assertions': 'error', - '@typescript-eslint/dot-notation': 'off', - '@typescript-eslint/indent': 'off', - '@typescript-eslint/member-delimiter-style': [ - 'off', - { - multiline: { - delimiter: 'none', - requireLast: true, - }, - singleline: { - delimiter: 'semi', - requireLast: false, - }, - }, - ], - '@typescript-eslint/member-ordering': 'off', - '@typescript-eslint/naming-convention': 'off', - '@typescript-eslint/no-empty-function': 'error', - '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-misused-new': 'error', - '@typescript-eslint/no-namespace': 'error', - '@typescript-eslint/no-parameter-properties': 'off', - '@typescript-eslint/no-shadow': [ - 'error', - { - hoist: 'all', - }, - ], - '@typescript-eslint/no-this-alias': 'error', - '@typescript-eslint/no-unused-expressions': 'off', - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/no-var-requires': 'error', - '@typescript-eslint/prefer-for-of': 'error', - '@typescript-eslint/prefer-function-type': 'error', - '@typescript-eslint/prefer-namespace-keyword': 'error', - '@typescript-eslint/quotes': 'off', - '@typescript-eslint/semi': ['off', null], - '@typescript-eslint/triple-slash-reference': [ - 'error', - { - path: 'always', - types: 'prefer-import', - lib: 'always', - }, - ], - '@typescript-eslint/type-annotation-spacing': 'off', - '@typescript-eslint/unified-signatures': 'error', - '@typescript-eslint/no-unused-vars': 'error', - }, - }, - ], - rules: { - 'prettier/prettier': 'warn', - 'arrow-parens': ['off', 'always'], - 'brace-style': ['off', 'off'], - 'comma-dangle': 'off', - complexity: 'off', - 'constructor-super': 'error', - curly: 'error', - 'dot-notation': 'off', - 'eol-last': 'off', - eqeqeq: ['error', 'smart'], - 'guard-for-in': 'error', - 'id-blacklist': 'off', - 'id-match': 'off', - 'import/no-extraneous-dependencies': ['error'], - 'import/no-internal-modules': 'off', - 'import/order': [ - 'error', - { - groups: ['builtin', 'external', 'internal'], - 'newlines-between': 'always', - }, - ], - indent: 'off', - 'jsdoc/check-alignment': 'error', - 'jsdoc/check-indentation': 'error', - 'linebreak-style': 'off', - 'max-classes-per-file': 'off', - 'max-len': 'off', - 'new-parens': 'off', - 'newline-per-chained-call': 'off', - 'no-bitwise': 'off', - 'no-caller': 'error', - 'no-cond-assign': 'error', - 'no-console': 'off', - 'no-debugger': 'error', - 'no-duplicate-case': 'error', - 'no-duplicate-imports': 'error', - 'no-empty': 'error', - 'no-eval': 'error', - 'no-extra-bind': 'error', - 'no-extra-semi': 'off', - 'no-fallthrough': 'off', - 'no-invalid-this': 'off', - 'no-irregular-whitespace': 'off', - 'no-multiple-empty-lines': 'off', - 'no-new-func': 'error', - 'no-new-wrappers': 'error', - 'no-redeclare': 'error', - 'no-return-await': 'error', - 'no-sequences': 'error', - 'no-sparse-arrays': 'error', - 'no-template-curly-in-string': 'error', - 'no-throw-literal': 'error', - 'no-trailing-spaces': 'off', - 'no-undef-init': 'error', - 'no-underscore-dangle': 'off', - 'no-unsafe-finally': 'error', - 'no-unused-expressions': 'off', - 'no-unused-labels': 'error', - 'no-use-before-define': 'off', - 'no-var': 'error', - 'object-shorthand': 'error', - 'one-var': ['error', 'never'], - 'padded-blocks': [ - 'off', - { - blocks: 'never', - }, - { - allowSingleLineBlocks: true, - }, - ], - 'prefer-arrow/prefer-arrow-functions': 'error', - 'prefer-const': 'error', - 'prefer-object-spread': 'error', - 'quote-props': 'off', - quotes: 'off', - radix: 'error', - 'react/jsx-curly-spacing': 'off', - 'react/jsx-equals-spacing': 'off', - 'react/jsx-tag-spacing': [ - 'off', - { - afterOpening: 'allow', - closingSlash: 'allow', - }, - ], - 'react/jsx-wrap-multilines': 'off', - semi: 'off', - 'space-before-blocks': 'error', - 'space-before-function-paren': 'off', - 'space-in-parens': ['off', 'never'], - 'unicorn/prefer-ternary': 'off', - 'use-isnan': 'error', - 'valid-typeof': 'off', - }, -} diff --git a/packages/contracts-bedrock/.prettierrc.js b/packages/contracts-bedrock/.prettierrc.js deleted file mode 100644 index 7b70850614ea..000000000000 --- a/packages/contracts-bedrock/.prettierrc.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - $schema: 'http://json.schemastore.org/prettierrc', - plugins: [], - trailingComma: 'es5', - tabWidth: 2, - semi: false, - singleQuote: true, - arrowParens: 'always', - overrides: [], -} diff --git a/packages/contracts-bedrock/CONTRIBUTING.md b/packages/contracts-bedrock/CONTRIBUTING.md index 63c579dedf2f..02a5bc8dad4c 100644 --- a/packages/contracts-bedrock/CONTRIBUTING.md +++ b/packages/contracts-bedrock/CONTRIBUTING.md @@ -51,30 +51,30 @@ Enhancement suggestions are tracked as [GitHub issues](/issues). The best place to begin contributing is by looking through the issues with the `good first issue` label. These are issues that are relatively easy to implement and are a great way to get familiar with the codebase. Optimism's smart contracts are written in Solidity and we use [foundry](https://github.com/foundry-rs/foundry) as our development framework. To get started, you'll need to install several dependencies: -1. [pnpm](https://pnpm.io) - 1. Make sure to `pnpm install` +1. [just](https://github.com/casey/just) + 1. Make sure to `just install` 1. [foundry](https://getfoundry.sh) 1. Foundry is built with [rust](https://www.rust-lang.org/tools/install), and this project uses a pinned version of foundry. Install the rust toolchain with `rustup`. - 1. Make sure to install the version of foundry used by `ci-builder`, defined in the `versions.json` file in the root of this repo under the `foundry` key. Once you have `foundryup` installed, there is a helper to do this: `pnpm install:foundry` + 1. Make sure to install the version of foundry used by `ci-builder`, defined in the `versions.json` file in the root of this repo under the `foundry` key. Once you have `foundryup` installed, there is a helper to do this: `just install-foundry` 1. [golang](https://golang.org/doc/install) 1. [python](https://www.python.org/downloads/) Our [Style Guide](STYLE_GUIDE.md) contains information about the project structure, syntax preferences, naming conventions, and more. Please take a look at it before submitting a PR, and let us know if you spot inconsistencies! -Once you've read the styleguide and are ready to work on your PR, there are a plethora of useful `pnpm` scripts to know about that will help you with development: -1. `pnpm build` Builds the smart contracts. -1. `pnpm test` Runs the full `forge` test suite. -1 `pnpm gas-snapshot` Generates the gas snapshot for the smart contracts. -1. `pnpm semver-lock` Generates the semver lockfile. -1. `pnpm storage-snapshot` Generates the storage lockfile. -1. `pnpm autogen:invariant-docs` Generates the invariant test documentation. -1. `pnpm clean` Removes all build artifacts for `forge` and `go` compilations. -1. `pnpm validate-spacers` Validates the positions of the storage slot spacers. -1. `pnpm validate-deploy-configs` Validates the deployment configurations in `deploy-config` -1. `pnpm slither` Runs the slither static analysis tool on the smart contracts. -1. `pnpm lint` Runs the linter on the smart contracts and scripts. -1. `pnpm pre-pr` Runs most checks, generators, and linters prior to a PR. For most PRs, this is sufficient to pass CI if everything is in order. -1. `pnpm pre-pr:full` Runs all checks, generators, and linters prior to a PR. +Once you've read the style guide and are ready to work on your PR, there are a plethora of useful `just` scripts to know about that will help you with development. +You can run `just -l` to list them all, some of the key ones are: +1. `just build` Builds the smart contracts. +1. `just test` Runs the full `forge` test suite. +1 `just gas-snapshot` Generates the gas snapshot for the smart contracts. +1. `just semver-lock` Generates the semver lockfile. +1. `just snapshots` Generates the storage and ABI snapshots. +1. `just autogen-invariant-docs` Generates the invariant test documentation. +1. `just clean` Removes all build artifacts for `forge` and `go` compilations. +1. `just validate-spacers` Validates the positions of the storage slot spacers. +1. `just validate-deploy-configs` Validates the deployment configurations in `deploy-config` +1. `just lint` Runs the linter on the smart contracts and scripts. +1. `just pre-pr` Runs most checks, generators, and linters prior to a PR. For most PRs, this is sufficient to pass CI if everything is in order. +1. `just pre-pr-full` Runs all checks, generators, and linters prior to a PR. ### Improving The Documentation @@ -82,7 +82,7 @@ Documentation improvements are more than welcome! If you see a typo or feel that ### Deploying on Devnet -To deploy the smart contracts on a local devnet, run `make devnet-up` in the monorepo root. For more information on the local devnet, see [devnet.md](../../specs/meta/devnet.md). +To deploy the smart contracts on a local devnet, run `make devnet-up` in the monorepo root. For more information on the local devnet, see [dev-node](https://docs.optimism.io/chain/testing/dev-node). ### Tools @@ -90,11 +90,11 @@ To deploy the smart contracts on a local devnet, run `make devnet-up` in the mon In order to make sure that we don't accidentally overwrite storage slots, contract storage layouts are checked to make sure spacing is correct. -This uses the `.storage-layout` file to check contract spacing. Run `pnpm validate-spacers` to check the spacing of all contracts. +This uses the `snapshots/storageLayout` directory to check contract spacing. Run `just validate-spacers` to check the spacing of all contracts. #### Gas Snapshots -We use forge's `gas-snapshot` subcommand to produce a gas snapshot for most tests within our suite. CI will check that the gas snapshot has been updated properly when it runs, so make sure to run `pnpm gas-snapshot`! +We use forge's `gas-snapshot` subcommand to produce a gas snapshot for tests in `Benchmark.t.sol`. CI will check that the gas snapshot has been updated properly when it runs, so make sure to run `just gas-snapshot`! #### Semver Locking @@ -102,4 +102,4 @@ Many of our smart contracts are semantically versioned. To make sure that change #### Storage Snapshots -Due to the many proxied contracts in Optimism's protocol, we automate tracking the diff to storage layouts of the contracts in the project. This is to ensure that we don't break a proxy by upgrading its implementation to a contract with a different storage layout. To generate the storage lockfile, run `pnpm storage-snapshot`. +Due to the many proxied contracts in Optimism's protocol, we automate tracking the diff to storage layouts of the contracts in the project. This is to ensure that we don't break a proxy by upgrading its implementation to a contract with a different storage layout. To generate the storage lockfile, run `just snapshots`. diff --git a/packages/contracts-bedrock/README.md b/packages/contracts-bedrock/README.md index 5957a3c49a8a..132042e8dc3e 100644 --- a/packages/contracts-bedrock/README.md +++ b/packages/contracts-bedrock/README.md @@ -55,51 +55,66 @@ graph LR L1StandardBridge(L1StandardBridge) L1ERC721Bridge(L1ERC721Bridge) L1CrossDomainMessenger(L1CrossDomainMessenger) - L2OutputOracle(L2OutputOracle) OptimismPortal(OptimismPortal) SuperchainConfig(SuperchainConfig) SystemConfig(SystemConfig) + DisputeGameFactory(DisputeGameFactory) + FaultDisputeGame(FaultDisputeGame) + AnchorStateRegistry(AnchorStateRegistry) + DelayedWETH(DelayedWETH) end - subgraph "User Interactions" + subgraph "User Interactions (Permissionless)" Users(Users) + Challengers(Challengers) end subgraph "System Interactions" - Batcher(Batcher) - Proposer(Proposer) Guardian(Guardian) + Batcher(Batcher) end subgraph "Layer 2 Interactions" L2Nodes(Layer 2 Nodes) end + L2Nodes -.->|fetch transaction batches| BatchDataEOA + L2Nodes -.->|fetch deposit events| OptimismPortal + Batcher -->|publish transaction batches| BatchDataEOA - Proposer -->|propose state outputs| L2OutputOracle - Guardian -->|remove invalid state outputs| L2OutputOracle - ExternalERC20 <-->|mint/burn/transfer| L1StandardBridge - ExternalERC721 <-->|mint/burn/transfer| L1ERC721Bridge + ExternalERC20 <-->|mint/burn/transfer tokens| L1StandardBridge + ExternalERC721 <-->|mint/burn/transfer tokens| L1ERC721Bridge - L1StandardBridge <-->|send/receive message| L1CrossDomainMessenger - L1ERC721Bridge <-->|send/receive message| L1CrossDomainMessenger - L1CrossDomainMessenger <-->|package/send/receive message| OptimismPortal + L1StandardBridge <-->|send/receive messages| L1CrossDomainMessenger L1StandardBridge -.->|query pause state| SuperchainConfig + + L1ERC721Bridge <-->|send/receive messages| L1CrossDomainMessenger L1ERC721Bridge -.->|query pause state| SuperchainConfig + + L1CrossDomainMessenger <-->|send/receive messages| OptimismPortal L1CrossDomainMessenger -.->|query pause state| SuperchainConfig - OptimismPortal -.->|query pause state| SuperchainConfig + OptimismPortal -.->|query pause state| SuperchainConfig OptimismPortal -.->|query config| SystemConfig - OptimismPortal -.->|query proposed states| L2OutputOracle + OptimismPortal -.->|query state proposals| DisputeGameFactory - Users <-->|deposit/withdraw ETH/ERC20| L1StandardBridge - Users <-->|deposit/withdraw ERC721| L1ERC721Bridge - Users -->|prove/execute withdrawal transactions| OptimismPortal + DisputeGameFactory -->|generate instances| FaultDisputeGame - L2Nodes -.->|fetch transaction batches| BatchDataEOA - L2Nodes -.->|verify output roots| L2OutputOracle - L2Nodes -.->|fetch deposit events| OptimismPortal + FaultDisputeGame -->|store bonds| DelayedWETH + FaultDisputeGame -->|query/update anchor states| AnchorStateRegistry + + Users <-->|deposit/withdraw ETH/ERC20s| L1StandardBridge + Users <-->|deposit/withdraw ERC721s| L1ERC721Bridge + Users -->|prove/execute withdrawals| OptimismPortal + + Challengers -->|propose output roots| DisputeGameFactory + Challengers -->|verify/challenge/defend proposals| FaultDisputeGame + + Guardian -->|pause/unpause| SuperchainConfig + Guardian -->|safety net actions| OptimismPortal + Guardian -->|safety net actions| DisputeGameFactory + Guardian -->|safety net actions| DelayedWETH classDef extContracts stroke:#ff9,stroke-width:2px; classDef l1Contracts stroke:#bbf,stroke-width:2px; @@ -108,10 +123,10 @@ graph LR classDef systemUser stroke:#f9a,stroke-width:2px; classDef l2Nodes stroke:#333,stroke-width:2px class ExternalERC20,ExternalERC721 extContracts; - class L1StandardBridge,L1ERC721Bridge,L1CrossDomainMessenger,L2OutputOracle,OptimismPortal,SuperchainConfig,SystemConfig l1Contracts; + class L1StandardBridge,L1ERC721Bridge,L1CrossDomainMessenger,OptimismPortal,SuperchainConfig,SystemConfig,DisputeGameFactory,FaultDisputeGame,DelayedWETH,AnchorStateRegistry l1Contracts; class BatchDataEOA l1EOA; - class Users userInt; - class Batcher,Proposer,Guardian systemUser; + class Users,Challengers userInt; + class Batcher,Guardian systemUser; class L2Nodes l2Nodes; ``` @@ -236,7 +251,7 @@ graph LR OP Stack smart contracts are published to NPM and can be installed via: ```sh -npm install @eth-optimism/contracts-bedrock. +npm install @eth-optimism/contracts-bedrock ``` Refer to the [Optimism Developer Docs](https://docs.optimism.io/builders/dapp-developers/contracts/system-contracts#using-system-contracts-in-solidity) for additional information about how to use this package. @@ -321,8 +336,8 @@ Use the env var `DEPLOY_CONFIG_PATH` to use a particular deploy config file at r The script will read the latest active fork from the deploy config and the L2 genesis allocs generated will be compatible with this fork. The automatically detected fork can be overwritten by setting the environment variable -`FORK` either to the lower-case fork name (currently `delta`, `ecotone`, or `fjord`) or to `latest`, which will select -the latest fork available (currently `fjord`). +`FORK` either to the lower-case fork name (currently `delta`, `ecotone`, `fjord`, or `granite`) or to `latest`, which +will select the latest fork available (currently `granite`). By default, the script will dump the L2 genesis allocs of the detected or selected fork only, to the file at `STATE_DUMP_PATH`. The optional environment variable `OUTPUT_MODE` allows to modify this behavior by setting it to one of the following values: @@ -361,7 +376,7 @@ to reduce the overhead of maintaining multiple ways to set up the state as well The L1 contract addresses are held in `deployments/hardhat/.deploy` and the L2 test state is held in a `.testdata` directory. The L1 addresses are used to create the L2 state and it is possible for stale addresses to be pulled into the L2 state, causing tests to fail. Stale addresses may happen if the order of the L1 deployments happen differently -since some contracts are deployed using `CREATE`. Run `pnpm clean` and rerun the tests if they are failing for an unknown reason. +since some contracts are deployed using `CREATE`. Run `just clean` and rerun the tests if they are failing for an unknown reason. ### Static Analysis diff --git a/packages/contracts-bedrock/STYLE_GUIDE.md b/packages/contracts-bedrock/STYLE_GUIDE.md index cbe3debb1b3a..1d8b84818b9b 100644 --- a/packages/contracts-bedrock/STYLE_GUIDE.md +++ b/packages/contracts-bedrock/STYLE_GUIDE.md @@ -104,9 +104,15 @@ Unless explicitly discussed otherwise, you MUST include the following basic upgr pattern for each new implementation contract: 1. Extend OpenZeppelin's `Initializable` base contract. -2. Include a `uint8 public constant VERSION = X` at the TOP of your contract. -3. Include a function `initialize` with the modifier `reinitializer(VERSION)`. -4. In the `constructor`, set any `immutable` variables and call the `initialize` function for setting mutables. +2. Include a function `initialize` with the modifier `initializer()`. +3. In the `constructor`: + 1. Call `_disableInitializers()` to ensure the implementation contract cannot be initialized. + 2. Set any immutables. However, we generally prefer to not use immutables to ensure the same implementation contracts can be used for all chains, and to allow chain operators to dynamically configure parameters + +Because `reinitializer(uint64 version)` is not used, the process for upgrading the implementation is to atomically: +1. Upgrade the implementation to the `StorageSetter` contract. +2. Use that to set the initialized slot (typically slot 0) to zero. +3. Upgrade the implementation to the desired new implementation and `initialize` it. ### Versioning diff --git a/packages/contracts-bedrock/deploy-config/devnetL1-template.json b/packages/contracts-bedrock/deploy-config/devnetL1-template.json index 12694499cb46..c56fd92a3a3f 100644 --- a/packages/contracts-bedrock/deploy-config/devnetL1-template.json +++ b/packages/contracts-bedrock/deploy-config/devnetL1-template.json @@ -46,8 +46,9 @@ "l2GenesisRegolithTimeOffset": "0x0", "l2GenesisCanyonTimeOffset": "0x0", "l2GenesisDeltaTimeOffset": "0x0", - "l2GenesisEcotoneTimeOffset": "0x40", - "l1CancunTimeOffset": "0x30", + "l2GenesisEcotoneTimeOffset": "0x0", + "l2GenesisFjordTimeOffset": "0x0", + "l1CancunTimeOffset": "0x0", "systemConfigStartBlock": 0, "requiredProtocolVersion": "0x0000000000000000000000000000000000000000000000000000000000000000", "recommendedProtocolVersion": "0x0000000000000000000000000000000000000000000000000000000000000000", diff --git a/packages/contracts-bedrock/deploy-config/sepolia-devnet-0.json b/packages/contracts-bedrock/deploy-config/sepolia-devnet-0.json index afb31e6b86ad..7dd5df431cd1 100644 --- a/packages/contracts-bedrock/deploy-config/sepolia-devnet-0.json +++ b/packages/contracts-bedrock/deploy-config/sepolia-devnet-0.json @@ -66,7 +66,7 @@ "eip1559Denominator": 250, "eip1559DenominatorCanyon": 250, "systemConfigStartBlock": 4071248, - "faultGameAbsolutePrestate": "0x03e69d3de5155f4a80da99dd534561cbddd4f9dd56c9ecc704d6886625711d2b", + "faultGameAbsolutePrestate": "0x0385c3f8ee78491001d92b90b07d0cf387b7b52ab9b83b4d87c994e92cf823ba", "faultGameMaxDepth": 73, "faultGameClockExtension": 3600, "faultGameMaxClockDuration": 14400, diff --git a/packages/contracts-bedrock/foundry.toml b/packages/contracts-bedrock/foundry.toml index 4b1dbdeba780..9edf752f983d 100644 --- a/packages/contracts-bedrock/foundry.toml +++ b/packages/contracts-bedrock/foundry.toml @@ -13,6 +13,7 @@ optimizer_runs = 999999 remappings = [ '@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts', '@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts', + '@openzeppelin/contracts-v5/=lib/openzeppelin-contracts-v5/contracts', '@rari-capital/solmate/=lib/solmate', '@lib-keccak/=lib/lib-keccak/contracts/lib', '@solady/=lib/solady/src', @@ -27,7 +28,14 @@ bytecode_hash = 'none' build_info_path = 'artifacts/build-info' ast = true evm_version = "cancun" -ignored_error_codes = ["transient-storage", "code-size", "init-code-size"] +# 5159 error code is selfdestruct error code +ignored_error_codes = ["transient-storage", "code-size", "init-code-size", 5159] + +# We set the gas limit to max int64 to avoid running out of gas during testing, since the default +# gas limit is 1B and some of our tests require more gas than that, such as `test_callWithMinGas_noLeakageLow_succeeds`. +# We use this gas limit since it was the default gas limit prior to https://github.com/foundry-rs/foundry/pull/8274. +# Due to toml-rs limitations, if you increase the gas limit above this value it must be a string. +gas_limit = 9223372036854775807 # Test / Script Runner Settings ffi = true diff --git a/packages/contracts-bedrock/invariant-docs/OptimismSuperchainERC20.md b/packages/contracts-bedrock/invariant-docs/OptimismSuperchainERC20.md new file mode 100644 index 000000000000..0e3150624da5 --- /dev/null +++ b/packages/contracts-bedrock/invariant-docs/OptimismSuperchainERC20.md @@ -0,0 +1,10 @@ +# `OptimismSuperchainERC20` Invariants + +## Calls to sendERC20 should always succeed as long as the actor has enough balance. Actor's balance should also not increase out of nowhere but instead should decrease by the amount sent. +**Test:** [`OptimismSuperchainERC20.t.sol#L194`](../test/invariants/OptimismSuperchainERC20.t.sol#L194) + + + +## Calls to relayERC20 should always succeeds when a message is received from another chain. Actor's balance should only increase by the amount relayed. +**Test:** [`OptimismSuperchainERC20.t.sol#L212`](../test/invariants/OptimismSuperchainERC20.t.sol#L212) + diff --git a/packages/contracts-bedrock/invariant-docs/README.md b/packages/contracts-bedrock/invariant-docs/README.md index 86f2cd4b38f8..cfa87fb4c167 100644 --- a/packages/contracts-bedrock/invariant-docs/README.md +++ b/packages/contracts-bedrock/invariant-docs/README.md @@ -18,6 +18,7 @@ This directory contains documentation for all defined invariant tests within `co - [L2OutputOracle](./L2OutputOracle.md) - [OptimismPortal](./OptimismPortal.md) - [OptimismPortal2](./OptimismPortal2.md) +- [OptimismSuperchainERC20](./OptimismSuperchainERC20.md) - [ResourceMetering](./ResourceMetering.md) - [SafeCall](./SafeCall.md) - [SuperchainWETH](./SuperchainWETH.md) @@ -26,7 +27,7 @@ This directory contains documentation for all defined invariant tests within `co ## Usage -To auto-generate documentation for invariant tests, run `pnpm autogen:invariant-docs`. +To auto-generate documentation for invariant tests, run `just autogen-invariant-docs`. ## Documentation Standard diff --git a/packages/contracts-bedrock/invariant-docs/SuperchainWETH.md b/packages/contracts-bedrock/invariant-docs/SuperchainWETH.md index aaed4710b5dc..4b52a6146f14 100644 --- a/packages/contracts-bedrock/invariant-docs/SuperchainWETH.md +++ b/packages/contracts-bedrock/invariant-docs/SuperchainWETH.md @@ -1,5 +1,5 @@ # `SuperchainWETH` Invariants ## Calls to sendERC20 should always succeed as long as the actor has less than uint248 wei which is much greater than the total ETH supply. Actor's balance should also not increase out of nowhere. -**Test:** [`SuperchainWETH.t.sol#L171`](../test/invariants/SuperchainWETH.t.sol#L171) +**Test:** [`SuperchainWETH.t.sol#L181`](../test/invariants/SuperchainWETH.t.sol#L181) diff --git a/packages/contracts-bedrock/justfile b/packages/contracts-bedrock/justfile new file mode 100644 index 000000000000..45cdd14cfae0 --- /dev/null +++ b/packages/contracts-bedrock/justfile @@ -0,0 +1,100 @@ +prebuild: + ./scripts/checks/check-foundry-install.sh + +dep-status: + git submodule status + +install: + forge install + +build: prebuild + forge build + +build-go-ffi: + cd scripts/go-ffi && go build + +autogen-invariant-docs: + go run ./scripts/autogen/generate-invariant-docs . + +test: build-go-ffi + forge test + +test-kontrol: + ./test/kontrol/scripts/run-kontrol.sh script + +test-rerun: build-go-ffi + forge test --rerun -vvv + +genesis: + forge script scripts/L2Genesis.s.sol:L2Genesis --sig 'runWithStateDump()' + +coverage: build-go-ffi + forge coverage || (bash -c "forge coverage 2>&1 | grep -q 'Stack too deep' && echo -e '\\033[1;33mWARNING\\033[0m: Coverage failed with stack too deep, so overriding and exiting successfully' && exit 0 || exit 1") + +coverage-lcov: build-go-ffi + forge coverage --report lcov || (bash -c "forge coverage --report lcov 2>&1 | grep -q 'Stack too deep' && echo -e '\\033[1;33mWARNING\\033[0m: Coverage failed with stack too deep, so overriding and exiting successfully' && exit 0 || exit 1") + +deploy: + ./scripts/deploy/deploy.sh + +gas-snapshot-no-build: + forge snapshot --match-contract GasBenchMark + +statediff: + ./scripts/utils/statediff.sh && git diff --exit-code + +gas-snapshot: build-go-ffi gas-snapshot-no-build + +gas-snapshot-check: build-go-ffi + forge snapshot --match-contract GasBenchMark --check + +kontrol-summary: + ./test/kontrol/scripts/make-summary-deployment.sh + +kontrol-summary-fp: + KONTROL_FP_DEPLOYMENT=true ./test/kontrol/scripts/make-summary-deployment.sh + +snapshots-abi-storage: + go run ./scripts/autogen/generate-snapshots . + +snapshots: build snapshots-no-build + +snapshots-no-build: snapshots-abi-storage kontrol-summary-fp kontrol-summary + +snapshots-check: + ./scripts/checks/check-snapshots.sh + +semver-lock: + forge script scripts/autogen/SemverLock.s.sol + +validate-deploy-configs: + ./scripts/checks/check-deploy-configs.sh + +validate-spacers-no-build: + go run ./scripts/checks/spacers + +validate-spacers: build validate-spacers-no-build + +clean: + rm -rf ./artifacts ./forge-artifacts ./cache ./scripts/go-ffi/go-ffi ./.testdata ./deployments/hardhat/* + +pre-pr-no-build: gas-snapshot-no-build snapshots-no-build semver-lock autogen-invariant-docs lint + +pre-pr: clean build-go-ffi build pre-pr-no-build + +pre-pr-full: test validate-deploy-configs validate-spacers pre-pr + +lint-forge-tests-check: + go run ./scripts/checks/names + +lint-contracts-check: + forge fmt --check + +lint-check: lint-contracts-check + +lint-contracts-fix: + forge fmt + +lint-fix: lint-contracts-fix + +lint: lint-fix lint-check diff --git a/packages/contracts-bedrock/lib/openzeppelin-contracts-v5 b/packages/contracts-bedrock/lib/openzeppelin-contracts-v5 new file mode 160000 index 000000000000..dbb6104ce834 --- /dev/null +++ b/packages/contracts-bedrock/lib/openzeppelin-contracts-v5 @@ -0,0 +1 @@ +Subproject commit dbb6104ce834628e473d2173bbc9d47f81a9eec3 diff --git a/packages/contracts-bedrock/package.json b/packages/contracts-bedrock/package.json deleted file mode 100644 index 19ca43cde30a..000000000000 --- a/packages/contracts-bedrock/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "@eth-optimism/contracts-bedrock", - "version": "0.17.3", - "description": "Contracts for Optimism Specs", - "license": "MIT", - "engines": { - "node": ">=16", - "pnpm": ">=9" - }, - "files": [ - "forge-artifacts/**/*.json", - "!forge-artifacts/**/*.t.sol/*.json", - "deployments/**/*.json", - "src/**/*.sol" - ], - "scripts": { - "prebuild": "./scripts/checks/check-foundry-install.sh", - "build": "forge build", - "build:go-ffi": "(cd scripts/go-ffi && go build)", - "autogen:invariant-docs": "npx tsx scripts/autogen/generate-invariant-docs.ts", - "test": "pnpm build:go-ffi && forge test", - "test:kontrol": "./test/kontrol/scripts/run-kontrol.sh script", - "genesis": "forge script scripts/L2Genesis.s.sol:L2Genesis --sig 'runWithStateDump()'", - "coverage": "pnpm build:go-ffi && (forge coverage || (bash -c \"forge coverage 2>&1 | grep -q 'Stack too deep' && echo -e '\\033[1;33mWARNING\\033[0m: Coverage failed with stack too deep, so overriding and exiting successfully' && exit 0 || exit 1\"))", - "coverage:lcov": "pnpm build:go-ffi && (forge coverage --report lcov || (bash -c \"forge coverage --report lcov 2>&1 | grep -q 'Stack too deep' && echo -e '\\033[1;33mWARNING\\033[0m: Coverage failed with stack too deep, so overriding and exiting successfully' && exit 0 || exit 1\"))", - "deploy": "./scripts/deploy/deploy.sh", - "gas-snapshot:no-build": "forge snapshot --match-contract GasBenchMark", - "statediff": "./scripts/statediff.sh && git diff --exit-code", - "gas-snapshot": "pnpm build:go-ffi && pnpm gas-snapshot:no-build", - "kontrol-summary": "./test/kontrol/scripts/make-summary-deployment.sh", - "kontrol-summary-fp": "KONTROL_FP_DEPLOYMENT=true pnpm kontrol-summary", - "snapshots": "forge build && npx tsx scripts/autogen/generate-snapshots.ts && pnpm kontrol-summary-fp && pnpm kontrol-summary", - "snapshots:check": "./scripts/checks/check-snapshots.sh", - "semver-lock": "forge script scripts/SemverLock.s.sol", - "validate-deploy-configs": "./scripts/checks/check-deploy-configs.sh", - "validate-spacers:no-build": "npx tsx scripts/checks/check-spacers.ts", - "validate-spacers": "pnpm build && pnpm validate-spacers:no-build", - "clean": "rm -rf ./artifacts ./forge-artifacts ./cache ./tsconfig.tsbuildinfo ./tsconfig.build.tsbuildinfo ./scripts/go-ffi/go-ffi ./.testdata ./deployments/hardhat/*", - "pre-pr:no-build": "pnpm gas-snapshot:no-build && pnpm snapshots && pnpm semver-lock && pnpm autogen:invariant-docs && pnpm lint", - "pre-pr": "pnpm clean && pnpm build:go-ffi && pnpm build && pnpm pre-pr:no-build", - "pre-pr:full": "pnpm test && pnpm validate-deploy-configs && pnpm validate-spacers && pnpm pre-pr", - "lint:ts:check": "eslint . --max-warnings=0", - "lint:forge-tests:check": "npx tsx scripts/checks/check-test-names.ts", - "lint:contracts:check": "pnpm lint:fix && git diff --exit-code", - "lint:check": "pnpm lint:contracts:check && pnpm lint:ts:check", - "lint:ts:fix": "eslint --fix .", - "lint:contracts:fix": "forge fmt", - "lint:fix": "pnpm lint:contracts:fix && pnpm lint:ts:fix", - "lint": "pnpm lint:fix && pnpm lint:check" - }, - "devDependencies": { - "@babel/eslint-parser": "^7.23.10", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "@types/node": "^20.14.12", - "doctoc": "^2.2.0", - "eslint": "^8.56.0", - "eslint-config-prettier": "^9.1.0", - "eslint-config-standard": "^16.0.3", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsdoc": "^48.8.3", - "eslint-plugin-prefer-arrow": "^1.2.3", - "eslint-plugin-prettier": "^4.0.0", - "prettier": "^2.8.0", - "tsx": "^4.16.2", - "typescript": "^5.5.4" - } -} diff --git a/packages/contracts-bedrock/pnpm-lock.yaml b/packages/contracts-bedrock/pnpm-lock.yaml deleted file mode 100644 index df27013816a3..000000000000 --- a/packages/contracts-bedrock/pnpm-lock.yaml +++ /dev/null @@ -1,3483 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - devDependencies: - '@babel/eslint-parser': - specifier: ^7.23.10 - version: 7.25.0(@babel/core@7.24.9)(eslint@8.56.0) - '@types/node': - specifier: ^20.14.12 - version: 20.14.12 - '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/parser': - specifier: ^6.21.0 - version: 6.21.0(eslint@8.56.0)(typescript@5.5.4) - doctoc: - specifier: ^2.2.0 - version: 2.2.1 - eslint: - specifier: ^8.56.0 - version: 8.56.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.56.0) - eslint-config-standard: - specifier: ^16.0.3 - version: 16.0.3(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0))(eslint-plugin-node@11.1.0(eslint@8.56.0))(eslint-plugin-promise@5.2.0(eslint@8.56.0))(eslint@8.56.0) - eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0) - eslint-plugin-jsdoc: - specifier: ^48.8.3 - version: 48.8.3(eslint@8.56.0) - eslint-plugin-prefer-arrow: - specifier: ^1.2.3 - version: 1.2.3(eslint@8.56.0) - eslint-plugin-prettier: - specifier: ^4.0.0 - version: 4.2.1(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@2.8.8) - prettier: - specifier: ^2.8.0 - version: 2.8.8 - tsx: - specifier: ^4.16.2 - version: 4.16.2 - typescript: - specifier: ^5.5.4 - version: 5.5.4 - - packages/contracts-bedrock: - devDependencies: - '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/parser': - specifier: ^6.21.0 - version: 6.21.0(eslint@8.56.0)(typescript@5.5.4) - tsx: - specifier: ^4.16.2 - version: 4.16.2 - typescript: - specifier: ^5.5.4 - version: 5.5.4 - -packages: - - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.25.0': - resolution: {integrity: sha512-P4fwKI2mjEb3ZU5cnMJzvRsRKGBUcs8jvxIoRmr6ufAY9Xk2Bz7JubRTTivkw55c7WQJfTECeqYVa+HZ0FzREg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.9': - resolution: {integrity: sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==} - engines: {node: '>=6.9.0'} - - '@babel/eslint-parser@7.25.0': - resolution: {integrity: sha512-mlcTKuQAjczDRwWLIxv+Q925jaMUO8Jl5dxmWJSSGVYfZ4rKMp8daQvVC3rM1G2v8V+/fO0yIVTSLS+2zcB8rg==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - - '@babel/generator@7.25.0': - resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.24.8': - resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.25.0': - resolution: {integrity: sha512-bIkOa2ZJYn7FHnepzr5iX9Kmz8FjIz4UKzJ9zhX3dnYuVW0xul9RuR3skBfoLu+FPTQw90EHW9rJsSZhyLQ3fQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.25.0': - resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.0': - resolution: {integrity: sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.25.0': - resolution: {integrity: sha512-ubALThHQy4GCf6mbb+5ZRNmLLCI7bJ3f8Q6LHBSRlSKSWj5a7dSUzJBLv3VuIhFrFPgjF4IzPF567YG/HSCdZA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.25.0': - resolution: {integrity: sha512-LcnxQSsd9aXOIgmmSpvZ/1yo46ra2ESYyqLcryaBZOghxy5qqOBjvCWP5JfkI8yl9rlxRgdLTTMCQQRcN2hdCg==} - engines: {node: '>=6.9.0'} - - '@es-joy/jsdoccomment@0.46.0': - resolution: {integrity: sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==} - engines: {node: '>=16'} - - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.6.2': - resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.56.0': - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@humanwhocodes/config-array@0.11.13': - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.1': - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - deprecated: Use @eslint/object-schema instead - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@textlint/ast-node-types@12.6.1': - resolution: {integrity: sha512-uzlJ+ZsCAyJm+lBi7j0UeBbj+Oy6w/VWoGJ3iHRHE5eZ8Z4iK66mq+PG/spupmbllLtz77OJbY89BYqgFyjXmA==} - - '@textlint/markdown-to-ast@12.6.1': - resolution: {integrity: sha512-T0HO+VrU9VbLRiEx/kH4+gwGMHNMIGkp0Pok+p0I33saOOLyhfGvwOKQgvt2qkxzQEV2L5MtGB8EnW4r5d3CqQ==} - - '@types/json-schema@7.0.12': - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - '@types/mdast@3.0.15': - resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - - '@types/node@20.14.12': - resolution: {integrity: sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==} - - '@types/semver@7.5.7': - resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} - - '@types/unist@2.0.10': - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} - - '@typescript-eslint/eslint-plugin@6.21.0': - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/type-utils@6.21.0': - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@6.21.0': - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - anchor-markdown-header@0.6.0: - resolution: {integrity: sha512-v7HJMtE1X7wTpNFseRhxsY/pivP4uAJbidVhPT+yhz4i/vV1+qx371IXuV9V7bN6KjFtheLJxqaSm0Y/8neJTA==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - are-docs-informative@0.0.2: - resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} - engines: {node: '>=14'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - bail@1.0.5: - resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - browserslist@4.23.2: - resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - caniuse-lite@1.0.30001643: - resolution: {integrity: sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==} - - ccount@1.1.0: - resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - - character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - - character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - comment-parser@1.4.1: - resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} - engines: {node: '>= 12.0.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - doctoc@2.2.1: - resolution: {integrity: sha512-qNJ1gsuo7hH40vlXTVVrADm6pdg30bns/Mo7Nv1SxuXSM1bwF9b4xQ40a6EFT/L1cI+Yylbyi8MPI4G4y7XJzQ==} - hasBin: true - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - - electron-to-chromium@1.5.2: - resolution: {integrity: sha512-kc4r3U3V3WLaaZqThjYz/Y6z8tJe+7K0bbjUVo3i+LWIypVdMx5nXCkwRe6SWbY6ILqLdc1rKcKmr3HoH7wjSQ==} - - emoji-regex@10.1.0: - resolution: {integrity: sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg==} - - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - - entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-config-standard@16.0.3: - resolution: {integrity: sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==} - peerDependencies: - eslint: ^7.12.1 - eslint-plugin-import: ^2.22.1 - eslint-plugin-node: ^11.1.0 - eslint-plugin-promise: ^4.2.1 || ^5.0.0 - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-es@3.0.1: - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jsdoc@48.8.3: - resolution: {integrity: sha512-AtIvwwW9D17MRkM0Z0y3/xZYaa9mdAvJrkY6fU/HNUwGbmMtHVvK4qRM9CDixGVtfNrQitb8c6zQtdh6cTOvLg==} - engines: {node: '>=18'} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - - eslint-plugin-node@11.1.0: - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' - - eslint-plugin-prefer-arrow@1.2.3: - resolution: {integrity: sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==} - peerDependencies: - eslint: '>=2.0.0' - - eslint-plugin-prettier@4.2.1: - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - eslint: '>=7.28.0' - eslint-config-prettier: '*' - prettier: '>=2.0.0' - peerDependenciesMeta: - eslint-config-prettier: - optional: true - - eslint-plugin-promise@5.2.0: - resolution: {integrity: sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.0.0 - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - - eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - - fault@1.0.4: - resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.2.2: - resolution: {integrity: sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} - engines: {node: '>=8'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - htmlparser2@7.2.0: - resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} - - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsdoc-type-pratt-parser@4.0.0: - resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} - engines: {node: '>=12.0.0'} - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - longest-streak@2.0.4: - resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - markdown-table@2.0.0: - resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} - - mdast-util-find-and-replace@1.1.1: - resolution: {integrity: sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==} - - mdast-util-footnote@0.1.7: - resolution: {integrity: sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==} - - mdast-util-from-markdown@0.8.5: - resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} - - mdast-util-frontmatter@0.2.0: - resolution: {integrity: sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==} - - mdast-util-gfm-autolink-literal@0.1.3: - resolution: {integrity: sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==} - - mdast-util-gfm-strikethrough@0.2.3: - resolution: {integrity: sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==} - - mdast-util-gfm-table@0.1.6: - resolution: {integrity: sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==} - - mdast-util-gfm-task-list-item@0.1.6: - resolution: {integrity: sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==} - - mdast-util-gfm@0.1.2: - resolution: {integrity: sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==} - - mdast-util-to-markdown@0.6.5: - resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==} - - mdast-util-to-string@2.0.0: - resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromark-extension-footnote@0.3.2: - resolution: {integrity: sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==} - - micromark-extension-frontmatter@0.2.2: - resolution: {integrity: sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==} - - micromark-extension-gfm-autolink-literal@0.5.7: - resolution: {integrity: sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==} - - micromark-extension-gfm-strikethrough@0.6.5: - resolution: {integrity: sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==} - - micromark-extension-gfm-table@0.4.3: - resolution: {integrity: sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==} - - micromark-extension-gfm-tagfilter@0.3.0: - resolution: {integrity: sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==} - - micromark-extension-gfm-task-list-item@0.3.3: - resolution: {integrity: sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==} - - micromark-extension-gfm@0.3.3: - resolution: {integrity: sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==} - - micromark@2.11.4: - resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - - parse-imports@2.1.1: - resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} - engines: {node: '>= 18'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - - regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - - remark-footnotes@3.0.0: - resolution: {integrity: sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==} - - remark-frontmatter@3.0.0: - resolution: {integrity: sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==} - - remark-gfm@1.0.0: - resolution: {integrity: sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==} - - remark-parse@9.0.0: - resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==} - - repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slashes@3.0.12: - resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@4.0.0: - resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - - spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} - - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - synckit@0.9.1: - resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} - engines: {node: ^14.18.0 || >=16.0.0} - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - traverse@0.6.9: - resolution: {integrity: sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==} - engines: {node: '>= 0.4'} - - trough@1.0.5: - resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} - - ts-api-utils@1.0.1: - resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - - tsx@4.16.2: - resolution: {integrity: sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==} - engines: {node: '>=18.0.0'} - hasBin: true - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - - typedarray.prototype.slice@1.0.3: - resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==} - engines: {node: '>= 0.4'} - - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} - engines: {node: '>=14.17'} - hasBin: true - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - underscore@1.13.7: - resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - unified@9.2.2: - resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} - - unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - - unist-util-stringify-position@2.0.3: - resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} - - unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} - - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-section@0.3.3: - resolution: {integrity: sha512-BpRZMZpgXLuTiKeiu7kK0nIPwGdyrqrs6EDSaXtjD/aQ2T+qVo9a5hRC3HN3iJjCMxNT/VxoLGQ7E/OzE5ucnw==} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - vfile-message@2.0.4: - resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} - - vfile@4.2.1: - resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zwitch@1.0.5: - resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} - -snapshots: - - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/compat-data@7.25.0': {} - - '@babel/core@7.24.9': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-module-transforms': 7.25.0(@babel/core@7.24.9) - '@babel/helpers': 7.25.0 - '@babel/parser': 7.25.0 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.0 - '@babel/types': 7.25.0 - convert-source-map: 2.0.0 - debug: 4.3.5 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/eslint-parser@7.25.0(@babel/core@7.24.9)(eslint@8.56.0)': - dependencies: - '@babel/core': 7.24.9 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.56.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - - '@babel/generator@7.25.0': - dependencies: - '@babel/types': 7.25.0 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-compilation-targets@7.24.8': - dependencies: - '@babel/compat-data': 7.25.0 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.25.0 - '@babel/types': 7.25.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.25.0(@babel/core@7.24.9)': - dependencies: - '@babel/core': 7.24.9 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.25.0 - '@babel/types': 7.25.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.24.8': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.24.8': {} - - '@babel/helpers@7.25.0': - dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.0 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.25.0': - dependencies: - '@babel/types': 7.25.0 - - '@babel/template@7.25.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.0 - '@babel/types': 7.25.0 - - '@babel/traverse@7.25.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/parser': 7.25.0 - '@babel/template': 7.25.0 - '@babel/types': 7.25.0 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.25.0': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@es-joy/jsdoccomment@0.46.0': - dependencies: - comment-parser: 1.4.1 - esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.0.0 - - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-x64@0.21.5': - optional: true - - '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': - dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.6.2': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.5 - espree: 9.6.1 - globals: 13.21.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.56.0': {} - - '@humanwhocodes/config-array@0.11.13': - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.5 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.1': {} - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - dependencies: - eslint-scope: 5.1.1 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - '@pkgr/core@0.1.1': {} - - '@textlint/ast-node-types@12.6.1': {} - - '@textlint/markdown-to-ast@12.6.1': - dependencies: - '@textlint/ast-node-types': 12.6.1 - debug: 4.3.5 - mdast-util-gfm-autolink-literal: 0.1.3 - remark-footnotes: 3.0.0 - remark-frontmatter: 3.0.0 - remark-gfm: 1.0.0 - remark-parse: 9.0.0 - traverse: 0.6.9 - unified: 9.2.2 - transitivePeerDependencies: - - supports-color - - '@types/json-schema@7.0.12': {} - - '@types/json5@0.0.29': {} - - '@types/mdast@3.0.15': - dependencies: - '@types/unist': 2.0.10 - - '@types/node@20.14.12': - dependencies: - undici-types: 5.26.5 - - '@types/semver@7.5.7': {} - - '@types/unist@2.0.10': {} - - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.2.4 - natural-compare: 1.4.0 - semver: 7.6.3 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5 - eslint: 8.56.0 - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - - '@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - debug: 4.3.5 - eslint: 8.56.0 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@6.21.0': {} - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.7 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - eslint: 8.56.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - - '@ungap/structured-clone@1.2.0': {} - - acorn-jsx@5.3.2(acorn@8.10.0): - dependencies: - acorn: 8.10.0 - - acorn@8.10.0: {} - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - anchor-markdown-header@0.6.0: - dependencies: - emoji-regex: 10.1.0 - - ansi-regex@5.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - are-docs-informative@0.0.2: {} - - argparse@2.0.1: {} - - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - - array-includes@3.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - - array-union@2.1.0: {} - - array.prototype.findlastindex@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - - bail@1.0.5: {} - - balanced-match@1.0.2: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - - browserslist@4.23.2: - dependencies: - caniuse-lite: 1.0.30001643 - electron-to-chromium: 1.5.2 - node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.2) - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - - callsites@3.1.0: {} - - caniuse-lite@1.0.30001643: {} - - ccount@1.1.0: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - character-entities-legacy@1.1.4: {} - - character-entities@1.2.4: {} - - character-reference-invalid@1.1.4: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - comment-parser@1.4.1: {} - - concat-map@0.0.1: {} - - convert-source-map@2.0.0: {} - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-offset@1.0.0: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - debug@3.2.7: - dependencies: - ms: 2.1.2 - - debug@4.3.5: - dependencies: - ms: 2.1.2 - - deep-is@0.1.4: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - doctoc@2.2.1: - dependencies: - '@textlint/markdown-to-ast': 12.6.1 - anchor-markdown-header: 0.6.0 - htmlparser2: 7.2.0 - minimist: 1.2.8 - underscore: 1.13.7 - update-section: 0.3.3 - transitivePeerDependencies: - - supports-color - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - dom-serializer@1.4.1: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - - domelementtype@2.3.0: {} - - domhandler@4.3.1: - dependencies: - domelementtype: 2.3.0 - - domutils@2.8.0: - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - - electron-to-chromium@1.5.2: {} - - emoji-regex@10.1.0: {} - - entities@2.2.0: {} - - entities@3.0.1: {} - - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-errors@1.3.0: {} - - es-module-lexer@1.5.4: {} - - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - escalade@3.1.2: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@9.1.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-config-standard@16.0.3(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0))(eslint-plugin-node@11.1.0(eslint@8.56.0))(eslint-plugin-promise@5.2.0(eslint@8.56.0))(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0) - eslint-plugin-node: 11.1.0(eslint@8.56.0) - eslint-plugin-promise: 5.2.0(eslint@8.56.0) - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.15.0 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - - eslint-plugin-es@3.0.1(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 - - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) - hasown: 2.0.2 - is-core-module: 2.15.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jsdoc@48.8.3(eslint@8.56.0): - dependencies: - '@es-joy/jsdoccomment': 0.46.0 - are-docs-informative: 0.0.2 - comment-parser: 1.4.1 - debug: 4.3.5 - escape-string-regexp: 4.0.0 - eslint: 8.56.0 - esquery: 1.6.0 - parse-imports: 2.1.1 - semver: 7.6.3 - spdx-expression-parse: 4.0.0 - synckit: 0.9.1 - transitivePeerDependencies: - - supports-color - - eslint-plugin-node@11.1.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-plugin-es: 3.0.1(eslint@8.56.0) - eslint-utils: 2.1.0 - ignore: 5.2.4 - minimatch: 3.1.2 - resolve: 1.22.8 - semver: 6.3.1 - - eslint-plugin-prefer-arrow@1.2.3(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@2.8.8): - dependencies: - eslint: 8.56.0 - prettier: 2.8.8 - prettier-linter-helpers: 1.0.0 - optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@8.56.0) - - eslint-plugin-promise@5.2.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-utils@2.1.0: - dependencies: - eslint-visitor-keys: 1.3.0 - - eslint-visitor-keys@1.3.0: {} - - eslint-visitor-keys@2.1.0: {} - - eslint-visitor-keys@3.4.3: {} - - eslint@8.56.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.6.2 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.5 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.21.0 - graphemer: 1.4.0 - ignore: 5.2.4 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.6.1: - dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) - eslint-visitor-keys: 3.4.3 - - esquery@1.5.0: - dependencies: - estraverse: 5.3.0 - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - extend@3.0.2: {} - - fast-deep-equal@3.1.3: {} - - fast-diff@1.3.0: {} - - fast-glob@3.3.1: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.15.0: - dependencies: - reusify: 1.0.4 - - fault@1.0.4: - dependencies: - format: 0.2.2 - - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.0.4 - - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.0.4: - dependencies: - flatted: 3.2.2 - rimraf: 3.0.2 - - flatted@3.2.2: {} - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - - format@0.2.2: {} - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - - functions-have-names@1.2.3: {} - - gensync@1.0.0-beta.2: {} - - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - - get-tsconfig@4.7.5: - dependencies: - resolve-pkg-maps: 1.0.0 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@11.12.0: {} - - globals@13.21.0: - dependencies: - type-fest: 0.20.2 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - - graphemer@1.4.0: {} - - has-bigints@1.0.2: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.0.3 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - htmlparser2@7.2.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 3.0.1 - - ignore@5.2.4: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - - is-alphabetical@1.0.4: {} - - is-alphanumerical@1.0.4: - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-buffer@2.0.5: {} - - is-callable@1.2.7: {} - - is-core-module@2.15.0: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - - is-decimal@1.0.4: {} - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-hexadecimal@1.0.4: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-path-inside@3.0.3: {} - - is-plain-obj@2.1.0: {} - - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsdoc-type-pratt-parser@4.0.0: {} - - jsesc@2.5.2: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - - json5@2.2.3: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.merge@4.6.2: {} - - longest-streak@2.0.4: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - markdown-table@2.0.0: - dependencies: - repeat-string: 1.6.1 - - mdast-util-find-and-replace@1.1.1: - dependencies: - escape-string-regexp: 4.0.0 - unist-util-is: 4.1.0 - unist-util-visit-parents: 3.1.1 - - mdast-util-footnote@0.1.7: - dependencies: - mdast-util-to-markdown: 0.6.5 - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - mdast-util-from-markdown@0.8.5: - dependencies: - '@types/mdast': 3.0.15 - mdast-util-to-string: 2.0.0 - micromark: 2.11.4 - parse-entities: 2.0.0 - unist-util-stringify-position: 2.0.3 - transitivePeerDependencies: - - supports-color - - mdast-util-frontmatter@0.2.0: - dependencies: - micromark-extension-frontmatter: 0.2.2 - - mdast-util-gfm-autolink-literal@0.1.3: - dependencies: - ccount: 1.1.0 - mdast-util-find-and-replace: 1.1.1 - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-strikethrough@0.2.3: - dependencies: - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm-table@0.1.6: - dependencies: - markdown-table: 2.0.0 - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm-task-list-item@0.1.6: - dependencies: - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm@0.1.2: - dependencies: - mdast-util-gfm-autolink-literal: 0.1.3 - mdast-util-gfm-strikethrough: 0.2.3 - mdast-util-gfm-table: 0.1.6 - mdast-util-gfm-task-list-item: 0.1.6 - mdast-util-to-markdown: 0.6.5 - transitivePeerDependencies: - - supports-color - - mdast-util-to-markdown@0.6.5: - dependencies: - '@types/unist': 2.0.10 - longest-streak: 2.0.4 - mdast-util-to-string: 2.0.0 - parse-entities: 2.0.0 - repeat-string: 1.6.1 - zwitch: 1.0.5 - - mdast-util-to-string@2.0.0: {} - - merge2@1.4.1: {} - - micromark-extension-footnote@0.3.2: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-frontmatter@0.2.2: - dependencies: - fault: 1.0.4 - - micromark-extension-gfm-autolink-literal@0.5.7: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-strikethrough@0.6.5: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-table@0.4.3: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-tagfilter@0.3.0: {} - - micromark-extension-gfm-task-list-item@0.3.3: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm@0.3.3: - dependencies: - micromark: 2.11.4 - micromark-extension-gfm-autolink-literal: 0.5.7 - micromark-extension-gfm-strikethrough: 0.6.5 - micromark-extension-gfm-table: 0.4.3 - micromark-extension-gfm-tagfilter: 0.3.0 - micromark-extension-gfm-task-list-item: 0.3.3 - transitivePeerDependencies: - - supports-color - - micromark@2.11.4: - dependencies: - debug: 4.3.5 - parse-entities: 2.0.0 - transitivePeerDependencies: - - supports-color - - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - - minimist@1.2.8: {} - - ms@2.1.2: {} - - natural-compare@1.4.0: {} - - node-releases@2.0.18: {} - - object-inspect@1.13.2: {} - - object-keys@1.1.1: {} - - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - - object.values@1.2.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - optionator@0.9.3: - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-entities@2.0.0: - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - - parse-imports@2.1.1: - dependencies: - es-module-lexer: 1.5.4 - slashes: 3.0.12 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-type@4.0.0: {} - - picocolors@1.0.1: {} - - picomatch@2.3.1: {} - - possible-typed-array-names@1.0.0: {} - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - - prettier@2.8.8: {} - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - regexp.prototype.flags@1.5.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - - regexpp@3.2.0: {} - - remark-footnotes@3.0.0: - dependencies: - mdast-util-footnote: 0.1.7 - micromark-extension-footnote: 0.3.2 - transitivePeerDependencies: - - supports-color - - remark-frontmatter@3.0.0: - dependencies: - mdast-util-frontmatter: 0.2.0 - micromark-extension-frontmatter: 0.2.2 - - remark-gfm@1.0.0: - dependencies: - mdast-util-gfm: 0.1.2 - micromark-extension-gfm: 0.3.3 - transitivePeerDependencies: - - supports-color - - remark-parse@9.0.0: - dependencies: - mdast-util-from-markdown: 0.8.5 - transitivePeerDependencies: - - supports-color - - repeat-string@1.6.1: {} - - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.15.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - - semver@6.3.1: {} - - semver@7.6.3: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 - - slash@3.0.0: {} - - slashes@3.0.12: {} - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@4.0.0: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 - - spdx-license-ids@3.0.18: {} - - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@3.0.0: {} - - strip-json-comments@3.1.1: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - synckit@0.9.1: - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.6.3 - - text-table@0.2.0: {} - - to-fast-properties@2.0.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - traverse@0.6.9: - dependencies: - gopd: 1.0.1 - typedarray.prototype.slice: 1.0.3 - which-typed-array: 1.1.15 - - trough@1.0.5: {} - - ts-api-utils@1.0.1(typescript@5.5.4): - dependencies: - typescript: 5.5.4 - - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@2.6.3: {} - - tsx@4.16.2: - dependencies: - esbuild: 0.21.5 - get-tsconfig: 4.7.5 - optionalDependencies: - fsevents: 2.3.3 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.20.2: {} - - typed-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-byte-offset@1.0.2: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - - typedarray.prototype.slice@1.0.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - typed-array-buffer: 1.0.2 - typed-array-byte-offset: 1.0.2 - - typescript@5.5.4: {} - - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - - underscore@1.13.7: {} - - undici-types@5.26.5: {} - - unified@9.2.2: - dependencies: - '@types/unist': 2.0.10 - bail: 1.0.5 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 2.1.0 - trough: 1.0.5 - vfile: 4.2.1 - - unist-util-is@4.1.0: {} - - unist-util-stringify-position@2.0.3: - dependencies: - '@types/unist': 2.0.10 - - unist-util-visit-parents@3.1.1: - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 4.1.0 - - update-browserslist-db@1.1.0(browserslist@4.23.2): - dependencies: - browserslist: 4.23.2 - escalade: 3.1.2 - picocolors: 1.0.1 - - update-section@0.3.3: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - vfile-message@2.0.4: - dependencies: - '@types/unist': 2.0.10 - unist-util-stringify-position: 2.0.3 - - vfile@4.2.1: - dependencies: - '@types/unist': 2.0.10 - is-buffer: 2.0.5 - unist-util-stringify-position: 2.0.3 - vfile-message: 2.0.4 - - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wrappy@1.0.2: {} - - yallist@3.1.1: {} - - yocto-queue@0.1.0: {} - - zwitch@1.0.5: {} diff --git a/packages/contracts-bedrock/scripts/Artifacts.s.sol b/packages/contracts-bedrock/scripts/Artifacts.s.sol index 75ccb70379c6..b054d2e27254 100644 --- a/packages/contracts-bedrock/scripts/Artifacts.s.sol +++ b/packages/contracts-bedrock/scripts/Artifacts.s.sol @@ -4,13 +4,13 @@ pragma solidity ^0.8.0; import { console2 as console } from "forge-std/console2.sol"; import { stdJson } from "forge-std/StdJson.sol"; import { Vm } from "forge-std/Vm.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; -import { Config } from "scripts/Config.sol"; -import { StorageSlot } from "scripts/ForgeArtifacts.sol"; +import { Config } from "scripts/libraries/Config.sol"; +import { StorageSlot } from "scripts/libraries/ForgeArtifacts.sol"; import { EIP1967Helper } from "test/mocks/EIP1967Helper.sol"; import { LibString } from "@solady/utils/LibString.sol"; -import { ForgeArtifacts } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.sol"; import { IAddressManager } from "scripts/interfaces/IAddressManager.sol"; import { Process } from "scripts/libraries/Process.sol"; diff --git a/packages/contracts-bedrock/scripts/L2Genesis.s.sol b/packages/contracts-bedrock/scripts/L2Genesis.s.sol index e6397fec3c33..e15459166999 100644 --- a/packages/contracts-bedrock/scripts/L2Genesis.s.sol +++ b/packages/contracts-bedrock/scripts/L2Genesis.s.sol @@ -5,7 +5,7 @@ import { Script } from "forge-std/Script.sol"; import { console2 as console } from "forge-std/console2.sol"; import { Deployer } from "scripts/deploy/Deployer.sol"; -import { Config, OutputMode, OutputModeUtils, Fork, ForkUtils, LATEST_FORK } from "scripts/Config.sol"; +import { Config, OutputMode, OutputModeUtils, Fork, ForkUtils, LATEST_FORK } from "scripts/libraries/Config.sol"; import { Artifacts } from "scripts/Artifacts.s.sol"; import { DeployConfig } from "scripts/deploy/DeployConfig.s.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; @@ -158,6 +158,10 @@ contract L2Genesis is Deployer { if (writeForkGenesisAllocs(_fork, Fork.FJORD, _mode)) { return; } + + if (writeForkGenesisAllocs(_fork, Fork.GRANITE, _mode)) { + return; + } } function writeForkGenesisAllocs(Fork _latest, Fork _current, OutputMode _mode) internal returns (bool isLatest_) { @@ -182,7 +186,10 @@ contract L2Genesis is Deployer { /// The Proxy bytecode should be set. All proxied predeploys should have /// the 1967 admin slot set to the ProxyAdmin predeploy. All defined predeploys /// should have their implementations set. - /// Warning: the predeploy accounts have contract code, but 0 nonce value. + /// Warning: the predeploy accounts have contract code, but 0 nonce value, contrary + /// to the expected nonce of 1 per EIP-161. This is because the legacy go genesis + // script didn't set the nonce and we didn't want to change that behavior when + /// migrating genesis generation to Solidity. function setPredeployProxies() public { console.log("Setting Predeploy proxies"); bytes memory code = vm.getDeployedCode("Proxy.sol:Proxy"); diff --git a/packages/contracts-bedrock/scripts/SemverLock.s.sol b/packages/contracts-bedrock/scripts/autogen/SemverLock.s.sol similarity index 100% rename from packages/contracts-bedrock/scripts/SemverLock.s.sol rename to packages/contracts-bedrock/scripts/autogen/SemverLock.s.sol diff --git a/packages/contracts-bedrock/scripts/autogen/generate-invariant-docs.ts b/packages/contracts-bedrock/scripts/autogen/generate-invariant-docs.ts deleted file mode 100644 index 2c01e2617ef4..000000000000 --- a/packages/contracts-bedrock/scripts/autogen/generate-invariant-docs.ts +++ /dev/null @@ -1,170 +0,0 @@ -import fs from 'fs' -import path from 'path' - -const ROOT_DIR = path.join(__dirname, '..', '..') -const BASE_INVARIANTS_DIR = path.join(ROOT_DIR, 'test', 'invariants') -const BASE_DOCS_DIR = path.join(ROOT_DIR, 'invariant-docs') -const BASE_INVARIANT_GH_URL = '../test/invariants/' -const NATSPEC_INV = '@custom:invariant' - -// Represents an invariant test contract -type Contract = { - name: string - fileName: string - docs: InvariantDoc[] -} - -// Represents the documentation of an invariant -type InvariantDoc = { - header?: string - desc?: string - lineNo?: number -} - -const writtenFiles = [] - -// Lazy-parses all test files in the `test/invariants` directory -// to generate documentation on all invariant tests. -const docGen = (dir: string): void => { - // Grab all files within the invariants test dir - const files = fs.readdirSync(dir) - - // Array to store all found invariant documentation comments. - const docs: Contract[] = [] - - for (const fileName of files) { - // Read the contents of the invariant test file. - const fileContents = fs.readFileSync(path.join(dir, fileName)).toString() - - // Split the file into individual lines and trim whitespace. - const lines = fileContents.split('\n').map((line: string) => line.trim()) - - // Create an object to store all invariant test docs for the current contract - const name = fileName.replace('.t.sol', '') - const contract: Contract = { name, fileName, docs: [] } - - let currentDoc: InvariantDoc - - // Loop through all lines to find comments. - for (let i = 0; i < lines.length; i++) { - let line = lines[i] - - // We have an invariant doc - if (line.startsWith(`/// ${NATSPEC_INV}`)) { - // Assign the header of the invariant doc. - // TODO: Handle ambiguous case for `INVARIANT: ` prefix. - currentDoc = { - header: line.replace(`/// ${NATSPEC_INV}`, '').trim(), - desc: '', - } - - // If the header is multi-line, continue appending to the `currentDoc`'s header. - line = lines[++i] - while (line.startsWith(`///`) && line.trim() !== '///') { - currentDoc.header += ` ${line.replace(`///`, '').trim()}` - line = lines[++i] - } - - // Process the description - while ((line = lines[++i]).startsWith('///')) { - line = line.replace('///', '').trim() - - // If the line has any contents, insert it into the desc. - // Otherwise, consider it a linebreak. - currentDoc.desc += line.length > 0 ? `${line} ` : '\n' - } - - // Set the line number of the test - currentDoc.lineNo = i + 1 - - // Add the doc to the contract - contract.docs.push(currentDoc) - } - } - - // Add the contract to the array of docs - docs.push(contract) - } - - for (const contract of docs) { - const fileName = path.join(BASE_DOCS_DIR, `${contract.name}.md`) - const alreadyWritten = writtenFiles.includes(fileName) - - // If the file has already been written, append the extra docs to the end. - // Otherwise, write the file from scratch. - fs.writeFileSync( - fileName, - alreadyWritten - ? `${fs.readFileSync(fileName)}\n${renderContractDoc(contract, false)}` - : renderContractDoc(contract, true) - ) - - // If the file was just written for the first time, add it to the list of written files. - if (!alreadyWritten) { - writtenFiles.push(fileName) - } - } - - console.log( - `Generated invariant test documentation for:\n - ${ - docs.length - } contracts\n - ${docs.reduce( - (acc: number, contract: Contract) => acc + contract.docs.length, - 0 - )} invariant tests\nsuccessfully!` - ) -} - -// Generate a table of contents for all invariant docs and place it in the README. -const tocGen = (): void => { - const autoTOCPrefix = '\n' - const autoTOCPostfix = '\n' - - // Grab the name of all markdown files in `BASE_DOCS_DIR` except for `README.md`. - const files = fs - .readdirSync(BASE_DOCS_DIR) - .filter((fileName: string) => fileName !== 'README.md') - - // Generate a table of contents section. - const tocList = files - .map( - (fileName: string) => `- [${fileName.replace('.md', '')}](./${fileName})` - ) - .join('\n') - const toc = `${autoTOCPrefix}\n## Table of Contents\n${tocList}\n${autoTOCPostfix}` - - // Write the table of contents to the README. - const readmeContents = fs - .readFileSync(path.join(BASE_DOCS_DIR, 'README.md')) - .toString() - const above = readmeContents.split(autoTOCPrefix)[0] - const below = readmeContents.split(autoTOCPostfix)[1] - fs.writeFileSync( - path.join(BASE_DOCS_DIR, 'README.md'), - `${above}${toc}${below}` - ) -} - -// Render a `Contract` object into valid markdown. -const renderContractDoc = (contract: Contract, header: boolean): string => { - const _header = header ? `# \`${contract.name}\` Invariants\n` : '' - const docs = contract.docs - .map((doc: InvariantDoc) => { - const line = `${contract.fileName}#L${doc.lineNo}` - return `## ${doc.header}\n**Test:** [\`${line}\`](${BASE_INVARIANT_GH_URL}${line})\n\n${doc.desc}` - }) - .join('\n\n') - return `${_header}\n${docs}` -} - -// Generate the docs - -// Forge -console.log('Generating docs for forge invariants...') -docGen(BASE_INVARIANTS_DIR) - -// New line -console.log() - -// Generate an updated table of contents -tocGen() diff --git a/packages/contracts-bedrock/scripts/autogen/generate-invariant-docs/main.go b/packages/contracts-bedrock/scripts/autogen/generate-invariant-docs/main.go new file mode 100644 index 000000000000..f408095483b3 --- /dev/null +++ b/packages/contracts-bedrock/scripts/autogen/generate-invariant-docs/main.go @@ -0,0 +1,264 @@ +package main + +import ( + "flag" + "fmt" + "os" + "path/filepath" + "strings" +) + +const ( + NatspecInv = "@custom:invariant" + BaseInvariantGhUrl = "../test/invariants/" +) + +// Contract represents an invariant test contract +type Contract struct { + Name string + FileName string + Docs []InvariantDoc +} + +// InvariantDoc represents the documentation of an invariant +type InvariantDoc struct { + Header string + Desc string + LineNo int +} + +var writtenFiles []string + +// Generate the docs +func main() { + flag.Parse() + if flag.NArg() != 1 { + fmt.Println("Expected path of contracts-bedrock as CLI argument") + os.Exit(1) + } + rootDir := flag.Arg(0) + + invariantsDir := filepath.Join(rootDir, "test/invariants") + fmt.Printf("invariants dir: %s\n", invariantsDir) + docsDir := filepath.Join(rootDir, "invariant-docs") + fmt.Printf("invariant docs dir: %s\n", docsDir) + + // Forge + fmt.Println("Generating docs for forge invariants...") + if err := docGen(invariantsDir, docsDir); err != nil { + fmt.Printf("Failed to generate invariant docs: %v\n", err) + os.Exit(1) + } + + fmt.Println("Generating table-of-contents...") + // Generate an updated table of contents + if err := tocGen(docsDir); err != nil { + fmt.Printf("Failed to generate TOC of docs: %v\n", err) + os.Exit(1) + } + fmt.Println("Done!") +} + +// Lazy-parses all test files in the `test/invariants` directory +// to generate documentation on all invariant tests. +func docGen(invariantsDir, docsDir string) error { + + // Grab all files within the invariants test dir + files, err := os.ReadDir(invariantsDir) + if err != nil { + return fmt.Errorf("error reading directory: %w", err) + } + + // Array to store all found invariant documentation comments. + var docs []Contract + + for _, file := range files { + // Read the contents of the invariant test file. + fileName := file.Name() + filePath := filepath.Join(invariantsDir, fileName) + fileContents, err := os.ReadFile(filePath) + if err != nil { + return fmt.Errorf("error reading file %q: %w", filePath, err) + } + + // Split the file into individual lines and trim whitespace. + lines := strings.Split(string(fileContents), "\n") + for i, line := range lines { + lines[i] = strings.TrimSpace(line) + } + + // Create an object to store all invariant test docs for the current contract + name := strings.Replace(fileName, ".t.sol", "", 1) + contract := Contract{Name: name, FileName: fileName} + + var currentDoc InvariantDoc + + // Loop through all lines to find comments. + for i := 0; i < len(lines); i++ { + line := lines[i] + + // We have an invariant doc + if strings.HasPrefix(line, "/// "+NatspecInv) { + // Assign the header of the invariant doc. + currentDoc = InvariantDoc{ + Header: strings.TrimSpace(strings.Replace(line, "/// "+NatspecInv, "", 1)), + Desc: "", + } + i++ + + // If the header is multi-line, continue appending to the `currentDoc`'s header. + for { + if i >= len(lines) { + break + } + line = lines[i] + i++ + if !(strings.HasPrefix(line, "///") && strings.TrimSpace(line) != "///") { + break + } + currentDoc.Header += " " + strings.TrimSpace(strings.Replace(line, "///", "", 1)) + } + + // Process the description + for { + if i >= len(lines) { + break + } + line = lines[i] + i++ + if !strings.HasPrefix(line, "///") { + break + } + line = strings.TrimSpace(strings.Replace(line, "///", "", 1)) + + // If the line has any contents, insert it into the desc. + // Otherwise, consider it a linebreak. + if len(line) > 0 { + currentDoc.Desc += line + " " + } else { + currentDoc.Desc += "\n" + } + } + + // Set the line number of the test + currentDoc.LineNo = i + + // Add the doc to the contract + contract.Docs = append(contract.Docs, currentDoc) + } + } + + // Add the contract to the array of docs + docs = append(docs, contract) + } + + for _, contract := range docs { + filePath := filepath.Join(docsDir, contract.Name+".md") + alreadyWritten := contains(writtenFiles, filePath) + + // If the file has already been written, append the extra docs to the end. + // Otherwise, write the file from scratch. + var fileContent string + if alreadyWritten { + existingContent, err := os.ReadFile(filePath) + if err != nil { + return fmt.Errorf("error reading existing file %q: %w", filePath, err) + } + fileContent = string(existingContent) + "\n" + renderContractDoc(contract, false) + } else { + fileContent = renderContractDoc(contract, true) + } + + err = os.WriteFile(filePath, []byte(fileContent), 0644) + if err != nil { + return fmt.Errorf("error writing file %q: %w", filePath, err) + } + + if !alreadyWritten { + writtenFiles = append(writtenFiles, filePath) + } + } + + _, _ = fmt.Fprintf(os.Stderr, + "Generated invariant test documentation for:\n"+ + " - %d contracts\n"+ + " - %d invariant tests\n"+ + "successfully!\n", + len(docs), + func() int { + total := 0 + for _, contract := range docs { + total += len(contract.Docs) + } + return total + }(), + ) + return nil +} + +// Generate a table of contents for all invariant docs and place it in the README. +func tocGen(docsDir string) error { + autoTOCPrefix := "\n" + autoTOCPostfix := "\n" + + files, err := os.ReadDir(docsDir) + if err != nil { + return fmt.Errorf("error reading directory %q: %w", docsDir, err) + } + + // Generate a table of contents section. + var tocList []string + for _, file := range files { + fileName := file.Name() + if fileName != "README.md" { + tocList = append(tocList, fmt.Sprintf("- [%s](./%s)", strings.Replace(fileName, ".md", "", 1), fileName)) + } + } + toc := fmt.Sprintf("%s\n## Table of Contents\n%s\n%s", + autoTOCPrefix, strings.Join(tocList, "\n"), autoTOCPostfix) + + // Write the table of contents to the README. + readmePath := filepath.Join(docsDir, "README.md") + readmeContents, err := os.ReadFile(readmePath) + if err != nil { + return fmt.Errorf("error reading README file %q: %w", readmePath, err) + } + readmeParts := strings.Split(string(readmeContents), autoTOCPrefix) + above := readmeParts[0] + readmeParts = strings.Split(readmeParts[1], autoTOCPostfix) + below := readmeParts[1] + err = os.WriteFile(readmePath, []byte(above+toc+below), 0644) + if err != nil { + return fmt.Errorf("error writing README file %q: %w", readmePath, err) + } + return nil +} + +// Render a `Contract` object into valid markdown. +func renderContractDoc(contract Contract, header bool) string { + var sb strings.Builder + + if header { + sb.WriteString(fmt.Sprintf("# `%s` Invariants\n", contract.Name)) + } + sb.WriteString("\n") + + for i, doc := range contract.Docs { + line := fmt.Sprintf("%s#L%d", contract.FileName, doc.LineNo) + sb.WriteString(fmt.Sprintf("## %s\n**Test:** [`%s`](%s%s)\n\n%s", doc.Header, line, BaseInvariantGhUrl, line, doc.Desc)) + if i != len(contract.Docs)-1 { + sb.WriteString("\n\n") + } + } + + return sb.String() +} + +func contains(slice []string, item string) bool { + for _, v := range slice { + if v == item { + return true + } + } + return false +} diff --git a/packages/contracts-bedrock/scripts/autogen/generate-snapshots.ts b/packages/contracts-bedrock/scripts/autogen/generate-snapshots.ts deleted file mode 100644 index fcfc59b89950..000000000000 --- a/packages/contracts-bedrock/scripts/autogen/generate-snapshots.ts +++ /dev/null @@ -1,163 +0,0 @@ -import fs from 'fs' -import path from 'path' - -const root = path.join(__dirname, '..', '..') -const outdir = process.argv[2] || path.join(root, 'snapshots') -const forgeArtifactsDir = path.join(root, 'forge-artifacts') - -const getAllContractsSources = (): Array => { - const paths = [] - const readFilesRecursively = (dir: string) => { - const files = fs.readdirSync(dir) - - for (const file of files) { - const filePath = path.join(dir, file) - const fileStat = fs.statSync(filePath) - - if (fileStat.isDirectory()) { - readFilesRecursively(filePath) - } else { - paths.push(filePath) - } - } - } - readFilesRecursively(path.join(root, 'src')) - - return paths - .filter((x) => x.endsWith('.sol')) - .map((p: string) => path.basename(p)) - .sort() -} - -type ForgeArtifact = { - abi: object - ast: { - nodeType: string - nodes: any[] - } - storageLayout: { - storage: [{ type: string; label: string; offset: number; slot: number }] - types: { [key: string]: { label: string; numberOfBytes: number } } - } - bytecode: { - object: string - } -} - -type AbiSpecStorageLayoutEntry = { - label: string - slot: number - offset: number - bytes: number - type: string -} -const sortKeys = (obj: any) => { - if (typeof obj !== 'object' || obj === null) { - return obj - } - return Object.keys(obj) - .sort() - .reduce( - (acc, key) => { - acc[key] = sortKeys(obj[key]) - return acc - }, - Array.isArray(obj) ? [] : {} - ) -} - -// ContractName.0.9.8.json -> ContractName.sol -// ContractName.json -> ContractName.sol -const parseArtifactName = (artifactVersionFile: string): string => { - const match = artifactVersionFile.match(/(.*?)\.([0-9]+\.[0-9]+\.[0-9]+)?/) - if (!match) { - throw new Error(`Invalid artifact file name: ${artifactVersionFile}`) - } - return match[1] -} - -const main = async () => { - console.log(`writing abi and storage layout snapshots to ${outdir}`) - - const storageLayoutDir = path.join(outdir, 'storageLayout') - const abiDir = path.join(outdir, 'abi') - fs.rmSync(storageLayoutDir, { recursive: true }) - fs.rmSync(abiDir, { recursive: true }) - fs.mkdirSync(storageLayoutDir, { recursive: true }) - fs.mkdirSync(abiDir, { recursive: true }) - - const contractSources = getAllContractsSources() - const knownAbis = {} - - for (const contractFile of contractSources) { - const contractArtifacts = path.join(forgeArtifactsDir, contractFile) - for (const name of fs.readdirSync(contractArtifacts)) { - const data = fs.readFileSync(path.join(contractArtifacts, name)) - const artifact: ForgeArtifact = JSON.parse(data.toString()) - - const contractName = parseArtifactName(name) - - // HACK: This is a hack to ignore libraries and abstract contracts. Not robust against changes to solc's internal ast repr - if (artifact.ast === undefined) { - throw new Error( - "ast isn't present in forge-artifacts. Did you run forge build with `--ast`?" - ) - } - const isContract = artifact.ast.nodes.some((node: any) => { - return ( - node.nodeType === 'ContractDefinition' && - node.name === contractName && - node.contractKind === 'contract' && - (node.abstract === undefined || // solc < 0.6 doesn't have explicit abstract contracts - node.abstract === false) - ) - }) - if (!isContract) { - console.log(`ignoring library/interface ${contractName}`) - continue - } - - const storageLayout: AbiSpecStorageLayoutEntry[] = [] - for (const storageEntry of artifact.storageLayout.storage) { - // convert ast-based type to solidity type - const typ = artifact.storageLayout.types[storageEntry.type] - if (typ === undefined) { - throw new Error( - `undefined type for ${contractName}:${storageEntry.label}` - ) - } - storageLayout.push({ - label: storageEntry.label, - bytes: typ.numberOfBytes, - offset: storageEntry.offset, - slot: storageEntry.slot, - type: typ.label, - }) - } - - if (knownAbis[contractName] === undefined) { - knownAbis[contractName] = artifact.abi - } else if ( - JSON.stringify(knownAbis[contractName]) !== JSON.stringify(artifact.abi) - ) { - throw Error( - `detected multiple artifact versions with different ABIs for ${contractFile}` - ) - } else { - console.log(`detected multiple artifacts for ${contractName}`) - } - - // Sort snapshots for easier manual inspection - fs.writeFileSync( - `${abiDir}/${contractName}.json`, - JSON.stringify(sortKeys(artifact.abi), null, 2) - ) - fs.writeFileSync( - `${storageLayoutDir}/${contractName}.json`, - JSON.stringify(sortKeys(storageLayout), null, 2) - ) - } - } -} - -main() diff --git a/packages/contracts-bedrock/scripts/autogen/generate-snapshots/main.go b/packages/contracts-bedrock/scripts/autogen/generate-snapshots/main.go new file mode 100644 index 000000000000..c446af7a0c80 --- /dev/null +++ b/packages/contracts-bedrock/scripts/autogen/generate-snapshots/main.go @@ -0,0 +1,251 @@ +package main + +import ( + "bytes" + "encoding/json" + "flag" + "fmt" + "os" + "path/filepath" + "regexp" + "sort" +) + +type ForgeArtifact struct { + // ABI is a nested JSON data structure, including some objects/maps. + // We declare it as interface, and not raw-message, such that Go decodes into map[string]interface{} + // where possible. The JSON-encoder will then sort the keys (default Go JSON behavior on maps), + // to reproduce the sortKeys(abi) result of the legacy Typescript version of the snapshort-generator. + ABI interface{} `json:"abi"` + Ast *struct { + NodeType string `json:"nodeType"` + Nodes []struct { + NodeType string `json:"nodeType"` + Name string `json:"name"` + ContractKind string `json:"contractKind"` + Abstract bool `json:"abstract"` + } `json:"nodes"` + } `json:"ast"` + StorageLayout struct { + Storage []struct { + Type string `json:"type"` + Label json.RawMessage `json:"label"` + Offset json.RawMessage `json:"offset"` + Slot json.RawMessage `json:"slot"` + } `json:"storage"` + Types map[string]struct { + Label string `json:"label"` + NumberOfBytes json.RawMessage `json:"numberOfBytes"` + } `json:"types"` + } `json:"storageLayout"` + Bytecode struct { + Object string `json:"object"` + } `json:"bytecode"` +} + +type AbiSpecStorageLayoutEntry struct { + Bytes json.RawMessage `json:"bytes"` + Label json.RawMessage `json:"label"` + Offset json.RawMessage `json:"offset"` + Slot json.RawMessage `json:"slot"` + Type string `json:"type"` +} + +func main() { + flag.Parse() + if flag.NArg() != 1 { + fmt.Println("Expected path of contracts-bedrock as CLI argument") + os.Exit(1) + } + rootDir := flag.Arg(0) + err := generateSnapshots(rootDir) + if err != nil { + fmt.Printf("Failed to generate snapshots: %v\n", err) + os.Exit(1) + } +} + +func generateSnapshots(rootDir string) error { + + forgeArtifactsDir := filepath.Join(rootDir, "forge-artifacts") + srcDir := filepath.Join(rootDir, "src") + outDir := filepath.Join(rootDir, "snapshots") + + storageLayoutDir := filepath.Join(outDir, "storageLayout") + abiDir := filepath.Join(outDir, "abi") + + fmt.Printf("writing abi and storage layout snapshots to %s\n", outDir) + + // Clean and recreate directories + if err := os.RemoveAll(storageLayoutDir); err != nil { + return fmt.Errorf("failed to remove storage layout dir: %w", err) + } + if err := os.RemoveAll(abiDir); err != nil { + return fmt.Errorf("failed to remove ABI dir: %w", err) + } + if err := os.MkdirAll(storageLayoutDir, os.ModePerm); err != nil { + return fmt.Errorf("failed to create storage layout dir: %w", err) + } + if err := os.MkdirAll(abiDir, os.ModePerm); err != nil { + return fmt.Errorf("failed to create ABI dir: %w", err) + } + + contractSources, err := getAllContractsSources(srcDir) + if err != nil { + return fmt.Errorf("failed to retrieve contract sources: %w", err) + } + + knownAbis := make(map[string]interface{}) + + for _, contractFile := range contractSources { + contractArtifacts := filepath.Join(forgeArtifactsDir, contractFile) + files, err := os.ReadDir(contractArtifacts) + if err != nil { + return fmt.Errorf("failed to scan contract artifacts of %q: %w", contractFile, err) + } + + for _, file := range files { + artifactPath := filepath.Join(contractArtifacts, file.Name()) + data, err := os.ReadFile(artifactPath) + if err != nil { + return fmt.Errorf("failed to read artifact %q: %w", artifactPath, err) + } + var artifact ForgeArtifact + if err := json.Unmarshal(data, &artifact); err != nil { + return fmt.Errorf("failed to decode artifact %q: %w", artifactPath, err) + } + + contractName, err := parseArtifactName(file.Name()) + if err != nil { + return fmt.Errorf("failed to parse artifact name %q: %w", file.Name(), err) + } + + // HACK: This is a hack to ignore libraries and abstract contracts. Not robust against changes to solc's internal ast repr + if artifact.Ast == nil { + return fmt.Errorf("ast isn't present in forge-artifacts. Did you run forge build with `--ast`? Artifact: %s", artifactPath) + } + // Check if the artifact is a contract + isContract := false + for _, node := range artifact.Ast.Nodes { + if node.NodeType == "ContractDefinition" && + node.Name == contractName && + node.ContractKind == "contract" && + !node.Abstract { + isContract = true + break + } + } + if !isContract { + fmt.Printf("ignoring library/interface %s\n", contractName) + continue + } + + storageLayout := make([]AbiSpecStorageLayoutEntry, 0, len(artifact.StorageLayout.Storage)) + for _, storageEntry := range artifact.StorageLayout.Storage { + // convert ast-based type to solidity type + typ, ok := artifact.StorageLayout.Types[storageEntry.Type] + if !ok { + return fmt.Errorf("undefined type for %s:%s", contractName, storageEntry.Label) + } + storageLayout = append(storageLayout, AbiSpecStorageLayoutEntry{ + Label: storageEntry.Label, + Bytes: typ.NumberOfBytes, + Offset: storageEntry.Offset, + Slot: storageEntry.Slot, + Type: typ.Label, + }) + } + + if existingAbi, exists := knownAbis[contractName]; exists { + if !jsonEqual(existingAbi, artifact.ABI) { + return fmt.Errorf("detected multiple artifact versions with different ABIs for %s", contractFile) + } else { + fmt.Printf("detected multiple artifacts for %s\n", contractName) + } + } else { + knownAbis[contractName] = artifact.ABI + } + + // Sort and write snapshots + if err := writeJSON(filepath.Join(abiDir, contractName+".json"), artifact.ABI); err != nil { + return fmt.Errorf("failed to write ABI snapshot JSON of %q: %w", contractName, err) + } + + if err := writeJSON(filepath.Join(storageLayoutDir, contractName+".json"), storageLayout); err != nil { + return fmt.Errorf("failed to write storage layout snapshot JSON of %q: %w", contractName, err) + } + } + } + return nil +} + +func getAllContractsSources(srcDir string) ([]string, error) { + var paths []string + if err := readFilesRecursively(srcDir, &paths); err != nil { + return nil, fmt.Errorf("failed to retrieve files: %w", err) + } + + var solFiles []string + for _, p := range paths { + if filepath.Ext(p) == ".sol" { + solFiles = append(solFiles, filepath.Base(p)) + } + } + sort.Strings(solFiles) + return solFiles, nil +} + +func readFilesRecursively(dir string, paths *[]string) error { + files, err := os.ReadDir(dir) + if err != nil { + return err + } + + for _, file := range files { + filePath := filepath.Join(dir, file.Name()) + if file.IsDir() { + if err := readFilesRecursively(filePath, paths); err != nil { + return fmt.Errorf("failed to recurse into %q: %w", filePath, err) + } + } else { + *paths = append(*paths, filePath) + } + } + return nil +} + +// ContractName.0.9.8.json -> ContractName.sol +// ContractName.json -> ContractName.sol +func parseArtifactName(artifactVersionFile string) (string, error) { + re := regexp.MustCompile(`(.*?)\.([0-9]+\.[0-9]+\.[0-9]+)?`) + match := re.FindStringSubmatch(artifactVersionFile) + if len(match) < 2 { + return "", fmt.Errorf("invalid artifact file name: %q", artifactVersionFile) + } + return match[1], nil +} + +func writeJSON(filename string, data interface{}) error { + var out bytes.Buffer + enc := json.NewEncoder(&out) + enc.SetEscapeHTML(false) + enc.SetIndent("", " ") + err := enc.Encode(data) + if err != nil { + return fmt.Errorf("failed to encode data: %w", err) + } + jsonData := out.Bytes() + if len(jsonData) > 0 && jsonData[len(jsonData)-1] == '\n' { // strip newline + jsonData = jsonData[:len(jsonData)-1] + } + if err := os.WriteFile(filename, jsonData, 0644); err != nil { + return fmt.Errorf("failed to write file: %w", err) + } + return nil +} + +func jsonEqual(a, b interface{}) bool { + jsonA, errA := json.Marshal(a) + jsonB, errB := json.Marshal(b) + return errA == nil && errB == nil && string(jsonA) == string(jsonB) +} diff --git a/packages/contracts-bedrock/scripts/checks/check-foundry-install.sh b/packages/contracts-bedrock/scripts/checks/check-foundry-install.sh index e7edc7db270e..ccd337e958e7 100755 --- a/packages/contracts-bedrock/scripts/checks/check-foundry-install.sh +++ b/packages/contracts-bedrock/scripts/checks/check-foundry-install.sh @@ -8,7 +8,7 @@ VERSIONS_FILE="${MONOREPO_BASE}/versions.json" if ! command -v forge &> /dev/null then # shellcheck disable=SC2006 - echo "Is Foundry not installed? Consider installing via pnpm install:foundry" >&2 + echo "Is Foundry not installed? Consider installing via just install-foundry" >&2 exit 1 fi @@ -34,5 +34,5 @@ if [ "$INSTALLED_VERSION" = "$EXPECTED_VERSION" ]; then else echo "Mismatch between installed Foundry version ($INSTALLED_VERSION) and expected version ($EXPECTED_VERSION)." echo "Your version of Foundry may either not be up to date, or it could be a later version." - echo "Running pnpm update:foundry will install the expected version." + echo "Running just update-foundry will install the expected version." fi diff --git a/packages/contracts-bedrock/scripts/checks/check-snapshots.sh b/packages/contracts-bedrock/scripts/checks/check-snapshots.sh index cc1ffabd3659..dca296ee8390 100755 --- a/packages/contracts-bedrock/scripts/checks/check-snapshots.sh +++ b/packages/contracts-bedrock/scripts/checks/check-snapshots.sh @@ -3,7 +3,7 @@ set -euo pipefail # Generate the snapshots -pnpm snapshots +just snapshots # Check if the generated `snapshots` or `test/kontrol` files are different from the committed versions if git diff --exit-code snapshots test/kontrol > /dev/null; then diff --git a/packages/contracts-bedrock/scripts/checks/check-spacers.ts b/packages/contracts-bedrock/scripts/checks/check-spacers.ts deleted file mode 100644 index 8967618131d3..000000000000 --- a/packages/contracts-bedrock/scripts/checks/check-spacers.ts +++ /dev/null @@ -1,152 +0,0 @@ -import fs from 'fs' -import path from 'path' - -/** - * Directory path to the artifacts. - * Can be configured as the first argument to the script or - * defaults to the forge-artifacts directory. - */ -const directoryPath = - process.argv[2] || path.join(__dirname, '..', '..', 'forge-artifacts') - -/** - * Returns true if the contract should be skipped when inspecting its storage layout. - * This is useful for abstract contracts that are meant to be inherited. - * The two particular targets are: - * - CrossDomainMessengerLegacySpacer0 - * - CrossDomainMessengerLegacySpacer1 - */ -const skipped = (contractName: string): boolean => { - return contractName.includes('CrossDomainMessengerLegacySpacer') -} - -/** - * Parses out variable info from the variable structure in standard compiler json output. - * - * @param variable Variable structure from standard compiler json output. - * @returns Parsed variable info. - */ -const parseVariableInfo = ( - variable: any -): { - name: string - slot: number - offset: number - length: number -} => { - // Figure out the length of the variable. - let variableLength: number - if (variable.type.startsWith('t_mapping')) { - variableLength = 32 - } else if (variable.type.startsWith('t_uint')) { - variableLength = variable.type.match(/uint([0-9]+)/)?.[1] / 8 - } else if (variable.type.startsWith('t_bytes_')) { - variableLength = 32 - } else if (variable.type.startsWith('t_bytes')) { - variableLength = parseInt(variable.type.match(/bytes([0-9]+)/)?.[1], 10) - } else if (variable.type.startsWith('t_address')) { - variableLength = 20 - } else if (variable.type.startsWith('t_bool')) { - variableLength = 1 - } else if (variable.type.startsWith('t_array')) { - // Figure out the size of the type inside of the array - // and then multiply that by the length of the array. - // This does not support recursion multiple times for simplicity - const type = variable.type.match(/^t_array\((\w+)\)/)?.[1] - const info = parseVariableInfo({ - label: variable.label, - offset: variable.offset, - slot: variable.slot, - type, - }) - const size = variable.type.match(/^t_array\(\w+\)([0-9]+)/)?.[1] - variableLength = info.length * parseInt(size, 10) - } else { - throw new Error( - `${variable.label}: unsupported type ${variable.type}, add it to the script` - ) - } - - return { - name: variable.label, - slot: parseInt(variable.slot, 10), - offset: variable.offset, - length: variableLength, - } -} - -/** - * Main logic of the script - * - Ensures that all of the spacer variables are named correctly - */ -const main = async () => { - const paths = [] - - const readFilesRecursively = (dir: string) => { - const files = fs.readdirSync(dir) - - for (const file of files) { - const filePath = path.join(dir, file) - const fileStat = fs.statSync(filePath) - - if (fileStat.isDirectory()) { - readFilesRecursively(filePath) - } else { - paths.push(filePath) - } - } - } - - readFilesRecursively(directoryPath) - - for (const filePath of paths) { - if (filePath.includes('t.sol')) { - continue - } - const raw = fs.readFileSync(filePath, 'utf8').toString() - const artifact = JSON.parse(raw) - - // Handle contracts without storage - const storageLayout = artifact.storageLayout || {} - if (storageLayout.storage) { - for (const variable of storageLayout.storage) { - const fqn = variable.contract - // Skip some abstract contracts - if (skipped(fqn)) { - continue - } - - // Check that the spacers are all named correctly - if (variable.label.startsWith('spacer_')) { - const [, slot, offset, length] = variable.label.split('_') - const variableInfo = parseVariableInfo(variable) - - // Check that the slot is correct. - if (parseInt(slot, 10) !== variableInfo.slot) { - throw new Error( - `${fqn} ${variable.label} is in slot ${variable.slot} but should be in ${slot}` - ) - } - - // Check that the offset is correct. - if (parseInt(offset, 10) !== variableInfo.offset) { - throw new Error( - `${fqn} ${variable.label} is at offset ${variable.offset} but should be at ${offset}` - ) - } - - // Check that the length is correct. - if (parseInt(length, 10) !== variableInfo.length) { - throw new Error( - `${fqn} ${variable.label} is ${variableInfo.length} bytes long but should be ${length}` - ) - } - - console.log(`${fqn}.${variable.label} is valid`) - } - } - } - } -} - -main() diff --git a/packages/contracts-bedrock/scripts/checks/check-test-names.ts b/packages/contracts-bedrock/scripts/checks/check-test-names.ts deleted file mode 100644 index b3270b1e63c1..000000000000 --- a/packages/contracts-bedrock/scripts/checks/check-test-names.ts +++ /dev/null @@ -1,130 +0,0 @@ -import fs from 'fs' -import path from 'path' -import { execSync } from 'child_process' - -type Check = (parts: string[]) => boolean -type Checks = Array<{ - check: Check - error: string -}> - -/** - * Series of function name checks. - */ -const checks: Checks = [ - { - error: 'test name parts should be in camelCase', - check: (parts: string[]): boolean => { - return parts.every((part) => { - return part[0] === part[0].toLowerCase() - }) - }, - }, - { - error: - 'test names should have either 3 or 4 parts, each separated by underscores', - check: (parts: string[]): boolean => { - return parts.length === 3 || parts.length === 4 - }, - }, - { - error: 'test names should begin with "test", "testFuzz", or "testDiff"', - check: (parts: string[]): boolean => { - return ['test', 'testFuzz', 'testDiff'].includes(parts[0]) - }, - }, - { - error: - 'test names should end with either "succeeds", "reverts", "fails", "works" or "benchmark[_num]"', - check: (parts: string[]): boolean => { - return ( - ['succeeds', 'reverts', 'fails', 'benchmark', 'works'].includes( - parts[parts.length - 1] - ) || - (parts[parts.length - 2] === 'benchmark' && - !isNaN(parseInt(parts[parts.length - 1], 10))) - ) - }, - }, - { - error: - 'failure tests should have 4 parts, third part should indicate the reason for failure', - check: (parts: string[]): boolean => { - return ( - parts.length === 4 || - !['reverts', 'fails'].includes(parts[parts.length - 1]) - ) - }, - }, -] - -/** - * Script for checking that all test functions are named correctly. - */ -const main = async () => { - const result = execSync('forge config --json') - const config = JSON.parse(result.toString()) - const out = config.out || 'out' - - const paths = [] - - const readFilesRecursively = (dir: string) => { - const files = fs.readdirSync(dir) - - for (const file of files) { - const filePath = path.join(dir, file) - const fileStat = fs.statSync(filePath) - - if (fileStat.isDirectory()) { - readFilesRecursively(filePath) - } else { - paths.push(filePath) - } - } - } - - readFilesRecursively(out) - - console.log('Success:') - const errors: string[] = [] - - for (const filepath of paths) { - const artifact = JSON.parse(fs.readFileSync(filepath, 'utf8')) - - let isTest = false - for (const element of artifact.abi) { - if (element.name === 'IS_TEST') { - isTest = true - break - } - } - - if (isTest) { - let success = true - for (const element of artifact.abi) { - // Skip non-functions and functions that don't start with "test". - if (element.type !== 'function' || !element.name.startsWith('test')) { - continue - } - - // Check the rest. - for (const { check, error } of checks) { - if (!check(element.name.split('_'))) { - errors.push(`${filepath}#${element.name}: ${error}`) - success = false - } - } - } - if (success) { - console.log(` - ${path.parse(filepath).name}`) - } - } - } - - if (errors.length > 0) { - console.error(errors.join('\n')) - process.exit(1) - } -} - -main() diff --git a/packages/contracts-bedrock/scripts/checks/names/main.go b/packages/contracts-bedrock/scripts/checks/names/main.go new file mode 100644 index 000000000000..1a0be03f33f2 --- /dev/null +++ b/packages/contracts-bedrock/scripts/checks/names/main.go @@ -0,0 +1,164 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" + "os/exec" + "path/filepath" + "strconv" + "strings" + "unicode" +) + +type Check func(parts []string) bool + +type CheckInfo struct { + check Check + error string +} + +var checks = []CheckInfo{ + { + error: "test name parts should be in camelCase", + check: func(parts []string) bool { + for _, part := range parts { + if len(part) > 0 && unicode.IsUpper(rune(part[0])) { + return false + } + } + return true + }, + }, + { + error: "test names should have either 3 or 4 parts, each separated by underscores", + check: func(parts []string) bool { + return len(parts) == 3 || len(parts) == 4 + }, + }, + { + error: "test names should begin with \"test\", \"testFuzz\", or \"testDiff\"", + check: func(parts []string) bool { + return parts[0] == "test" || parts[0] == "testFuzz" || parts[0] == "testDiff" + }, + }, + { + error: "test names should end with either \"succeeds\", \"reverts\", \"fails\", \"works\" or \"benchmark[_num]\"", + check: func(parts []string) bool { + last := parts[len(parts)-1] + if last == "succeeds" || last == "reverts" || last == "fails" || last == "works" { + return true + } + if len(parts) >= 2 && parts[len(parts)-2] == "benchmark" { + _, err := strconv.Atoi(last) + return err == nil + } + return last == "benchmark" + }, + }, + { + error: "failure tests should have 4 parts, third part should indicate the reason for failure", + check: func(parts []string) bool { + last := parts[len(parts)-1] + return len(parts) == 4 || (last != "reverts" && last != "fails") + }, + }, +} + +func main() { + cmd := exec.Command("forge", "config", "--json") + output, err := cmd.Output() + if err != nil { + fmt.Printf("Error executing forge config: %v\n", err) + os.Exit(1) + } + + var config map[string]interface{} + err = json.Unmarshal(output, &config) + if err != nil { + fmt.Printf("Error parsing forge config: %v\n", err) + os.Exit(1) + } + + outDir, ok := config["out"].(string) + if !ok { + outDir = "out" + } + + fmt.Println("Success:") + var errors []string + + err = filepath.Walk(outDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + if info.IsDir() { + return nil + } + + data, err := os.ReadFile(path) + if err != nil { + return err + } + + var artifact map[string]interface{} + err = json.Unmarshal(data, &artifact) + if err != nil { + return nil // Skip files that are not valid JSON + } + + abi, ok := artifact["abi"].([]interface{}) + if !ok { + return nil + } + + isTest := false + for _, element := range abi { + if elem, ok := element.(map[string]interface{}); ok { + if elem["name"] == "IS_TEST" { + isTest = true + break + } + } + } + + if isTest { + success := true + for _, element := range abi { + if elem, ok := element.(map[string]interface{}); ok { + if elem["type"] == "function" { + name, ok := elem["name"].(string) + if !ok || !strings.HasPrefix(name, "test") { + continue + } + + parts := strings.Split(name, "_") + for _, check := range checks { + if !check.check(parts) { + errors = append(errors, fmt.Sprintf("%s#%s: %s", path, name, check.error)) + success = false + } + } + } + } + } + + if success { + fmt.Printf(" - %s\n", filepath.Base(path[:len(path)-len(filepath.Ext(path))])) + } + } + + return nil + }) + + if err != nil { + fmt.Printf("Error walking the path %q: %v\n", outDir, err) + os.Exit(1) + } + + if len(errors) > 0 { + fmt.Println(strings.Join(errors, "\n")) + os.Exit(1) + } +} diff --git a/packages/contracts-bedrock/scripts/checks/spacers/main.go b/packages/contracts-bedrock/scripts/checks/spacers/main.go new file mode 100644 index 000000000000..3360bda74d39 --- /dev/null +++ b/packages/contracts-bedrock/scripts/checks/spacers/main.go @@ -0,0 +1,176 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" + "regexp" + "strconv" + "strings" +) + +// directoryPath is the path to the artifacts directory. +// It can be configured as the first argument to the script or +// defaults to the forge-artifacts directory. +var directoryPath string + +func init() { + if len(os.Args) > 1 { + directoryPath = os.Args[1] + } else { + currentDir, _ := os.Getwd() + directoryPath = filepath.Join(currentDir, "forge-artifacts") + } +} + +// skipped returns true if the contract should be skipped when inspecting its storage layout. +func skipped(contractName string) bool { + return strings.Contains(contractName, "CrossDomainMessengerLegacySpacer") +} + +// variableInfo represents the parsed variable information. +type variableInfo struct { + name string + slot int + offset int + length int +} + +// parseVariableInfo parses out variable info from the variable structure in standard compiler json output. +func parseVariableInfo(variable map[string]interface{}) (variableInfo, error) { + var info variableInfo + var err error + + info.name = variable["label"].(string) + info.slot, err = strconv.Atoi(variable["slot"].(string)) + if err != nil { + return info, err + } + info.offset = int(variable["offset"].(float64)) + + variableType := variable["type"].(string) + if strings.HasPrefix(variableType, "t_mapping") { + info.length = 32 + } else if strings.HasPrefix(variableType, "t_uint") { + re := regexp.MustCompile(`uint(\d+)`) + matches := re.FindStringSubmatch(variableType) + if len(matches) > 1 { + bitSize, _ := strconv.Atoi(matches[1]) + info.length = bitSize / 8 + } + } else if strings.HasPrefix(variableType, "t_bytes_") { + info.length = 32 + } else if strings.HasPrefix(variableType, "t_bytes") { + re := regexp.MustCompile(`bytes(\d+)`) + matches := re.FindStringSubmatch(variableType) + if len(matches) > 1 { + info.length, _ = strconv.Atoi(matches[1]) + } + } else if strings.HasPrefix(variableType, "t_address") { + info.length = 20 + } else if strings.HasPrefix(variableType, "t_bool") { + info.length = 1 + } else if strings.HasPrefix(variableType, "t_array") { + re := regexp.MustCompile(`^t_array\((\w+)\)(\d+)`) + matches := re.FindStringSubmatch(variableType) + if len(matches) > 2 { + innerType := matches[1] + size, _ := strconv.Atoi(matches[2]) + innerInfo, err := parseVariableInfo(map[string]interface{}{ + "label": variable["label"], + "offset": variable["offset"], + "slot": variable["slot"], + "type": innerType, + }) + if err != nil { + return info, err + } + info.length = innerInfo.length * size + } + } else { + return info, fmt.Errorf("%s: unsupported type %s, add it to the script", info.name, variableType) + } + + return info, nil +} + +func main() { + err := filepath.Walk(directoryPath, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + if info.IsDir() || strings.Contains(path, "t.sol") { + return nil + } + + raw, err := os.ReadFile(path) + if err != nil { + return err + } + + var artifact map[string]interface{} + err = json.Unmarshal(raw, &artifact) + if err != nil { + return err + } + + storageLayout, ok := artifact["storageLayout"].(map[string]interface{}) + if !ok { + return nil + } + + storage, ok := storageLayout["storage"].([]interface{}) + if !ok { + return nil + } + + for _, v := range storage { + variable := v.(map[string]interface{}) + fqn := variable["contract"].(string) + + if skipped(fqn) { + continue + } + + label := variable["label"].(string) + if strings.HasPrefix(label, "spacer_") { + parts := strings.Split(label, "_") + if len(parts) != 4 { + return fmt.Errorf("invalid spacer name format: %s", label) + } + + slot, _ := strconv.Atoi(parts[1]) + offset, _ := strconv.Atoi(parts[2]) + length, _ := strconv.Atoi(parts[3]) + + variableInfo, err := parseVariableInfo(variable) + if err != nil { + return err + } + + if slot != variableInfo.slot { + return fmt.Errorf("%s %s is in slot %d but should be in %d", fqn, label, variableInfo.slot, slot) + } + + if offset != variableInfo.offset { + return fmt.Errorf("%s %s is at offset %d but should be at %d", fqn, label, variableInfo.offset, offset) + } + + if length != variableInfo.length { + return fmt.Errorf("%s %s is %d bytes long but should be %d", fqn, label, variableInfo.length, length) + } + + fmt.Printf("%s.%s is valid\n", fqn, label) + } + } + + return nil + }) + + if err != nil { + fmt.Printf("Error: %v\n", err) + os.Exit(1) + } +} diff --git a/packages/contracts-bedrock/scripts/ChainAssertions.sol b/packages/contracts-bedrock/scripts/deploy/ChainAssertions.sol similarity index 99% rename from packages/contracts-bedrock/scripts/ChainAssertions.sol rename to packages/contracts-bedrock/scripts/deploy/ChainAssertions.sol index b0245fc09fbb..cac489c93e78 100644 --- a/packages/contracts-bedrock/scripts/ChainAssertions.sol +++ b/packages/contracts-bedrock/scripts/deploy/ChainAssertions.sol @@ -19,7 +19,7 @@ import { L1CrossDomainMessenger } from "src/L1/L1CrossDomainMessenger.sol"; import { OptimismMintableERC20Factory } from "src/universal/OptimismMintableERC20Factory.sol"; import { L1ERC721Bridge } from "src/L1/L1ERC721Bridge.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; -import { Types } from "scripts/Types.sol"; +import { Types } from "scripts/libraries/Types.sol"; import { Vm } from "forge-std/Vm.sol"; import { ISystemConfigV0 } from "scripts/interfaces/ISystemConfigV0.sol"; import { console2 as console } from "forge-std/console2.sol"; diff --git a/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol b/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol index 19816f94aa0c..73abe8956a24 100644 --- a/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol @@ -44,18 +44,18 @@ import { L1ERC721Bridge } from "src/L1/L1ERC721Bridge.sol"; import { ProtocolVersions, ProtocolVersion } from "src/L1/ProtocolVersions.sol"; import { StorageSetter } from "src/universal/StorageSetter.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; -import { Chains } from "scripts/Chains.sol"; -import { Config } from "scripts/Config.sol"; +import { Chains } from "scripts/libraries/Chains.sol"; +import { Config } from "scripts/libraries/Config.sol"; import { IBigStepper } from "src/dispute/interfaces/IBigStepper.sol"; import { IPreimageOracle } from "src/cannon/interfaces/IPreimageOracle.sol"; import { AlphabetVM } from "test/mocks/AlphabetVM.sol"; import "src/dispute/lib/Types.sol"; -import { ChainAssertions } from "scripts/ChainAssertions.sol"; -import { Types } from "scripts/Types.sol"; +import { ChainAssertions } from "scripts/deploy/ChainAssertions.sol"; +import { Types } from "scripts/libraries/Types.sol"; import { LibStateDiff } from "scripts/libraries/LibStateDiff.sol"; import { EIP1967Helper } from "test/mocks/EIP1967Helper.sol"; -import { ForgeArtifacts } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.sol"; import { Process } from "scripts/libraries/Process.sol"; /// @title Deploy diff --git a/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol b/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol index 25869e97f080..d720986fcdd5 100644 --- a/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol @@ -4,10 +4,10 @@ pragma solidity 0.8.15; import { Script } from "forge-std/Script.sol"; import { console2 as console } from "forge-std/console2.sol"; import { stdJson } from "forge-std/StdJson.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { Process } from "scripts/libraries/Process.sol"; -import { Chains } from "scripts/Chains.sol"; -import { Config, Fork, ForkUtils } from "scripts/Config.sol"; +import { Chains } from "scripts/libraries/Chains.sol"; +import { Config, Fork, ForkUtils } from "scripts/libraries/Config.sol"; /// @title DeployConfig /// @notice Represents the configuration required to deploy the system. It is expected @@ -30,6 +30,7 @@ contract DeployConfig is Script { uint256 public l2GenesisDeltaTimeOffset; uint256 public l2GenesisEcotoneTimeOffset; uint256 public l2GenesisFjordTimeOffset; + uint256 public l2GenesisGraniteTimeOffset; uint256 public maxSequencerDrift; uint256 public sequencerWindowSize; uint256 public channelTimeout; @@ -108,6 +109,7 @@ contract DeployConfig is Script { l2GenesisDeltaTimeOffset = _readOr(_json, "$.l2GenesisDeltaTimeOffset", NULL_OFFSET); l2GenesisEcotoneTimeOffset = _readOr(_json, "$.l2GenesisEcotoneTimeOffset", NULL_OFFSET); l2GenesisFjordTimeOffset = _readOr(_json, "$.l2GenesisFjordTimeOffset", NULL_OFFSET); + l2GenesisGraniteTimeOffset = _readOr(_json, "$.l2GenesisGraniteTimeOffset", NULL_OFFSET); maxSequencerDrift = stdJson.readUint(_json, "$.maxSequencerDrift"); sequencerWindowSize = stdJson.readUint(_json, "$.sequencerWindowSize"); @@ -243,7 +245,9 @@ contract DeployConfig is Script { } function latestGenesisFork() internal view returns (Fork) { - if (l2GenesisFjordTimeOffset == 0) { + if (l2GenesisGraniteTimeOffset == 0) { + return Fork.GRANITE; + } else if (l2GenesisFjordTimeOffset == 0) { return Fork.FJORD; } else if (l2GenesisEcotoneTimeOffset == 0) { return Fork.ECOTONE; diff --git a/packages/contracts-bedrock/scripts/deploy/Deployer.sol b/packages/contracts-bedrock/scripts/deploy/Deployer.sol index 2a861ba34608..36de8dd440fc 100644 --- a/packages/contracts-bedrock/scripts/deploy/Deployer.sol +++ b/packages/contracts-bedrock/scripts/deploy/Deployer.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.0; import { Script } from "forge-std/Script.sol"; import { Artifacts } from "scripts/Artifacts.s.sol"; -import { Config } from "scripts/Config.sol"; +import { Config } from "scripts/libraries/Config.sol"; import { DeployConfig } from "scripts/deploy/DeployConfig.s.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { console } from "forge-std/console.sol"; /// @title Deployer diff --git a/packages/contracts-bedrock/scripts/FaultDisputeGameViz.s.sol b/packages/contracts-bedrock/scripts/fpac/viz/FaultDisputeGameViz.s.sol similarity index 100% rename from packages/contracts-bedrock/scripts/FaultDisputeGameViz.s.sol rename to packages/contracts-bedrock/scripts/fpac/viz/FaultDisputeGameViz.s.sol diff --git a/packages/contracts-bedrock/scripts/dag-viz.py b/packages/contracts-bedrock/scripts/fpac/viz/dag-viz.py similarity index 100% rename from packages/contracts-bedrock/scripts/dag-viz.py rename to packages/contracts-bedrock/scripts/fpac/viz/dag-viz.py diff --git a/packages/contracts-bedrock/scripts/visualize.sh b/packages/contracts-bedrock/scripts/fpac/viz/visualize.sh similarity index 82% rename from packages/contracts-bedrock/scripts/visualize.sh rename to packages/contracts-bedrock/scripts/fpac/viz/visualize.sh index 4fb3078ebe70..f0ecf872aa2e 100644 --- a/packages/contracts-bedrock/scripts/visualize.sh +++ b/packages/contracts-bedrock/scripts/fpac/viz/visualize.sh @@ -8,6 +8,6 @@ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIR="${DIR%/*}" cd "$DIR" -forge script scripts/FaultDisputeGameViz.s.sol \ +forge script scripts/fpac/viz/FaultDisputeGameViz.s.sol \ --sig "remote(address)" "$FAULT_GAME_ADDRESS" \ --fork-url "$RPC" diff --git a/packages/contracts-bedrock/scripts/getting-started/versions.sh b/packages/contracts-bedrock/scripts/getting-started/versions.sh index 18c0ca3228f8..880bd2898dd9 100755 --- a/packages/contracts-bedrock/scripts/getting-started/versions.sh +++ b/packages/contracts-bedrock/scripts/getting-started/versions.sh @@ -32,19 +32,19 @@ versionFoundry() { ver_git=$(version "$(git --version)") ver_go=$(version "$(go version)") ver_node=$(version "$(node --version)") -ver_pnpm=$(version "$(pnpm --version)") ver_foundry=$(versionFoundry "$(forge --version)") ver_make=$(version "$(make --version)") ver_jq=$(version "$(jq --version)") ver_direnv=$(version "$(direnv --version)") +ver_just=$(version "$(just --version)") # Print versions echo "Dependency | Minimum | Actual" echo "git 2 $ver_git" echo "go 1.21 $ver_go" echo "node 20 $ver_node" -echo "pnpm 9 $ver_pnpm" echo "foundry 0.2.0 (a5efe4f) $ver_foundry" echo "make 3 $ver_make" echo "jq 1.6 $ver_jq" echo "direnv 2 $ver_direnv" +echo "just 1.34.0 $ver_just" diff --git a/packages/contracts-bedrock/scripts/go-ffi/README.md b/packages/contracts-bedrock/scripts/go-ffi/README.md index 968c572d014b..2b928f703f26 100644 --- a/packages/contracts-bedrock/scripts/go-ffi/README.md +++ b/packages/contracts-bedrock/scripts/go-ffi/README.md @@ -11,7 +11,7 @@ A lightweight binary for utilities accessed via `forge`'s `ffi` cheatcode in the ## Usage -To build, run `pnpm build:go-ffi` from this directory or the `contract-bedrock` package. +To build, run `just build-go-ffi` from this directory or the `contract-bedrock` package. ### In a Forge Test diff --git a/packages/contracts-bedrock/scripts/Chains.sol b/packages/contracts-bedrock/scripts/libraries/Chains.sol similarity index 100% rename from packages/contracts-bedrock/scripts/Chains.sol rename to packages/contracts-bedrock/scripts/libraries/Chains.sol diff --git a/packages/contracts-bedrock/scripts/Config.sol b/packages/contracts-bedrock/scripts/libraries/Config.sol similarity index 96% rename from packages/contracts-bedrock/scripts/Config.sol rename to packages/contracts-bedrock/scripts/libraries/Config.sol index 0bf567b3dd1c..d4253113ce8a 100644 --- a/packages/contracts-bedrock/scripts/Config.sol +++ b/packages/contracts-bedrock/scripts/libraries/Config.sol @@ -32,10 +32,11 @@ enum Fork { NONE, DELTA, ECOTONE, - FJORD + FJORD, + GRANITE } -Fork constant LATEST_FORK = Fork.FJORD; +Fork constant LATEST_FORK = Fork.GRANITE; library ForkUtils { function toString(Fork _fork) internal pure returns (string memory) { @@ -47,6 +48,8 @@ library ForkUtils { return "ecotone"; } else if (_fork == Fork.FJORD) { return "fjord"; + } else if (_fork == Fork.GRANITE) { + return "granite"; } else { return "unknown"; } @@ -153,6 +156,8 @@ library Config { return Fork.ECOTONE; } else if (forkHash == keccak256(bytes("fjord"))) { return Fork.FJORD; + } else if (forkHash == keccak256(bytes("granite"))) { + return Fork.GRANITE; } else { revert(string.concat("Config: unknown fork: ", forkStr)); } diff --git a/packages/contracts-bedrock/scripts/Executables.sol b/packages/contracts-bedrock/scripts/libraries/Executables.sol similarity index 100% rename from packages/contracts-bedrock/scripts/Executables.sol rename to packages/contracts-bedrock/scripts/libraries/Executables.sol diff --git a/packages/contracts-bedrock/scripts/ForgeArtifacts.sol b/packages/contracts-bedrock/scripts/libraries/ForgeArtifacts.sol similarity index 97% rename from packages/contracts-bedrock/scripts/ForgeArtifacts.sol rename to packages/contracts-bedrock/scripts/libraries/ForgeArtifacts.sol index 6731e9729a63..315ed6d0c530 100644 --- a/packages/contracts-bedrock/scripts/ForgeArtifacts.sol +++ b/packages/contracts-bedrock/scripts/libraries/ForgeArtifacts.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.0; import { Vm } from "forge-std/Vm.sol"; -import { Executables } from "scripts/Executables.sol"; import { stdJson } from "forge-std/StdJson.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { Process } from "scripts/libraries/Process.sol"; /// @notice Contains information about a storage slot. Mirrors the layout of the storage @@ -54,7 +54,7 @@ library ForgeArtifacts { } /// @notice Returns the storage layout for a deployed contract. - function getStorageLayout(string memory _name) public returns (string memory layout_) { + function getStorageLayout(string memory _name) internal returns (string memory layout_) { string[] memory cmd = new string[](3); cmd[0] = Executables.bash; cmd[1] = "-c"; @@ -64,7 +64,7 @@ library ForgeArtifacts { } /// @notice Returns the abi from a the forge artifact - function getAbi(string memory _name) public returns (string memory abi_) { + function getAbi(string memory _name) internal returns (string memory abi_) { string[] memory cmd = new string[](3); cmd[0] = Executables.bash; cmd[1] = "-c"; diff --git a/packages/contracts-bedrock/scripts/Types.sol b/packages/contracts-bedrock/scripts/libraries/Types.sol similarity index 100% rename from packages/contracts-bedrock/scripts/Types.sol rename to packages/contracts-bedrock/scripts/libraries/Types.sol diff --git a/packages/contracts-bedrock/scripts/FeeVaultWithdrawal.s.sol b/packages/contracts-bedrock/scripts/ops/FeeVaultWithdrawal.s.sol similarity index 96% rename from packages/contracts-bedrock/scripts/FeeVaultWithdrawal.s.sol rename to packages/contracts-bedrock/scripts/ops/FeeVaultWithdrawal.s.sol index f16cc994a4a2..e19cd7e994bd 100644 --- a/packages/contracts-bedrock/scripts/FeeVaultWithdrawal.s.sol +++ b/packages/contracts-bedrock/scripts/ops/FeeVaultWithdrawal.s.sol @@ -3,9 +3,9 @@ pragma solidity 0.8.15; import { console } from "forge-std/console.sol"; import { Script } from "forge-std/Script.sol"; -import { Predeploys } from "../src/libraries/Predeploys.sol"; -import { FeeVault } from "../src/universal/FeeVault.sol"; import { IMulticall3 } from "forge-std/interfaces/IMulticall3.sol"; +import { Predeploys } from "src/libraries/Predeploys.sol"; +import { FeeVault } from "src/universal/FeeVault.sol"; /// @title FeeVaultWithdrawal /// @notice A script to make it very simple to withdraw from the fee vaults. diff --git a/packages/contracts-bedrock/scripts/periphery/deploy/DeployPeriphery.s.sol b/packages/contracts-bedrock/scripts/periphery/deploy/DeployPeriphery.s.sol index 834af21231f1..856104eb2734 100644 --- a/packages/contracts-bedrock/scripts/periphery/deploy/DeployPeriphery.s.sol +++ b/packages/contracts-bedrock/scripts/periphery/deploy/DeployPeriphery.s.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import { console2 as console } from "forge-std/console2.sol"; import { Script } from "forge-std/Script.sol"; -import { Config } from "scripts/Config.sol"; +import { Config } from "scripts/libraries/Config.sol"; import { Artifacts } from "scripts/Artifacts.s.sol"; import { PeripheryDeployConfig } from "scripts/periphery/deploy/PeripheryDeployConfig.s.sol"; diff --git a/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol b/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol index b41142ba8045..1ae5f9ab01a2 100644 --- a/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol +++ b/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol @@ -11,7 +11,7 @@ import { LibDataTypes as GelatoDataTypes } from "gelato/libraries/LibDataTypes.s import { LibTaskId as GelatoTaskId } from "gelato/libraries/LibTaskId.sol"; import { GelatoBytes } from "gelato/vendor/gelato/GelatoBytes.sol"; -import { Config } from "scripts/Config.sol"; +import { Config } from "scripts/libraries/Config.sol"; import { Artifacts } from "scripts/Artifacts.s.sol"; import { DrippieConfig } from "scripts/periphery/drippie/DrippieConfig.s.sol"; diff --git a/packages/contracts-bedrock/scripts/print-addresses.sh b/packages/contracts-bedrock/scripts/utils/print-addresses.sh similarity index 100% rename from packages/contracts-bedrock/scripts/print-addresses.sh rename to packages/contracts-bedrock/scripts/utils/print-addresses.sh diff --git a/packages/contracts-bedrock/scripts/restructure_tests.py b/packages/contracts-bedrock/scripts/utils/restructure_tests.py similarity index 100% rename from packages/contracts-bedrock/scripts/restructure_tests.py rename to packages/contracts-bedrock/scripts/utils/restructure_tests.py diff --git a/packages/contracts-bedrock/scripts/statediff.sh b/packages/contracts-bedrock/scripts/utils/statediff.sh similarity index 100% rename from packages/contracts-bedrock/scripts/statediff.sh rename to packages/contracts-bedrock/scripts/utils/statediff.sh diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index ce8add4c9f7a..79fce55d3de4 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -68,8 +68,8 @@ "sourceCodeHash": "0x3a725791a0f5ed84dc46dcdae26f6170a759b2fe3dc360d704356d088b76cfd6" }, "src/L2/CrossL2Inbox.sol": { - "initCodeHash": "0x318b1e98f1686920e3d309390983454685aa84ed997598ead1b4c1a1938206c4", - "sourceCodeHash": "0xb0d2d5944f11bdf44cb6a16a9b00ab76a9b9f5ab2abb081781fb1c27927eb5ab" + "initCodeHash": "0x80124454d2127d5ff340b0ef048be6d5bf5984e84c75021b6a1ffa81703a2503", + "sourceCodeHash": "0xfb26fc80fbc7febdc91ac73ea91ceb479b238e0e81804a0a21192d78c261a755" }, "src/L2/ETHLiquidity.sol": { "initCodeHash": "0x98177562fca0de0dfea5313c9acefe2fdbd73dee5ce6c1232055601f208f0177", @@ -108,16 +108,20 @@ "sourceCodeHash": "0x8388b9b8075f31d580fed815b66b45394e40fb1a63cd8cda2272d2c390fc908c" }, "src/L2/L2ToL2CrossDomainMessenger.sol": { - "initCodeHash": "0xda499b71aec14976b8e133fad9ece083805f5ff520f0e88f89232fd837451954", - "sourceCodeHash": "0x7a9cddf5b54ac72457231f0c09b8e88398202ac29125cd63318b8389c81e119b" + "initCodeHash": "0xe390be1390edc38fd879d7620538560076d7fcf3ef9debce327a1877d96d3ff0", + "sourceCodeHash": "0x20f77dc5a02869c6885b73347fa9e7d2bbc4eaf8a2313f7e7435e456001f7a75" + }, + "src/L2/OptimismSuperchainERC20.sol": { + "initCodeHash": "0xd49214518ea1a30a43fac09f28b2cee9be570894a500cef342762c9820a070b0", + "sourceCodeHash": "0x6943d40010dcbd1d51dc3668d0a154fbb1568ea49ebcf3aa039d65ef6eab321b" }, "src/L2/SequencerFeeVault.sol": { "initCodeHash": "0xb94145f571e92ee615c6fe903b6568e8aac5fe760b6b65148ffc45d2fb0f5433", "sourceCodeHash": "0x8f2a54104e5e7105ba03ba37e3ef9b6684a447245f0e0b787ba4cca12957b97c" }, "src/L2/SuperchainWETH.sol": { - "initCodeHash": "0x52e302ac749e6a519829e0fb01075638e481e7f010a6438088486a7a4be4601b", - "sourceCodeHash": "0x7c93752288f4414777e01c2962aee929a28aef2c1fccdfeba456f22df0f9aa39" + "initCodeHash": "0x599e948350c70d699f8a8be945abffd126097de97fade056d29767128320fe75", + "sourceCodeHash": "0x3df29ee1321418914d88ce303b521bf8267ef234b919870b26639d08d7f806bd" }, "src/L2/WETH.sol": { "initCodeHash": "0xde72ae96910e95249623c2d695749847e4c4adeaf96a7a35033afd77318a528a", diff --git a/packages/contracts-bedrock/snapshots/abi/CrossL2Inbox.json b/packages/contracts-bedrock/snapshots/abi/CrossL2Inbox.json index fab918cc88fc..db1a70423c69 100644 --- a/packages/contracts-bedrock/snapshots/abi/CrossL2Inbox.json +++ b/packages/contracts-bedrock/snapshots/abi/CrossL2Inbox.json @@ -114,6 +114,51 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "origin", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "logIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + } + ], + "internalType": "struct ICrossL2Inbox.Identifier", + "name": "_id", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "_msgHash", + "type": "bytes32" + } + ], + "name": "validateMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "version", @@ -188,6 +233,11 @@ "name": "NotEntered", "type": "error" }, + { + "inputs": [], + "name": "ReentrantCall", + "type": "error" + }, { "inputs": [], "name": "TargetCallFailed", diff --git a/packages/contracts-bedrock/snapshots/abi/OptimismSuperchainERC20.json b/packages/contracts-bedrock/snapshots/abi/OptimismSuperchainERC20.json new file mode 100644 index 000000000000..6eb57764a8cb --- /dev/null +++ b/packages/contracts-bedrock/snapshots/abi/OptimismSuperchainERC20.json @@ -0,0 +1,637 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "result", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "result", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "result", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_remoteToken", + "type": "address" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "_decimals", + "type": "uint8" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "result", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "relayERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "remoteToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_chainId", + "type": "uint256" + } + ], + "name": "sendERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "result", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Burn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "source", + "type": "uint256" + } + ], + "name": "RelayERC20", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "destination", + "type": "uint256" + } + ], + "name": "SendERC20", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "AllowanceOverflow", + "type": "error" + }, + { + "inputs": [], + "name": "AllowanceUnderflow", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotL2ToL2CrossDomainMessenger", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientAllowance", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidCrossDomainSender", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidPermit", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyBridge", + "type": "error" + }, + { + "inputs": [], + "name": "PermitExpired", + "type": "error" + }, + { + "inputs": [], + "name": "TotalSupplyOverflow", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + } +] \ No newline at end of file diff --git a/packages/contracts-bedrock/snapshots/abi/SuperchainWETH.json b/packages/contracts-bedrock/snapshots/abi/SuperchainWETH.json index 42d3a73e7c56..600e0e6b64f7 100644 --- a/packages/contracts-bedrock/snapshots/abi/SuperchainWETH.json +++ b/packages/contracts-bedrock/snapshots/abi/SuperchainWETH.json @@ -109,6 +109,11 @@ }, { "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, { "internalType": "address", "name": "dst", @@ -303,13 +308,25 @@ { "indexed": true, "internalType": "address", - "name": "_to", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "_amount", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "source", "type": "uint256" } ], @@ -322,25 +339,25 @@ { "indexed": true, "internalType": "address", - "name": "_from", + "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", - "name": "_to", + "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "_amount", + "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "_chainId", + "name": "destination", "type": "uint256" } ], diff --git a/packages/contracts-bedrock/snapshots/abi/TransientReentrancyAware.json b/packages/contracts-bedrock/snapshots/abi/TransientReentrancyAware.json index 0637a088a01e..02e2e526860f 100644 --- a/packages/contracts-bedrock/snapshots/abi/TransientReentrancyAware.json +++ b/packages/contracts-bedrock/snapshots/abi/TransientReentrancyAware.json @@ -1 +1,12 @@ -[] \ No newline at end of file +[ + { + "inputs": [], + "name": "NotEntered", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrantCall", + "type": "error" + } +] \ No newline at end of file diff --git a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-31337.json b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-31337.json index 33e6500b8647..e6334a316aeb 100644 --- a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-31337.json +++ b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-31337.json @@ -36,7 +36,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x34A1D3fff3958843C43aD80F30b94c510645C316", + "account": "0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -70,7 +70,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -84,7 +84,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -130,12 +130,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x34A1D3fff3958843C43aD80F30b94c510645C316", + "account": "0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x1688f0b900000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1000000000000000000000000000000000000000000000000000000000000006047555c7c5eb40250af82c9713b290d445cad0893c01b18ae084f70d0b7b0d67d0000000000000000000000000000000000000000000000000000000000000164b63e800d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data": "0x1688f0b9000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3000000000000000000000000000000000000000000000000000000000000006047555c7c5eb40250af82c9713b290d445cad0893c01b18ae084f70d0b7b0d67d0000000000000000000000000000000000000000000000000000000000000164b63e800d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -146,13 +146,13 @@ "value": 0 }, { - "accessor": "0x34A1D3fff3958843C43aD80F30b94c510645C316", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "accessor": "0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b5060405161016f38038061016f83398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e9565b6000602082840312156100cb57600080fd5b81516001600160a01b03811681146100e257600080fd5b9392505050565b6078806100f76000396000f3fe6080604052600073ffffffffffffffffffffffffffffffffffffffff8154167fa619486e00000000000000000000000000000000000000000000000000000000823503604d57808252602082f35b3682833781823684845af490503d82833e806066573d82fd5b503d81f3fea164736f6c634300080f000a00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "data": "0x608060405234801561001057600080fd5b5060405161016f38038061016f83398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e9565b6000602082840312156100cb57600080fd5b81516001600160a01b03811681146100e257600080fd5b9392505050565b6078806100f76000396000f3fe6080604052600073ffffffffffffffffffffffffffffffffffffffff8154167fa619486e00000000000000000000000000000000000000000000000000000000823503604d57808252602082f35b3682833781823684845af490503d82833e806066573d82fd5b503d81f3fea164736f6c634300080f000a000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "deployedCode": "0x6080604052600073ffffffffffffffffffffffffffffffffffffffff8154167fa619486e00000000000000000000000000000000000000000000000000000000823503604d57808252602082f35b3682833781823684845af490503d82833e806066573d82fd5b503d81f3fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -161,7 +161,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -169,9 +169,9 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -180,8 +180,8 @@ "value": 0 }, { - "accessor": "0x34A1D3fff3958843C43aD80F30b94c510645C316", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "accessor": "0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -195,10 +195,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -206,8 +206,8 @@ "value": 0 }, { - "accessor": "0x34A1D3fff3958843C43aD80F30b94c510645C316", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "accessor": "0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -221,7 +221,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -229,7 +229,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -237,7 +237,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -245,7 +245,7 @@ "slot": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -253,7 +253,7 @@ "slot": "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -261,7 +261,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -269,7 +269,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -277,7 +277,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -285,7 +285,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -293,7 +293,7 @@ "slot": "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -301,7 +301,7 @@ "slot": "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -364,7 +364,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -378,7 +378,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -386,7 +386,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": true, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -398,7 +398,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -412,7 +412,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -475,7 +475,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -489,7 +489,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -497,7 +497,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": true, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -505,7 +505,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -513,7 +513,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": true, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -525,7 +525,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -539,7 +539,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -551,7 +551,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -565,7 +565,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -577,7 +577,7 @@ }, { "accessor": "0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -594,12 +594,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x0652b57a000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "data": "0x0652b57a00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -608,7 +608,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -616,7 +616,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -624,9 +624,9 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": true, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" @@ -636,7 +636,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -650,10 +650,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" } @@ -713,7 +713,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -727,7 +727,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -739,7 +739,7 @@ }, { "accessor": "0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -756,12 +756,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0xf2fde38b0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "data": "0xf2fde38b0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -770,7 +770,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -778,7 +778,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -786,9 +786,9 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": true, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -832,12 +832,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -846,7 +846,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -854,9 +854,9 @@ "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" @@ -1127,12 +1127,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044400ada750000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044400ada750000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -1141,10 +1141,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -1153,12 +1153,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044400ada750000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044400ada750000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -1167,7 +1167,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1175,7 +1175,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1183,7 +1183,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1191,7 +1191,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -1199,7 +1199,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -1207,7 +1207,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1218,13 +1218,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044400ada750000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044400ada750000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -1233,27 +1233,27 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x070dca21862da24de5bcba7acd697f207bda1c8caae3812d68f0baee0dd32f38" + "slot": "0x6bd95c70b8833b95e56b323d763e7bec801ddd693a6478a9d9eb91508b6b5689" } ], "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -1267,15 +1267,15 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": true, "newValue": "0x000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1286,7 +1286,7 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "account": "0x068E44eB31e111028c41598E4535be7468674D0A", "chainInfo": { "chainId": 31337, @@ -1301,7 +1301,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1309,7 +1309,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1317,7 +1317,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1325,7 +1325,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1333,7 +1333,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -1341,7 +1341,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -1349,7 +1349,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": true, "newValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1357,7 +1357,7 @@ "slot": "0xd30e835d3f35624761057ff5b27d558f97bd5be034621e62240e5c0b784abe68" }, { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -1365,7 +1365,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -1403,7 +1403,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -1417,7 +1417,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a", "previousValue": "0x000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a", @@ -1443,7 +1443,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "previousValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", @@ -1455,7 +1455,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -1469,7 +1469,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a", "previousValue": "0x000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a", @@ -1495,7 +1495,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1541,12 +1541,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -1555,7 +1555,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1563,9 +1563,9 @@ "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" @@ -1971,7 +1971,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000003e" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003f" } ], "value": 0 @@ -1997,19 +1997,19 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000003f" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000040" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000416c42991d05b31e9a6dc209e91ad22b79d87ae6000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000647a1ac61e0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000004c52a6277b1b84121b3072c0c92b6be0b7cc10f1000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000647a1ac61e0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -2018,10 +2018,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -2030,12 +2030,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000416c42991d05b31e9a6dc209e91ad22b79d87ae6000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000647a1ac61e0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000004c52a6277b1b84121b3072c0c92b6be0b7cc10f1000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000647a1ac61e0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -2044,7 +2044,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -2052,7 +2052,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -2060,7 +2060,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -2068,7 +2068,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -2076,7 +2076,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -2084,7 +2084,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2095,13 +2095,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000416c42991d05b31e9a6dc209e91ad22b79d87ae6000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000647a1ac61e0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000004c52a6277b1b84121b3072c0c92b6be0b7cc10f1000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000647a1ac61e0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -2110,27 +2110,27 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x9d54a4eb6e745ee152f323ba7a05534bbe68629624a74c9623b7903663b002cf" + "slot": "0x72d7aa813380382c369363d977a28b043ac6e1983f989087faaa96aa4d8d4c12" } ], "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -2144,15 +2144,15 @@ "reverted": false, "storageAccesses": [ { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": true, "newValue": "0x000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2163,7 +2163,7 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "account": "0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F", "chainInfo": { "chainId": 31337, @@ -2178,7 +2178,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2186,7 +2186,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2194,7 +2194,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2202,7 +2202,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2210,7 +2210,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -2218,7 +2218,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -2226,7 +2226,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -2234,7 +2234,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -2242,7 +2242,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2250,39 +2250,39 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": true, "newValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2290,7 +2290,7 @@ "slot": "0x4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace0" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2298,7 +2298,7 @@ "slot": "0xe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1a" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -2306,7 +2306,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -2318,7 +2318,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -2332,7 +2332,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f", "previousValue": "0x000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f", @@ -2387,7 +2387,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -2401,7 +2401,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f", "previousValue": "0x000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f", @@ -2427,7 +2427,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "previousValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", @@ -2458,14 +2458,14 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000003e" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003f" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -2479,7 +2479,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f", "previousValue": "0x000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f", @@ -2505,7 +2505,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2536,14 +2536,14 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000003f" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000040" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -2557,7 +2557,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f", "previousValue": "0x000000000000000000000000fbfd64a6c0257f613fefce050aa30ecc3e3d7c3f", @@ -2583,7 +2583,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6", + "account": "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2631,7 +2631,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000043" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000044" } ], "value": 0 @@ -2655,12 +2655,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -2669,7 +2669,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2677,9 +2677,9 @@ "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" @@ -2740,12 +2740,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -2754,7 +2754,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2762,9 +2762,9 @@ "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" @@ -2825,12 +2825,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b50604051610a44380380610a4483398101604081905261002f9161005d565b610057817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b5061008d565b60006020828403121561006f57600080fd5b81516001600160a01b038116811461008657600080fd5b9392505050565b6109a88061009c6000396000f3fe60806040526004361061005e5760003560e01c8063893d20e811610043578063893d20e8146100b55780639b0b0fda146100f3578063aaf10f42146101135761006d565b806313af4035146100755780636c5d4ad0146100955761006d565b3661006d5761006b610128565b005b61006b610128565b34801561008157600080fd5b5061006b6100903660046107a2565b6103cb565b3480156100a157600080fd5b5061006b6100b036600461080e565b61045c565b3480156100c157600080fd5b506100ca610611565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ff57600080fd5b5061006b61010e3660046108dd565b6106a8565b34801561011f57600080fd5b506100ca610716565b60006101527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7947262000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8516916101d4919061093a565b600060405180830381855afa9150503d806000811461020f576040519150601f19603f3d011682016040523d82523d6000602084013e610214565b606091505b5091509150818015610227575080516020145b156102d9576000818060200190518101906102429190610946565b905080156102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c314368756753706c61736850726f78793a2073797374656d2069732063757260448201527f72656e746c79206265696e67207570677261646564000000000000000000000060648201526084015b60405180910390fd5b505b60006103037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff81166103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4c314368756753706c61736850726f78793a20696d706c656d656e746174696f60448201527f6e206973206e6f7420736574207965740000000000000000000000000000000060648201526084016102ce565b3660008037600080366000845af43d6000803e806103c5573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610424575033155b1561045457610451817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b50565b610451610128565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104b5575033155b156104545760006104e47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050803f82516020840120036104f8575050565b60405160009061052e907f600d380380600d6000396000f30000000000000000000000000000000000000090859060200161095f565b604051602081830303815290604052905060008151602083016000f084516020860120909150813f146105e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4c314368756753706c61736850726f78793a20636f646520776173206e6f742060448201527f636f72726563746c79206465706c6f796564000000000000000000000000000060648201526084016102ce565b61060b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50505050565b600061063b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610672575033155b1561069d57507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6106a5610128565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610701575033155b1561070a579055565b610712610128565b5050565b60006107407fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610777575033155b1561069d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000602082840312156107b457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107d857600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561082057600080fd5b813567ffffffffffffffff8082111561083857600080fd5b818401915084601f83011261084c57600080fd5b81358181111561085e5761085e6107df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156108a4576108a46107df565b816040528281528760208487010111156108bd57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156108f057600080fd5b50508035926020909101359150565b6000815160005b818110156109205760208185018101518683015201610906565b8181111561092f576000828601525b509290920192915050565b60006107d882846108ff565b60006020828403121561095857600080fd5b5051919050565b7fffffffffffffffffffffffffff00000000000000000000000000000000000000831681526000610993600d8301846108ff565b94935050505056fea164736f6c634300080f000a000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0x608060405234801561001057600080fd5b50604051610a44380380610a4483398101604081905261002f9161005d565b610057817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b5061008d565b60006020828403121561006f57600080fd5b81516001600160a01b038116811461008657600080fd5b9392505050565b6109a88061009c6000396000f3fe60806040526004361061005e5760003560e01c8063893d20e811610043578063893d20e8146100b55780639b0b0fda146100f3578063aaf10f42146101135761006d565b806313af4035146100755780636c5d4ad0146100955761006d565b3661006d5761006b610128565b005b61006b610128565b34801561008157600080fd5b5061006b6100903660046107a2565b6103cb565b3480156100a157600080fd5b5061006b6100b036600461080e565b61045c565b3480156100c157600080fd5b506100ca610611565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ff57600080fd5b5061006b61010e3660046108dd565b6106a8565b34801561011f57600080fd5b506100ca610716565b60006101527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7947262000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8516916101d4919061093a565b600060405180830381855afa9150503d806000811461020f576040519150601f19603f3d011682016040523d82523d6000602084013e610214565b606091505b5091509150818015610227575080516020145b156102d9576000818060200190518101906102429190610946565b905080156102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c314368756753706c61736850726f78793a2073797374656d2069732063757260448201527f72656e746c79206265696e67207570677261646564000000000000000000000060648201526084015b60405180910390fd5b505b60006103037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff81166103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4c314368756753706c61736850726f78793a20696d706c656d656e746174696f60448201527f6e206973206e6f7420736574207965740000000000000000000000000000000060648201526084016102ce565b3660008037600080366000845af43d6000803e806103c5573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610424575033155b1561045457610451817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b50565b610451610128565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104b5575033155b156104545760006104e47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050803f82516020840120036104f8575050565b60405160009061052e907f600d380380600d6000396000f30000000000000000000000000000000000000090859060200161095f565b604051602081830303815290604052905060008151602083016000f084516020860120909150813f146105e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4c314368756753706c61736850726f78793a20636f646520776173206e6f742060448201527f636f72726563746c79206465706c6f796564000000000000000000000000000060648201526084016102ce565b61060b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50505050565b600061063b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610672575033155b1561069d57507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6106a5610128565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610701575033155b1561070a579055565b610712610128565b5050565b60006107407fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610777575033155b1561069d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000602082840312156107b457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107d857600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561082057600080fd5b813567ffffffffffffffff8082111561083857600080fd5b818401915084601f83011261084c57600080fd5b81358181111561085e5761085e6107df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156108a4576108a46107df565b816040528281528760208487010111156108bd57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156108f057600080fd5b50508035926020909101359150565b6000815160005b818110156109205760208185018101518683015201610906565b8181111561092f576000828601525b509290920192915050565b60006107d882846108ff565b60006020828403121561095857600080fd5b5051919050565b7fffffffffffffffffffffffffff00000000000000000000000000000000000000831681526000610993600d8301846108ff565b94935050505056fea164736f6c634300080f000a00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x60806040526004361061005e5760003560e01c8063893d20e811610043578063893d20e8146100b55780639b0b0fda146100f3578063aaf10f42146101135761006d565b806313af4035146100755780636c5d4ad0146100955761006d565b3661006d5761006b610128565b005b61006b610128565b34801561008157600080fd5b5061006b6100903660046107a2565b6103cb565b3480156100a157600080fd5b5061006b6100b036600461080e565b61045c565b3480156100c157600080fd5b506100ca610611565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ff57600080fd5b5061006b61010e3660046108dd565b6106a8565b34801561011f57600080fd5b506100ca610716565b60006101527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7947262000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8516916101d4919061093a565b600060405180830381855afa9150503d806000811461020f576040519150601f19603f3d011682016040523d82523d6000602084013e610214565b606091505b5091509150818015610227575080516020145b156102d9576000818060200190518101906102429190610946565b905080156102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c314368756753706c61736850726f78793a2073797374656d2069732063757260448201527f72656e746c79206265696e67207570677261646564000000000000000000000060648201526084015b60405180910390fd5b505b60006103037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff81166103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4c314368756753706c61736850726f78793a20696d706c656d656e746174696f60448201527f6e206973206e6f7420736574207965740000000000000000000000000000000060648201526084016102ce565b3660008037600080366000845af43d6000803e806103c5573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610424575033155b1561045457610451817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b50565b610451610128565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104b5575033155b156104545760006104e47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050803f82516020840120036104f8575050565b60405160009061052e907f600d380380600d6000396000f30000000000000000000000000000000000000090859060200161095f565b604051602081830303815290604052905060008151602083016000f084516020860120909150813f146105e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4c314368756753706c61736850726f78793a20636f646520776173206e6f742060448201527f636f72726563746c79206465706c6f796564000000000000000000000000000060648201526084016102ce565b61060b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50505050565b600061063b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610672575033155b1561069d57507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6106a5610128565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610701575033155b1561070a579055565b610712610128565b5050565b60006107407fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610777575033155b1561069d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000602082840312156107b457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107d857600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561082057600080fd5b813567ffffffffffffffff8082111561083857600080fd5b818401915084601f83011261084c57600080fd5b81358181111561085e5761085e6107df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156108a4576108a46107df565b816040528281528760208487010111156108bd57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156108f057600080fd5b50508035926020909101359150565b6000815160005b818110156109205760208185018101518683015201610906565b8181111561092f576000828601525b509290920192915050565b60006107d882846108ff565b60006020828403121561095857600080fd5b5051919050565b7fffffffffffffffffffffffffff00000000000000000000000000000000000000831681526000610993600d8301846108ff565b94935050505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -2839,9 +2839,9 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" @@ -2902,12 +2902,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b506040516105f03803806105f083398101604081905261002f91610088565b30600090815260016020908152604080832080546001600160a01b0319166001600160a01b03871617905590829052902061006a8282610203565b5050506102c2565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561009b57600080fd5b82516001600160a01b03811681146100b257600080fd5b602084810151919350906001600160401b03808211156100d157600080fd5b818601915086601f8301126100e557600080fd5b8151818111156100f7576100f7610072565b604051601f8201601f19908116603f0116810190838211818310171561011f5761011f610072565b81604052828152898684870101111561013757600080fd5b600093505b82841015610159578484018601518185018701529285019261013c565b8284111561016a5760008684830101525b8096505050505050509250929050565b600181811c9082168061018e57607f821691505b6020821081036101ae57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fe57600081815260208120601f850160051c810160208610156101db5750805b601f850160051c820191505b818110156101fa578281556001016101e7565b5050505b505050565b81516001600160401b0381111561021c5761021c610072565b6102308161022a845461017a565b846101b4565b602080601f831160018114610265576000841561024d5750858301515b600019600386901b1c1916600185901b1785556101fa565b600085815260208120601f198616915b8281101561029457888601518255948401946001909101908401610275565b50858210156102b25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61031f806102d16000396000f3fe608060408181523060009081526001602090815282822054908290529181207fbf40fac1000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061006d9060846101e2565b602060405180830381865afa15801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae91906102c5565b905073ffffffffffffffffffffffffffffffffffffffff8116610157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f5265736f6c76656444656c656761746550726f78793a2074617267657420616460448201527f6472657373206d75737420626520696e697469616c697a656400000000000000606482015260840160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16600036604051610182929190610302565b600060405180830381855af49150503d80600081146101bd576040519150601f19603f3d011682016040523d82523d6000602084013e6101c2565b606091505b5090925090508115156001036101da57805160208201f35b805160208201fd5b600060208083526000845481600182811c91508083168061020457607f831692505b858310810361023a577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b878601838152602001818015610257576001811461028b576102b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616825284151560051b820196506102b6565b60008b81526020902060005b868110156102b057815484820152908501908901610297565b83019750505b50949998505050505050505050565b6000602082840312156102d757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102fb57600080fd5b9392505050565b818382376000910190815291905056fea164736f6c634300080f000a000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c30000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", + "data": "0x608060405234801561001057600080fd5b506040516105f03803806105f083398101604081905261002f91610088565b30600090815260016020908152604080832080546001600160a01b0319166001600160a01b03871617905590829052902061006a8282610203565b5050506102c2565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561009b57600080fd5b82516001600160a01b03811681146100b257600080fd5b602084810151919350906001600160401b03808211156100d157600080fd5b818601915086601f8301126100e557600080fd5b8151818111156100f7576100f7610072565b604051601f8201601f19908116603f0116810190838211818310171561011f5761011f610072565b81604052828152898684870101111561013757600080fd5b600093505b82841015610159578484018601518185018701529285019261013c565b8284111561016a5760008684830101525b8096505050505050509250929050565b600181811c9082168061018e57607f821691505b6020821081036101ae57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fe57600081815260208120601f850160051c810160208610156101db5750805b601f850160051c820191505b818110156101fa578281556001016101e7565b5050505b505050565b81516001600160401b0381111561021c5761021c610072565b6102308161022a845461017a565b846101b4565b602080601f831160018114610265576000841561024d5750858301515b600019600386901b1c1916600185901b1785556101fa565b600085815260208120601f198616915b8281101561029457888601518255948401946001909101908401610275565b50858210156102b25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61031f806102d16000396000f3fe608060408181523060009081526001602090815282822054908290529181207fbf40fac1000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061006d9060846101e2565b602060405180830381865afa15801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae91906102c5565b905073ffffffffffffffffffffffffffffffffffffffff8116610157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f5265736f6c76656444656c656761746550726f78793a2074617267657420616460448201527f6472657373206d75737420626520696e697469616c697a656400000000000000606482015260840160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16600036604051610182929190610302565b600060405180830381855af49150503d80600081146101bd576040519150601f19603f3d011682016040523d82523d6000602084013e6101c2565b606091505b5090925090508115156001036101da57805160208201f35b805160208201fd5b600060208083526000845481600182811c91508083168061020457607f831692505b858310810361023a577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b878601838152602001818015610257576001811461028b576102b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616825284151560051b820196506102b6565b60008b81526020902060005b868110156102b057815484820152908501908901610297565b83019750505b50949998505050505050505050565b6000602082840312156102d757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102fb57600080fd5b9392505050565b818382376000910190815291905056fea164736f6c634300080f000a00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c40000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", "deployedCode": "0x608060408181523060009081526001602090815282822054908290529181207fbf40fac1000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061006d9060846101e2565b602060405180830381865afa15801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae91906102c5565b905073ffffffffffffffffffffffffffffffffffffffff8116610157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f5265736f6c76656444656c656761746550726f78793a2074617267657420616460448201527f6472657373206d75737420626520696e697469616c697a656400000000000000606482015260840160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16600036604051610182929190610302565b600060405180830381855af49150503d80600081146101bd576040519150601f19603f3d011682016040523d82523d6000602084013e6101c2565b606091505b5090925090508115156001036101da57805160208201f35b805160208201fd5b600060208083526000845481600182811c91508083168061020457607f831692505b858310810361023a577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b878601838152602001818015610257576001811461028b576102b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616825284151560051b820196506102b6565b60008b81526020902060005b868110156102b057815484820152908501908901610297565b83019750505b50949998505050505050505050565b6000602082840312156102d757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102fb57600080fd5b9392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -2916,36 +2916,36 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": true, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xeae32376463217751b8fa4dea8c38ab253664fa3605de6d85d2e790aa970f2b8" + "slot": "0x6822ddba83a78589c753bb747cf4919773ec1d36eeb0bb2a09d64b6d87adda0b" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": true, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xeae32376463217751b8fa4dea8c38ab253664fa3605de6d85d2e790aa970f2b8" + "slot": "0x6822ddba83a78589c753bb747cf4919773ec1d36eeb0bb2a09d64b6d87adda0b" } ], "value": 0 @@ -3003,12 +3003,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -3017,7 +3017,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3025,9 +3025,9 @@ "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" @@ -3088,12 +3088,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -3102,7 +3102,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3110,9 +3110,9 @@ "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" @@ -3173,12 +3173,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -3187,7 +3187,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3195,9 +3195,9 @@ "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" @@ -3258,12 +3258,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -3272,7 +3272,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3280,9 +3280,9 @@ "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" @@ -3343,12 +3343,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -3357,7 +3357,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3365,9 +3365,9 @@ "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" @@ -3428,12 +3428,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", @@ -3442,7 +3442,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3450,9 +3450,9 @@ "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" @@ -3513,7 +3513,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3527,7 +3527,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -3539,7 +3539,7 @@ }, { "accessor": "0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3556,12 +3556,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0xf2fde38b000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "data": "0xf2fde38b00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3570,7 +3570,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -3578,7 +3578,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -3586,9 +3586,9 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -3598,7 +3598,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3612,10 +3612,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -4271,7 +4271,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000049" + "slot": "0x000000000000000000000000000000000000000000000000000000000000004a" } ], "value": 0 @@ -5809,7 +5809,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000049" + "slot": "0x000000000000000000000000000000000000000000000000000000000000004a" } ], "value": 0 @@ -6762,7 +6762,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000042" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000043" } ], "value": 0 @@ -6788,7 +6788,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000042" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000043" } ], "value": 0 @@ -6814,7 +6814,7 @@ "newValue": "0x000000000000000000000000000000000000000000000000000000000000000c", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000c", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000040" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000041" } ], "value": 0 @@ -6840,7 +6840,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000041" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000042" } ], "value": 0 @@ -7499,7 +7499,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000093a80", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000093a80", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000003a" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003b" } ], "value": 0 @@ -7731,7 +7731,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000093a80", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000093a80", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000003a" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003b" } ], "value": 0 @@ -7808,7 +7808,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000002710", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000002710", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000003b" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003c" } ], "value": 0 @@ -7834,7 +7834,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000078", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000078", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000003c" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003d" } ], "value": 0 @@ -8377,7 +8377,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160a06040523480156200001157600080fd5b5060405162000fc938038062000fc983398101604081905262000034916200026b565b6001600160a01b0381166080526040805160008082526020820190925262000081916200007a565b620000666200022d565b8152602001906001900390816200005c5790505b5062000088565b50620002db565b600054610100900460ff1615808015620000a95750600054600160ff909116105b80620000d95750620000c6306200021e60201b620007c61760201c565b158015620000d9575060005460ff166001145b620001415760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff19166001179055801562000165576000805461ff0019166101001790555b60005b8251811015620001d25760008382815181106200018957620001896200029d565b60209081029190910181015180820151905163ffffffff166000908152600180845260409091208251815591909201519101555080620001c981620002b3565b91505062000168565b5080156200021a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b6040518060400160405280600063ffffffff16815260200162000266604051806040016040528060008019168152602001600081525090565b905290565b6000602082840312156200027e57600080fd5b81516001600160a01b03811681146200029657600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201620002d457634e487b7160e01b600052601160045260246000fd5b5060010190565b608051610ccb620002fe6000396000818161013101526102000152610ccb6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160a06040523480156200001157600080fd5b5060405162000fc938038062000fc983398101604081905262000034916200026b565b6001600160a01b0381166080526040805160008082526020820190925262000081916200007a565b620000666200022d565b8152602001906001900390816200005c5790505b5062000088565b50620002db565b600054610100900460ff1615808015620000a95750600054600160ff909116105b80620000d95750620000c6306200021e60201b620007c61760201c565b158015620000d9575060005460ff166001145b620001415760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff19166001179055801562000165576000805461ff0019166101001790555b60005b8251811015620001d25760008382815181106200018957620001896200029d565b60209081029190910181015180820151905163ffffffff166000908152600180845260409091208251815591909201519101555080620001c981620002b3565b91505062000168565b5080156200021a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b6040518060400160405280600063ffffffff16815260200162000266604051806040016040528060008019168152602001600081525090565b905290565b6000602082840312156200027e57600080fd5b81516001600160a01b03811681146200029657600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201620002d457634e487b7160e01b600052601160045260246000fd5b5060010190565b608051610ccb620002fe6000396000818161013101526102000152610ccb6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8389,13 +8389,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x610C37dd344e47D7848Da075a90128472140e80f", + "account": "0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60a06040523480156200001157600080fd5b5060405162000fc938038062000fc983398101604081905262000034916200026b565b6001600160a01b0381166080526040805160008082526020820190925262000081916200007a565b620000666200022d565b8152602001906001900390816200005c5790505b5062000088565b50620002db565b600054610100900460ff1615808015620000a95750600054600160ff909116105b80620000d95750620000c6306200021e60201b620007c61760201c565b158015620000d9575060005460ff166001145b620001415760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff19166001179055801562000165576000805461ff0019166101001790555b60005b8251811015620001d25760008382815181106200018957620001896200029d565b60209081029190910181015180820151905163ffffffff166000908152600180845260409091208251815591909201519101555080620001c981620002b3565b91505062000168565b5080156200021a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b6040518060400160405280600063ffffffff16815260200162000266604051806040016040528060008019168152602001600081525090565b905290565b6000602082840312156200027e57600080fd5b81516001600160a01b03811681146200029657600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201620002d457634e487b7160e01b600052601160045260246000fd5b5060010190565b608051610ccb620002fe6000396000818161013101526102000152610ccb6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb", - "deployedCode": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a", + "data": "0x60a06040523480156200001157600080fd5b5060405162000fc938038062000fc983398101604081905262000034916200026b565b6001600160a01b0381166080526040805160008082526020820190925262000081916200007a565b620000666200022d565b8152602001906001900390816200005c5790505b5062000088565b50620002db565b600054610100900460ff1615808015620000a95750600054600160ff909116105b80620000d95750620000c6306200021e60201b620007c61760201c565b158015620000d9575060005460ff166001145b620001415760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff19166001179055801562000165576000805461ff0019166101001790555b60005b8251811015620001d25760008382815181106200018957620001896200029d565b60209081029190910181015180820151905163ffffffff166000908152600180845260409091208251815591909201519101555080620001c981620002b3565b91505062000168565b5080156200021a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b6040518060400160405280600063ffffffff16815260200162000266604051806040016040528060008019168152602001600081525090565b905290565b6000602082840312156200027e57600080fd5b81516001600160a01b03811681146200029657600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201620002d457634e487b7160e01b600052601160045260246000fd5b5060010190565b608051610ccb620002fe6000396000818161013101526102000152610ccb6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d", + "deployedCode": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -8403,7 +8403,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x610C37dd344e47D7848Da075a90128472140e80f", + "account": "0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8411,7 +8411,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x610C37dd344e47D7848Da075a90128472140e80f", + "account": "0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8419,7 +8419,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x610C37dd344e47D7848Da075a90128472140e80f", + "account": "0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8427,7 +8427,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x610C37dd344e47D7848Da075a90128472140e80f", + "account": "0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8435,7 +8435,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x610C37dd344e47D7848Da075a90128472140e80f", + "account": "0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -8443,7 +8443,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x610C37dd344e47D7848Da075a90128472140e80f", + "account": "0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -8451,7 +8451,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x610C37dd344e47D7848Da075a90128472140e80f", + "account": "0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -8459,7 +8459,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x610C37dd344e47D7848Da075a90128472140e80f", + "account": "0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -8524,7 +8524,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000043" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000044" } ], "value": 0 @@ -8548,12 +8548,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d813100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d58650000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d813100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df990000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8562,10 +8562,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -8574,12 +8574,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d813100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d58650000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d813100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df990000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -8588,7 +8588,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", @@ -8596,7 +8596,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", @@ -8604,7 +8604,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", @@ -8612,7 +8612,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -8620,7 +8620,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -8628,7 +8628,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8639,13 +8639,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d813100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d58650000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d813100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df990000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8654,32 +8654,32 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x9302c2c5f397028777ab180924fb28ceaf3af9b6a91b43410c4c0afe36476877" + "slot": "0x727598a658f6983be3a9f29beef55aaee89ef8a176baeeacbe7edf5ff94a781b" } ], "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef286000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d813100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d58650000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef286000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d813100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df990000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8688,15 +8688,15 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, "newValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8707,13 +8707,13 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "account": "0xbdD90485FCbcac869D5b5752179815a3103d8131", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0xc0c53b8b000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d58650000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "data": "0xc0c53b8b00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df990000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -8722,7 +8722,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8730,7 +8730,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8738,7 +8738,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8746,7 +8746,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8754,7 +8754,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -8762,7 +8762,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -8770,7 +8770,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8778,15 +8778,15 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, - "newValue": "0x000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865", + "newValue": "0x00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8794,15 +8794,15 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, - "newValue": "0x0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb", + "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8810,15 +8810,15 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, - "newValue": "0x0000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900", + "newValue": "0x00000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8826,7 +8826,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8834,7 +8834,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8842,7 +8842,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -8850,7 +8850,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8858,7 +8858,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, "newValue": "0x000000000000000100000000000000000000000000000000000000003b9aca00", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8866,7 +8866,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -8874,7 +8874,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -8886,7 +8886,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8900,7 +8900,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", "previousValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", @@ -8972,7 +8972,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8986,7 +8986,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", "previousValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", @@ -9012,10 +9012,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865", - "previousValue": "0x000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865", + "newValue": "0x00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99", + "previousValue": "0x00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" } @@ -9024,7 +9024,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9038,7 +9038,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", "previousValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", @@ -9064,10 +9064,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb", - "previousValue": "0x0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb", + "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "previousValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" } @@ -9076,7 +9076,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9090,7 +9090,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", "previousValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", @@ -9116,10 +9116,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900", - "previousValue": "0x0000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900", + "newValue": "0x00000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100", + "previousValue": "0x00000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" } @@ -9127,8 +9127,8 @@ "value": 0 }, { - "accessor": "0x978e3286EB805934215a88694d80b09aDed68D90", - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "accessor": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9142,7 +9142,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a", "previousValue": "0x000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a", @@ -9153,7 +9153,7 @@ "value": 0 }, { - "accessor": "0x978e3286EB805934215a88694d80b09aDed68D90", + "accessor": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "account": "0x068E44eB31e111028c41598E4535be7468674D0A", "chainInfo": { "chainId": 31337, @@ -9168,7 +9168,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "previousValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", @@ -9180,7 +9180,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9194,7 +9194,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", "previousValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", @@ -9220,10 +9220,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900", - "previousValue": "0x0000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900", + "newValue": "0x00000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100", + "previousValue": "0x00000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" } @@ -9232,7 +9232,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9246,7 +9246,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a", "previousValue": "0x000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a", @@ -9272,7 +9272,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9284,7 +9284,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9298,7 +9298,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", "previousValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", @@ -9324,10 +9324,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900", - "previousValue": "0x0000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900", + "newValue": "0x00000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100", + "previousValue": "0x00000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" } @@ -9335,8 +9335,8 @@ "value": 0 }, { - "accessor": "0x978e3286EB805934215a88694d80b09aDed68D90", - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "accessor": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9350,7 +9350,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a", "previousValue": "0x000000000000000000000000068e44eb31e111028c41598e4535be7468674d0a", @@ -9361,7 +9361,7 @@ "value": 0 }, { - "accessor": "0x978e3286EB805934215a88694d80b09aDed68D90", + "accessor": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "account": "0x068E44eB31e111028c41598E4535be7468674D0A", "chainInfo": { "chainId": 31337, @@ -9376,7 +9376,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809", + "account": "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9388,7 +9388,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9402,7 +9402,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", "previousValue": "0x000000000000000000000000bdd90485fcbcac869d5b5752179815a3103d8131", @@ -9428,7 +9428,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x978e3286EB805934215a88694d80b09aDed68D90", + "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000dead", @@ -9493,7 +9493,7 @@ "newValue": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", "previousValue": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001b" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001c" } ], "value": 0 @@ -9519,7 +9519,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000049" + "slot": "0x000000000000000000000000000000000000000000000000000000000000004a" } ], "value": 0 @@ -9571,7 +9571,7 @@ "newValue": "0x000000000000000000000000000000000000000000000001000c5fc500000558", "previousValue": "0x000000000000000000000000000000000000000000000001000c5fc500000558", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000030" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000031" } ], "value": 0 @@ -9597,7 +9597,7 @@ "newValue": "0x000000000000000000000000000000000000000000000001000c5fc500000558", "previousValue": "0x000000000000000000000000000000000000000000000001000c5fc500000558", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000030" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000031" } ], "value": 0 @@ -9623,7 +9623,7 @@ "newValue": "0x00000000000000000000000000000000000000000000000000000000017d7840", "previousValue": "0x00000000000000000000000000000000000000000000000000000000017d7840", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000002f" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000030" } ], "value": 0 @@ -9649,7 +9649,7 @@ "newValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "previousValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000019" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001a" } ], "value": 0 @@ -9675,19 +9675,19 @@ "newValue": "0x000000000000000000000000ff00000000000000000000000000000000000000", "previousValue": "0x000000000000000000000000ff00000000000000000000000000000000000000", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001a" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001b" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284db9040fa0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000055800000000000000000000000000000000000000000000000000000000000c5fc50000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff000000000000000000000000000000000000000000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa600000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284db9040fa0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000055800000000000000000000000000000000000000000000000000000000000c5fc50000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff00000000000000000000000000000000000000000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d586500000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -9696,10 +9696,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -9708,12 +9708,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284db9040fa0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000055800000000000000000000000000000000000000000000000000000000000c5fc50000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff000000000000000000000000000000000000000000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa600000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284db9040fa0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000055800000000000000000000000000000000000000000000000000000000000c5fc50000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff00000000000000000000000000000000000000000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d586500000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -9722,7 +9722,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", @@ -9730,7 +9730,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000003", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", @@ -9738,7 +9738,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000003", @@ -9746,7 +9746,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -9754,7 +9754,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -9762,7 +9762,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9773,13 +9773,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284db9040fa0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000055800000000000000000000000000000000000000000000000000000000000c5fc50000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff000000000000000000000000000000000000000000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa600000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284db9040fa0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000055800000000000000000000000000000000000000000000000000000000000c5fc50000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff00000000000000000000000000000000000000000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d586500000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -9788,32 +9788,32 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xd3deaf3a60ea46c2d27b806d7db934a156a6d7fcbf10bbe9f1bbdd2a215a1261" + "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" } ], "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef28600000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000284db9040fa0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000055800000000000000000000000000000000000000000000000000000000000c5fc50000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff000000000000000000000000000000000000000000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef28600000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000284db9040fa0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000055800000000000000000000000000000000000000000000000000000000000c5fc50000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff00000000000000000000000000000000000000000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d586500000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -9822,15 +9822,15 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9841,13 +9841,13 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "account": "0x67866A5052E5302aaD08e9f352331fd8622eB6DC", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0xdb9040fa0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000055800000000000000000000000000000000000000000000000000000000000c5fc50000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff000000000000000000000000000000000000000000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "data": "0xdb9040fa0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000055800000000000000000000000000000000000000000000000000000000000c5fc50000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff00000000000000000000000000000000000000000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d586500000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -9856,7 +9856,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9864,7 +9864,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9872,7 +9872,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9880,7 +9880,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9888,7 +9888,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -9896,7 +9896,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -9904,7 +9904,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -9912,7 +9912,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -9920,7 +9920,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9928,39 +9928,39 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9968,7 +9968,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000067" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9976,7 +9976,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x00000000000000000000000000000000000c5fc5000005580000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9984,7 +9984,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x010000000000000000000000000000000000000000000000000c5fc500000558", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9992,7 +9992,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000066" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10000,7 +10000,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000065" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10008,7 +10008,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000000000000000c5fc5000005580000000000000000", "previousValue": "0x00000000000000000000000000000000000c5fc5000005580000000000000000", @@ -10016,7 +10016,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x00000000000000000000000000000000000c5fc50000055800000000017d7840", "previousValue": "0x00000000000000000000000000000000000c5fc5000005580000000000000000", @@ -10024,7 +10024,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10032,7 +10032,7 @@ "slot": "0x65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x000000000000000000000000ff00000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10040,55 +10040,55 @@ "slot": "0x71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc597" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "newValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580636" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", + "newValue": "0x000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a7" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "newValue": "0x00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6376" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb", + "newValue": "0x0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa906" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x000000000000000000000000978e3286eb805934215a88694d80b09aded68d90", + "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ac" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", + "newValue": "0x000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320c" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10096,7 +10096,7 @@ "slot": "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10104,7 +10104,7 @@ "slot": "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000000000000000c5fc50000055800000000017d7840", "previousValue": "0x00000000000000000000000000000000000c5fc50000055800000000017d7840", @@ -10112,7 +10112,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10120,7 +10120,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x0000ffffffffffffffffffffffffffffffff000f42403b9aca00080a01312d00", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10128,7 +10128,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000ffffffffffffffffffffffffffffffff000f42403b9aca00080a01312d00", "previousValue": "0x0000ffffffffffffffffffffffffffffffff000f42403b9aca00080a01312d00", @@ -10136,7 +10136,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -10144,7 +10144,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -10156,7 +10156,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10170,7 +10170,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10199,7 +10199,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10213,7 +10213,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10239,7 +10239,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000ffffffffffffffffffffffffffffffff000f42403b9aca00080a01312d00", "previousValue": "0x0000ffffffffffffffffffffffffffffffff000f42403b9aca00080a01312d00", @@ -10277,7 +10277,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10291,7 +10291,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10317,7 +10317,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "previousValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", @@ -10348,14 +10348,14 @@ "newValue": "0x000000000000000000000000000000000000000000000001000c5fc500000558", "previousValue": "0x000000000000000000000000000000000000000000000001000c5fc500000558", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000030" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000031" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10369,7 +10369,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10395,7 +10395,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000000000000000c5fc50000055800000000017d7840", "previousValue": "0x00000000000000000000000000000000000c5fc50000055800000000017d7840", @@ -10426,14 +10426,14 @@ "newValue": "0x000000000000000000000000000000000000000000000001000c5fc500000558", "previousValue": "0x000000000000000000000000000000000000000000000001000c5fc500000558", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000030" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000031" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10447,7 +10447,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10473,7 +10473,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000000000000000c5fc50000055800000000017d7840", "previousValue": "0x00000000000000000000000000000000000c5fc50000055800000000017d7840", @@ -10504,14 +10504,14 @@ "newValue": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", "previousValue": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001b" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001c" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10525,7 +10525,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10551,7 +10551,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", "previousValue": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", @@ -10582,14 +10582,14 @@ "newValue": "0x00000000000000000000000000000000000000000000000000000000017d7840", "previousValue": "0x00000000000000000000000000000000000000000000000000000000017d7840", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000002f" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000030" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10603,7 +10603,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10629,7 +10629,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000000000000000c5fc50000055800000000017d7840", "previousValue": "0x00000000000000000000000000000000000c5fc50000055800000000017d7840", @@ -10660,14 +10660,14 @@ "newValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "previousValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000019" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001a" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10681,7 +10681,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10707,7 +10707,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "previousValue": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", @@ -10719,7 +10719,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10733,7 +10733,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10759,7 +10759,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x010000000000000000000000000000000000000000000000000c5fc500000558", "previousValue": "0x010000000000000000000000000000000000000000000000000c5fc500000558", @@ -10790,14 +10790,14 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000003d" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003e" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10811,7 +10811,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10837,7 +10837,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -10868,14 +10868,14 @@ "newValue": "0x000000000000000000000000ff00000000000000000000000000000000000000", "previousValue": "0x000000000000000000000000ff00000000000000000000000000000000000000", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001a" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001b" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10889,7 +10889,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10915,7 +10915,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x000000000000000000000000ff00000000000000000000000000000000000000", "previousValue": "0x000000000000000000000000ff00000000000000000000000000000000000000", @@ -10927,7 +10927,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10941,7 +10941,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -10967,10 +10967,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", - "previousValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "newValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", + "previousValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", "reverted": false, "slot": "0x383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580636" } @@ -10979,7 +10979,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10993,7 +10993,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -11019,10 +11019,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", - "previousValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", + "newValue": "0x000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865", + "previousValue": "0x000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865", "reverted": false, "slot": "0x46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a7" } @@ -11031,7 +11031,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11045,7 +11045,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -11071,10 +11071,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", - "previousValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "newValue": "0x00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", + "previousValue": "0x00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", "reverted": false, "slot": "0x9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6376" } @@ -11083,7 +11083,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11097,7 +11097,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -11123,10 +11123,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb", - "previousValue": "0x000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb", + "newValue": "0x0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d", + "previousValue": "0x0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d", "reverted": false, "slot": "0x52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa906" } @@ -11135,7 +11135,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11149,7 +11149,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -11175,10 +11175,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000978e3286eb805934215a88694d80b09aded68d90", - "previousValue": "0x000000000000000000000000978e3286eb805934215a88694d80b09aded68d90", + "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "previousValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", "reverted": false, "slot": "0x4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ac" } @@ -11187,7 +11187,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11201,7 +11201,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, "newValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", "previousValue": "0x00000000000000000000000067866a5052e5302aad08e9f352331fd8622eb6dc", @@ -11227,10 +11227,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb", + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", - "previousValue": "0x00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", + "newValue": "0x000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb", + "previousValue": "0x000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb", "reverted": false, "slot": "0xa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320c" } @@ -11273,12 +11273,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6bd9f5160000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "data": "0x6bd9f51600000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", "deployedCode": "0x", "initialized": true, "kind": "StaticCall", @@ -11287,24 +11287,24 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x727598a658f6983be3a9f29beef55aaee89ef8a176baeeacbe7edf5ff94a781b" + "slot": "0x540cf4e2f45b866b44f44bde51e109474016dc46a0670fbe1684ad8eaf90fdc3" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000448d52d4a00000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000448d52d4a000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11313,10 +11313,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -11325,12 +11325,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000448d52d4a00000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000448d52d4a000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -11339,7 +11339,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000004", @@ -11347,7 +11347,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000004", @@ -11355,7 +11355,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000005", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000004", @@ -11363,7 +11363,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -11371,7 +11371,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -11379,7 +11379,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11390,13 +11390,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x8d52d4a00000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000000000000000000000000000000000000000000001", + "data": "0x8d52d4a000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000000000000000000000000000000000000000000001", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11405,40 +11405,40 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x727598a658f6983be3a9f29beef55aaee89ef8a176baeeacbe7edf5ff94a781b" + "slot": "0x540cf4e2f45b866b44f44bde51e109474016dc46a0670fbe1684ad8eaf90fdc3" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x727598a658f6983be3a9f29beef55aaee89ef8a176baeeacbe7edf5ff94a781b" + "slot": "0x540cf4e2f45b866b44f44bde51e109474016dc46a0670fbe1684ad8eaf90fdc3" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6bd9f5160000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "data": "0x6bd9f51600000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", "deployedCode": "0x", "initialized": true, "kind": "StaticCall", @@ -11447,24 +11447,24 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "reverted": false, - "slot": "0x727598a658f6983be3a9f29beef55aaee89ef8a176baeeacbe7edf5ff94a781b" + "slot": "0x540cf4e2f45b866b44f44bde51e109474016dc46a0670fbe1684ad8eaf90fdc3" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab03510000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11473,10 +11473,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -11485,12 +11485,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab03510000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -11499,7 +11499,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000005", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000005", @@ -11507,7 +11507,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000005", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000005", @@ -11515,7 +11515,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000005", @@ -11523,7 +11523,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -11531,7 +11531,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -11539,7 +11539,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11550,13 +11550,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb00000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab03510000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa600000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11565,43 +11565,43 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "reverted": false, - "slot": "0x727598a658f6983be3a9f29beef55aaee89ef8a176baeeacbe7edf5ff94a781b" + "slot": "0x540cf4e2f45b866b44f44bde51e109474016dc46a0670fbe1684ad8eaf90fdc3" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "reverted": false, - "slot": "0x727598a658f6983be3a9f29beef55aaee89ef8a176baeeacbe7edf5ff94a781b" + "slot": "0x540cf4e2f45b866b44f44bde51e109474016dc46a0670fbe1684ad8eaf90fdc3" } ], "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11617,8 +11617,8 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11632,15 +11632,15 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": true, "newValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11651,13 +11651,13 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0xc0c53b8b0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb", + "data": "0xc0c53b8b000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab03510000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11666,10 +11666,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" } @@ -11677,8 +11677,8 @@ "value": 0 }, { - "accessor": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11692,10 +11692,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" } @@ -11703,8 +11703,8 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11718,7 +11718,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", "previousValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", @@ -11729,13 +11729,13 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "account": "0xb7900B27Be8f0E0fF65d1C3A4671e1220437dd2b", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0xc0c53b8b0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb", + "data": "0xc0c53b8b000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab03510000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -11744,7 +11744,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11752,7 +11752,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11760,7 +11760,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11768,7 +11768,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11776,7 +11776,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -11784,7 +11784,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -11792,7 +11792,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11800,15 +11800,15 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": true, - "newValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "newValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11816,15 +11816,15 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": true, - "newValue": "0x0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb", + "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -11832,7 +11832,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11840,15 +11840,15 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": true, - "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "newValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11856,7 +11856,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11864,7 +11864,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -11872,7 +11872,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -11884,7 +11884,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11898,10 +11898,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" } @@ -11909,8 +11909,8 @@ "value": 0 }, { - "accessor": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11924,10 +11924,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" } @@ -11936,7 +11936,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11950,7 +11950,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", "previousValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", @@ -11979,7 +11979,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11993,10 +11993,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" } @@ -12004,8 +12004,8 @@ "value": 0 }, { - "accessor": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12019,10 +12019,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" } @@ -12031,7 +12031,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12045,7 +12045,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", "previousValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", @@ -12071,10 +12071,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, - "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", - "previousValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "newValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", + "previousValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" } @@ -12083,7 +12083,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12097,10 +12097,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" } @@ -12108,8 +12108,8 @@ "value": 0 }, { - "accessor": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12123,10 +12123,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" } @@ -12135,7 +12135,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12149,7 +12149,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", "previousValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", @@ -12175,10 +12175,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, - "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", - "previousValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "newValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", + "previousValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" } @@ -12187,7 +12187,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12201,10 +12201,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" } @@ -12212,8 +12212,8 @@ "value": 0 }, { - "accessor": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12227,10 +12227,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" } @@ -12239,7 +12239,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12253,7 +12253,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", "previousValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", @@ -12279,7 +12279,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -12291,7 +12291,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12305,10 +12305,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" } @@ -12316,8 +12316,8 @@ "value": 0 }, { - "accessor": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12331,10 +12331,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" } @@ -12343,7 +12343,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12357,7 +12357,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", "previousValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", @@ -12383,7 +12383,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -12395,7 +12395,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12409,10 +12409,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" } @@ -12420,8 +12420,8 @@ "value": 0 }, { - "accessor": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12435,10 +12435,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" } @@ -12447,7 +12447,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12461,7 +12461,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, "newValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", "previousValue": "0x000000000000000000000000b7900b27be8f0e0ff65d1c3a4671e1220437dd2b", @@ -12487,10 +12487,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, - "newValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", - "previousValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "newValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", + "previousValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" } @@ -12533,12 +12533,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e80400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d58650000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e80400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -12547,10 +12547,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -12559,12 +12559,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e80400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d58650000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e80400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -12573,7 +12573,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", @@ -12581,7 +12581,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", @@ -12589,7 +12589,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", @@ -12597,7 +12597,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -12605,7 +12605,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -12613,7 +12613,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -12624,13 +12624,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e80400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d58650000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e80400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -12639,32 +12639,32 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" + "slot": "0x9ab6929e7d0104b9744ecf48c9c83f65e34bb9eb80c70a88b6b8885e3bf62b15" } ], "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef2860000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e80400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef2860000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e80400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -12673,15 +12673,15 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": true, "newValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -12692,13 +12692,13 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "account": "0x5C4F5e749A61a9503c4AAE8a9393e89609a0e804", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x485cc9550000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "data": "0x485cc955000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -12707,7 +12707,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -12715,7 +12715,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -12723,7 +12723,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -12731,7 +12731,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -12739,7 +12739,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -12747,7 +12747,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -12755,7 +12755,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -12763,15 +12763,15 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": true, - "newValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "newValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -12779,7 +12779,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -12787,15 +12787,15 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": true, - "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "newValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -12803,7 +12803,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000002" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000014", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -12811,7 +12811,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000002" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -12819,7 +12819,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -12831,7 +12831,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12845,7 +12845,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", "previousValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", @@ -12874,7 +12874,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12888,7 +12888,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", "previousValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", @@ -12914,7 +12914,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000014", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000014", @@ -12926,7 +12926,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12940,7 +12940,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", "previousValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", @@ -12966,7 +12966,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000014", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000014", @@ -12978,7 +12978,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -12992,7 +12992,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", "previousValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", @@ -13018,10 +13018,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, - "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", - "previousValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "newValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", + "previousValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" } @@ -13030,7 +13030,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -13044,7 +13044,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", "previousValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", @@ -13070,10 +13070,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, - "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", - "previousValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "newValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", + "previousValue": "0x000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" } @@ -13082,7 +13082,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -13096,7 +13096,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, "newValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", "previousValue": "0x0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804", @@ -13122,10 +13122,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", "isWrite": false, - "newValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", - "previousValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "newValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", + "previousValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" } @@ -13168,12 +13168,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000c49623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad56700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000c49623609d000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad56700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de800000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -13182,10 +13182,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -13194,12 +13194,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000c49623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad56700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000c49623609d000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad56700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de800000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -13208,7 +13208,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000007", @@ -13216,7 +13216,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000007", @@ -13224,7 +13224,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000008", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000007", @@ -13232,7 +13232,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -13240,7 +13240,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -13248,7 +13248,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -13259,13 +13259,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad56700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad56700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de800000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d00000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -13274,32 +13274,32 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x540cf4e2f45b866b44f44bde51e109474016dc46a0670fbe1684ad8eaf90fdc3" + "slot": "0xf6cecbacbfeb99e6ab0f02c22fd8a103f8837deb80af03d481ac5bc8d5475f58" } ], "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef28600000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad56700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef28600000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad56700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de800000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d00000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -13308,15 +13308,15 @@ "reverted": false, "storageAccesses": [ { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": true, "newValue": "0x00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad567", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -13327,13 +13327,13 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "account": "0x39Aea2Dd53f2d01c15877aCc2791af6BDD7aD567", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0xc4d66de80000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "data": "0xc4d66de800000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -13342,7 +13342,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -13350,7 +13350,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -13358,7 +13358,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -13366,7 +13366,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -13374,7 +13374,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -13382,7 +13382,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -13390,7 +13390,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -13398,15 +13398,15 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": true, - "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "newValue": "0x00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -13414,7 +13414,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -13426,7 +13426,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -13440,7 +13440,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, "newValue": "0x00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad567", "previousValue": "0x00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad567", @@ -13469,7 +13469,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -13483,7 +13483,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, "newValue": "0x00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad567", "previousValue": "0x00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad567", @@ -13509,10 +13509,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, - "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", - "previousValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "newValue": "0x00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", + "previousValue": "0x00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" } @@ -13521,7 +13521,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -13535,7 +13535,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, "newValue": "0x00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad567", "previousValue": "0x00000000000000000000000039aea2dd53f2d01c15877acc2791af6bdd7ad567", @@ -13561,10 +13561,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", "isWrite": false, - "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", - "previousValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "newValue": "0x00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", + "previousValue": "0x00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" } @@ -13607,12 +13607,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6bd9f5160000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "data": "0x6bd9f516000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", "deployedCode": "0x", "initialized": true, "kind": "StaticCall", @@ -13621,24 +13621,24 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000448d52d4a00000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000448d52d4a0000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -13647,10 +13647,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -13659,12 +13659,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000448d52d4a00000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000448d52d4a0000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -13673,7 +13673,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000008", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000008", @@ -13681,7 +13681,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000008", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000008", @@ -13689,7 +13689,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000009", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000008", @@ -13697,7 +13697,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -13705,7 +13705,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -13713,7 +13713,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -13724,13 +13724,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x8d52d4a00000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000002", + "data": "0x8d52d4a0000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000000000000000000000000000000000000000002", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -13739,40 +13739,40 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6bd9f5160000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "data": "0x6bd9f516000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", "deployedCode": "0x", "initialized": true, "kind": "StaticCall", @@ -13781,19 +13781,19 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -13807,7 +13807,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -13815,7 +13815,7 @@ "slot": "0xa90bdf0e44f0927a7a755fa7e7503fcc3da69ee33c69f36790fa0e0ef2db4745" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -13827,12 +13827,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000084860f7cda0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000084860f7cda000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -13841,10 +13841,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -13853,12 +13853,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000084860f7cda0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000084860f7cda000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -13867,7 +13867,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000009", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000009", @@ -13875,7 +13875,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000009", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000009", @@ -13883,7 +13883,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000a", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000009", @@ -13891,7 +13891,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -13899,7 +13899,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -13907,7 +13907,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -13918,13 +13918,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x860f7cda0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", + "data": "0x860f7cda000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -13933,40 +13933,40 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x7cda2d9a7dd1a58982b7fac9315bdc1ed8c92aeb9c22cd8555aaa54972f01ccb" + "slot": "0x89a8cb4d9b6f179480a9e676431122d6ba6a5fb2aa9462528e7e48e497a5c045" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": true, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x7cda2d9a7dd1a58982b7fac9315bdc1ed8c92aeb9c22cd8555aaa54972f01ccb" + "slot": "0x89a8cb4d9b6f179480a9e676431122d6ba6a5fb2aa9462528e7e48e497a5c045" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x238181ae0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", + "data": "0x238181ae000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f", "deployedCode": "0x", "initialized": true, "kind": "StaticCall", @@ -13975,40 +13975,40 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0x7cda2d9a7dd1a58982b7fac9315bdc1ed8c92aeb9c22cd8555aaa54972f01ccb" + "slot": "0x89a8cb4d9b6f179480a9e676431122d6ba6a5fb2aa9462528e7e48e497a5c045" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0x7cda2d9a7dd1a58982b7fac9315bdc1ed8c92aeb9c22cd8555aaa54972f01ccb" + "slot": "0x89a8cb4d9b6f179480a9e676431122d6ba6a5fb2aa9462528e7e48e497a5c045" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0x7cda2d9a7dd1a58982b7fac9315bdc1ed8c92aeb9c22cd8555aaa54972f01ccb" + "slot": "0x89a8cb4d9b6f179480a9e676431122d6ba6a5fb2aa9462528e7e48e497a5c045" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab03510000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -14017,10 +14017,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -14029,12 +14029,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab03510000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -14043,7 +14043,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000a", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000a", @@ -14051,7 +14051,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000a", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000a", @@ -14059,7 +14059,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000b", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000a", @@ -14067,7 +14067,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -14075,7 +14075,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -14083,7 +14083,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14094,13 +14094,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb00000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab03510000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa600000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -14109,66 +14109,66 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0x7cda2d9a7dd1a58982b7fac9315bdc1ed8c92aeb9c22cd8555aaa54972f01ccb" + "slot": "0x89a8cb4d9b6f179480a9e676431122d6ba6a5fb2aa9462528e7e48e497a5c045" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0x7cda2d9a7dd1a58982b7fac9315bdc1ed8c92aeb9c22cd8555aaa54972f01ccb" + "slot": "0x89a8cb4d9b6f179480a9e676431122d6ba6a5fb2aa9462528e7e48e497a5c045" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0x7cda2d9a7dd1a58982b7fac9315bdc1ed8c92aeb9c22cd8555aaa54972f01ccb" + "slot": "0x89a8cb4d9b6f179480a9e676431122d6ba6a5fb2aa9462528e7e48e497a5c045" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" } @@ -14176,8 +14176,8 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14193,8 +14193,8 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14208,15 +14208,15 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14224,7 +14224,7 @@ "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" }, { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": true, "newValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14235,13 +14235,13 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0xc0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb", + "data": "0xc0c53b8b0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab03510000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -14250,27 +14250,27 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0xeae32376463217751b8fa4dea8c38ab253664fa3605de6d85d2e790aa970f2b8" + "slot": "0x6822ddba83a78589c753bb747cf4919773ec1d36eeb0bb2a09d64b6d87adda0b" } ], "value": 0 }, { - "accessor": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "accessor": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14284,7 +14284,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", "previousValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", @@ -14295,13 +14295,13 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "account": "0x094e6508ba9d9bf1ce421fff3dE06aE56e67901b", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0xc0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb", + "data": "0xc0c53b8b0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab03510000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -14310,7 +14310,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14318,7 +14318,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14326,7 +14326,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14334,7 +14334,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14342,7 +14342,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -14350,7 +14350,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": true, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -14358,7 +14358,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14366,15 +14366,15 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": true, - "newValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "newValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14382,15 +14382,15 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": true, - "newValue": "0x000000000000000000000000978e3286eb805934215a88694d80b09aded68d90", + "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14398,15 +14398,15 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": true, - "newValue": "0x0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb", + "newValue": "0x0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -14414,7 +14414,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14422,7 +14422,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14430,7 +14430,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14438,7 +14438,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14446,7 +14446,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -14454,7 +14454,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -14462,7 +14462,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -14474,7 +14474,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14488,27 +14488,27 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0xeae32376463217751b8fa4dea8c38ab253664fa3605de6d85d2e790aa970f2b8" + "slot": "0x6822ddba83a78589c753bb747cf4919773ec1d36eeb0bb2a09d64b6d87adda0b" } ], "value": 0 }, { - "accessor": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "accessor": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14522,7 +14522,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", "previousValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", @@ -14551,7 +14551,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14565,27 +14565,27 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0xeae32376463217751b8fa4dea8c38ab253664fa3605de6d85d2e790aa970f2b8" + "slot": "0x6822ddba83a78589c753bb747cf4919773ec1d36eeb0bb2a09d64b6d87adda0b" } ], "value": 0 }, { - "accessor": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "accessor": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14599,7 +14599,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", "previousValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", @@ -14625,7 +14625,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -14637,7 +14637,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14651,27 +14651,27 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0xeae32376463217751b8fa4dea8c38ab253664fa3605de6d85d2e790aa970f2b8" + "slot": "0x6822ddba83a78589c753bb747cf4919773ec1d36eeb0bb2a09d64b6d87adda0b" } ], "value": 0 }, { - "accessor": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "accessor": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14685,7 +14685,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", "previousValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", @@ -14711,7 +14711,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -14723,7 +14723,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14737,27 +14737,27 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0xeae32376463217751b8fa4dea8c38ab253664fa3605de6d85d2e790aa970f2b8" + "slot": "0x6822ddba83a78589c753bb747cf4919773ec1d36eeb0bb2a09d64b6d87adda0b" } ], "value": 0 }, { - "accessor": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "accessor": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14771,7 +14771,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", "previousValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", @@ -14797,10 +14797,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, - "newValue": "0x000000000000000000000000978e3286eb805934215a88694d80b09aded68d90", - "previousValue": "0x000000000000000000000000978e3286eb805934215a88694d80b09aded68d90", + "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "previousValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", "reverted": false, "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" } @@ -14809,7 +14809,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14823,27 +14823,27 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0xeae32376463217751b8fa4dea8c38ab253664fa3605de6d85d2e790aa970f2b8" + "slot": "0x6822ddba83a78589c753bb747cf4919773ec1d36eeb0bb2a09d64b6d87adda0b" } ], "value": 0 }, { - "accessor": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "accessor": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14857,7 +14857,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", "previousValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", @@ -14883,10 +14883,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, - "newValue": "0x000000000000000000000000978e3286eb805934215a88694d80b09aded68d90", - "previousValue": "0x000000000000000000000000978e3286eb805934215a88694d80b09aded68d90", + "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "previousValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", "reverted": false, "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" } @@ -14895,7 +14895,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14909,27 +14909,27 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, - "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", - "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "newValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", + "previousValue": "0x00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4", "reverted": false, - "slot": "0xa8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c" + "slot": "0x191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284" }, { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, "newValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "previousValue": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", "reverted": false, - "slot": "0xeae32376463217751b8fa4dea8c38ab253664fa3605de6d85d2e790aa970f2b8" + "slot": "0x6822ddba83a78589c753bb747cf4919773ec1d36eeb0bb2a09d64b6d87adda0b" } ], "value": 0 }, { - "accessor": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "accessor": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -14943,7 +14943,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", + "account": "0x50EEf481cae4250d252Ae577A09bF514f224C6C4", "isWrite": false, "newValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", "previousValue": "0x000000000000000000000000094e6508ba9d9bf1ce421fff3de06ae56e67901b", @@ -14969,10 +14969,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "account": "0xDeF3bca8c80064589E6787477FFa7Dd616B5574F", "isWrite": false, - "newValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", - "previousValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "newValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", + "previousValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "reverted": false, "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" } @@ -15034,7 +15034,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001c" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001d" } ], "value": 0 @@ -15086,7 +15086,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001e" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001f" } ], "value": 0 @@ -15112,7 +15112,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001d" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001e" }, { "account": "0x9568d36E291c2C4c34fa5593fcE73715abEf6F9c", @@ -15120,7 +15120,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001d" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001e" } ], "value": 0 @@ -15146,7 +15146,7 @@ "newValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", "previousValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001f" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000020" } ], "value": 0 @@ -15172,7 +15172,7 @@ "newValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", "previousValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000020" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000021" } ], "value": 0 @@ -15198,19 +15198,19 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000024", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000024", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000021" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000022" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001849623609d000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d586500000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e41c89c97d000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b630000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001849623609d00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df9900000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e41c89c97d000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b630000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -15219,10 +15219,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -15231,12 +15231,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001849623609d000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d586500000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e41c89c97d000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b630000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001849623609d00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df9900000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e41c89c97d000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b630000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -15245,7 +15245,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000b", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000b", @@ -15253,7 +15253,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000b", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000b", @@ -15261,7 +15261,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000c", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000b", @@ -15269,7 +15269,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -15277,7 +15277,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -15285,7 +15285,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15296,13 +15296,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d586500000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e41c89c97d000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df9900000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e41c89c97d000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -15311,27 +15311,27 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x9ab6929e7d0104b9744ecf48c9c83f65e34bb9eb80c70a88b6b8885e3bf62b15" + "slot": "0x134d4d69ca1de3e4a1fde55b9ed577a7c39fd3329d50f2f437a3bff291bb9473" } ], "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -15345,15 +15345,15 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15364,7 +15364,7 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "account": "0x19652082F846171168Daf378C4fD3ee85a0D4A60", "chainInfo": { "chainId": 31337, @@ -15379,7 +15379,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15387,7 +15387,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15395,7 +15395,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15403,7 +15403,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15411,7 +15411,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -15419,7 +15419,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -15427,7 +15427,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15435,7 +15435,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15443,7 +15443,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15451,7 +15451,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15459,7 +15459,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000002" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15467,7 +15467,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000007" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, "newValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15475,7 +15475,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000007" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15483,7 +15483,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000006" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, "newValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15491,7 +15491,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000006" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000024", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -15499,7 +15499,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000008" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -15507,7 +15507,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -15519,7 +15519,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -15533,7 +15533,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -15581,7 +15581,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001d" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001e" }, { "account": "0x9568d36E291c2C4c34fa5593fcE73715abEf6F9c", @@ -15589,7 +15589,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001d" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001e" } ], "value": 0 @@ -15615,14 +15615,14 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001c" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001d" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -15636,7 +15636,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -15662,7 +15662,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", @@ -15693,14 +15693,14 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001c" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001d" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -15714,7 +15714,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -15740,7 +15740,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000006", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000006", @@ -15778,7 +15778,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -15792,7 +15792,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -15818,7 +15818,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", @@ -15856,7 +15856,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -15870,7 +15870,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -15896,7 +15896,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000002", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000002", @@ -15927,14 +15927,14 @@ "newValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", "previousValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001f" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000020" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -15948,7 +15948,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -15974,7 +15974,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", "previousValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", @@ -16005,14 +16005,14 @@ "newValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", "previousValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001f" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000020" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -16026,7 +16026,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -16052,7 +16052,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", "previousValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", @@ -16083,14 +16083,14 @@ "newValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", "previousValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000020" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000021" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -16104,7 +16104,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -16130,7 +16130,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", "previousValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", @@ -16161,14 +16161,14 @@ "newValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", "previousValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000020" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000021" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -16182,7 +16182,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -16208,7 +16208,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", "previousValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", @@ -16239,14 +16239,14 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000024", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000024", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000021" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000022" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -16260,7 +16260,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -16286,7 +16286,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000024", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000024", @@ -16317,14 +16317,14 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000024", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000024", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000021" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000022" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -16338,7 +16338,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -16364,7 +16364,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000024", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000024", @@ -16395,14 +16395,14 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001e" + "slot": "0x000000000000000000000000000000000000000000000000000000000000001f" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -16416,7 +16416,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -16442,7 +16442,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -16454,7 +16454,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -16468,7 +16468,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", "previousValue": "0x00000000000000000000000019652082f846171168daf378c4fd3ee85a0d4a60", @@ -16494,7 +16494,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865", + "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -16540,12 +16540,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000c49623609d000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb00000000000000000000000020b168142354cee65a32f6d8cf3033e59229976500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000c49623609d0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d00000000000000000000000020b168142354cee65a32f6d8cf3033e59229976500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -16554,10 +16554,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -16566,12 +16566,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000c49623609d000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb00000000000000000000000020b168142354cee65a32f6d8cf3033e59229976500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000c49623609d0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d00000000000000000000000020b168142354cee65a32f6d8cf3033e59229976500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -16580,7 +16580,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000c", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000c", @@ -16588,7 +16588,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000c", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000c", @@ -16596,7 +16596,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000d", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000c", @@ -16604,7 +16604,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -16612,7 +16612,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -16620,7 +16620,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -16631,13 +16631,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb00000000000000000000000020b168142354cee65a32f6d8cf3033e59229976500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d00000000000000000000000020b168142354cee65a32f6d8cf3033e59229976500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -16646,27 +16646,27 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xf6cecbacbfeb99e6ab0f02c22fd8a103f8837deb80af03d481ac5bc8d5475f58" + "slot": "0x67ba7d8bdda390f76c7887f0749c8ddd97a5488c0685a6600f6146d45a37e9e3" } ], "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -16680,15 +16680,15 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": true, "newValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -16699,7 +16699,7 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "account": "0x20B168142354Cee65a32f6D8cf3033E592299765", "chainInfo": { "chainId": 31337, @@ -16714,7 +16714,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -16722,7 +16722,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -16730,7 +16730,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -16738,7 +16738,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -16746,7 +16746,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -16754,7 +16754,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -16762,7 +16762,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -16770,7 +16770,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -16778,7 +16778,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -16786,31 +16786,31 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": true, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -16818,7 +16818,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -16830,7 +16830,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -16844,7 +16844,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", "previousValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", @@ -16873,7 +16873,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -16887,7 +16887,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", "previousValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", @@ -16913,7 +16913,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -16959,12 +16959,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd9200000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f380000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -16973,10 +16973,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -16985,12 +16985,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd9200000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f380000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -16999,7 +16999,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000d", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000d", @@ -17007,7 +17007,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000d", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000d", @@ -17015,7 +17015,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000e", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000d", @@ -17023,7 +17023,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -17031,7 +17031,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -17039,7 +17039,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17050,13 +17050,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd9200000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f380000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -17065,32 +17065,32 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x67ba7d8bdda390f76c7887f0749c8ddd97a5488c0685a6600f6146d45a37e9e3" + "slot": "0x6c22ba077ba2894f0240d58c3ef000efde161f39c3d967610259aa4c063ae31b" } ], "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef28600000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef28600000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f380000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -17099,15 +17099,15 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": true, "newValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17118,13 +17118,13 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "account": "0x49BBFf1629824A1e7993Ab5c17AFa45D24AB28c9", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x485cc9550000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "data": "0x485cc9550000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f380000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -17133,7 +17133,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17141,7 +17141,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17149,7 +17149,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17157,7 +17157,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17165,7 +17165,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -17173,7 +17173,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -17181,7 +17181,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -17189,7 +17189,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -17197,7 +17197,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17205,31 +17205,31 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": true, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": true, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17237,15 +17237,15 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": true, - "newValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "newValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -17253,7 +17253,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -17265,7 +17265,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -17279,7 +17279,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", "previousValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", @@ -17308,7 +17308,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -17322,7 +17322,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", "previousValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", @@ -17348,7 +17348,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -17379,14 +17379,14 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000093a80", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000093a80", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000003a" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003b" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -17400,7 +17400,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", "previousValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", @@ -17429,7 +17429,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -17443,7 +17443,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", "previousValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", @@ -17469,10 +17469,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, - "newValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", - "previousValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "newValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", + "previousValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" } @@ -17534,7 +17534,7 @@ "newValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "previousValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" } ], "value": 0 @@ -17560,7 +17560,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000034" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" } ], "value": 0 @@ -17586,7 +17586,7 @@ "newValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "previousValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" } ], "value": 0 @@ -17612,7 +17612,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000034" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" } ], "value": 0 @@ -17638,7 +17638,7 @@ "newValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "previousValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" } ], "value": 0 @@ -17664,7 +17664,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000034" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" } ], "value": 0 @@ -17690,7 +17690,7 @@ "newValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "previousValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" } ], "value": 0 @@ -17716,7 +17716,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000034" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" } ], "value": 0 @@ -17742,7 +17742,7 @@ "newValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "previousValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" } ], "value": 0 @@ -17768,19 +17768,19 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000034" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000002c49623609d00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99000000000000000000000000610c37dd344e47d7848da075a90128472140e80f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000224c303f0df000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fedeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000002c49623609d000000000000000000000000d6eaf4c146261653ee059077b78ed088add54309000000000000000000000000e2a80256d1dafe06683f231f8e9561639aa0e9b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000224c303f0df000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fedeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -17789,10 +17789,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, - "newValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", - "previousValue": "0x00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1", + "newValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", + "previousValue": "0x000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" } @@ -17801,12 +17801,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x90193C961A926261B756D1E5bb255e67ff9498A1", + "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000002c49623609d00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99000000000000000000000000610c37dd344e47d7848da075a90128472140e80f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000224c303f0df000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fedeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a76120200000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000002c49623609d000000000000000000000000d6eaf4c146261653ee059077b78ed088add54309000000000000000000000000e2a80256d1dafe06683f231f8e9561639aa0e9b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000224c303f0df000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fedeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -17815,7 +17815,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000e", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000e", @@ -17823,7 +17823,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000e", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000e", @@ -17831,7 +17831,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000000f", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000000e", @@ -17839,7 +17839,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000005" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -17847,7 +17847,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -17855,7 +17855,7 @@ "slot": "0xd1b0d319c6526317dce66989b393dcfb4435c9a65e399a088b63bbf65d7aee32" }, { - "account": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", + "account": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17866,13 +17866,13 @@ "value": 0 }, { - "accessor": "0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3", - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "accessor": "0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99000000000000000000000000610c37dd344e47d7848da075a90128472140e80f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000224c303f0df000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fedeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000d6eaf4c146261653ee059077b78ed088add54309000000000000000000000000e2a80256d1dafe06683f231f8e9561639aa0e9b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000224c303f0df000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fedeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -17881,32 +17881,32 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", + "account": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x134d4d69ca1de3e4a1fde55b9ed577a7c39fd3329d50f2f437a3bff291bb9473" + "slot": "0xf08d105018e9af96f1d26510b09691f8b2194940cdd630ffcaf9fa37fb25c6a6" } ], "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef286000000000000000000000000610c37dd344e47d7848da075a90128472140e80f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000224c303f0df000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fedeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef286000000000000000000000000e2a80256d1dafe06683f231f8e9561639aa0e9b900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000224c303f0df000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fedeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -17915,17 +17915,17 @@ "reverted": false, "storageAccesses": [ { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": false, - "newValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", - "previousValue": "0x000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76", + "newValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", + "previousValue": "0x00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1", "reverted": false, "slot": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, - "newValue": "0x000000000000000000000000610c37dd344e47d7848da075a90128472140e80f", + "newValue": "0x000000000000000000000000e2a80256d1dafe06683f231f8e9561639aa0e9b9", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -17934,8 +17934,8 @@ "value": 0 }, { - "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x610C37dd344e47D7848Da075a90128472140e80f", + "accessor": "0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1", + "account": "0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -17949,7 +17949,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17957,7 +17957,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17965,7 +17965,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17973,7 +17973,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17981,7 +17981,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -17989,7 +17989,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -17997,7 +17997,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18005,7 +18005,7 @@ "slot": "0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18013,7 +18013,7 @@ "slot": "0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4a" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18021,7 +18021,7 @@ "slot": "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18029,7 +18029,7 @@ "slot": "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b6887930" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18037,7 +18037,7 @@ "slot": "0x24a9e90595537a4321bf3a8fd43f02c179fe79a94dde54a8c1a057e2967a4d0b" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18045,7 +18045,7 @@ "slot": "0x24a9e90595537a4321bf3a8fd43f02c179fe79a94dde54a8c1a057e2967a4d0c" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18053,7 +18053,7 @@ "slot": "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18061,7 +18061,7 @@ "slot": "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec3310" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18069,7 +18069,7 @@ "slot": "0x1d32deecea32fd1365d10df47fc6666a05871102e61a115a5c569bca7e5de14d" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18077,7 +18077,7 @@ "slot": "0x1d32deecea32fd1365d10df47fc6666a05871102e61a115a5c569bca7e5de14e" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -18085,7 +18085,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -18097,7 +18097,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -18111,10 +18111,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x39Af23E00F1e662025aA01b0cEdA19542B78DF99", + "account": "0xd6EAF4c146261653EE059077B78ED088Add54309", "isWrite": false, - "newValue": "0x000000000000000000000000610c37dd344e47d7848da075a90128472140e80f", - "previousValue": "0x000000000000000000000000610c37dd344e47d7848da075a90128472140e80f", + "newValue": "0x000000000000000000000000e2a80256d1dafe06683f231f8e9561639aa0e9b9", + "previousValue": "0x000000000000000000000000e2a80256d1dafe06683f231f8e9561639aa0e9b9", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -18123,7 +18123,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x610C37dd344e47D7848Da075a90128472140e80f", + "account": "0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -18193,7 +18193,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000034" } ], "value": 0 @@ -18219,7 +18219,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000034" } ], "value": 0 @@ -18245,7 +18245,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000008", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000008", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" } ], "value": 0 @@ -18271,14 +18271,14 @@ "newValue": "0x00000000000000000000000000000000000000000000000000000000000004b0", "previousValue": "0x00000000000000000000000000000000000000000000000000000000000004b0", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000039" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003a" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -18292,7 +18292,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", "previousValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", @@ -18318,7 +18318,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18349,7 +18349,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000004", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000038" } ], "value": 0 @@ -18375,7 +18375,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000038" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000039" } ], "value": 0 @@ -18408,13 +18408,13 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xcE8C32b1493DB37767fAF988dEC9E80089f4f33c", + "account": "0x357A483a8923686E7fA454Ee93bbc11aFB114743", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6101c06040523480156200001257600080fd5b5060405162005f7438038062005f74833981016040819052620000359162000187565b620000436001607e62000248565b60ff168811156200006757604051633beff19960e11b815260040160405180910390fd5b878710620000885760405163e62ccf3960e01b815260040160405180910390fd5b620000a7856001600160401b03166200014e60201b62000c891760201c565b6001600160401b0316620000cf876001600160401b03166200014e60201b62000c891760201c565b6001600160401b03161115620000f85760405163235dfb2b60e21b815260040160405180910390fd5b63ffffffff9099166101205260809790975260a09590955260c0939093526001600160401b039182166101a0521660e0526001600160a01b0390811661010052908116610140521661016052610180526200027a565b90565b80516001600160401b03811681146200016957600080fd5b919050565b6001600160a01b03811681146200018457600080fd5b50565b6000806000806000806000806000806101408b8d031215620001a857600080fd5b8a5163ffffffff81168114620001bd57600080fd5b809a505060208b0151985060408b0151975060608b01519650620001e460808c0162000151565b9550620001f460a08c0162000151565b945060c08b015162000206816200016e565b60e08c015190945062000219816200016e565b6101008c01519093506200022d816200016e565b809250506101208b015190509295989b9194979a5092959850565b600060ff821660ff8416808210156200027157634e487b7160e01b600052601160045260246000fd5b90039392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051615b82620003f2600039600081816106bb01528181611e9001528181611f4e0152611f78015260008181610a1e01526137960152600081816106130152818161178a01526124b00152600081816105270152818161194c01528181612349015281816128b20152613c5601526000818161088d0152818161246f01526138250152600081816104b40152818161310a015261345f015260008181610a7101528181610f6001528181611e2a01528181611ebb01528181611fb001528181612abe0152612b00015260008181610aa401528181611c7301528181611d9901528181611f1901528181612f5d0152818161365e01528181613d4d01528181614473015281816145a1015281816146a20152614777015260008181610b4b01528181611d3c01528181612bce01528181612c5401528181612e530152612f7e015260008181610786015261301c0152615b826000f3fe6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000000600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000000600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000006157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f000000000000000000000000000000000000000000000000000000000000000095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000000811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000006158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000000600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000006158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000061500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000009061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000009061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000000600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b0000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d407730000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df990000000000000000000000000000000000000000000000000000000000000385", - "deployedCode": "0x6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df9973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df991690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d9092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d1690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a", + "data": "0x6101c06040523480156200001257600080fd5b5060405162005f7438038062005f74833981016040819052620000359162000187565b620000436001607e62000248565b60ff168811156200006757604051633beff19960e11b815260040160405180910390fd5b878710620000885760405163e62ccf3960e01b815260040160405180910390fd5b620000a7856001600160401b03166200014e60201b62000c891760201c565b6001600160401b0316620000cf876001600160401b03166200014e60201b62000c891760201c565b6001600160401b03161115620000f85760405163235dfb2b60e21b815260040160405180910390fd5b63ffffffff9099166101205260809790975260a09590955260c0939093526001600160401b039182166101a0521660e0526001600160a01b0390811661010052908116610140521661016052610180526200027a565b90565b80516001600160401b03811681146200016957600080fd5b919050565b6001600160a01b03811681146200018457600080fd5b50565b6000806000806000806000806000806101408b8d031215620001a857600080fd5b8a5163ffffffff81168114620001bd57600080fd5b809a505060208b0151985060408b0151975060608b01519650620001e460808c0162000151565b9550620001f460a08c0162000151565b945060c08b015162000206816200016e565b60e08c015190945062000219816200016e565b6101008c01519093506200022d816200016e565b809250506101208b015190509295989b9194979a5092959850565b600060ff821660ff8416808210156200027157634e487b7160e01b600052601160045260246000fd5b90039392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051615b82620003f2600039600081816106bb01528181611e9001528181611f4e0152611f78015260008181610a1e01526137960152600081816106130152818161178a01526124b00152600081816105270152818161194c01528181612349015281816128b20152613c5601526000818161088d0152818161246f01526138250152600081816104b40152818161310a015261345f015260008181610a7101528181610f6001528181611e2a01528181611ebb01528181611fb001528181612abe0152612b00015260008181610aa401528181611c7301528181611d9901528181611f1901528181612f5d0152818161365e01528181613d4d01528181614473015281816145a1015281816146a20152614777015260008181610b4b01528181611d3c01528181612bce01528181612c5401528181612e530152612f7e015260008181610786015261301c0152615b826000f3fe6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000000600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000000600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000006157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f000000000000000000000000000000000000000000000000000000000000000095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000000811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000006158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000000600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000006158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000061500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000009061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000009061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000000600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b0000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92000000000000000000000000d6eaf4c146261653ee059077b78ed088add543090000000000000000000000000000000000000000000000000000000000000385", + "deployedCode": "0x6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f000000000000000000000000d6eaf4c146261653ee059077b78ed088add54309610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000d6eaf4c146261653ee059077b78ed088add5430973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000d6eaf4c146261653ee059077b78ed088add543091690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd929092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd921690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -18425,7 +18425,7 @@ }, { "accessor": "0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -18442,12 +18442,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x14f6b1a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce8c32b1493db37767faf988dec9e80089f4f33c", + "data": "0x14f6b1a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000357a483a8923686e7fa454ee93bbc11afb114743", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -18456,7 +18456,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", "previousValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", @@ -18473,7 +18473,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x14f6b1a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce8c32b1493db37767faf988dec9e80089f4f33c", + "data": "0x14f6b1a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000357a483a8923686e7fa454ee93bbc11afb114743", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -18482,7 +18482,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -18490,7 +18490,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18498,9 +18498,9 @@ "slot": "0xffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": true, - "newValue": "0x000000000000000000000000ce8c32b1493db37767faf988dec9e80089f4f33c", + "newValue": "0x000000000000000000000000357a483a8923686e7fa454ee93bbc11afb114743", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0xffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b" @@ -18563,7 +18563,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000034" } ], "value": 0 @@ -18589,7 +18589,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000034" } ], "value": 0 @@ -18615,7 +18615,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000008", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000008", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" } ], "value": 0 @@ -18641,14 +18641,14 @@ "newValue": "0x00000000000000000000000000000000000000000000000000000000000004b0", "previousValue": "0x00000000000000000000000000000000000000000000000000000000000004b0", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000039" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003a" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -18662,7 +18662,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", "previousValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", @@ -18688,7 +18688,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18719,7 +18719,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000004", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000004", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000038" } ], "value": 0 @@ -18745,7 +18745,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000038" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000039" } ], "value": 0 @@ -18771,7 +18771,7 @@ "newValue": "0x00000000000000000000000000000000000000000000000000000000000004b0", "previousValue": "0x00000000000000000000000000000000000000000000000000000000000004b0", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000039" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003a" } ], "value": 0 @@ -18823,7 +18823,7 @@ "newValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", "previousValue": "0x00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000001f" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000020" } ], "value": 0 @@ -18849,20 +18849,20 @@ "newValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", "previousValue": "0x0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", "reverted": false, - "slot": "0x0000000000000000000000000000000000000000000000000000000000000020" + "slot": "0x0000000000000000000000000000000000000000000000000000000000000021" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x357A483a8923686E7fA454Ee93bbc11aFB114743", + "account": "0xb6b1579AA54e2F61e621a40d5F2704D717B3544F", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x6102006040523480156200001257600080fd5b5060405162006269380380620062698339810160408190526200003591620001ac565b8b8b8b8b8b8b8b8b8b8b6200004d6001607e62000289565b60ff168811156200007157604051633beff19960e11b815260040160405180910390fd5b878710620000925760405163e62ccf3960e01b815260040160405180910390fd5b620000b1856001600160401b03166200017460201b62000d051760201c565b6001600160401b0316620000d9876001600160401b03166200017460201b62000d051760201c565b6001600160401b03161115620001025760405163235dfb2b60e21b815260040160405180910390fd5b63ffffffff9099166101205260809790975260a09590955260c0939093526001600160401b039182166101a0521660e0526001600160a01b03908116610100529081166101405290811661016052610180919091529182166101c052166101e05250620002bb98505050505050505050565b90565b80516001600160401b03811681146200018f57600080fd5b919050565b80516001600160a01b03811681146200018f57600080fd5b6000806000806000806000806000806000806101808d8f031215620001d057600080fd5b8c5163ffffffff81168114620001e557600080fd5b809c505060208d01519a5060408d0151995060608d015198506200020c60808e0162000177565b97506200021c60a08e0162000177565b96506200022c60c08e0162000194565b95506200023c60e08e0162000194565b94506200024d6101008e0162000194565b93506101208d01519250620002666101408e0162000194565b9150620002776101608e0162000194565b90509295989b509295989b509295989b565b600060ff821660ff841680821015620002b257634e487b7160e01b600052601160045260246000fd5b90039392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615dfd6200046c6000396000818161058301528181611b1501526120b50152600081816108ce01528181611ad601528181611ba4015261207601526000818161070401528181612ea901528181612f670152612f91015260008181610a9a01526124e801526000818161065c0152818161180601526134bc01526000818161053d015281816119c8015281816129a80152818161336201526138be01526000818161090901528181612577015261347b0152600081816104ca015281816121b101526141b7015260008181610aed01528181610fdc01528181611d7a01528181611dbc01528181612e4301528181612ed40152612fc9015260008181610b20015281816123b001528181612c8c01528181612db201528181612f320152818161400a015281816144b9015281816145ba0152818161468f01528181614f660152615192015260008181610bc701528181611e8a01528181611f1001528181612d5501528181613f00015261402b0152600081816107cf01526140c90152615dfd6000f3fe6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f000000000000000000000000000000000000000000000000000000000000000095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000000811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000000615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000060026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000060016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000000615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000060016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000060016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000000615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b0000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d407730000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99000000000000000000000000000000000000000000000000000000000000038500000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", - "deployedCode": "0x6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df9973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d1690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df991690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d9092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a", + "data": "0x6102006040523480156200001257600080fd5b5060405162006269380380620062698339810160408190526200003591620001ac565b8b8b8b8b8b8b8b8b8b8b6200004d6001607e62000289565b60ff168811156200007157604051633beff19960e11b815260040160405180910390fd5b878710620000925760405163e62ccf3960e01b815260040160405180910390fd5b620000b1856001600160401b03166200017460201b62000d051760201c565b6001600160401b0316620000d9876001600160401b03166200017460201b62000d051760201c565b6001600160401b03161115620001025760405163235dfb2b60e21b815260040160405180910390fd5b63ffffffff9099166101205260809790975260a09590955260c0939093526001600160401b039182166101a0521660e0526001600160a01b03908116610100529081166101405290811661016052610180919091529182166101c052166101e05250620002bb98505050505050505050565b90565b80516001600160401b03811681146200018f57600080fd5b919050565b80516001600160a01b03811681146200018f57600080fd5b6000806000806000806000806000806000806101808d8f031215620001d057600080fd5b8c5163ffffffff81168114620001e557600080fd5b809c505060208d01519a5060408d0151995060608d015198506200020c60808e0162000177565b97506200021c60a08e0162000177565b96506200022c60c08e0162000194565b95506200023c60e08e0162000194565b94506200024d6101008e0162000194565b93506101208d01519250620002666101408e0162000194565b9150620002776101608e0162000194565b90509295989b509295989b509295989b565b600060ff821660ff841680821015620002b257634e487b7160e01b600052601160045260246000fd5b90039392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615dfd6200046c6000396000818161058301528181611b1501526120b50152600081816108ce01528181611ad601528181611ba4015261207601526000818161070401528181612ea901528181612f670152612f91015260008181610a9a01526124e801526000818161065c0152818161180601526134bc01526000818161053d015281816119c8015281816129a80152818161336201526138be01526000818161090901528181612577015261347b0152600081816104ca015281816121b101526141b7015260008181610aed01528181610fdc01528181611d7a01528181611dbc01528181612e4301528181612ed40152612fc9015260008181610b20015281816123b001528181612c8c01528181612db201528181612f320152818161400a015281816144b9015281816145ba0152818161468f01528181614f660152615192015260008181610bc701528181611e8a01528181611f1001528181612d5501528181613f00015261402b0152600081816107cf01526140c90152615dfd6000f3fe6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f000000000000000000000000000000000000000000000000000000000000000095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000000811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000000615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000060026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000060016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000000615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000060016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000060016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000000615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b0000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92000000000000000000000000d6eaf4c146261653ee059077b78ed088add54309000000000000000000000000000000000000000000000000000000000000038500000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63", + "deployedCode": "0x6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f000000000000000000000000d6eaf4c146261653ee059077b78ed088add54309610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000d6eaf4c146261653ee059077b78ed088add5430973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd921690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000d6eaf4c146261653ee059077b78ed088add543091690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd929092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -18873,7 +18873,7 @@ }, { "accessor": "0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -18890,12 +18890,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x14f6b1a30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000357a483a8923686e7fa454ee93bbc11afb114743", + "data": "0x14f6b1a30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b6b1579aa54e2f61e621a40d5f2704d717b3544f", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -18904,7 +18904,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", "previousValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", @@ -18921,7 +18921,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x14f6b1a30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000357a483a8923686e7fa454ee93bbc11afb114743", + "data": "0x14f6b1a30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b6b1579aa54e2f61e621a40d5f2704d717b3544f", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -18930,7 +18930,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -18938,7 +18938,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18946,9 +18946,9 @@ "slot": "0x4d5a9bd2e41301728d41c8e705190becb4e74abe869f75bdb405b63716a35f9e" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": true, - "newValue": "0x000000000000000000000000357a483a8923686e7fa454ee93bbc11afb114743", + "newValue": "0x000000000000000000000000b6b1579aa54e2f61e621a40d5f2704d717b3544f", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x4d5a9bd2e41301728d41c8e705190becb4e74abe869f75bdb405b63716a35f9e" @@ -18992,7 +18992,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -19006,7 +19006,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", "previousValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", @@ -19032,7 +19032,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -19044,7 +19044,7 @@ }, { "accessor": "0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -19061,12 +19061,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0xf2fde38b0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "data": "0xf2fde38b0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -19075,7 +19075,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", "previousValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", @@ -19092,7 +19092,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0xf2fde38b0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "data": "0xf2fde38b0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -19101,7 +19101,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -19109,7 +19109,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -19117,9 +19117,9 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": true, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" @@ -19129,7 +19129,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -19143,7 +19143,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, "newValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", "previousValue": "0x00000000000000000000000020b168142354cee65a32f6d8cf3033e592299765", @@ -19169,10 +19169,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7B87b2b892EA5C3CfF47168881FE168C00377FB", + "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" } @@ -19215,7 +19215,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -19229,7 +19229,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", "previousValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", @@ -19255,7 +19255,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -19267,7 +19267,7 @@ }, { "accessor": "0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -19284,12 +19284,12 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0xf2fde38b0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "data": "0xf2fde38b0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -19298,7 +19298,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", "previousValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", @@ -19315,7 +19315,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0xf2fde38b0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "data": "0xf2fde38b0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -19324,7 +19324,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -19332,7 +19332,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", @@ -19340,9 +19340,9 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": true, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "previousValue": "0x0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" @@ -19352,7 +19352,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -19366,7 +19366,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", "previousValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", @@ -19392,10 +19392,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, - "newValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", - "previousValue": "0x0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3", + "newValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", + "previousValue": "0x0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" } @@ -19423,14 +19423,14 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000093a80", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000093a80", "reverted": false, - "slot": "0x000000000000000000000000000000000000000000000000000000000000003a" + "slot": "0x000000000000000000000000000000000000000000000000000000000000003b" } ], "value": 0 }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -19444,7 +19444,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", "previousValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", @@ -19473,7 +19473,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -19487,7 +19487,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, "newValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", "previousValue": "0x00000000000000000000000049bbff1629824a1e7993ab5c17afa45d24ab28c9", @@ -19513,10 +19513,10 @@ "reverted": false, "storageAccesses": [ { - "account": "0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d", + "account": "0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92", "isWrite": false, - "newValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", - "previousValue": "0x000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "newValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", + "previousValue": "0x0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351", "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" } diff --git a/packages/contracts-bedrock/snapshots/storageLayout/OptimismSuperchainERC20.json b/packages/contracts-bedrock/snapshots/storageLayout/OptimismSuperchainERC20.json new file mode 100644 index 000000000000..0637a088a01e --- /dev/null +++ b/packages/contracts-bedrock/snapshots/storageLayout/OptimismSuperchainERC20.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol b/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol index 970cb80d97a4..9c464df590e7 100644 --- a/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol +++ b/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol @@ -56,21 +56,14 @@ contract CrossL2Inbox is ICrossL2Inbox, ISemver, TransientReentrancyAware { bytes32 internal constant CHAINID_SLOT = 0x6e0446e8b5098b8c8193f964f1b567ec3a2bdaeba33d36acb85c1f1d3f92d313; /// @notice Semantic version. - /// @custom:semver 1.0.0-beta.3 - string public constant version = "1.0.0-beta.3"; + /// @custom:semver 1.0.0-beta.4 + string public constant version = "1.0.0-beta.4"; /// @notice Emitted when a cross chain message is being executed. /// @param msgHash Hash of message payload being executed. /// @param id Encoded Identifier of the message. event ExecutingMessage(bytes32 indexed msgHash, Identifier id); - /// @notice Enforces that cross domain message sender and source are set. Reverts if not. - /// Used to differentiate between 0 and nil in transient storage. - modifier notEntered() { - if (TransientContext.callDepth() == 0) revert NotEntered(); - _; - } - /// @notice Returns the origin address of the Identifier. If not entered, reverts. /// @return Origin address of the Identifier. function origin() external view notEntered returns (address) { @@ -114,10 +107,8 @@ contract CrossL2Inbox is ICrossL2Inbox, ISemver, TransientReentrancyAware { payable reentrantAware { - if (_id.timestamp > block.timestamp) revert InvalidTimestamp(); - if (!IDependencySet(Predeploys.L1_BLOCK_ATTRIBUTES).isInDependencySet(_id.chainId)) { - revert InvalidChainId(); - } + // Check the Identifier. + _checkIdentifier(_id); // Store the Identifier in transient storage. _storeIdentifier(_id); @@ -131,6 +122,30 @@ contract CrossL2Inbox is ICrossL2Inbox, ISemver, TransientReentrancyAware { emit ExecutingMessage(keccak256(_message), _id); } + /// @notice Validates a cross chain message on the destination chain + /// and emits an ExecutingMessage event. This function is useful + /// for applications that understand the schema of the _message payload and want to + /// process it in a custom way. + /// @param _id Identifier of the message. + /// @param _msgHash Hash of the message payload to call target with. + function validateMessage(Identifier calldata _id, bytes32 _msgHash) external { + // Check the Identifier. + _checkIdentifier(_id); + + emit ExecutingMessage(_msgHash, _id); + } + + /// @notice Validates that for a given cross chain message identifier, + /// it's timestamp is not in the future and the source chainId + /// is in the destination chain's dependency set. + /// @param _id Identifier of the message. + function _checkIdentifier(Identifier calldata _id) internal view { + if (_id.timestamp > block.timestamp) revert InvalidTimestamp(); + if (!IDependencySet(Predeploys.L1_BLOCK_ATTRIBUTES).isInDependencySet(_id.chainId)) { + revert InvalidChainId(); + } + } + /// @notice Stores the Identifier in transient storage. /// @param _id Identifier to store. function _storeIdentifier(Identifier calldata _id) internal { diff --git a/packages/contracts-bedrock/src/L2/IOptimismSuperchainERC20.sol b/packages/contracts-bedrock/src/L2/IOptimismSuperchainERC20.sol new file mode 100644 index 000000000000..9b9594e75d78 --- /dev/null +++ b/packages/contracts-bedrock/src/L2/IOptimismSuperchainERC20.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { ISuperchainERC20Extensions } from "./ISuperchainERC20.sol"; + +/// @title IOptimismSuperchainERC20Extension +/// @notice This interface is available on the OptimismSuperchainERC20 contract. +/// We declare it as a separate interface so that it can be used in +/// custom implementations of SuperchainERC20. +interface IOptimismSuperchainERC20Extension is ISuperchainERC20Extensions { + /// @notice Emitted whenever tokens are minted for an account. + /// @param account Address of the account tokens are being minted for. + /// @param amount Amount of tokens minted. + event Mint(address indexed account, uint256 amount); + + /// @notice Emitted whenever tokens are burned from an account. + /// @param account Address of the account tokens are being burned from. + /// @param amount Amount of tokens burned. + event Burn(address indexed account, uint256 amount); + + /// @notice Allows the L2StandardBridge to mint tokens. + /// @param _to Address to mint tokens to. + /// @param _amount Amount of tokens to mint. + function mint(address _to, uint256 _amount) external; + + /// @notice Allows the L2StandardBridge to burn tokens. + /// @param _from Address to burn tokens from. + /// @param _amount Amount of tokens to burn. + function burn(address _from, uint256 _amount) external; + + /// @notice Returns the address of the corresponding version of this token on the remote chain. + function remoteToken() external view returns (address); +} + +/// @title IOptimismSuperchainERC20 +/// @notice Combines the ERC20 interface with the OptimismSuperchainERC20Extension interface. +interface IOptimismSuperchainERC20 is IERC20, IOptimismSuperchainERC20Extension { } diff --git a/packages/contracts-bedrock/src/L2/ISuperchainERC20.sol b/packages/contracts-bedrock/src/L2/ISuperchainERC20.sol index b104a08d928e..76488cdf32ea 100644 --- a/packages/contracts-bedrock/src/L2/ISuperchainERC20.sol +++ b/packages/contracts-bedrock/src/L2/ISuperchainERC20.sol @@ -9,27 +9,30 @@ import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /// importing the full SuperchainERC20 interface would cause conflicting imports. interface ISuperchainERC20Extensions { /// @notice Emitted when tokens are sent from one chain to another. - /// @param _from Address of the sender. - /// @param _to Address of the recipient. - /// @param _amount Number of tokens sent. - /// @param _chainId Chain ID of the recipient. - event SendERC20(address indexed _from, address indexed _to, uint256 _amount, uint256 _chainId); + /// @param from Address of the sender. + /// @param to Address of the recipient. + /// @param amount Number of tokens sent. + /// @param destination Chain ID of the destination chain. + event SendERC20(address indexed from, address indexed to, uint256 amount, uint256 destination); - /// @notice Emitted when token sends are relayed to this chain. - /// @param _to Address of the recipient. - /// @param _amount Number of tokens sent. - event RelayERC20(address indexed _to, uint256 _amount); + /// @notice Emitted whenever tokens are successfully relayed on this chain. + /// @param from Address of the msg.sender of sendERC20 on the source chain. + /// @param to Address of the recipient. + /// @param amount Amount of tokens relayed. + /// @param source Chain ID of the source chain. + event RelayERC20(address indexed from, address indexed to, uint256 amount, uint256 source); - /// @notice Sends tokens to another chain. - /// @param _to Address of the recipient. - /// @param _amount Number of tokens to send. - /// @param _chainId Chain ID of the recipient. + /// @notice Sends tokens to some target address on another chain. + /// @param _to Address to send tokens to. + /// @param _amount Amount of tokens to send. + /// @param _chainId Chain ID of the destination chain. function sendERC20(address _to, uint256 _amount, uint256 _chainId) external; - /// @notice Relays a send of tokens to this chain. - /// @param _to Address of the recipient. - /// @param _amount Number of tokens sent. - function relayERC20(address _to, uint256 _amount) external; + /// @notice Relays tokens received from another chain. + /// @param _from Address of the msg.sender of sendERC20 on the source chain. + /// @param _to Address to relay tokens to. + /// @param _amount Amount of tokens to relay. + function relayERC20(address _from, address _to, uint256 _amount) external; } /// @title ISuperchainERC20 diff --git a/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol index cafcf0d0ccd7..6415b3cc0650 100644 --- a/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol @@ -7,6 +7,7 @@ import { CrossL2Inbox } from "src/L2/CrossL2Inbox.sol"; import { IL2ToL2CrossDomainMessenger } from "src/L2/IL2ToL2CrossDomainMessenger.sol"; import { ISemver } from "src/universal/ISemver.sol"; import { SafeCall } from "src/libraries/SafeCall.sol"; +import { TransientReentrancyAware } from "src/libraries/TransientContext.sol"; /// @notice Thrown when a non-written slot in transient storage is attempted to be read from. error NotEntered(); @@ -41,11 +42,7 @@ error ReentrantCall(); /// @notice The L2ToL2CrossDomainMessenger is a higher level abstraction on top of the CrossL2Inbox that provides /// features necessary for secure transfers ERC20 tokens between L2 chains. Messages sent through the /// L2ToL2CrossDomainMessenger on the source chain receive both replay protection as well as domain binding. -contract L2ToL2CrossDomainMessenger is IL2ToL2CrossDomainMessenger, ISemver { - /// @notice Storage slot for `entered` value. - /// Equal to bytes32(uint256(keccak256("l2tol2crossdomainmessenger.entered")) - 1) - bytes32 internal constant ENTERED_SLOT = 0xf53fc38c5e461bdcbbeb47887fecf014abd399293109cd50f65e5f9078cfd025; - +contract L2ToL2CrossDomainMessenger is IL2ToL2CrossDomainMessenger, ISemver, TransientReentrancyAware { /// @notice Storage slot for the sender of the current cross domain message. /// Equal to bytes32(uint256(keccak256("l2tol2crossdomainmessenger.sender")) - 1) bytes32 internal constant CROSS_DOMAIN_MESSAGE_SENDER_SLOT = @@ -80,25 +77,6 @@ contract L2ToL2CrossDomainMessenger is IL2ToL2CrossDomainMessenger, ISemver { /// @param messageHash Hash of the message that failed to be relayed. event FailedRelayedMessage(bytes32 indexed messageHash); - /// @notice Enforces that a function cannot be re-entered. - modifier nonReentrant() { - if (_entered()) revert ReentrantCall(); - assembly { - tstore(ENTERED_SLOT, 1) - } - _; - assembly { - tstore(ENTERED_SLOT, 0) - } - } - - /// @notice Enforces that cross domain message sender and source are set. Reverts if not. - /// Used to differentiate between 0 and nil in transient storage. - modifier onlyEntered() { - if (!_entered()) revert NotEntered(); - _; - } - /// @notice Retrieves the sender of the current cross domain message. If not entered, reverts. /// @return _sender Address of the sender of the current cross domain message. function crossDomainMessageSender() external view onlyEntered returns (address _sender) { @@ -193,16 +171,6 @@ contract L2ToL2CrossDomainMessenger is IL2ToL2CrossDomainMessenger, ISemver { return Encoding.encodeVersionedNonce(msgNonce, messageVersion); } - /// @notice Retrieves whether the contract is currently entered or not. - /// @return True if the contract is entered, and false otherwise. - function _entered() internal view returns (bool) { - uint256 value; - assembly { - value := tload(ENTERED_SLOT) - } - return value != 0; - } - /// @notice Stores message data such as sender and source in transient storage. /// @param _source Chain ID of the source chain. /// @param _sender Address of the sender of the message. diff --git a/packages/contracts-bedrock/src/L2/OptimismSuperchainERC20.sol b/packages/contracts-bedrock/src/L2/OptimismSuperchainERC20.sol new file mode 100644 index 000000000000..9b0ba5cad8b0 --- /dev/null +++ b/packages/contracts-bedrock/src/L2/OptimismSuperchainERC20.sol @@ -0,0 +1,191 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.25; + +import { IOptimismSuperchainERC20Extension } from "src/L2/IOptimismSuperchainERC20.sol"; +import { ERC20 } from "@solady/tokens/ERC20.sol"; +import { IL2ToL2CrossDomainMessenger } from "src/L2/IL2ToL2CrossDomainMessenger.sol"; +import { ISemver } from "src/universal/ISemver.sol"; +import { Predeploys } from "src/libraries/Predeploys.sol"; +import { Initializable } from "@openzeppelin/contracts-v5/proxy/utils/Initializable.sol"; +import { ERC165 } from "@openzeppelin/contracts-v5/utils/introspection/ERC165.sol"; + +/// @notice Thrown when attempting to relay a message and the function caller (msg.sender) is not +/// L2ToL2CrossDomainMessenger. +error CallerNotL2ToL2CrossDomainMessenger(); + +/// @notice Thrown when attempting to relay a message and the cross domain message sender is not this +/// OptimismSuperchainERC20. +error InvalidCrossDomainSender(); + +/// @notice Thrown when attempting to mint or burn tokens and the function caller is not the StandardBridge. +error OnlyBridge(); + +/// @notice Thrown when attempting to mint or burn tokens and the account is the zero address. +error ZeroAddress(); + +/// @custom:proxied +/// @title OptimismSuperchainERC20 +/// @notice OptimismSuperchainERC20 is a standard extension of the base ERC20 token contract that unifies ERC20 token +/// bridging to make it fungible across the Superchain. This construction allows the L2StandardBridge to burn +/// and mint tokens. This makes it possible to convert a valid OptimismMintableERC20 token to a SuperchainERC20 +/// token, turning it fungible and interoperable across the superchain. Likewise, it also enables the inverse +/// conversion path. +/// Moreover, it builds on top of the L2ToL2CrossDomainMessenger for both replay protection and domain binding. +contract OptimismSuperchainERC20 is IOptimismSuperchainERC20Extension, ERC20, ISemver, Initializable, ERC165 { + /// @notice Address of the L2ToL2CrossDomainMessenger Predeploy. + address internal constant MESSENGER = Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER; + + /// @notice Address of the StandardBridge Predeploy. + address internal constant BRIDGE = Predeploys.L2_STANDARD_BRIDGE; + + /// @notice Storage slot that the OptimismSuperchainERC20Metadata struct is stored at. + /// keccak256(abi.encode(uint256(keccak256("optimismSuperchainERC20.metadata")) - 1)) & ~bytes32(uint256(0xff)); + bytes32 internal constant OPTIMISM_SUPERCHAIN_ERC20_METADATA_SLOT = + 0x07f04e84143df95a6373fcf376312ae41da81a193a3089073a54f47a74d8fb00; + + /// @notice Storage struct for the OptimismSuperchainERC20 metadata. + /// @custom:storage-location erc7201:optimismSuperchainERC20.metadata + struct OptimismSuperchainERC20Metadata { + /// @notice Address of the corresponding version of this token on the remote chain. + address remoteToken; + /// @notice Name of the token + string name; + /// @notice Symbol of the token + string symbol; + /// @notice Decimals of the token + uint8 decimals; + } + + /// @notice Returns the storage for the OptimismSuperchainERC20Metadata. + function _getMetadataStorage() private pure returns (OptimismSuperchainERC20Metadata storage _storage) { + assembly { + _storage.slot := OPTIMISM_SUPERCHAIN_ERC20_METADATA_SLOT + } + } + + /// @notice A modifier that only allows the bridge to call + modifier onlyBridge() { + if (msg.sender != BRIDGE) revert OnlyBridge(); + _; + } + + /// @notice Semantic version. + /// @custom:semver 1.0.0-beta.1 + string public constant version = "1.0.0-beta.1"; + + /// @notice Constructs the OptimismSuperchainERC20 contract. + constructor() { + _disableInitializers(); + } + + /// @notice Initializes the contract. + /// @param _remoteToken Address of the corresponding remote token. + /// @param _name ERC20 name. + /// @param _symbol ERC20 symbol. + /// @param _decimals ERC20 decimals. + function initialize( + address _remoteToken, + string memory _name, + string memory _symbol, + uint8 _decimals + ) + external + initializer + { + OptimismSuperchainERC20Metadata storage _storage = _getMetadataStorage(); + _storage.remoteToken = _remoteToken; + _storage.name = _name; + _storage.symbol = _symbol; + _storage.decimals = _decimals; + } + + /// @notice Allows the L2StandardBridge to mint tokens. + /// @param _to Address to mint tokens to. + /// @param _amount Amount of tokens to mint. + function mint(address _to, uint256 _amount) external virtual onlyBridge { + if (_to == address(0)) revert ZeroAddress(); + + _mint(_to, _amount); + + emit Mint(_to, _amount); + } + + /// @notice Allows the L2StandardBridge to burn tokens. + /// @param _from Address to burn tokens from. + /// @param _amount Amount of tokens to burn. + function burn(address _from, uint256 _amount) external virtual onlyBridge { + if (_from == address(0)) revert ZeroAddress(); + + _burn(_from, _amount); + + emit Burn(_from, _amount); + } + + /// @notice Sends tokens to some target address on another chain. + /// @param _to Address to send tokens to. + /// @param _amount Amount of tokens to send. + /// @param _chainId Chain ID of the destination chain. + function sendERC20(address _to, uint256 _amount, uint256 _chainId) external { + if (_to == address(0)) revert ZeroAddress(); + + _burn(msg.sender, _amount); + + bytes memory _message = abi.encodeCall(this.relayERC20, (msg.sender, _to, _amount)); + IL2ToL2CrossDomainMessenger(MESSENGER).sendMessage(_chainId, address(this), _message); + + emit SendERC20(msg.sender, _to, _amount, _chainId); + } + + /// @notice Relays tokens received from another chain. + /// @param _from Address of the msg.sender of sendERC20 on the source chain. + /// @param _to Address to relay tokens to. + /// @param _amount Amount of tokens to relay. + function relayERC20(address _from, address _to, uint256 _amount) external { + if (_to == address(0)) revert ZeroAddress(); + + if (msg.sender != MESSENGER) revert CallerNotL2ToL2CrossDomainMessenger(); + + if (IL2ToL2CrossDomainMessenger(MESSENGER).crossDomainMessageSender() != address(this)) { + revert InvalidCrossDomainSender(); + } + + uint256 source = IL2ToL2CrossDomainMessenger(MESSENGER).crossDomainMessageSource(); + + _mint(_to, _amount); + + emit RelayERC20(_from, _to, _amount, source); + } + + /// @notice Returns the address of the corresponding version of this token on the remote chain. + function remoteToken() public view override returns (address) { + return _getMetadataStorage().remoteToken; + } + + /// @notice Returns the name of the token. + function name() public view virtual override returns (string memory) { + return _getMetadataStorage().name; + } + + /// @notice Returns the symbol of the token. + function symbol() public view virtual override returns (string memory) { + return _getMetadataStorage().symbol; + } + + /// @notice Returns the number of decimals used to get its user representation. + /// For example, if `decimals` equals `2`, a balance of `505` tokens should + /// be displayed to a user as `5.05` (`505 / 10 ** 2`). + /// NOTE: This information is only used for _display_ purposes: it in + /// no way affects any of the arithmetic of the contract, including + /// {IERC20-balanceOf} and {IERC20-transfer}. + function decimals() public view override returns (uint8) { + return _getMetadataStorage().decimals; + } + + /// @notice ERC165 interface check function. + /// @param _interfaceId Interface ID to check. + /// @return Whether or not the interface is supported by this contract. + function supportsInterface(bytes4 _interfaceId) public view virtual override returns (bool) { + return + _interfaceId == type(IOptimismSuperchainERC20Extension).interfaceId || super.supportsInterface(_interfaceId); + } +} diff --git a/packages/contracts-bedrock/src/L2/SuperchainWETH.sol b/packages/contracts-bedrock/src/L2/SuperchainWETH.sol index 6e5a8c1fe4e1..7080460254fc 100644 --- a/packages/contracts-bedrock/src/L2/SuperchainWETH.sol +++ b/packages/contracts-bedrock/src/L2/SuperchainWETH.sol @@ -45,7 +45,7 @@ contract SuperchainWETH is WETH98, ISuperchainERC20Extensions, ISemver { IL2ToL2CrossDomainMessenger(Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER).sendMessage({ _destination: chainId, _target: address(this), - _message: abi.encodeCall(this.relayERC20, (dst, wad)) + _message: abi.encodeCall(this.relayERC20, (msg.sender, dst, wad)) }); // Emit event. @@ -53,7 +53,7 @@ contract SuperchainWETH is WETH98, ISuperchainERC20Extensions, ISemver { } /// @inheritdoc ISuperchainERC20Extensions - function relayERC20(address dst, uint256 wad) external { + function relayERC20(address from, address dst, uint256 wad) external { // Receive message from other chain. IL2ToL2CrossDomainMessenger messenger = IL2ToL2CrossDomainMessenger(Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER); if (msg.sender != address(messenger)) revert Unauthorized(); @@ -64,11 +64,14 @@ contract SuperchainWETH is WETH98, ISuperchainERC20Extensions, ISemver { ETHLiquidity(Predeploys.ETH_LIQUIDITY).mint(wad); } + // Get source chain ID. + uint256 source = messenger.crossDomainMessageSource(); + // Mint to user's balance. _mint(dst, wad); // Emit event. - emit RelayERC20(dst, wad); + emit RelayERC20(from, dst, wad, source); } /// @notice Mints WETH to an address. diff --git a/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol b/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol index da15b3499586..1017f07f688d 100644 --- a/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol +++ b/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol @@ -99,7 +99,7 @@ library MIPSSyscalls { uint32 internal constant SCHED_QUANTUM = 100_000; /// @notice Start of the data segment. - uint32 public constant BRK_START = 0x40000000; + uint32 internal constant BRK_START = 0x40000000; // SYS_CLONE flags uint32 internal constant CLONE_VM = 0x100; diff --git a/packages/contracts-bedrock/src/libraries/TransientContext.sol b/packages/contracts-bedrock/src/libraries/TransientContext.sol index 4dfb92070d6b..afc852787cf2 100644 --- a/packages/contracts-bedrock/src/libraries/TransientContext.sol +++ b/packages/contracts-bedrock/src/libraries/TransientContext.sol @@ -61,10 +61,55 @@ library TransientContext { /// @notice Reentrancy-aware modifier for transient storage, which increments and /// decrements the call depth when entering and exiting a function. contract TransientReentrancyAware { + /// @notice Thrown when a non-written transient storage slot is attempted to be read from. + error NotEntered(); + + /// @notice Thrown when a reentrant call is detected. + error ReentrantCall(); + + /// @notice Storage slot for `entered` value. + /// Equal to bytes32(uint256(keccak256("transientreentrancyaware.entered")) - 1) + bytes32 internal constant ENTERED_SLOT = 0xf13569814868ede994184d5a425471fb19e869768a33421cb701a2ba3d420c0a; + /// @notice Modifier to make a function reentrancy-aware. modifier reentrantAware() { TransientContext.increment(); _; TransientContext.decrement(); } + + /// @notice Enforces that a function cannot be re-entered. + modifier nonReentrant() { + if (_entered()) revert ReentrantCall(); + assembly { + tstore(ENTERED_SLOT, 1) + } + _; + assembly { + tstore(ENTERED_SLOT, 0) + } + } + + /// @notice Enforces that cross domain message sender and source are set. Reverts if not. + /// Used to differentiate between 0 and nil in transient storage. + modifier notEntered() { + if (TransientContext.callDepth() == 0) revert NotEntered(); + _; + } + + /// @notice Enforces that cross domain message sender and source are set. Reverts if not. + /// Used to differentiate between 0 and nil in transient storage. + modifier onlyEntered() { + if (!_entered()) revert NotEntered(); + _; + } + + /// @notice Retrieves whether the contract is currently entered or not. + /// @return entered_ True if the contract is entered, and false otherwise. + function _entered() internal view returns (bool entered_) { + assembly { + let value := tload(ENTERED_SLOT) + entered_ := gt(value, 0) + } + } } diff --git a/packages/contracts-bedrock/test/L1/ResourceMetering.t.sol b/packages/contracts-bedrock/test/L1/ResourceMetering.t.sol index 63b208b9c255..f4bca39ea418 100644 --- a/packages/contracts-bedrock/test/L1/ResourceMetering.t.sol +++ b/packages/contracts-bedrock/test/L1/ResourceMetering.t.sol @@ -281,7 +281,13 @@ contract ArtifactResourceMetering_Test is Test { /// @dev Generates a CSV file. No more than the L1 block gas limit should /// be supplied to the `meter` function to avoid long execution time. + /// This test is skipped because there is no need to run it every time. + /// It generates a CSV file on disk that can be used to analyze the + /// gas usage and cost of the `ResourceMetering` contract. The next time + /// that the gas usage needs to be analyzed, the skip may be removed. function test_meter_generateArtifact_succeeds() external { + vm.skip({ skipTest: true }); + vm.writeLine( outfile, "prevBaseFee,prevBoughtGas,prevBlockNumDiff,l1BaseFee,requestedGas,gasConsumed,ethPrice,usdCost,success" diff --git a/packages/contracts-bedrock/test/L2/CrossL2Inbox.t.sol b/packages/contracts-bedrock/test/L2/CrossL2Inbox.t.sol index 9350e6b2fbbc..c126b596ebc2 100644 --- a/packages/contracts-bedrock/test/L2/CrossL2Inbox.t.sol +++ b/packages/contracts-bedrock/test/L2/CrossL2Inbox.t.sol @@ -271,6 +271,67 @@ contract CrossL2InboxTest is Test { crossL2Inbox.executeMessage{ value: _value }({ _id: _id, _target: _target, _message: _message }); } + function testFuzz_validateMessage_succeeds(ICrossL2Inbox.Identifier memory _id, bytes32 _messageHash) external { + // Ensure that the id's timestamp is valid (less than or equal to the current block timestamp) + _id.timestamp = bound(_id.timestamp, 1, block.timestamp); + + // Ensure that the chain ID is in the dependency set + vm.mockCall({ + callee: Predeploys.L1_BLOCK_ATTRIBUTES, + data: abi.encodeWithSelector(L1BlockIsInDependencySetSelector, _id.chainId), + returnData: abi.encode(true) + }); + + // Look for the emit ExecutingMessage event + vm.expectEmit(Predeploys.CROSS_L2_INBOX); + emit CrossL2Inbox.ExecutingMessage(_messageHash, _id); + + // Call the validateMessage function + crossL2Inbox.validateMessage(_id, _messageHash); + } + + /// @dev Tests that the `validateMessage` function reverts when called with an identifier with an invalid timestamp. + function testFuzz_validateMessage_invalidTimestamp_reverts( + ICrossL2Inbox.Identifier calldata _id, + bytes32 _messageHash + ) + external + { + // Ensure that the id's timestamp is invalid (greater thsan the current block timestamp) + vm.assume(_id.timestamp > block.timestamp); + + // Expect a revert with the InvalidTimestamp selector + vm.expectRevert(InvalidTimestamp.selector); + + // Call the validateMessage function + crossL2Inbox.validateMessage(_id, _messageHash); + } + + /// @dev Tests that the `validateMessage` function reverts when called with an identifier with a chain ID not in the + /// dependency set. + function testFuzz_validateMessage_invalidChainId_reverts( + ICrossL2Inbox.Identifier memory _id, + bytes32 _messageHash + ) + external + { + // Ensure that the timestamp is valid (less than or equal to the current block timestamp) + _id.timestamp = bound(_id.timestamp, 0, block.timestamp); + + // Ensure that the chain ID is NOT in the dependency set. + vm.mockCall({ + callee: Predeploys.L1_BLOCK_ATTRIBUTES, + data: abi.encodeWithSelector(L1BlockIsInDependencySetSelector, _id.chainId), + returnData: abi.encode(false) + }); + + // Expect a revert with the InvalidChainId selector + vm.expectRevert(InvalidChainId.selector); + + // Call the validateMessage function + crossL2Inbox.validateMessage(_id, _messageHash); + } + /// @dev Tests that the `origin` function returns the correct value. function testFuzz_origin_succeeds(address _origin) external { // Increment the call depth to prevent NotEntered revert diff --git a/packages/contracts-bedrock/test/L2/ETHLiquidity.t.sol b/packages/contracts-bedrock/test/L2/ETHLiquidity.t.sol index 2a3d999a1df6..d9d2d92a8928 100644 --- a/packages/contracts-bedrock/test/L2/ETHLiquidity.t.sol +++ b/packages/contracts-bedrock/test/L2/ETHLiquidity.t.sol @@ -57,6 +57,7 @@ contract ETHLiquidity_Test is CommonTest { function testFuzz_burn_fromUnauthorizedCaller_fails(uint256 _amount, address _caller) public { // Assume vm.assume(_caller != address(superchainWeth)); + vm.assume(_caller != address(ethLiquidity)); _amount = bound(_amount, 0, type(uint248).max - 1); // Arrange diff --git a/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol b/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol index 21f7b98f666b..f81d96b040f4 100644 --- a/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol +++ b/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.15; // Testing utilities import { CommonTest } from "test/setup/CommonTest.sol"; -import { Fork } from "scripts/Config.sol"; +import { Fork } from "scripts/libraries/Config.sol"; // Libraries import { Encoding } from "src/libraries/Encoding.sol"; diff --git a/packages/contracts-bedrock/test/L2/OptimismSuperchainERC20.t.sol b/packages/contracts-bedrock/test/L2/OptimismSuperchainERC20.t.sol new file mode 100644 index 000000000000..84580fdd8687 --- /dev/null +++ b/packages/contracts-bedrock/test/L2/OptimismSuperchainERC20.t.sol @@ -0,0 +1,386 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.25; + +// Testing utilities +import { Test } from "forge-std/Test.sol"; + +// Libraries +import { Predeploys } from "src/libraries/Predeploys.sol"; +import { IERC20 } from "@openzeppelin/contracts-v5/token/ERC20/IERC20.sol"; +import { IL2ToL2CrossDomainMessenger } from "src/L2/IL2ToL2CrossDomainMessenger.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts-v5/proxy/ERC1967/ERC1967Proxy.sol"; +import { Initializable } from "@openzeppelin/contracts-v5/proxy/utils/Initializable.sol"; +import { IERC165 } from "@openzeppelin/contracts-v5/utils/introspection/IERC165.sol"; + +// Target contract +import { + OptimismSuperchainERC20, + IOptimismSuperchainERC20Extension, + CallerNotL2ToL2CrossDomainMessenger, + InvalidCrossDomainSender, + OnlyBridge, + ZeroAddress +} from "src/L2/OptimismSuperchainERC20.sol"; +import { ISuperchainERC20Extensions } from "src/L2/ISuperchainERC20.sol"; + +/// @title OptimismSuperchainERC20Test +/// @notice Contract for testing the OptimismSuperchainERC20 contract. +contract OptimismSuperchainERC20Test is Test { + address internal constant ZERO_ADDRESS = address(0); + address internal constant REMOTE_TOKEN = address(0x123); + string internal constant NAME = "OptimismSuperchainERC20"; + string internal constant SYMBOL = "SCE"; + uint8 internal constant DECIMALS = 18; + address internal constant BRIDGE = Predeploys.L2_STANDARD_BRIDGE; + address internal constant MESSENGER = Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER; + + OptimismSuperchainERC20 public superchainERC20Impl; + OptimismSuperchainERC20 public superchainERC20; + + /// @notice Sets up the test suite. + function setUp() public { + superchainERC20Impl = new OptimismSuperchainERC20(); + superchainERC20 = _deploySuperchainERC20Proxy(REMOTE_TOKEN, NAME, SYMBOL, DECIMALS); + } + + /// @notice Helper function to deploy a proxy of the OptimismSuperchainERC20 contract. + function _deploySuperchainERC20Proxy( + address _remoteToken, + string memory _name, + string memory _symbol, + uint8 _decimals + ) + internal + returns (OptimismSuperchainERC20) + { + return OptimismSuperchainERC20( + address( + // TODO: Use the SuperchainERC20 Beacon Proxy + new ERC1967Proxy( + address(superchainERC20Impl), + abi.encodeCall(OptimismSuperchainERC20.initialize, (_remoteToken, _name, _symbol, _decimals)) + ) + ) + ); + } + + /// @notice Helper function to setup a mock and expect a call to it. + function _mockAndExpect(address _receiver, bytes memory _calldata, bytes memory _returned) internal { + vm.mockCall(_receiver, _calldata, _returned); + vm.expectCall(_receiver, _calldata); + } + + /// @notice Test that the contract's `initializer` sets the correct values. + function test_initializer_succeeds() public view { + assertEq(superchainERC20.name(), NAME); + assertEq(superchainERC20.symbol(), SYMBOL); + assertEq(superchainERC20.decimals(), DECIMALS); + assertEq(superchainERC20.remoteToken(), REMOTE_TOKEN); + } + + /// @notice Tests the `initialize` function reverts when the contract is already initialized. + function testFuzz_initializer_reverts( + address _remoteToken, + string memory _name, + string memory _symbol, + uint8 _decimals + ) + public + { + // Expect the revert with `InvalidInitialization` selector + vm.expectRevert(Initializable.InvalidInitialization.selector); + + // Call the `initialize` function again + superchainERC20.initialize(_remoteToken, _name, _symbol, _decimals); + } + + /// @notice Tests the `mint` function reverts when the caller is not the bridge. + function testFuzz_mint_callerNotBridge_reverts(address _caller, address _to, uint256 _amount) public { + // Ensure the caller is not the bridge + vm.assume(_caller != BRIDGE); + + // Expect the revert with `OnlyBridge` selector + vm.expectRevert(OnlyBridge.selector); + + // Call the `mint` function with the non-bridge caller + vm.prank(_caller); + superchainERC20.mint(_to, _amount); + } + + /// @notice Tests the `mint` function reverts when the amount is zero. + function testFuzz_mint_zeroAddressTo_reverts(uint256 _amount) public { + // Expect the revert with `ZeroAddress` selector + vm.expectRevert(ZeroAddress.selector); + + // Call the `mint` function with the zero address + vm.prank(BRIDGE); + superchainERC20.mint({ _to: ZERO_ADDRESS, _amount: _amount }); + } + + /// @notice Tests the `mint` succeeds and emits the `Mint` event. + function testFuzz_mint_succeeds(address _to, uint256 _amount) public { + // Ensure `_to` is not the zero address + vm.assume(_to != ZERO_ADDRESS); + + // Get the total supply and balance of `_to` before the mint to compare later on the assertions + uint256 _totalSupplyBefore = superchainERC20.totalSupply(); + uint256 _toBalanceBefore = superchainERC20.balanceOf(_to); + + // Look for the emit of the `Transfer` event + vm.expectEmit(true, true, true, true, address(superchainERC20)); + emit IERC20.Transfer(ZERO_ADDRESS, _to, _amount); + + // Look for the emit of the `Mint` event + vm.expectEmit(true, true, true, true, address(superchainERC20)); + emit IOptimismSuperchainERC20Extension.Mint(_to, _amount); + + // Call the `mint` function with the bridge caller + vm.prank(BRIDGE); + superchainERC20.mint(_to, _amount); + + // Check the total supply and balance of `_to` after the mint were updated correctly + assertEq(superchainERC20.totalSupply(), _totalSupplyBefore + _amount); + assertEq(superchainERC20.balanceOf(_to), _toBalanceBefore + _amount); + } + + /// @notice Tests the `burn` function reverts when the caller is not the bridge. + function testFuzz_burn_callerNotBridge_reverts(address _caller, address _from, uint256 _amount) public { + // Ensure the caller is not the bridge + vm.assume(_caller != BRIDGE); + + // Expect the revert with `OnlyBridge` selector + vm.expectRevert(OnlyBridge.selector); + + // Call the `burn` function with the non-bridge caller + vm.prank(_caller); + superchainERC20.burn(_from, _amount); + } + + /// @notice Tests the `burn` function reverts when the amount is zero. + function testFuzz_burn_zeroAddressFrom_reverts(uint256 _amount) public { + // Expect the revert with `ZeroAddress` selector + vm.expectRevert(ZeroAddress.selector); + + // Call the `burn` function with the zero address + vm.prank(BRIDGE); + superchainERC20.burn({ _from: ZERO_ADDRESS, _amount: _amount }); + } + + /// @notice Tests the `burn` burns the amount and emits the `Burn` event. + function testFuzz_burn_succeeds(address _from, uint256 _amount) public { + // Ensure `_from` is not the zero address + vm.assume(_from != ZERO_ADDRESS); + + // Mint some tokens to `_from` so then they can be burned + vm.prank(BRIDGE); + superchainERC20.mint(_from, _amount); + + // Get the total supply and balance of `_from` before the burn to compare later on the assertions + uint256 _totalSupplyBefore = superchainERC20.totalSupply(); + uint256 _fromBalanceBefore = superchainERC20.balanceOf(_from); + + // Look for the emit of the `Transfer` event + vm.expectEmit(true, true, true, true, address(superchainERC20)); + emit IERC20.Transfer(_from, ZERO_ADDRESS, _amount); + + // Look for the emit of the `Burn` event + vm.expectEmit(true, true, true, true, address(superchainERC20)); + emit IOptimismSuperchainERC20Extension.Burn(_from, _amount); + + // Call the `burn` function with the bridge caller + vm.prank(BRIDGE); + superchainERC20.burn(_from, _amount); + + // Check the total supply and balance of `_from` after the burn were updated correctly + assertEq(superchainERC20.totalSupply(), _totalSupplyBefore - _amount); + assertEq(superchainERC20.balanceOf(_from), _fromBalanceBefore - _amount); + } + + /// @notice Tests the `sendERC20` function reverts when the `_to` address is the zero address. + function testFuzz_sendERC20_zeroAddressTo_reverts(uint256 _amount, uint256 _chainId) public { + // Expect the revert with `ZeroAddress` selector + vm.expectRevert(ZeroAddress.selector); + + // Call the `sendERC20` function with the zero address + vm.prank(BRIDGE); + superchainERC20.sendERC20({ _to: ZERO_ADDRESS, _amount: _amount, _chainId: _chainId }); + } + + /// @notice Tests the `sendERC20` function burns the sender tokens, sends the message, and emits the `SendERC20` + /// event. + function testFuzz_sendERC20_succeeds(address _sender, address _to, uint256 _amount, uint256 _chainId) external { + // Ensure `_sender` is not the zero address + vm.assume(_sender != ZERO_ADDRESS); + vm.assume(_to != ZERO_ADDRESS); + + // Mint some tokens to the sender so then they can be sent + vm.prank(BRIDGE); + superchainERC20.mint(_sender, _amount); + + // Get the total supply and balance of `_sender` before the send to compare later on the assertions + uint256 _totalSupplyBefore = superchainERC20.totalSupply(); + uint256 _senderBalanceBefore = superchainERC20.balanceOf(_sender); + + // Look for the emit of the `Transfer` event + vm.expectEmit(true, true, true, true, address(superchainERC20)); + emit IERC20.Transfer(_sender, ZERO_ADDRESS, _amount); + + // Look for the emit of the `SendERC20` event + vm.expectEmit(true, true, true, true, address(superchainERC20)); + emit ISuperchainERC20Extensions.SendERC20(_sender, _to, _amount, _chainId); + + // Mock the call over the `sendMessage` function and expect it to be called properly + bytes memory _message = abi.encodeCall(superchainERC20.relayERC20, (_sender, _to, _amount)); + _mockAndExpect( + MESSENGER, + abi.encodeWithSelector( + IL2ToL2CrossDomainMessenger.sendMessage.selector, _chainId, address(superchainERC20), _message + ), + abi.encode("") + ); + + // Call the `sendERC20` function + vm.prank(_sender); + superchainERC20.sendERC20(_to, _amount, _chainId); + + // Check the total supply and balance of `_sender` after the send were updated correctly + assertEq(superchainERC20.totalSupply(), _totalSupplyBefore - _amount); + assertEq(superchainERC20.balanceOf(_sender), _senderBalanceBefore - _amount); + } + + /// @notice Tests the `relayERC20` function reverts when the caller is not the L2ToL2CrossDomainMessenger. + function testFuzz_relayERC20_notMessenger_reverts(address _caller, address _to, uint256 _amount) public { + // Ensure the caller is not the messenger + vm.assume(_caller != MESSENGER); + vm.assume(_to != ZERO_ADDRESS); + + // Expect the revert with `CallerNotL2ToL2CrossDomainMessenger` selector + vm.expectRevert(CallerNotL2ToL2CrossDomainMessenger.selector); + + // Call the `relayERC20` function with the non-messenger caller + vm.prank(_caller); + superchainERC20.relayERC20(_caller, _to, _amount); + } + + /// @notice Tests the `relayERC20` function reverts when the `crossDomainMessageSender` that sent the message is not + /// the same SuperchainERC20 address. + function testFuzz_relayERC20_notCrossDomainSender_reverts( + address _crossDomainMessageSender, + address _to, + uint256 _amount + ) + public + { + vm.assume(_to != ZERO_ADDRESS); + vm.assume(_crossDomainMessageSender != address(superchainERC20)); + + // Mock the call over the `crossDomainMessageSender` function setting a wrong sender + vm.mockCall( + MESSENGER, + abi.encodeWithSelector(IL2ToL2CrossDomainMessenger.crossDomainMessageSender.selector), + abi.encode(_crossDomainMessageSender) + ); + + // Expect the revert with `InvalidCrossDomainSender` selector + vm.expectRevert(InvalidCrossDomainSender.selector); + + // Call the `relayERC20` function with the sender caller + vm.prank(MESSENGER); + superchainERC20.relayERC20(_crossDomainMessageSender, _to, _amount); + } + + /// @notice Tests the `relayERC20` function reverts when the `_to` address is the zero address. + function testFuzz_relayERC20_zeroAddressTo_reverts(uint256 _amount) public { + // Expect the revert with `ZeroAddress` selector + vm.expectRevert(ZeroAddress.selector); + + // Mock the call over the `crossDomainMessageSender` function setting the same address as value + vm.mockCall( + MESSENGER, + abi.encodeWithSelector(IL2ToL2CrossDomainMessenger.crossDomainMessageSender.selector), + abi.encode(address(superchainERC20)) + ); + + // Call the `relayERC20` function with the zero address + vm.prank(MESSENGER); + superchainERC20.relayERC20({ _from: ZERO_ADDRESS, _to: ZERO_ADDRESS, _amount: _amount }); + } + + /// @notice Tests the `relayERC20` mints the proper amount and emits the `RelayERC20` event. + function testFuzz_relayERC20_succeeds(address _from, address _to, uint256 _amount, uint256 _source) public { + vm.assume(_from != ZERO_ADDRESS); + vm.assume(_to != ZERO_ADDRESS); + + // Mock the call over the `crossDomainMessageSender` function setting the same address as value + _mockAndExpect( + MESSENGER, + abi.encodeWithSelector(IL2ToL2CrossDomainMessenger.crossDomainMessageSender.selector), + abi.encode(address(superchainERC20)) + ); + + // Mock the call over the `crossDomainMessageSource` function setting the source chain ID as value + _mockAndExpect( + MESSENGER, + abi.encodeWithSelector(IL2ToL2CrossDomainMessenger.crossDomainMessageSource.selector), + abi.encode(_source) + ); + + // Get the total supply and balance of `_to` before the relay to compare later on the assertions + uint256 _totalSupplyBefore = superchainERC20.totalSupply(); + uint256 _toBalanceBefore = superchainERC20.balanceOf(_to); + + // Look for the emit of the `Transfer` event + vm.expectEmit(true, true, true, true, address(superchainERC20)); + emit IERC20.Transfer(ZERO_ADDRESS, _to, _amount); + + // Look for the emit of the `RelayERC20` event + vm.expectEmit(true, true, true, true, address(superchainERC20)); + emit ISuperchainERC20Extensions.RelayERC20(_from, _to, _amount, _source); + + // Call the `relayERC20` function with the messenger caller + vm.prank(MESSENGER); + superchainERC20.relayERC20(_from, _to, _amount); + + // Check the total supply and balance of `_to` after the relay were updated correctly + assertEq(superchainERC20.totalSupply(), _totalSupplyBefore + _amount); + assertEq(superchainERC20.balanceOf(_to), _toBalanceBefore + _amount); + } + + /// @notice Tests the `decimals` function always returns the correct value. + function testFuzz_decimals_succeeds(uint8 _decimals) public { + OptimismSuperchainERC20 _newSuperchainERC20 = _deploySuperchainERC20Proxy(REMOTE_TOKEN, NAME, SYMBOL, _decimals); + assertEq(_newSuperchainERC20.decimals(), _decimals); + } + + /// @notice Tests the `REMOTE_TOKEN` function always returns the correct value. + function testFuzz_remoteToken_succeeds(address _remoteToken) public { + OptimismSuperchainERC20 _newSuperchainERC20 = _deploySuperchainERC20Proxy(_remoteToken, NAME, SYMBOL, DECIMALS); + assertEq(_newSuperchainERC20.remoteToken(), _remoteToken); + } + + /// @notice Tests the `name` function always returns the correct value. + function testFuzz_name_succeeds(string memory _name) public { + OptimismSuperchainERC20 _newSuperchainERC20 = _deploySuperchainERC20Proxy(REMOTE_TOKEN, _name, SYMBOL, DECIMALS); + assertEq(_newSuperchainERC20.name(), _name); + } + + /// @notice Tests the `symbol` function always returns the correct value. + function testFuzz_symbol_succeeds(string memory _symbol) public { + OptimismSuperchainERC20 _newSuperchainERC20 = _deploySuperchainERC20Proxy(REMOTE_TOKEN, NAME, _symbol, DECIMALS); + assertEq(_newSuperchainERC20.symbol(), _symbol); + } + + /// @notice Tests that the `supportsInterface` function returns true for the `IOptimismSuperchainERC20` interface. + function test_supportInterface_succeeds() public view { + assertTrue(superchainERC20.supportsInterface(type(IERC165).interfaceId)); + assertTrue(superchainERC20.supportsInterface(type(IOptimismSuperchainERC20Extension).interfaceId)); + } + + /// @notice Tests that the `supportsInterface` function returns false for any other interface than the + /// `IOptimismSuperchainERC20` one. + function testFuzz_supportInterface_returnFalse(bytes4 _interfaceId) public view { + vm.assume(_interfaceId != type(IERC165).interfaceId); + vm.assume(_interfaceId != type(IOptimismSuperchainERC20Extension).interfaceId); + assertFalse(superchainERC20.supportsInterface(_interfaceId)); + } +} diff --git a/packages/contracts-bedrock/test/L2/SuperchainWETH.t.sol b/packages/contracts-bedrock/test/L2/SuperchainWETH.t.sol index 2024f8ddbb40..3bee1fc74b7d 100644 --- a/packages/contracts-bedrock/test/L2/SuperchainWETH.t.sol +++ b/packages/contracts-bedrock/test/L2/SuperchainWETH.t.sol @@ -26,7 +26,7 @@ contract SuperchainWETH_Test is CommonTest { event SendERC20(address indexed _from, address indexed _to, uint256 _amount, uint256 _chainId); /// @notice Emitted when an ERC20 send is relayed. - event RelayERC20(address indexed _to, uint256 _amount); + event RelayERC20(address indexed _from, address indexed _to, uint256 _amount, uint256 _source); /// @notice Test setup. function setUp() public virtual override { @@ -133,6 +133,7 @@ contract SuperchainWETH_Test is CommonTest { public { // Assume + vm.assume(_chainId != block.chainid); _amount = bound(_amount, 0, type(uint248).max - 1); // Arrange @@ -150,7 +151,11 @@ contract SuperchainWETH_Test is CommonTest { Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER, abi.encodeCall( IL2ToL2CrossDomainMessenger.sendMessage, - (_chainId, address(superchainWeth), abi.encodeCall(superchainWeth.relayERC20, (_recipient, _amount))) + ( + _chainId, + address(superchainWeth), + abi.encodeCall(superchainWeth.relayERC20, (_caller, _recipient, _amount)) + ) ), 1 ); @@ -169,6 +174,7 @@ contract SuperchainWETH_Test is CommonTest { /// @param _chainId The chain ID to send the WETH to. function testFuzz_sendERC20_sufficientFromCustomGasTokenChain_succeeds(uint256 _amount, uint256 _chainId) public { // Assume + vm.assume(_chainId != block.chainid); _amount = bound(_amount, 0, type(uint248).max - 1); // Arrange @@ -187,7 +193,7 @@ contract SuperchainWETH_Test is CommonTest { Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER, abi.encodeCall( IL2ToL2CrossDomainMessenger.sendMessage, - (_chainId, address(superchainWeth), abi.encodeCall(superchainWeth.relayERC20, (bob, _amount))) + (_chainId, address(superchainWeth), abi.encodeCall(superchainWeth.relayERC20, (alice, bob, _amount))) ), 1 ); @@ -204,6 +210,7 @@ contract SuperchainWETH_Test is CommonTest { /// @param _chainId The chain ID to send the WETH to. function testFuzz_sendERC20_insufficientBalance_fails(uint256 _amount, uint256 _chainId) public { // Assume + vm.assume(_chainId != block.chainid); _amount = bound(_amount, 0, type(uint248).max - 1); // Arrange @@ -224,7 +231,7 @@ contract SuperchainWETH_Test is CommonTest { /// L2ToL2CrossDomainMessenger as long as the crossDomainMessageSender is the /// SuperchainWETH contract. /// @param _amount The amount of WETH to send. - function testFuzz_relayERC20_fromMessenger_succeeds(uint256 _amount) public { + function testFuzz_relayERC20_fromMessenger_succeeds(address _sender, uint256 _amount, uint256 _chainId) public { // Assume _amount = bound(_amount, 0, type(uint248).max - 1); @@ -234,13 +241,18 @@ contract SuperchainWETH_Test is CommonTest { abi.encodeCall(IL2ToL2CrossDomainMessenger.crossDomainMessageSender, ()), abi.encode(address(superchainWeth)) ); + vm.mockCall( + Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER, + abi.encodeCall(IL2ToL2CrossDomainMessenger.crossDomainMessageSource, ()), + abi.encode(_chainId) + ); // Act vm.expectEmit(address(superchainWeth)); - emit RelayERC20(bob, _amount); + emit RelayERC20(_sender, bob, _amount, _chainId); vm.expectCall(Predeploys.ETH_LIQUIDITY, abi.encodeCall(ETHLiquidity.mint, (_amount)), 1); vm.prank(Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER); - superchainWeth.relayERC20(bob, _amount); + superchainWeth.relayERC20(_sender, bob, _amount); // Assert assertEq(address(superchainWeth).balance, _amount); @@ -252,7 +264,13 @@ contract SuperchainWETH_Test is CommonTest { /// SuperchainWETH contract, even when the chain is a custom gas token chain. Shows /// that ETH is not minted in this case but the SuperchainWETH balance is updated. /// @param _amount The amount of WETH to send. - function testFuzz_relayERC20_fromMessengerCustomGasTokenChain_succeeds(uint256 _amount) public { + function testFuzz_relayERC20_fromMessengerCustomGasTokenChain_succeeds( + address _sender, + uint256 _amount, + uint256 _chainId + ) + public + { // Assume _amount = bound(_amount, 0, type(uint248).max - 1); @@ -262,14 +280,19 @@ contract SuperchainWETH_Test is CommonTest { abi.encodeCall(IL2ToL2CrossDomainMessenger.crossDomainMessageSender, ()), abi.encode(address(superchainWeth)) ); + vm.mockCall( + Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER, + abi.encodeCall(IL2ToL2CrossDomainMessenger.crossDomainMessageSource, ()), + abi.encode(_chainId) + ); vm.mockCall(address(l1Block), abi.encodeCall(l1Block.isCustomGasToken, ()), abi.encode(true)); // Act vm.expectEmit(address(superchainWeth)); - emit RelayERC20(bob, _amount); + emit RelayERC20(_sender, bob, _amount, _chainId); vm.expectCall(Predeploys.ETH_LIQUIDITY, abi.encodeCall(ETHLiquidity.mint, (_amount)), 0); vm.prank(Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER); - superchainWeth.relayERC20(bob, _amount); + superchainWeth.relayERC20(_sender, bob, _amount); // Assert assertEq(address(superchainWeth).balance, 0); @@ -279,7 +302,7 @@ contract SuperchainWETH_Test is CommonTest { /// @notice Tests that the relayERC20 function reverts when not called from the /// L2ToL2CrossDomainMessenger. /// @param _amount The amount of WETH to send. - function testFuzz_relayERC20_notFromMessenger_fails(uint256 _amount) public { + function testFuzz_relayERC20_notFromMessenger_fails(address _sender, uint256 _amount) public { // Assume _amount = bound(_amount, 0, type(uint248).max - 1); @@ -289,7 +312,7 @@ contract SuperchainWETH_Test is CommonTest { // Act vm.expectRevert(Unauthorized.selector); vm.prank(alice); - superchainWeth.relayERC20(bob, _amount); + superchainWeth.relayERC20(_sender, bob, _amount); // Assert assertEq(address(superchainWeth).balance, 0); @@ -300,7 +323,7 @@ contract SuperchainWETH_Test is CommonTest { /// L2ToL2CrossDomainMessenger but the crossDomainMessageSender is not the /// SuperchainWETH contract. /// @param _amount The amount of WETH to send. - function testFuzz_relayERC20_fromMessengerNotFromSuperchainWETH_fails(uint256 _amount) public { + function testFuzz_relayERC20_fromMessengerNotFromSuperchainWETH_fails(address _sender, uint256 _amount) public { // Assume _amount = bound(_amount, 0, type(uint248).max - 1); @@ -314,7 +337,7 @@ contract SuperchainWETH_Test is CommonTest { // Act vm.expectRevert(Unauthorized.selector); vm.prank(Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER); - superchainWeth.relayERC20(bob, _amount); + superchainWeth.relayERC20(_sender, bob, _amount); // Assert assertEq(address(superchainWeth).balance, 0); diff --git a/packages/contracts-bedrock/test/Predeploys.t.sol b/packages/contracts-bedrock/test/Predeploys.t.sol index df7c2e3229ed..d39eb8b0ff61 100644 --- a/packages/contracts-bedrock/test/Predeploys.t.sol +++ b/packages/contracts-bedrock/test/Predeploys.t.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import { CommonTest } from "test/setup/CommonTest.sol"; -import { ForgeArtifacts } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.sol"; import { EIP1967Helper } from "test/mocks/EIP1967Helper.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; diff --git a/packages/contracts-bedrock/test/Safe/DeputyGuardianModule.t.sol b/packages/contracts-bedrock/test/Safe/DeputyGuardianModule.t.sol index ba91387352a7..326024977382 100644 --- a/packages/contracts-bedrock/test/Safe/DeputyGuardianModule.t.sol +++ b/packages/contracts-bedrock/test/Safe/DeputyGuardianModule.t.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import { CommonTest } from "test/setup/CommonTest.sol"; -import { ForgeArtifacts, Abi } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts, Abi } from "scripts/libraries/ForgeArtifacts.sol"; import { GnosisSafe as Safe } from "safe-contracts/GnosisSafe.sol"; import "test/safe-tools/SafeTestTools.sol"; diff --git a/packages/contracts-bedrock/test/Specs.t.sol b/packages/contracts-bedrock/test/Specs.t.sol index 466be3ab8449..4c87fb82e49d 100644 --- a/packages/contracts-bedrock/test/Specs.t.sol +++ b/packages/contracts-bedrock/test/Specs.t.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.15; import { CommonTest } from "test/setup/CommonTest.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { console2 as console } from "forge-std/console2.sol"; import { ProtocolVersions } from "src/L1/ProtocolVersions.sol"; import { OptimismPortal } from "src/L1/OptimismPortal.sol"; @@ -11,7 +11,7 @@ import { OptimismPortal2 } from "src/L1/OptimismPortal2.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; import { DataAvailabilityChallenge } from "src/L1/DataAvailabilityChallenge.sol"; import { OPStackManager } from "src/L1/OPStackManager.sol"; -import { ForgeArtifacts, Abi, AbiEntry } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts, Abi, AbiEntry } from "scripts/libraries/ForgeArtifacts.sol"; /// @title Specification_Test /// @dev Specifies common security properties of entrypoints to L1 contracts, including authorization and diff --git a/packages/contracts-bedrock/test/dispute/FaultDisputeGame.t.sol b/packages/contracts-bedrock/test/dispute/FaultDisputeGame.t.sol index ccf6bce1a1de..2aae76b2dbbe 100644 --- a/packages/contracts-bedrock/test/dispute/FaultDisputeGame.t.sol +++ b/packages/contracts-bedrock/test/dispute/FaultDisputeGame.t.sol @@ -870,7 +870,6 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init { (,,,, disputed,,) = gameProxy.claimData(5); gameProxy.attack{ value: _getRequiredBond(5) }(disputed, 5, _dummyClaim()); (,,,, disputed,,) = gameProxy.claimData(6); - bytes memory _dummyClaimData = abi.encode(gasleft(), gasleft()); gameProxy.defend{ value: _getRequiredBond(6) }(disputed, 6, postState_); (,,,, disputed,,) = gameProxy.claimData(7); diff --git a/packages/contracts-bedrock/test/invariants/OptimismSuperchainERC20.t.sol b/packages/contracts-bedrock/test/invariants/OptimismSuperchainERC20.t.sol new file mode 100644 index 000000000000..028a0124e6ca --- /dev/null +++ b/packages/contracts-bedrock/test/invariants/OptimismSuperchainERC20.t.sol @@ -0,0 +1,225 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.25; + +// Testing utilities +import { Test, StdUtils, Vm } from "forge-std/Test.sol"; +import { EIP1967Helper } from "test/mocks/EIP1967Helper.sol"; + +// Libraries +import { Predeploys } from "src/libraries/Predeploys.sol"; +import { OptimismSuperchainERC20 } from "src/L2/OptimismSuperchainERC20.sol"; +import { IL2ToL2CrossDomainMessenger } from "src/L2/IL2ToL2CrossDomainMessenger.sol"; + +/// @title OptimismSuperchainERC20_User +/// @notice Actor contract that interacts with the OptimismSuperchainERC20 contract. +contract OptimismSuperchainERC20_User is StdUtils { + address public immutable receiver; + + /// @notice Cross domain message data. + struct MessageData { + bytes32 id; + uint256 amount; + } + + uint256 public totalAmountSent; + uint256 public totalAmountRelayed; + + /// @notice Flag to indicate if the test has failed. + bool public failed = false; + + /// @notice The Vm contract. + Vm internal vm; + + /// @notice The OptimismSuperchainERC20 contract. + OptimismSuperchainERC20 internal superchainERC20; + + /// @notice Mapping of sent messages. + mapping(bytes32 => bool) internal sent; + + /// @notice Array of unrelayed messages. + MessageData[] internal unrelayed; + + /// @param _vm The Vm contract. + /// @param _superchainERC20 The OptimismSuperchainERC20 contract. + /// @param _balance The initial balance of the contract. + constructor(Vm _vm, OptimismSuperchainERC20 _superchainERC20, uint256 _balance, address _receiver) { + vm = _vm; + superchainERC20 = _superchainERC20; + + // Mint balance to this actor. + vm.prank(Predeploys.L2_STANDARD_BRIDGE); + superchainERC20.mint(address(this), _balance); + receiver = _receiver; + } + + /// @notice Send ERC20 tokens to another chain. + /// @param _amount The amount of ERC20 tokens to send. + /// @param _chainId The chain ID to send the tokens to. + /// @param _messageId The message ID. + function sendERC20(uint256 _amount, uint256 _chainId, bytes32 _messageId) public { + // Make sure we aren't reusing a message ID. + if (sent[_messageId]) { + return; + } + + // Bound send amount to our ERC20 balance. + _amount = bound(_amount, 0, superchainERC20.balanceOf(address(this))); + + // Send the amount. + try superchainERC20.sendERC20(receiver, _amount, _chainId) { + // Success. + totalAmountSent += _amount; + } catch { + failed = true; + } + + // Mark message as sent. + sent[_messageId] = true; + unrelayed.push(MessageData({ id: _messageId, amount: _amount })); + } + + /// @notice Relay a message from another chain. + function relayMessage(uint256 _source) public { + // Make sure there are unrelayed messages. + if (unrelayed.length == 0) { + return; + } + + // Grab the latest unrelayed message. + MessageData memory message = unrelayed[unrelayed.length - 1]; + + // Simulate the cross-domain message. + // Make sure the cross-domain message sender is set to this contract. + vm.mockCall( + Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER, + abi.encodeCall(IL2ToL2CrossDomainMessenger.crossDomainMessageSender, ()), + abi.encode(address(superchainERC20)) + ); + + // Simulate the cross-domain message source to any chain. + vm.mockCall( + Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER, + abi.encodeCall(IL2ToL2CrossDomainMessenger.crossDomainMessageSource, ()), + abi.encode(_source) + ); + + // Prank the relayERC20 function. + // Balance will just go back to our own account. + vm.prank(Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER); + try superchainERC20.relayERC20(address(this), receiver, message.amount) { + // Success. + totalAmountRelayed += message.amount; + } catch { + failed = true; + } + + // Remove the message from the unrelayed list. + unrelayed.pop(); + } +} + +/// @title OptimismSuperchainERC20_Invariant +/// @notice Invariant test that checks that sending OptimismSuperchainERC20 always succeeds if the actor has a +/// sufficient balance to do so and that the actor's balance does not increase out of nowhere. +contract OptimismSuperchainERC20_Invariant is Test { + /// @notice Starting balance of the contract. + uint256 public constant STARTING_BALANCE = type(uint128).max; + + /// @notice The OptimismSuperchainERC20 contract implementation. + address internal optimismSuperchainERC20Impl; + + /// @notice The OptimismSuperchainERC20_User actor. + OptimismSuperchainERC20_User internal actor; + + /// @notice The OptimismSuperchainERC20 contract. + OptimismSuperchainERC20 internal optimismSuperchainERC20; + + /// @notice The address that will receive the tokens when relaying messages + address internal receiver = makeAddr("receiver"); + + /// @notice Test setup. + function setUp() public { + // Deploy the L2ToL2CrossDomainMessenger contract. + address _impl = _setImplementationCode(Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER); + _setProxyCode(Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER, _impl); + + // Create a new OptimismSuperchainERC20 implementation. + optimismSuperchainERC20Impl = address(new OptimismSuperchainERC20()); + + // Deploy the OptimismSuperchainERC20 contract. + address _proxy = address(0x123456); + _setProxyCode(_proxy, optimismSuperchainERC20Impl); + optimismSuperchainERC20 = OptimismSuperchainERC20(_proxy); + + // Create a new OptimismSuperchainERC20_User actor. + actor = new OptimismSuperchainERC20_User(vm, optimismSuperchainERC20, STARTING_BALANCE, receiver); + + // Set the target contract. + targetContract(address(actor)); + + // Set the target selectors. + bytes4[] memory selectors = new bytes4[](2); + selectors[0] = actor.sendERC20.selector; + selectors[1] = actor.relayMessage.selector; + FuzzSelector memory selector = FuzzSelector({ addr: address(actor), selectors: selectors }); + targetSelector(selector); + + // Setup assertions + assert(optimismSuperchainERC20.balanceOf(address(actor)) == STARTING_BALANCE); + assert(optimismSuperchainERC20.balanceOf(address(receiver)) == 0); + assert(optimismSuperchainERC20.totalSupply() == STARTING_BALANCE); + } + + /// @notice Sets the bytecode in the implementation address. + function _setImplementationCode(address _addr) internal returns (address) { + string memory cname = Predeploys.getName(_addr); + address impl = Predeploys.predeployToCodeNamespace(_addr); + vm.etch(impl, vm.getDeployedCode(string.concat(cname, ".sol:", cname))); + return impl; + } + + /// @notice Sets the bytecode in the proxy address. + function _setProxyCode(address _addr, address _impl) internal { + bytes memory code = vm.getDeployedCode("universal/Proxy.sol:Proxy"); + vm.etch(_addr, code); + EIP1967Helper.setAdmin(_addr, Predeploys.PROXY_ADMIN); + EIP1967Helper.setImplementation(_addr, _impl); + } + + /// @notice Invariant that checks that sending OptimismSuperchainERC20 always succeeds. + /// @custom:invariant Calls to sendERC20 should always succeed as long as the actor has enough balance. + /// Actor's balance should also not increase out of nowhere but instead should decrease by the + /// amount sent. + function invariant_sendERC20_succeeds() public view { + // Assert that the actor has not failed to send OptimismSuperchainERC20. + assertTrue(!actor.failed()); + + // Assert that the actor has sent more than or equal to the amount relayed. + assertTrue(actor.totalAmountSent() >= actor.totalAmountRelayed()); + + // Assert that the actor's balance has decreased by the amount sent. + assertEq(optimismSuperchainERC20.balanceOf(address(actor)), STARTING_BALANCE - actor.totalAmountSent()); + + // Assert that the total supply of the OptimismSuperchainERC20 contract has decreased by the amount unrelayed. + uint256 _unrelayedAmount = actor.totalAmountSent() - actor.totalAmountRelayed(); + assertEq(optimismSuperchainERC20.totalSupply(), STARTING_BALANCE - _unrelayedAmount); + } + + /// @notice Invariant that checks that relaying OptimismSuperchainERC20 always succeeds. + /// @custom:invariant Calls to relayERC20 should always succeeds when a message is received from another chain. + /// Actor's balance should only increase by the amount relayed. + function invariant_relayERC20_succeeds() public view { + // Assert that the actor has not failed to relay OptimismSuperchainERC20. + assertTrue(!actor.failed()); + + // Assert that the actor has sent more than or equal to the amount relayed. + assertTrue(actor.totalAmountSent() >= actor.totalAmountRelayed()); + + // Assert that the actor's balance has increased by the amount relayed. + assertEq(optimismSuperchainERC20.balanceOf(address(receiver)), actor.totalAmountRelayed()); + + // Assert that the total supply of the OptimismSuperchainERC20 contract has decreased by the amount unrelayed. + uint256 _unrelayedAmount = actor.totalAmountSent() - actor.totalAmountRelayed(); + assertEq(optimismSuperchainERC20.totalSupply(), STARTING_BALANCE - _unrelayedAmount); + } +} diff --git a/packages/contracts-bedrock/test/invariants/SuperchainWETH.t.sol b/packages/contracts-bedrock/test/invariants/SuperchainWETH.t.sol index 19318fbda6e1..aeb250bcc36a 100644 --- a/packages/contracts-bedrock/test/invariants/SuperchainWETH.t.sol +++ b/packages/contracts-bedrock/test/invariants/SuperchainWETH.t.sol @@ -87,6 +87,9 @@ contract SuperchainWETH_User is StdUtils { // Bound send amount to our WETH balance. _amount = bound(_amount, 0, weth.balanceOf(address(this))); + // Prevent receiving chain ID from being the same as the current chain ID. + _chainId = _chainId == block.chainid ? _chainId + 1 : _chainId; + // Send the amount. try weth.sendERC20(address(this), _amount, _chainId) { // Success. @@ -100,7 +103,7 @@ contract SuperchainWETH_User is StdUtils { } /// @notice Relay a message from another chain. - function relayMessage() public { + function relayMessage(uint256 _source) public { // Make sure there are unrelayed messages. if (unrelayed.length == 0) { return; @@ -117,10 +120,17 @@ contract SuperchainWETH_User is StdUtils { abi.encode(address(weth)) ); + // Simulate the cross-domain message source to any chain. + vm.mockCall( + Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER, + abi.encodeCall(IL2ToL2CrossDomainMessenger.crossDomainMessageSource, ()), + abi.encode(_source) + ); + // Prank the relayERC20 function. // Balance will just go back to our own account. vm.prank(Predeploys.L2_TO_L2_CROSS_DOMAIN_MESSENGER); - try weth.relayERC20(address(this), message.amount) { + try weth.relayERC20(address(this), address(this), message.amount) { // Success. } catch { failed = true; diff --git a/packages/contracts-bedrock/test/kontrol/README.md b/packages/contracts-bedrock/test/kontrol/README.md index f984a8782fe9..32eedd4f0409 100644 --- a/packages/contracts-bedrock/test/kontrol/README.md +++ b/packages/contracts-bedrock/test/kontrol/README.md @@ -52,8 +52,8 @@ The directory is structured as follows ### Installation 1. `cd` to the root of this repo. -2. Install Foundry by running `pnpm install:foundry`. This installs `foundryup`, the foundry toolchain installer, then installs the required foundry version. -3. Install Kontrol by running `pnpm install:kontrol`. This installs `kup`, the package manager for RV tools, then installs the required kontrol version. +2. Install Foundry by running `just install-foundry`. This installs `foundryup`, the foundry toolchain installer, then installs the required foundry version. +3. Install Kontrol by running `just install-kontrol`. This installs `kup`, the package manager for RV tools, then installs the required kontrol version. 4. Install Docker. ## Usage diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index 15c23fb0faeb..63f4389a7bcf 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -12,40 +12,40 @@ contract DeploymentSummary is DeploymentSummaryCode { address private constant VM_ADDRESS = address(uint160(uint256(keccak256("hevm cheat code")))); Vm private constant vm = Vm(VM_ADDRESS); - address internal constant addressManagerAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; - address internal constant anchorStateRegistryAddress = 0x610C37dd344e47D7848Da075a90128472140e80f; - address internal constant anchorStateRegistryProxyAddress = 0x39Af23E00F1e662025aA01b0cEdA19542B78DF99; + address internal constant addressManagerAddress = 0x50EEf481cae4250d252Ae577A09bF514f224C6C4; + address internal constant anchorStateRegistryAddress = 0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9; + address internal constant anchorStateRegistryProxyAddress = 0xd6EAF4c146261653EE059077B78ED088Add54309; address internal constant delayedWETHAddress = 0x49BBFf1629824A1e7993Ab5c17AFa45D24AB28c9; - address internal constant delayedWETHProxyAddress = 0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d; + address internal constant delayedWETHProxyAddress = 0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92; address internal constant disputeGameFactoryAddress = 0x20B168142354Cee65a32f6D8cf3033E592299765; - address internal constant disputeGameFactoryProxyAddress = 0xc7B87b2b892EA5C3CfF47168881FE168C00377FB; + address internal constant disputeGameFactoryProxyAddress = 0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d; address internal constant l1CrossDomainMessengerAddress = 0x094e6508ba9d9bf1ce421fff3dE06aE56e67901b; - address internal constant l1CrossDomainMessengerProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; + address internal constant l1CrossDomainMessengerProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; address internal constant l1ERC721BridgeAddress = 0x5C4F5e749A61a9503c4AAE8a9393e89609a0e804; - address internal constant l1ERC721BridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; + address internal constant l1ERC721BridgeProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; address internal constant l1StandardBridgeAddress = 0xb7900B27Be8f0E0fF65d1C3A4671e1220437dd2b; - address internal constant l1StandardBridgeProxyAddress = 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4; + address internal constant l1StandardBridgeProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; - address internal constant l2OutputOracleProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; + address internal constant l2OutputOracleProxyAddress = 0x39Af23E00F1e662025aA01b0cEdA19542B78DF99; address internal constant mipsAddress = 0xB3A0348310a0ff78E5FbDB7f14BB7d3e02d40773; address internal constant optimismMintableERC20FactoryAddress = 0x39Aea2Dd53f2d01c15877aCc2791af6BDD7aD567; - address internal constant optimismMintableERC20FactoryProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; + address internal constant optimismMintableERC20FactoryProxyAddress = 0xc7B87b2b892EA5C3CfF47168881FE168C00377FB; address internal constant optimismPortalAddress = 0xbdD90485FCbcac869D5b5752179815a3103d8131; address internal constant optimismPortal2Address = 0x542e5F5d3934b6A8A8B4219cbc99D3D87a7137E1; - address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; + address internal constant optimismPortalProxyAddress = 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4; address internal constant preimageOracleAddress = 0x3bd7E801E51d48c5d94Ea68e8B801DFFC275De75; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; - address internal constant protocolVersionsProxyAddress = 0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6; - address internal constant proxyAdminAddress = 0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76; - address internal constant safeProxyFactoryAddress = 0x34A1D3fff3958843C43aD80F30b94c510645C316; - address internal constant safeSingletonAddress = 0x90193C961A926261B756D1E5bb255e67ff9498A1; + address internal constant protocolVersionsProxyAddress = 0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1; + address internal constant proxyAdminAddress = 0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1; + address internal constant safeProxyFactoryAddress = 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496; + address internal constant safeSingletonAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; address internal constant superchainConfigAddress = 0x068E44eB31e111028c41598E4535be7468674D0A; - address internal constant superchainConfigProxyAddress = 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809; + address internal constant superchainConfigProxyAddress = 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351; address internal constant systemConfigAddress = 0x67866A5052E5302aaD08e9f352331fd8622eB6DC; - address internal constant systemConfigProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; - address internal constant systemOwnerSafeAddress = 0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3; - address internal constant acc32Address = 0xcE8C32b1493DB37767fAF988dEC9E80089f4f33c; - address internal constant acc33Address = 0x357A483a8923686E7fA454Ee93bbc11aFB114743; + address internal constant systemConfigProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; + address internal constant systemOwnerSafeAddress = 0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD; + address internal constant acc32Address = 0x357A483a8923686E7fA454Ee93bbc11aFB114743; + address internal constant acc33Address = 0xb6b1579AA54e2F61e621a40d5F2704D717B3544F; function recreateDeployment() public { bytes32 slot; @@ -57,7 +57,7 @@ contract DeploymentSummary is DeploymentSummaryCode { vm.store(safeSingletonAddress, slot, value); vm.etch(systemOwnerSafeAddress, systemOwnerSafeCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1"; + value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"e90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0"; value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; @@ -83,14 +83,14 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000003"; - value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; + value = hex"00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3"; + value = hex"0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd"; vm.store(proxyAdminAddress, slot, value); vm.etch(superchainConfigProxyAddress, superchainConfigProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(superchainConfigProxyAddress, slot, value); vm.etch(superchainConfigAddress, superchainConfigCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -122,7 +122,7 @@ contract DeploymentSummary is DeploymentSummaryCode { vm.store(superchainConfigProxyAddress, slot, value); vm.etch(protocolVersionsProxyAddress, protocolVersionsProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(protocolVersionsProxyAddress, slot, value); vm.etch(protocolVersionsAddress, protocolVersionsCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -153,7 +153,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(protocolVersionsProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(protocolVersionsProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc"; @@ -163,49 +163,49 @@ contract DeploymentSummary is DeploymentSummaryCode { vm.store(protocolVersionsProxyAddress, slot, value); vm.etch(optimismPortalProxyAddress, optimismPortalProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(optimismPortalProxyAddress, slot, value); vm.etch(systemConfigProxyAddress, systemConfigProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(systemConfigProxyAddress, slot, value); vm.etch(l1StandardBridgeProxyAddress, l1StandardBridgeProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(l1StandardBridgeProxyAddress, slot, value); vm.etch(l1CrossDomainMessengerProxyAddress, l1CrossDomainMessengerProxyCode); - slot = hex"a8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c"; - value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; + slot = hex"191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284"; + value = hex"00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); - slot = hex"eae32376463217751b8fa4dea8c38ab253664fa3605de6d85d2e790aa970f2b8"; + slot = hex"6822ddba83a78589c753bb747cf4919773ec1d36eeb0bb2a09d64b6d87adda0b"; value = hex"4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); vm.etch(optimismMintableERC20FactoryProxyAddress, optimismMintableERC20FactoryProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(optimismMintableERC20FactoryProxyAddress, slot, value); vm.etch(l1ERC721BridgeProxyAddress, l1ERC721BridgeProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(l1ERC721BridgeProxyAddress, slot, value); vm.etch(disputeGameFactoryProxyAddress, disputeGameFactoryProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(disputeGameFactoryProxyAddress, slot, value); vm.etch(l2OutputOracleProxyAddress, l2OutputOracleProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(l2OutputOracleProxyAddress, slot, value); vm.etch(delayedWETHProxyAddress, delayedWETHProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(delayedWETHProxyAddress, slot, value); vm.etch(anchorStateRegistryProxyAddress, anchorStateRegistryProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(anchorStateRegistryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(addressManagerAddress, slot, value); vm.etch(l1CrossDomainMessengerAddress, l1CrossDomainMessengerCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -440,13 +440,13 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000036"; - value = hex"000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865"; + value = hex"00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000037"; - value = hex"0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb"; + value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000035"; - value = hex"0000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900"; + value = hex"00000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; value = hex"000000000000000000000000000000000000000000000000000000000000dead"; @@ -470,7 +470,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc"; @@ -494,22 +494,22 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"000000000000000000000000ff00000000000000000000000000000000000000"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580636"; - value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; + value = hex"000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a7"; - value = hex"000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f"; + value = hex"000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6376"; - value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; + value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa906"; - value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; + value = hex"0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ac"; - value = hex"000000000000000000000000978e3286eb805934215a88694d80b09aded68d90"; + value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"a04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320c"; - value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; + value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"a11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -523,7 +523,7 @@ contract DeploymentSummary is DeploymentSummaryCode { slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"0000000000000000000000000000000000000000000000000000000000000005"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"727598a658f6983be3a9f29beef55aaee89ef8a176baeeacbe7edf5ff94a781b"; + slot = hex"540cf4e2f45b866b44f44bde51e109474016dc46a0670fbe1684ad8eaf90fdc3"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; @@ -539,13 +539,13 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; - value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; + value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb"; + value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000003"; - value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; + value = hex"000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000004"; value = hex"0000000000000000000000004200000000000000000000000000000000000010"; @@ -566,10 +566,10 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; - value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; + value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000001"; - value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; + value = hex"000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000002"; value = hex"0000000000000000000000004200000000000000000000000000000000000014"; @@ -590,7 +590,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(optimismMintableERC20FactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000001"; - value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; + value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; vm.store(optimismMintableERC20FactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -598,13 +598,13 @@ contract DeploymentSummary is DeploymentSummaryCode { slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"0000000000000000000000000000000000000000000000000000000000000009"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"a8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c"; + slot = hex"191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284"; value = hex"0000000000000000000000000000000000000000000000000000000000000002"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"000000000000000000000000000000000000000000000000000000000000000a"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"7cda2d9a7dd1a58982b7fac9315bdc1ed8c92aeb9c22cd8555aaa54972f01ccb"; + slot = hex"89a8cb4d9b6f179480a9e676431122d6ba6a5fb2aa9462528e7e48e497a5c045"; value = hex"4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; @@ -620,13 +620,13 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000001010000000000000000000000000000000000000000"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fb"; - value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; + value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fc"; - value = hex"000000000000000000000000978e3286eb805934215a88694d80b09aded68d90"; + value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fd"; - value = hex"0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb"; + value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000cc"; value = hex"000000000000000000000000000000000000000000000000000000000000dead"; @@ -686,7 +686,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(disputeGameFactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(disputeGameFactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; @@ -707,13 +707,13 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000068"; - value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; + value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -722,7 +722,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"000000000000000000000000000000000000000000000000000000000000000f"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000610c37dd344e47d7848da075a90128472140e80f"; + value = hex"000000000000000000000000e2a80256d1dafe06683f231f8e9561639aa0e9b9"; vm.store(anchorStateRegistryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -750,17 +750,17 @@ contract DeploymentSummary is DeploymentSummaryCode { vm.store(anchorStateRegistryProxyAddress, slot, value); vm.etch(acc32Address, acc32Code); slot = hex"ffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b"; - value = hex"000000000000000000000000ce8c32b1493db37767faf988dec9e80089f4f33c"; + value = hex"000000000000000000000000357a483a8923686e7fa454ee93bbc11afb114743"; vm.store(disputeGameFactoryProxyAddress, slot, value); vm.etch(acc33Address, acc33Code); slot = hex"4d5a9bd2e41301728d41c8e705190becb4e74abe869f75bdb405b63716a35f9e"; - value = hex"000000000000000000000000357a483a8923686e7fa454ee93bbc11afb114743"; + value = hex"000000000000000000000000b6b1579aa54e2f61e621a40d5f2704d717b3544f"; vm.store(disputeGameFactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3"; + value = hex"0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd"; vm.store(disputeGameFactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3"; + value = hex"0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd"; vm.store(delayedWETHProxyAddress, slot, value); } } diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index a7f02ba75016..4e8b67367eaf 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -67,9 +67,9 @@ contract DeploymentSummaryCode { bytes internal constant mipsCode = hex"608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d50146100465780637dc0d1d014610098578063e14ced32146100dc575b600080fd5b6100826040518060400160405280600c81526020017f312e312e302d626574612e36000000000000000000000000000000000000000081525081565b60405161008f9190612120565b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161008f565b6100ef6100ea3660046121d5565b6100fd565b60405190815260200161008f565b6000610107612096565b6080811461011457600080fd5b6040516106001461012457600080fd5b6084871461013157600080fd5b6101a4851461013f57600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b60208110156101ea57823560e01c82526004909201916020909101906001016101c6565b5050508061012001511561020857610200610360565b915050610357565b6101408101805160010167ffffffffffffffff16905260006101a49050600080600061023d856060015186600001518661047c565b9250925092508163ffffffff16600014801561025f57508063ffffffff16600c145b156102795761026d876104a3565b95505050505050610357565b60006102f3866040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b61016087015187519192506103109183919061052488888861087b565b8652805163ffffffff9081166060808901919091526020830151821660808901526040830151821660a08901528201511660c087015261034e610360565b96505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156103ff57601c86015184526020909501946004909301926001016103db565b506000835283830384a060009450806001811461041f5760039550610447565b82801561043757600181146104405760029650610445565b60009650610445565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b600080600061048c858786610c61565b96603f601a89901c81169750881695509350505050565b60006104ad612096565b608090506000806000806104e48561016001516040810151608082015160a083015160c084015160e0909401519294919390929091565b509350935093509350600080610ffa63ffffffff168663ffffffff16036105295761051485858960e00151610d15565b63ffffffff1660e08a0152909250905061078a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03363ffffffff871601610562576340000000915061078a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefe863ffffffff871601610598576001915061078a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef6a63ffffffff8716016105ec57600161012088015260ff85166101008801526105df610360565b9998505050505050505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05d63ffffffff8716016106e85760006040518061012001604052808763ffffffff1681526020018663ffffffff1681526020018563ffffffff16815260200189602001518152602001896040015163ffffffff1681526020018b81526020017f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7573ffffffffffffffffffffffffffffffffffffffff1681526020016106ba6101a4600160ff16610380020190565b8152895160209091015290506106cf81610d57565b8b5263ffffffff1660408b0152909350915061078a9050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05c63ffffffff87160161074d5760208701516040880151610733918791879187916105248d51610fcf565b63ffffffff1660408b015260208a0152909250905061078a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02963ffffffff87160161078a5761078485856110c5565b90925090505b6000610804886040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b61016089015163ffffffff85811660408084019190915285821660e0909301929092526020830180518083168086526004909101831682526060808e01919091529051821660808d015291830151811660a08c0152908201511660c08a0152905061086d610360565b9a9950505050505050505050565b84600263ffffffff8416148061089757508263ffffffff166003145b156108e95760006002856303ffffff1663ffffffff16901b896020015163f0000000161790506108e389898663ffffffff166002146108d757601f6108da565b60005b60ff168461117a565b50610c56565b600080601f601087901c8116908a90601589901c166020811061090e5761090e612249565b602002015192508063ffffffff8716158061092f57508663ffffffff16601c145b15610961578a8263ffffffff166020811061094c5761094c612249565b6020020151925050601f600b88901c16610a18565b60208763ffffffff1610156109c3578663ffffffff16600c148061098b57508663ffffffff16600d145b8061099c57508663ffffffff16600e145b156109ad578761ffff169250610a18565b6109bc8861ffff166010611252565b9250610a18565b60288763ffffffff161015806109df57508663ffffffff166022145b806109f057508663ffffffff166026145b15610a18578a8263ffffffff1660208110610a0d57610a0d612249565b602002015192508190505b60048763ffffffff1610158015610a35575060088763ffffffff16105b80610a4657508663ffffffff166001145b15610a6257610a598c8c898b86896112c5565b50505050610c56565b63ffffffff6000602089831610610ac757610a828a61ffff166010611252565b9095019463fffffffc8616610a988d828e610c61565b915060288a63ffffffff1610158015610ab857508963ffffffff16603014155b15610ac557809250600093505b505b6000610ad78b8b8b8a8a876114b3565b63ffffffff1690508963ffffffff166000148015610afc575060088963ffffffff1610155b8015610b0e5750601c8963ffffffff16105b15610bd6578863ffffffff1660081480610b2e57508863ffffffff166009145b15610b6157610b558f8f8b63ffffffff16600814610b4c5786610b4f565b60005b8a61117a565b50505050505050610c56565b8863ffffffff16600a03610b8357610b558f8f868a63ffffffff8b1615611bd2565b8863ffffffff16600b03610ba657610b558f8f868a63ffffffff8b161515611bd2565b60108963ffffffff1610158015610bc35750601c8963ffffffff16105b15610bd657610b558f8f8b8a8a89611ca2565b8963ffffffff166038148015610bf1575063ffffffff851615155b15610c215760018e8663ffffffff1660208110610c1057610c10612249565b63ffffffff90921660209290920201525b8263ffffffff1663ffffffff14610c4057610c3d838d83611f5b565b97505b610c4e8f8f86846001611bd2565b505050505050505b979650505050505050565b6000610c6c82611ffd565b6003831615610c7a57600080fd5b6020820191358360051c8160005b601b811015610ce05760208601953583821c6001168015610cb05760018114610cc557610cd6565b60008481526020839052604090209350610cd6565b600082815260208590526040902093505b5050600101610c88565b50868114610cf657630badf00d60005260206000fd5b5050601f93909316601c0360031b9290921c63ffffffff169392505050565b6000808284610fff811615610d2f57610fff811661100003015b8663ffffffff16600003610d495784935090810190610d4d565b8693505b5093509350939050565b6101008101516080820151825160009283929163ffffffff1615610fc857845163ffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb01610f82576000610dc3866101000151876020015163fffffffc168860e00151610c61565b606087015190915060001a600103610e4557610e3f86606001518760a0015160408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b60608701525b6000808760c0015173ffffffffffffffffffffffffffffffffffffffff1663e03110e189606001518a608001516040518363ffffffff1660e01b8152600401610e9e92919091825263ffffffff16602082015260400190565b6040805180830381865afa158015610eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ede9190612278565b60208a015160408b01519294509092509060038216600481900384811015610f04578094505b5083821015610f11578193505b8460088502610100031c9450846008828660040303021b9450600180600883600403021b036001806008878560040303021b03915081198116905085811988161796505050610f6f8a6020015163fffffffc168b60e0015187611f5b565b9298505050938601939250610fc8915050565b845163ffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd01610fbc5784604001519350610fc8565b63ffffffff9350600992505b9193509193565b600080858563ffffffff8b1660011480610fef575063ffffffff8b166002145b80611000575063ffffffff8b166004145b1561100d578893506110b7565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8c16016110ab57600061104d868c63fffffffc1689610c61565b90508860038c166004038b81101561106357809b505b8b965086900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193880293841b0116911b179150600090506110b7565b63ffffffff9350600992505b975097509750979350505050565b60008063ffffffff83166003036111685763ffffffff841615806110ef575063ffffffff84166005145b80611100575063ffffffff84166003145b1561110e5760009150611173565b63ffffffff841660011480611129575063ffffffff84166002145b8061113a575063ffffffff84166006145b8061114b575063ffffffff84166004145b156111595760019150611173565b5063ffffffff90506009611173565b5063ffffffff905060165b9250929050565b836000015160040163ffffffff16846020015163ffffffff16146111ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b835160208501805163ffffffff908116875283811690915283161561124b5780600801848463ffffffff166020811061123a5761123a612249565b63ffffffff90921660209290920201525b5050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b01826112af5760006112b1565b815b90861663ffffffff16179250505092915050565b6000866000015160040163ffffffff16876020015163ffffffff1614611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f7400000000000000000000000060448201526064016111f6565b8463ffffffff166004148061136257508463ffffffff166005145b156113d9576000868463ffffffff166020811061138157611381612249565b602002015190508063ffffffff168363ffffffff161480156113a957508563ffffffff166004145b806113d157508063ffffffff168363ffffffff16141580156113d157508563ffffffff166005145b915050611456565b8463ffffffff166006036113f65760008260030b13159050611456565b8463ffffffff166007036114125760008260030b139050611456565b8463ffffffff1660010361145657601f601085901c16600081900361143b5760008360030b1291505b8063ffffffff166001036114545760008360030b121591505b505b8651602088015163ffffffff168852811561149757600261147c8661ffff166010611252565b63ffffffff90811690911b82016004011660208901526114a9565b60208801805160040163ffffffff1690525b5050505050505050565b600063ffffffff861615806114e0575060088663ffffffff16101580156114e05750600f8663ffffffff16105b156118e9578560088114611523576009811461152c57600a811461153557600b811461153e57600c811461154757600d811461155057600e81146115595761155e565b6020955061155e565b6021955061155e565b602a955061155e565b602b955061155e565b6024955061155e565b6025955061155e565b602695505b508463ffffffff16600003611583575063ffffffff8216601f600688901c161b611bc8565b8463ffffffff166002036115a7575063ffffffff8216601f600688901c161c611bc8565b8463ffffffff166003036115db57601f600688901c166115d363ffffffff8516821c6020839003611252565b915050611bc8565b8463ffffffff166004036115fb575063ffffffff8216601f84161b611bc8565b8463ffffffff1660060361161b575063ffffffff8216601f84161c611bc8565b8463ffffffff1660070361164c576116458463ffffffff168463ffffffff16901c85602003611252565b9050611bc8565b8463ffffffff16600803611661575082611bc8565b8463ffffffff16600903611676575082611bc8565b8463ffffffff16600a0361168b575082611bc8565b8463ffffffff16600b036116a0575082611bc8565b8463ffffffff16600c036116b5575082611bc8565b8463ffffffff16600f036116ca575082611bc8565b8463ffffffff166010036116df575082611bc8565b8463ffffffff166011036116f4575082611bc8565b8463ffffffff16601203611709575082611bc8565b8463ffffffff1660130361171e575082611bc8565b8463ffffffff16601803611733575082611bc8565b8463ffffffff16601903611748575082611bc8565b8463ffffffff16601a0361175d575082611bc8565b8463ffffffff16601b03611772575082611bc8565b8463ffffffff166020036117895750828201611bc8565b8463ffffffff166021036117a05750828201611bc8565b8463ffffffff166022036117b75750818303611bc8565b8463ffffffff166023036117ce5750818303611bc8565b8463ffffffff166024036117e55750828216611bc8565b8463ffffffff166025036117fc5750828217611bc8565b8463ffffffff166026036118135750828218611bc8565b8463ffffffff1660270361182b575082821719611bc8565b8463ffffffff16602a0361185a578260030b8460030b1261184d576000611850565b60015b60ff169050611bc8565b8463ffffffff16602b03611882578263ffffffff168463ffffffff161061184d576000611850565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e0000000000000000000000000060448201526064016111f6565b611882565b8563ffffffff16601c03611962578463ffffffff1660020361190e5750828202611bc8565b8463ffffffff166020148061192957508463ffffffff166021145b156118e4578463ffffffff16602003611940579219925b60005b6380000000851615611645576401fffffffe600195861b169401611943565b8563ffffffff16600f03611983575065ffffffff0000601083901b16611bc8565b8563ffffffff166020036119b7576116458460031660080260180363ffffffff168363ffffffff16901c60ff166008611252565b8563ffffffff166021036119ec576116458460021660080260100363ffffffff168363ffffffff16901c61ffff166010611252565b8563ffffffff16602203611a1a575063ffffffff60086003851602811681811b198416918316901b17611bc8565b8563ffffffff16602303611a2f575080611bc8565b8563ffffffff16602403611a60578360031660080260180363ffffffff168263ffffffff16901c60ff169050611bc8565b8563ffffffff16602503611a92578360021660080260100363ffffffff168263ffffffff16901c61ffff169050611bc8565b8563ffffffff16602603611ac3575063ffffffff60086003851602601803811681811c198416918316901c17611bc8565b8563ffffffff16602803611af8575060ff63ffffffff60086003861602601803811682811b9091188316918416901b17611bc8565b8563ffffffff16602903611b2e575061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17611bc8565b8563ffffffff16602a03611b5c575063ffffffff60086003851602811681811c198316918416901c17611bc8565b8563ffffffff16602b03611b71575081611bc8565b8563ffffffff16602e03611ba2575063ffffffff60086003851602601803811681811b198316918416901b17611bc8565b8563ffffffff16603003611bb7575080611bc8565b8563ffffffff166038036118825750815b9695505050505050565b60208363ffffffff1610611c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c696420726567697374657200000000000000000000000000000000000060448201526064016111f6565b63ffffffff831615801590611c545750805b15611c835781848463ffffffff1660208110611c7257611c72612249565b63ffffffff90921660209290920201525b5050505060208101805163ffffffff8082169093526004019091169052565b60008463ffffffff16601003611cbd57506060860151611f03565b8463ffffffff16601103611cdc5763ffffffff84166060880152611f03565b8463ffffffff16601203611cf557506040860151611f03565b8463ffffffff16601303611d145763ffffffff84166040880152611f03565b8463ffffffff16601803611d485763ffffffff600385810b9085900b02602081901c821660608a0152166040880152611f03565b8463ffffffff16601903611d795763ffffffff84811681851602602081901c821660608a0152166040880152611f03565b8463ffffffff16601a03611e3c578260030b600003611df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016111f6565b8260030b8460030b81611e0957611e0961229c565b0763ffffffff166060880152600383810b9085900b81611e2b57611e2b61229c565b0563ffffffff166040880152611f03565b8463ffffffff16601b03611f03578263ffffffff16600003611eba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016111f6565b8263ffffffff168463ffffffff1681611ed557611ed561229c565b0663ffffffff908116606089015283811690851681611ef657611ef661229c565b0463ffffffff1660408801525b63ffffffff821615611f395780868363ffffffff1660208110611f2857611f28612249565b63ffffffff90921660209290920201525b50505060208401805163ffffffff808216909652600401909416909352505050565b6000611f6683611ffd565b6003841615611f7457600080fd5b6020830192601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611ff25760208601953582821c6001168015611fc25760018114611fd757611fe8565b60008581526020839052604090209450611fe8565b600082815260208690526040902094505b5050600101611f9a565b509095945050505050565b366103808201811015612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f617461000000000000000000000000000000000000000000000000000000000060648201526084016111f6565b5050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915261016081016120fc612101565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b8181101561214d57858101830151858201604001528201612131565b8181111561215f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f8401126121a557600080fd5b50813567ffffffffffffffff8111156121bd57600080fd5b60208301915083602082850101111561117357600080fd5b6000806000806000606086880312156121ed57600080fd5b853567ffffffffffffffff8082111561220557600080fd5b61221189838a01612193565b9097509550602088013591508082111561222a57600080fd5b5061223788828901612193565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000806040838503121561228b57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a"; bytes internal constant anchorStateRegistryCode = - hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; bytes internal constant acc32Code = - hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df9973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df991690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d9092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d1690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; + hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f000000000000000000000000d6eaf4c146261653ee059077b78ed088add54309610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000d6eaf4c146261653ee059077b78ed088add5430973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000d6eaf4c146261653ee059077b78ed088add543091690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd929092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd921690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; bytes internal constant acc33Code = - hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df9973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d1690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df991690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d9092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; + hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f000000000000000000000000d6eaf4c146261653ee059077b78ed088add54309610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000d6eaf4c146261653ee059077b78ed088add5430973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd921690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000d6eaf4c146261653ee059077b78ed088add543091690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd929092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; } diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol index 783648baf54b..577d93d2d2df 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol @@ -12,40 +12,40 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { address private constant VM_ADDRESS = address(uint160(uint256(keccak256("hevm cheat code")))); Vm private constant vm = Vm(VM_ADDRESS); - address internal constant addressManagerAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; - address internal constant anchorStateRegistryAddress = 0x610C37dd344e47D7848Da075a90128472140e80f; - address internal constant anchorStateRegistryProxyAddress = 0x39Af23E00F1e662025aA01b0cEdA19542B78DF99; + address internal constant addressManagerAddress = 0x50EEf481cae4250d252Ae577A09bF514f224C6C4; + address internal constant anchorStateRegistryAddress = 0xE2a80256d1dAFe06683F231F8e9561639Aa0e9b9; + address internal constant anchorStateRegistryProxyAddress = 0xd6EAF4c146261653EE059077B78ED088Add54309; address internal constant delayedWETHAddress = 0x49BBFf1629824A1e7993Ab5c17AFa45D24AB28c9; - address internal constant delayedWETHProxyAddress = 0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d; + address internal constant delayedWETHProxyAddress = 0xEF179756ea6525AFade217cA5aB0b1b5CfE0fd92; address internal constant disputeGameFactoryAddress = 0x20B168142354Cee65a32f6D8cf3033E592299765; - address internal constant disputeGameFactoryProxyAddress = 0xc7B87b2b892EA5C3CfF47168881FE168C00377FB; + address internal constant disputeGameFactoryProxyAddress = 0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d; address internal constant l1CrossDomainMessengerAddress = 0x094e6508ba9d9bf1ce421fff3dE06aE56e67901b; - address internal constant l1CrossDomainMessengerProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; + address internal constant l1CrossDomainMessengerProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; address internal constant l1ERC721BridgeAddress = 0x5C4F5e749A61a9503c4AAE8a9393e89609a0e804; - address internal constant l1ERC721BridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; + address internal constant l1ERC721BridgeProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; address internal constant l1StandardBridgeAddress = 0xb7900B27Be8f0E0fF65d1C3A4671e1220437dd2b; - address internal constant l1StandardBridgeProxyAddress = 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4; + address internal constant l1StandardBridgeProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; - address internal constant l2OutputOracleProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; + address internal constant l2OutputOracleProxyAddress = 0x39Af23E00F1e662025aA01b0cEdA19542B78DF99; address internal constant mipsAddress = 0xB3A0348310a0ff78E5FbDB7f14BB7d3e02d40773; address internal constant optimismMintableERC20FactoryAddress = 0x39Aea2Dd53f2d01c15877aCc2791af6BDD7aD567; - address internal constant optimismMintableERC20FactoryProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; + address internal constant optimismMintableERC20FactoryProxyAddress = 0xc7B87b2b892EA5C3CfF47168881FE168C00377FB; address internal constant optimismPortalAddress = 0xbdD90485FCbcac869D5b5752179815a3103d8131; address internal constant optimismPortal2Address = 0x542e5F5d3934b6A8A8B4219cbc99D3D87a7137E1; - address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; + address internal constant optimismPortalProxyAddress = 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4; address internal constant preimageOracleAddress = 0x3bd7E801E51d48c5d94Ea68e8B801DFFC275De75; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; - address internal constant protocolVersionsProxyAddress = 0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6; - address internal constant proxyAdminAddress = 0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76; - address internal constant safeProxyFactoryAddress = 0x34A1D3fff3958843C43aD80F30b94c510645C316; - address internal constant safeSingletonAddress = 0x90193C961A926261B756D1E5bb255e67ff9498A1; + address internal constant protocolVersionsProxyAddress = 0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1; + address internal constant proxyAdminAddress = 0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1; + address internal constant safeProxyFactoryAddress = 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496; + address internal constant safeSingletonAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; address internal constant superchainConfigAddress = 0x068E44eB31e111028c41598E4535be7468674D0A; - address internal constant superchainConfigProxyAddress = 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809; + address internal constant superchainConfigProxyAddress = 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351; address internal constant systemConfigAddress = 0x67866A5052E5302aaD08e9f352331fd8622eB6DC; - address internal constant systemConfigProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; - address internal constant systemOwnerSafeAddress = 0x7EA964E5D864b95f6D7d2BD04dA897F6e31084b3; - address internal constant acc32Address = 0xcE8C32b1493DB37767fAF988dEC9E80089f4f33c; - address internal constant acc33Address = 0x357A483a8923686E7fA454Ee93bbc11aFB114743; + address internal constant systemConfigProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; + address internal constant systemOwnerSafeAddress = 0x7C0c8a15773ED7B50E7c738D1aF4c5e3a2b210BD; + address internal constant acc32Address = 0x357A483a8923686E7fA454Ee93bbc11aFB114743; + address internal constant acc33Address = 0xb6b1579AA54e2F61e621a40d5F2704D717B3544F; function recreateDeployment() public { bytes32 slot; @@ -57,7 +57,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { vm.store(safeSingletonAddress, slot, value); vm.etch(systemOwnerSafeAddress, systemOwnerSafeCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1"; + value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"e90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0"; value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; @@ -83,14 +83,14 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000003"; - value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; + value = hex"00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3"; + value = hex"0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd"; vm.store(proxyAdminAddress, slot, value); vm.etch(superchainConfigProxyAddress, superchainConfigProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(superchainConfigProxyAddress, slot, value); vm.etch(superchainConfigAddress, superchainConfigCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -122,7 +122,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { vm.store(superchainConfigProxyAddress, slot, value); vm.etch(protocolVersionsProxyAddress, protocolVersionsProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(protocolVersionsProxyAddress, slot, value); vm.etch(protocolVersionsAddress, protocolVersionsCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -153,7 +153,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(protocolVersionsProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(protocolVersionsProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc"; @@ -163,49 +163,49 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { vm.store(protocolVersionsProxyAddress, slot, value); vm.etch(optimismPortalProxyAddress, optimismPortalProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(optimismPortalProxyAddress, slot, value); vm.etch(systemConfigProxyAddress, systemConfigProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(systemConfigProxyAddress, slot, value); vm.etch(l1StandardBridgeProxyAddress, l1StandardBridgeProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(l1StandardBridgeProxyAddress, slot, value); vm.etch(l1CrossDomainMessengerProxyAddress, l1CrossDomainMessengerProxyCode); - slot = hex"a8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c"; - value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; + slot = hex"191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284"; + value = hex"00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); - slot = hex"eae32376463217751b8fa4dea8c38ab253664fa3605de6d85d2e790aa970f2b8"; + slot = hex"6822ddba83a78589c753bb747cf4919773ec1d36eeb0bb2a09d64b6d87adda0b"; value = hex"4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); vm.etch(optimismMintableERC20FactoryProxyAddress, optimismMintableERC20FactoryProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(optimismMintableERC20FactoryProxyAddress, slot, value); vm.etch(l1ERC721BridgeProxyAddress, l1ERC721BridgeProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(l1ERC721BridgeProxyAddress, slot, value); vm.etch(disputeGameFactoryProxyAddress, disputeGameFactoryProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(disputeGameFactoryProxyAddress, slot, value); vm.etch(l2OutputOracleProxyAddress, l2OutputOracleProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(l2OutputOracleProxyAddress, slot, value); vm.etch(delayedWETHProxyAddress, delayedWETHProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(delayedWETHProxyAddress, slot, value); vm.etch(anchorStateRegistryProxyAddress, anchorStateRegistryProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(anchorStateRegistryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(addressManagerAddress, slot, value); vm.etch(l1CrossDomainMessengerAddress, l1CrossDomainMessengerCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -440,13 +440,13 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000038"; - value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; + value = hex"0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000037"; - value = hex"0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb"; + value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000035"; - value = hex"0000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900"; + value = hex"00000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; value = hex"000000000000000000000000000000000000000000000000000000000000dead"; @@ -473,7 +473,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc"; @@ -497,22 +497,22 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"000000000000000000000000ff00000000000000000000000000000000000000"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580636"; - value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; + value = hex"000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a7"; - value = hex"000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f"; + value = hex"000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6376"; - value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; + value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa906"; - value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; + value = hex"0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ac"; - value = hex"000000000000000000000000978e3286eb805934215a88694d80b09aded68d90"; + value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"a04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320c"; - value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; + value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"a11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -526,7 +526,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"0000000000000000000000000000000000000000000000000000000000000005"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"727598a658f6983be3a9f29beef55aaee89ef8a176baeeacbe7edf5ff94a781b"; + slot = hex"540cf4e2f45b866b44f44bde51e109474016dc46a0670fbe1684ad8eaf90fdc3"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; @@ -542,13 +542,13 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; - value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; + value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb"; + value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000003"; - value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; + value = hex"000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000004"; value = hex"0000000000000000000000004200000000000000000000000000000000000010"; @@ -569,10 +569,10 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; - value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; + value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000001"; - value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; + value = hex"000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000002"; value = hex"0000000000000000000000004200000000000000000000000000000000000014"; @@ -593,7 +593,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(optimismMintableERC20FactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000001"; - value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; + value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; vm.store(optimismMintableERC20FactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -601,13 +601,13 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"0000000000000000000000000000000000000000000000000000000000000009"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"a8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c"; + slot = hex"191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284"; value = hex"0000000000000000000000000000000000000000000000000000000000000002"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"000000000000000000000000000000000000000000000000000000000000000a"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"7cda2d9a7dd1a58982b7fac9315bdc1ed8c92aeb9c22cd8555aaa54972f01ccb"; + slot = hex"89a8cb4d9b6f179480a9e676431122d6ba6a5fb2aa9462528e7e48e497a5c045"; value = hex"4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; @@ -623,13 +623,13 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000001010000000000000000000000000000000000000000"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fb"; - value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; + value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fc"; - value = hex"000000000000000000000000978e3286eb805934215a88694d80b09aded68d90"; + value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fd"; - value = hex"0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb"; + value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000cc"; value = hex"000000000000000000000000000000000000000000000000000000000000dead"; @@ -689,7 +689,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(disputeGameFactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(disputeGameFactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; @@ -710,13 +710,13 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; + value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000068"; - value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; + value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -725,7 +725,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"000000000000000000000000000000000000000000000000000000000000000f"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000610c37dd344e47d7848da075a90128472140e80f"; + value = hex"000000000000000000000000e2a80256d1dafe06683f231f8e9561639aa0e9b9"; vm.store(anchorStateRegistryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -753,17 +753,17 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { vm.store(anchorStateRegistryProxyAddress, slot, value); vm.etch(acc32Address, acc32Code); slot = hex"ffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b"; - value = hex"000000000000000000000000ce8c32b1493db37767faf988dec9e80089f4f33c"; + value = hex"000000000000000000000000357a483a8923686e7fa454ee93bbc11afb114743"; vm.store(disputeGameFactoryProxyAddress, slot, value); vm.etch(acc33Address, acc33Code); slot = hex"4d5a9bd2e41301728d41c8e705190becb4e74abe869f75bdb405b63716a35f9e"; - value = hex"000000000000000000000000357a483a8923686e7fa454ee93bbc11afb114743"; + value = hex"000000000000000000000000b6b1579aa54e2f61e621a40d5f2704d717b3544f"; vm.store(disputeGameFactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3"; + value = hex"0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd"; vm.store(disputeGameFactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"0000000000000000000000007ea964e5d864b95f6d7d2bd04da897f6e31084b3"; + value = hex"0000000000000000000000007c0c8a15773ed7b50e7c738d1af4c5e3a2b210bd"; vm.store(delayedWETHProxyAddress, slot, value); } } diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol index e7e66d84c2e0..26ff5c65038c 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol @@ -67,9 +67,9 @@ contract DeploymentSummaryFaultProofsCode { bytes internal constant mipsCode = hex"608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d50146100465780637dc0d1d014610098578063e14ced32146100dc575b600080fd5b6100826040518060400160405280600c81526020017f312e312e302d626574612e36000000000000000000000000000000000000000081525081565b60405161008f9190612120565b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161008f565b6100ef6100ea3660046121d5565b6100fd565b60405190815260200161008f565b6000610107612096565b6080811461011457600080fd5b6040516106001461012457600080fd5b6084871461013157600080fd5b6101a4851461013f57600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b60208110156101ea57823560e01c82526004909201916020909101906001016101c6565b5050508061012001511561020857610200610360565b915050610357565b6101408101805160010167ffffffffffffffff16905260006101a49050600080600061023d856060015186600001518661047c565b9250925092508163ffffffff16600014801561025f57508063ffffffff16600c145b156102795761026d876104a3565b95505050505050610357565b60006102f3866040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b61016087015187519192506103109183919061052488888861087b565b8652805163ffffffff9081166060808901919091526020830151821660808901526040830151821660a08901528201511660c087015261034e610360565b96505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156103ff57601c86015184526020909501946004909301926001016103db565b506000835283830384a060009450806001811461041f5760039550610447565b82801561043757600181146104405760029650610445565b60009650610445565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b600080600061048c858786610c61565b96603f601a89901c81169750881695509350505050565b60006104ad612096565b608090506000806000806104e48561016001516040810151608082015160a083015160c084015160e0909401519294919390929091565b509350935093509350600080610ffa63ffffffff168663ffffffff16036105295761051485858960e00151610d15565b63ffffffff1660e08a0152909250905061078a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03363ffffffff871601610562576340000000915061078a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefe863ffffffff871601610598576001915061078a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef6a63ffffffff8716016105ec57600161012088015260ff85166101008801526105df610360565b9998505050505050505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05d63ffffffff8716016106e85760006040518061012001604052808763ffffffff1681526020018663ffffffff1681526020018563ffffffff16815260200189602001518152602001896040015163ffffffff1681526020018b81526020017f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7573ffffffffffffffffffffffffffffffffffffffff1681526020016106ba6101a4600160ff16610380020190565b8152895160209091015290506106cf81610d57565b8b5263ffffffff1660408b0152909350915061078a9050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05c63ffffffff87160161074d5760208701516040880151610733918791879187916105248d51610fcf565b63ffffffff1660408b015260208a0152909250905061078a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02963ffffffff87160161078a5761078485856110c5565b90925090505b6000610804886040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b61016089015163ffffffff85811660408084019190915285821660e0909301929092526020830180518083168086526004909101831682526060808e01919091529051821660808d015291830151811660a08c0152908201511660c08a0152905061086d610360565b9a9950505050505050505050565b84600263ffffffff8416148061089757508263ffffffff166003145b156108e95760006002856303ffffff1663ffffffff16901b896020015163f0000000161790506108e389898663ffffffff166002146108d757601f6108da565b60005b60ff168461117a565b50610c56565b600080601f601087901c8116908a90601589901c166020811061090e5761090e612249565b602002015192508063ffffffff8716158061092f57508663ffffffff16601c145b15610961578a8263ffffffff166020811061094c5761094c612249565b6020020151925050601f600b88901c16610a18565b60208763ffffffff1610156109c3578663ffffffff16600c148061098b57508663ffffffff16600d145b8061099c57508663ffffffff16600e145b156109ad578761ffff169250610a18565b6109bc8861ffff166010611252565b9250610a18565b60288763ffffffff161015806109df57508663ffffffff166022145b806109f057508663ffffffff166026145b15610a18578a8263ffffffff1660208110610a0d57610a0d612249565b602002015192508190505b60048763ffffffff1610158015610a35575060088763ffffffff16105b80610a4657508663ffffffff166001145b15610a6257610a598c8c898b86896112c5565b50505050610c56565b63ffffffff6000602089831610610ac757610a828a61ffff166010611252565b9095019463fffffffc8616610a988d828e610c61565b915060288a63ffffffff1610158015610ab857508963ffffffff16603014155b15610ac557809250600093505b505b6000610ad78b8b8b8a8a876114b3565b63ffffffff1690508963ffffffff166000148015610afc575060088963ffffffff1610155b8015610b0e5750601c8963ffffffff16105b15610bd6578863ffffffff1660081480610b2e57508863ffffffff166009145b15610b6157610b558f8f8b63ffffffff16600814610b4c5786610b4f565b60005b8a61117a565b50505050505050610c56565b8863ffffffff16600a03610b8357610b558f8f868a63ffffffff8b1615611bd2565b8863ffffffff16600b03610ba657610b558f8f868a63ffffffff8b161515611bd2565b60108963ffffffff1610158015610bc35750601c8963ffffffff16105b15610bd657610b558f8f8b8a8a89611ca2565b8963ffffffff166038148015610bf1575063ffffffff851615155b15610c215760018e8663ffffffff1660208110610c1057610c10612249565b63ffffffff90921660209290920201525b8263ffffffff1663ffffffff14610c4057610c3d838d83611f5b565b97505b610c4e8f8f86846001611bd2565b505050505050505b979650505050505050565b6000610c6c82611ffd565b6003831615610c7a57600080fd5b6020820191358360051c8160005b601b811015610ce05760208601953583821c6001168015610cb05760018114610cc557610cd6565b60008481526020839052604090209350610cd6565b600082815260208590526040902093505b5050600101610c88565b50868114610cf657630badf00d60005260206000fd5b5050601f93909316601c0360031b9290921c63ffffffff169392505050565b6000808284610fff811615610d2f57610fff811661100003015b8663ffffffff16600003610d495784935090810190610d4d565b8693505b5093509350939050565b6101008101516080820151825160009283929163ffffffff1615610fc857845163ffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb01610f82576000610dc3866101000151876020015163fffffffc168860e00151610c61565b606087015190915060001a600103610e4557610e3f86606001518760a0015160408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b60608701525b6000808760c0015173ffffffffffffffffffffffffffffffffffffffff1663e03110e189606001518a608001516040518363ffffffff1660e01b8152600401610e9e92919091825263ffffffff16602082015260400190565b6040805180830381865afa158015610eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ede9190612278565b60208a015160408b01519294509092509060038216600481900384811015610f04578094505b5083821015610f11578193505b8460088502610100031c9450846008828660040303021b9450600180600883600403021b036001806008878560040303021b03915081198116905085811988161796505050610f6f8a6020015163fffffffc168b60e0015187611f5b565b9298505050938601939250610fc8915050565b845163ffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd01610fbc5784604001519350610fc8565b63ffffffff9350600992505b9193509193565b600080858563ffffffff8b1660011480610fef575063ffffffff8b166002145b80611000575063ffffffff8b166004145b1561100d578893506110b7565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8c16016110ab57600061104d868c63fffffffc1689610c61565b90508860038c166004038b81101561106357809b505b8b965086900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193880293841b0116911b179150600090506110b7565b63ffffffff9350600992505b975097509750979350505050565b60008063ffffffff83166003036111685763ffffffff841615806110ef575063ffffffff84166005145b80611100575063ffffffff84166003145b1561110e5760009150611173565b63ffffffff841660011480611129575063ffffffff84166002145b8061113a575063ffffffff84166006145b8061114b575063ffffffff84166004145b156111595760019150611173565b5063ffffffff90506009611173565b5063ffffffff905060165b9250929050565b836000015160040163ffffffff16846020015163ffffffff16146111ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b835160208501805163ffffffff908116875283811690915283161561124b5780600801848463ffffffff166020811061123a5761123a612249565b63ffffffff90921660209290920201525b5050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b01826112af5760006112b1565b815b90861663ffffffff16179250505092915050565b6000866000015160040163ffffffff16876020015163ffffffff1614611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f7400000000000000000000000060448201526064016111f6565b8463ffffffff166004148061136257508463ffffffff166005145b156113d9576000868463ffffffff166020811061138157611381612249565b602002015190508063ffffffff168363ffffffff161480156113a957508563ffffffff166004145b806113d157508063ffffffff168363ffffffff16141580156113d157508563ffffffff166005145b915050611456565b8463ffffffff166006036113f65760008260030b13159050611456565b8463ffffffff166007036114125760008260030b139050611456565b8463ffffffff1660010361145657601f601085901c16600081900361143b5760008360030b1291505b8063ffffffff166001036114545760008360030b121591505b505b8651602088015163ffffffff168852811561149757600261147c8661ffff166010611252565b63ffffffff90811690911b82016004011660208901526114a9565b60208801805160040163ffffffff1690525b5050505050505050565b600063ffffffff861615806114e0575060088663ffffffff16101580156114e05750600f8663ffffffff16105b156118e9578560088114611523576009811461152c57600a811461153557600b811461153e57600c811461154757600d811461155057600e81146115595761155e565b6020955061155e565b6021955061155e565b602a955061155e565b602b955061155e565b6024955061155e565b6025955061155e565b602695505b508463ffffffff16600003611583575063ffffffff8216601f600688901c161b611bc8565b8463ffffffff166002036115a7575063ffffffff8216601f600688901c161c611bc8565b8463ffffffff166003036115db57601f600688901c166115d363ffffffff8516821c6020839003611252565b915050611bc8565b8463ffffffff166004036115fb575063ffffffff8216601f84161b611bc8565b8463ffffffff1660060361161b575063ffffffff8216601f84161c611bc8565b8463ffffffff1660070361164c576116458463ffffffff168463ffffffff16901c85602003611252565b9050611bc8565b8463ffffffff16600803611661575082611bc8565b8463ffffffff16600903611676575082611bc8565b8463ffffffff16600a0361168b575082611bc8565b8463ffffffff16600b036116a0575082611bc8565b8463ffffffff16600c036116b5575082611bc8565b8463ffffffff16600f036116ca575082611bc8565b8463ffffffff166010036116df575082611bc8565b8463ffffffff166011036116f4575082611bc8565b8463ffffffff16601203611709575082611bc8565b8463ffffffff1660130361171e575082611bc8565b8463ffffffff16601803611733575082611bc8565b8463ffffffff16601903611748575082611bc8565b8463ffffffff16601a0361175d575082611bc8565b8463ffffffff16601b03611772575082611bc8565b8463ffffffff166020036117895750828201611bc8565b8463ffffffff166021036117a05750828201611bc8565b8463ffffffff166022036117b75750818303611bc8565b8463ffffffff166023036117ce5750818303611bc8565b8463ffffffff166024036117e55750828216611bc8565b8463ffffffff166025036117fc5750828217611bc8565b8463ffffffff166026036118135750828218611bc8565b8463ffffffff1660270361182b575082821719611bc8565b8463ffffffff16602a0361185a578260030b8460030b1261184d576000611850565b60015b60ff169050611bc8565b8463ffffffff16602b03611882578263ffffffff168463ffffffff161061184d576000611850565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e0000000000000000000000000060448201526064016111f6565b611882565b8563ffffffff16601c03611962578463ffffffff1660020361190e5750828202611bc8565b8463ffffffff166020148061192957508463ffffffff166021145b156118e4578463ffffffff16602003611940579219925b60005b6380000000851615611645576401fffffffe600195861b169401611943565b8563ffffffff16600f03611983575065ffffffff0000601083901b16611bc8565b8563ffffffff166020036119b7576116458460031660080260180363ffffffff168363ffffffff16901c60ff166008611252565b8563ffffffff166021036119ec576116458460021660080260100363ffffffff168363ffffffff16901c61ffff166010611252565b8563ffffffff16602203611a1a575063ffffffff60086003851602811681811b198416918316901b17611bc8565b8563ffffffff16602303611a2f575080611bc8565b8563ffffffff16602403611a60578360031660080260180363ffffffff168263ffffffff16901c60ff169050611bc8565b8563ffffffff16602503611a92578360021660080260100363ffffffff168263ffffffff16901c61ffff169050611bc8565b8563ffffffff16602603611ac3575063ffffffff60086003851602601803811681811c198416918316901c17611bc8565b8563ffffffff16602803611af8575060ff63ffffffff60086003861602601803811682811b9091188316918416901b17611bc8565b8563ffffffff16602903611b2e575061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17611bc8565b8563ffffffff16602a03611b5c575063ffffffff60086003851602811681811c198316918416901c17611bc8565b8563ffffffff16602b03611b71575081611bc8565b8563ffffffff16602e03611ba2575063ffffffff60086003851602601803811681811b198316918416901b17611bc8565b8563ffffffff16603003611bb7575080611bc8565b8563ffffffff166038036118825750815b9695505050505050565b60208363ffffffff1610611c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c696420726567697374657200000000000000000000000000000000000060448201526064016111f6565b63ffffffff831615801590611c545750805b15611c835781848463ffffffff1660208110611c7257611c72612249565b63ffffffff90921660209290920201525b5050505060208101805163ffffffff8082169093526004019091169052565b60008463ffffffff16601003611cbd57506060860151611f03565b8463ffffffff16601103611cdc5763ffffffff84166060880152611f03565b8463ffffffff16601203611cf557506040860151611f03565b8463ffffffff16601303611d145763ffffffff84166040880152611f03565b8463ffffffff16601803611d485763ffffffff600385810b9085900b02602081901c821660608a0152166040880152611f03565b8463ffffffff16601903611d795763ffffffff84811681851602602081901c821660608a0152166040880152611f03565b8463ffffffff16601a03611e3c578260030b600003611df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016111f6565b8260030b8460030b81611e0957611e0961229c565b0763ffffffff166060880152600383810b9085900b81611e2b57611e2b61229c565b0563ffffffff166040880152611f03565b8463ffffffff16601b03611f03578263ffffffff16600003611eba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016111f6565b8263ffffffff168463ffffffff1681611ed557611ed561229c565b0663ffffffff908116606089015283811690851681611ef657611ef661229c565b0463ffffffff1660408801525b63ffffffff821615611f395780868363ffffffff1660208110611f2857611f28612249565b63ffffffff90921660209290920201525b50505060208401805163ffffffff808216909652600401909416909352505050565b6000611f6683611ffd565b6003841615611f7457600080fd5b6020830192601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611ff25760208601953582821c6001168015611fc25760018114611fd757611fe8565b60008581526020839052604090209450611fe8565b600082815260208690526040902094505b5050600101611f9a565b509095945050505050565b366103808201811015612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f617461000000000000000000000000000000000000000000000000000000000060648201526084016111f6565b5050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915261016081016120fc612101565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b8181101561214d57858101830151858201604001528201612131565b8181111561215f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f8401126121a557600080fd5b50813567ffffffffffffffff8111156121bd57600080fd5b60208301915083602082850101111561117357600080fd5b6000806000806000606086880312156121ed57600080fd5b853567ffffffffffffffff8082111561220557600080fd5b61221189838a01612193565b9097509550602088013591508082111561222a57600080fd5b5061223788828901612193565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000806040838503121561228b57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a"; bytes internal constant anchorStateRegistryCode = - hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; bytes internal constant acc32Code = - hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df9973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df991690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d9092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d1690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; + hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f000000000000000000000000d6eaf4c146261653ee059077b78ed088add54309610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000d6eaf4c146261653ee059077b78ed088add5430973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000d6eaf4c146261653ee059077b78ed088add543091690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd929092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd921690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; bytes internal constant acc33Code = - hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df9973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d1690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df991690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d9092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; + hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d40773610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f000000000000000000000000d6eaf4c146261653ee059077b78ed088add54309610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000d6eaf4c146261653ee059077b78ed088add5430973ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd921690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd92169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000d6eaf4c146261653ee059077b78ed088add543091690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f000000000000000000000000ef179756ea6525afade217ca5ab0b1b5cfe0fd929092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b3a0348310a0ff78e5fbdb7f14bb7d3e02d4077373ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; } diff --git a/packages/contracts-bedrock/test/libraries/Bytes.t.sol b/packages/contracts-bedrock/test/libraries/Bytes.t.sol index 2cfbfd3dff60..e38d369ab55d 100644 --- a/packages/contracts-bedrock/test/libraries/Bytes.t.sol +++ b/packages/contracts-bedrock/test/libraries/Bytes.t.sol @@ -67,19 +67,23 @@ contract Bytes_slice_Test is Test { /// @notice Tests that the `slice` function correctly updates the free memory pointer depending /// on the length of the slice. + /// The calls to `bound` are to reduce the number of times that `assume` is triggered. function testFuzz_slice_memorySafety_succeeds(bytes memory _input, uint256 _start, uint256 _length) public { + vm.assume(_input.length > 0); + // The start should never be more than the length of the input bytes array - 1 - vm.assume(_start < _input.length); + _start = bound(_start, 0, _input.length - 1); + // The length should never be more than the length of the input bytes array - the starting // slice index. - vm.assume(_length <= _input.length - _start); + _length = bound(_length, 0, _input.length - _start); // Grab the free memory pointer before the slice operation uint64 initPtr; assembly { initPtr := mload(0x40) } - uint64 expectedPtr = uint64(initPtr + 0x20 + ((_length + 0x1f) & ~uint256(0x1f))); + uint64 expectedPtr = uint64((initPtr + 0x20 + _length + 0x1f) & ~uint256(0x1f)); // Ensure that all memory outside of the expected range is safe. vm.expectSafeMemory(initPtr, expectedPtr); @@ -107,7 +111,7 @@ contract Bytes_slice_Test is Test { // Note that we use a slightly less efficient, but equivalent method of rounding // up `_length` to the next multiple of 32 than is used in the `slice` function. // This is to diff test the method used in `slice`. - uint64 _expectedPtr = uint64(initPtr + 0x20 + (((_length + 0x1F) >> 5) << 5)); + uint64 _expectedPtr = uint64(((initPtr + 0x20 + _length + 0x1F) >> 5) << 5); assertEq(finalPtr, _expectedPtr); // Sanity check for equivalence of the rounding methods. @@ -144,11 +148,15 @@ contract Bytes_slice_TestFail is Test { /// @notice Tests that, when given a start index `n` that is greater than /// `type(uint256).max - n`, the `slice` function reverts. + /// The calls to `bound` are to reduce the number of times that `assume` is triggered. function testFuzz_slice_rangeOverflows_reverts(bytes memory _input, uint256 _start, uint256 _length) public { // Ensure that `_length` is a realistic length of a slice. This is to make sure // we revert on the correct require statement. + _length = bound(_length, 0, _input.length == 0 ? 0 : _input.length - 1); vm.assume(_length < _input.length); + // Ensure that `_start` will overflow if `_length` is added to it. + _start = bound(_start, type(uint256).max - _length, type(uint256).max); vm.assume(_start > type(uint256).max - _length); vm.expectRevert("slice_overflow"); diff --git a/packages/contracts-bedrock/test/libraries/SafeCall.t.sol b/packages/contracts-bedrock/test/libraries/SafeCall.t.sol index fcb9d3832a12..5bd3fb3a4ab7 100644 --- a/packages/contracts-bedrock/test/libraries/SafeCall.t.sol +++ b/packages/contracts-bedrock/test/libraries/SafeCall.t.sol @@ -13,6 +13,8 @@ contract SafeCall_Test is Test { function assumeNot(address _addr) internal { vm.assume(_addr.balance == 0); vm.assume(_addr != address(this)); + vm.assume(uint256(uint160(_addr)) > uint256(256)); // TODO temp fix until new forge-std release with modern + // precompiles: https://github.com/foundry-rs/forge-std/pull/594 assumeAddressIsNot(_addr, StdCheatsSafe.AddressType.ForgeAddress, StdCheatsSafe.AddressType.Precompile); } diff --git a/packages/contracts-bedrock/test/safe-tools/SafeTestTools.sol b/packages/contracts-bedrock/test/safe-tools/SafeTestTools.sol index 1c5a505095a6..34386f5e3923 100644 --- a/packages/contracts-bedrock/test/safe-tools/SafeTestTools.sol +++ b/packages/contracts-bedrock/test/safe-tools/SafeTestTools.sol @@ -54,7 +54,7 @@ struct SafeInstance { library Sort { /// @dev Sorts an array of addresses in place - function sort(address[] memory arr) public pure returns (address[] memory) { + function sort(address[] memory arr) internal pure returns (address[] memory) { LibSort.sort(arr); return arr; } @@ -62,9 +62,9 @@ library Sort { library SafeTestLib { /// @dev The address of foundry's VM contract - address constant VM_ADDR = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; + address internal constant VM_ADDR = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; /// @dev The address of the first owner in the linked list of owners - address constant SENTINEL_OWNERS = address(0x1); + address internal constant SENTINEL_OWNERS = address(0x1); /// @dev Get the address from a private key function getAddr(uint256 pk) internal pure returns (address) { diff --git a/packages/contracts-bedrock/test/setup/Setup.sol b/packages/contracts-bedrock/test/setup/Setup.sol index c19d27be9c27..5dc12d615afb 100644 --- a/packages/contracts-bedrock/test/setup/Setup.sol +++ b/packages/contracts-bedrock/test/setup/Setup.sol @@ -26,9 +26,9 @@ import { AnchorStateRegistry } from "src/dispute/AnchorStateRegistry.sol"; import { L1CrossDomainMessenger } from "src/L1/L1CrossDomainMessenger.sol"; import { DeployConfig } from "scripts/deploy/DeployConfig.s.sol"; import { Deploy } from "scripts/deploy/Deploy.s.sol"; -import { Fork, LATEST_FORK } from "scripts/Config.sol"; +import { Fork, LATEST_FORK } from "scripts/libraries/Config.sol"; import { L2Genesis, L1Dependencies } from "scripts/L2Genesis.s.sol"; -import { OutputMode, Fork, ForkUtils } from "scripts/Config.sol"; +import { OutputMode, Fork, ForkUtils } from "scripts/libraries/Config.sol"; import { L2OutputOracle } from "src/L1/L2OutputOracle.sol"; import { ProtocolVersions } from "src/L1/ProtocolVersions.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; @@ -36,7 +36,7 @@ import { L1StandardBridge } from "src/L1/L1StandardBridge.sol"; import { AddressManager } from "src/legacy/AddressManager.sol"; import { L1ERC721Bridge } from "src/L1/L1ERC721Bridge.sol"; import { AddressAliasHelper } from "src/vendor/AddressAliasHelper.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { Vm } from "forge-std/Vm.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; import { DataAvailabilityChallenge } from "src/L1/DataAvailabilityChallenge.sol"; diff --git a/packages/contracts-bedrock/test/vendor/Initializable.t.sol b/packages/contracts-bedrock/test/vendor/Initializable.t.sol index 7e1aef108910..dcab9d6bae5f 100644 --- a/packages/contracts-bedrock/test/vendor/Initializable.t.sol +++ b/packages/contracts-bedrock/test/vendor/Initializable.t.sol @@ -2,14 +2,14 @@ pragma solidity 0.8.15; import { Bridge_Initializer } from "test/setup/Bridge_Initializer.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; import { L2OutputOracle } from "src/L1/L2OutputOracle.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; import { ResourceMetering } from "src/L1/ResourceMetering.sol"; import { OptimismPortal } from "src/L1/OptimismPortal.sol"; -import { ForgeArtifacts } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.sol"; import { Process } from "scripts/libraries/Process.sol"; import "src/L1/ProtocolVersions.sol"; import "src/dispute/lib/Types.sol"; @@ -360,7 +360,8 @@ contract Initializer_Test is Bridge_Initializer { // Ensure that all L1, L2 `Initializable` contracts are accounted for, in addition to // OptimismMintableERC20FactoryImpl, OptimismMintableERC20FactoryProxy, OptimismPortal2, // DisputeGameFactoryImpl, DisputeGameFactoryProxy, DelayedWETHImpl, DelayedWETHProxy. - assertEq(_getNumInitializable() + 1, contracts.length); + // Omitting OptimismSuperchainERC20 due to using OZ v5 Initializable. + assertEq(_getNumInitializable(), contracts.length); // Attempt to re-initialize all contracts within the `contracts` array. for (uint256 i; i < contracts.length; i++) { diff --git a/packages/contracts-bedrock/test/vendor/InitializableOZv5.t.sol b/packages/contracts-bedrock/test/vendor/InitializableOZv5.t.sol new file mode 100644 index 000000000000..0820f987414a --- /dev/null +++ b/packages/contracts-bedrock/test/vendor/InitializableOZv5.t.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.25; + +import { Test } from "forge-std/Test.sol"; +import { OptimismSuperchainERC20 } from "src/L2/OptimismSuperchainERC20.sol"; +import { Initializable } from "@openzeppelin/contracts-v5/proxy/utils/Initializable.sol"; + +/// @title InitializerOZv5_Test +/// @dev Ensures that the `initialize()` function on contracts cannot be called more than +/// once. Tests the contracts inheriting from `Initializable` from OpenZeppelin Contracts v5. +contract InitializerOZv5_Test is Test { + /// @notice The storage slot of the `initialized` flag in the `Initializable` contract from OZ v5. + /// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; + + /// @notice Contains the address of an `Initializable` contract and the calldata + /// used to initialize it. + struct InitializeableContract { + address target; + bytes initCalldata; + } + + /// @notice Contains the addresses of the contracts to test as well as the calldata + /// used to initialize them. + InitializeableContract[] contracts; + + function setUp() public { + // Initialize the `contracts` array with the addresses of the contracts to test and the + // calldata used to initialize them + + // OptimismSuperchainERC20 + contracts.push( + InitializeableContract({ + target: address(new OptimismSuperchainERC20()), + initCalldata: abi.encodeCall(OptimismSuperchainERC20.initialize, (address(0), "", "", 18)) + }) + ); + } + + /// @notice Tests that: + /// 1. The `initialized` flag of each contract is properly set to `type(uint64).max`, + /// signifying that the contracts are initialized. + /// 2. The `initialize()` function of each contract cannot be called more than once. + /// 3. Returns the correct error when attempting to re-initialize a contract. + function test_cannotReinitialize_succeeds() public { + // Attempt to re-initialize all contracts within the `contracts` array. + for (uint256 i; i < contracts.length; i++) { + InitializeableContract memory _contract = contracts[i]; + uint256 size; + address target = _contract.target; + assembly { + size := extcodesize(target) + } + + // Assert that the contract is already initialized. + bytes32 slotVal = vm.load(_contract.target, INITIALIZABLE_STORAGE); + uint64 initialized = uint64(uint256(slotVal)); + assertEq(initialized, type(uint64).max); + + // Then, attempt to re-initialize the contract. This should fail. + (bool success, bytes memory returnData) = _contract.target.call(_contract.initCalldata); + assertFalse(success); + assertEq(bytes4(returnData), Initializable.InvalidInitialization.selector); + } + } +} diff --git a/packages/contracts-bedrock/tsconfig.json b/packages/contracts-bedrock/tsconfig.json deleted file mode 100644 index 7c7a62708773..000000000000 --- a/packages/contracts-bedrock/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "outDir": "./dist", - "skipLibCheck": true, - "module": "commonjs", - "target": "es2017", - "sourceMap": true, - "esModuleInterop": true, - "composite": true, - "resolveJsonModule": true, - "declaration": true, - "noImplicitAny": false, - "removeComments": true, - "noLib": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "typeRoots": [ - "node_modules/@types" - ] - }, - "exclude": [ - "node_modules", - "dist" - ], - "include": [ - "deploy-config/**/*", - "deploy-config/**/*.json", - "scripts/**/*" - ] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index cf74605d4482..000000000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,3533 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: {} - - packages/contracts-bedrock: - devDependencies: - '@babel/eslint-parser': - specifier: ^7.23.10 - version: 7.25.1(@babel/core@7.25.2)(eslint@8.56.0) - '@types/node': - specifier: ^20.14.12 - version: 20.14.13 - '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/parser': - specifier: ^6.21.0 - version: 6.21.0(eslint@8.56.0)(typescript@5.5.4) - doctoc: - specifier: ^2.2.0 - version: 2.2.1 - eslint: - specifier: ^8.56.0 - version: 8.56.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.56.0) - eslint-config-standard: - specifier: ^16.0.3 - version: 16.0.3(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0))(eslint-plugin-node@11.1.0(eslint@8.56.0))(eslint-plugin-promise@5.2.0(eslint@8.56.0))(eslint@8.56.0) - eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0) - eslint-plugin-jsdoc: - specifier: ^48.8.3 - version: 48.10.1(eslint@8.56.0) - eslint-plugin-prefer-arrow: - specifier: ^1.2.3 - version: 1.2.3(eslint@8.56.0) - eslint-plugin-prettier: - specifier: ^4.0.0 - version: 4.2.1(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@2.8.8) - prettier: - specifier: ^2.8.0 - version: 2.8.8 - tsx: - specifier: ^4.16.2 - version: 4.16.2 - typescript: - specifier: ^5.5.4 - version: 5.5.4 - -packages: - - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.25.2': - resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.25.2': - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} - engines: {node: '>=6.9.0'} - - '@babel/eslint-parser@7.25.1': - resolution: {integrity: sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - - '@babel/generator@7.25.0': - resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.25.2': - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.25.2': - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.25.0': - resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.0': - resolution: {integrity: sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.25.2': - resolution: {integrity: sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.25.2': - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} - engines: {node: '>=6.9.0'} - - '@es-joy/jsdoccomment@0.46.0': - resolution: {integrity: sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==} - engines: {node: '>=16'} - - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.6.2': - resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.56.0': - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@humanwhocodes/config-array@0.11.13': - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.1': - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - deprecated: Use @eslint/object-schema instead - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@textlint/ast-node-types@12.6.1': - resolution: {integrity: sha512-uzlJ+ZsCAyJm+lBi7j0UeBbj+Oy6w/VWoGJ3iHRHE5eZ8Z4iK66mq+PG/spupmbllLtz77OJbY89BYqgFyjXmA==} - - '@textlint/markdown-to-ast@12.6.1': - resolution: {integrity: sha512-T0HO+VrU9VbLRiEx/kH4+gwGMHNMIGkp0Pok+p0I33saOOLyhfGvwOKQgvt2qkxzQEV2L5MtGB8EnW4r5d3CqQ==} - - '@types/json-schema@7.0.12': - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - '@types/mdast@3.0.15': - resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - - '@types/node@20.14.13': - resolution: {integrity: sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==} - - '@types/semver@7.5.7': - resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} - - '@types/unist@2.0.10': - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} - - '@typescript-eslint/eslint-plugin@6.21.0': - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/type-utils@6.21.0': - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@6.21.0': - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - anchor-markdown-header@0.6.0: - resolution: {integrity: sha512-v7HJMtE1X7wTpNFseRhxsY/pivP4uAJbidVhPT+yhz4i/vV1+qx371IXuV9V7bN6KjFtheLJxqaSm0Y/8neJTA==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - are-docs-informative@0.0.2: - resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} - engines: {node: '>=14'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - bail@1.0.5: - resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - browserslist@4.23.2: - resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - caniuse-lite@1.0.30001644: - resolution: {integrity: sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==} - - ccount@1.1.0: - resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - - character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - - character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - comment-parser@1.4.1: - resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} - engines: {node: '>= 12.0.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - doctoc@2.2.1: - resolution: {integrity: sha512-qNJ1gsuo7hH40vlXTVVrADm6pdg30bns/Mo7Nv1SxuXSM1bwF9b4xQ40a6EFT/L1cI+Yylbyi8MPI4G4y7XJzQ==} - hasBin: true - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - - electron-to-chromium@1.5.3: - resolution: {integrity: sha512-QNdYSS5i8D9axWp/6XIezRObRHqaav/ur9z1VzCDUCH1XIFOr9WQk5xmgunhsTpjjgDy3oLxO/WMOVZlpUQrlA==} - - emoji-regex@10.1.0: - resolution: {integrity: sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg==} - - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - - entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-config-standard@16.0.3: - resolution: {integrity: sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==} - peerDependencies: - eslint: ^7.12.1 - eslint-plugin-import: ^2.22.1 - eslint-plugin-node: ^11.1.0 - eslint-plugin-promise: ^4.2.1 || ^5.0.0 - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-es@3.0.1: - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jsdoc@48.10.1: - resolution: {integrity: sha512-dxV7ytazLW9CdPahds07FljQ960vLQG65mUnFi8/6Pc6u6miCZNGYrnKVHrnnrcj+LikhiKAayjrUiNttzRMEg==} - engines: {node: '>=18'} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - - eslint-plugin-node@11.1.0: - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' - - eslint-plugin-prefer-arrow@1.2.3: - resolution: {integrity: sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==} - peerDependencies: - eslint: '>=2.0.0' - - eslint-plugin-prettier@4.2.1: - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - eslint: '>=7.28.0' - eslint-config-prettier: '*' - prettier: '>=2.0.0' - peerDependenciesMeta: - eslint-config-prettier: - optional: true - - eslint-plugin-promise@5.2.0: - resolution: {integrity: sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.0.0 - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - - eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - espree@10.1.0: - resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - - fault@1.0.4: - resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.2.2: - resolution: {integrity: sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} - engines: {node: '>=8'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - htmlparser2@7.2.0: - resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} - - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsdoc-type-pratt-parser@4.0.0: - resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} - engines: {node: '>=12.0.0'} - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - longest-streak@2.0.4: - resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - markdown-table@2.0.0: - resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} - - mdast-util-find-and-replace@1.1.1: - resolution: {integrity: sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==} - - mdast-util-footnote@0.1.7: - resolution: {integrity: sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==} - - mdast-util-from-markdown@0.8.5: - resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} - - mdast-util-frontmatter@0.2.0: - resolution: {integrity: sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==} - - mdast-util-gfm-autolink-literal@0.1.3: - resolution: {integrity: sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==} - - mdast-util-gfm-strikethrough@0.2.3: - resolution: {integrity: sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==} - - mdast-util-gfm-table@0.1.6: - resolution: {integrity: sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==} - - mdast-util-gfm-task-list-item@0.1.6: - resolution: {integrity: sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==} - - mdast-util-gfm@0.1.2: - resolution: {integrity: sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==} - - mdast-util-to-markdown@0.6.5: - resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==} - - mdast-util-to-string@2.0.0: - resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromark-extension-footnote@0.3.2: - resolution: {integrity: sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==} - - micromark-extension-frontmatter@0.2.2: - resolution: {integrity: sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==} - - micromark-extension-gfm-autolink-literal@0.5.7: - resolution: {integrity: sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==} - - micromark-extension-gfm-strikethrough@0.6.5: - resolution: {integrity: sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==} - - micromark-extension-gfm-table@0.4.3: - resolution: {integrity: sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==} - - micromark-extension-gfm-tagfilter@0.3.0: - resolution: {integrity: sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==} - - micromark-extension-gfm-task-list-item@0.3.3: - resolution: {integrity: sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==} - - micromark-extension-gfm@0.3.3: - resolution: {integrity: sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==} - - micromark@2.11.4: - resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - - parse-imports@2.1.1: - resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} - engines: {node: '>= 18'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - - regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - - remark-footnotes@3.0.0: - resolution: {integrity: sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==} - - remark-frontmatter@3.0.0: - resolution: {integrity: sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==} - - remark-gfm@1.0.0: - resolution: {integrity: sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==} - - remark-parse@9.0.0: - resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==} - - repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slashes@3.0.12: - resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@4.0.0: - resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - - spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} - - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - synckit@0.9.1: - resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} - engines: {node: ^14.18.0 || >=16.0.0} - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - traverse@0.6.9: - resolution: {integrity: sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==} - engines: {node: '>= 0.4'} - - trough@1.0.5: - resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} - - ts-api-utils@1.0.1: - resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - - tsx@4.16.2: - resolution: {integrity: sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==} - engines: {node: '>=18.0.0'} - hasBin: true - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - - typedarray.prototype.slice@1.0.3: - resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==} - engines: {node: '>= 0.4'} - - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} - engines: {node: '>=14.17'} - hasBin: true - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - underscore@1.13.7: - resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - unified@9.2.2: - resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} - - unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - - unist-util-stringify-position@2.0.3: - resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} - - unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} - - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-section@0.3.3: - resolution: {integrity: sha512-BpRZMZpgXLuTiKeiu7kK0nIPwGdyrqrs6EDSaXtjD/aQ2T+qVo9a5hRC3HN3iJjCMxNT/VxoLGQ7E/OzE5ucnw==} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - vfile-message@2.0.4: - resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} - - vfile@4.2.1: - resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zwitch@1.0.5: - resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} - -snapshots: - - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/compat-data@7.25.2': {} - - '@babel/core@7.25.2': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.0 - '@babel/parser': 7.25.0 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.2 - '@babel/types': 7.25.2 - convert-source-map: 2.0.0 - debug: 4.3.5 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@8.56.0)': - dependencies: - '@babel/core': 7.25.2 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.56.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - - '@babel/generator@7.25.0': - dependencies: - '@babel/types': 7.25.2 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-compilation-targets@7.25.2': - dependencies: - '@babel/compat-data': 7.25.2 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.25.2 - '@babel/types': 7.25.2 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.2 - transitivePeerDependencies: - - supports-color - - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.25.2 - '@babel/types': 7.25.2 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.24.8': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.24.8': {} - - '@babel/helpers@7.25.0': - dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.2 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.25.0': - dependencies: - '@babel/types': 7.25.2 - - '@babel/template@7.25.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.0 - '@babel/types': 7.25.2 - - '@babel/traverse@7.25.2': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/parser': 7.25.0 - '@babel/template': 7.25.0 - '@babel/types': 7.25.2 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.25.2': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@es-joy/jsdoccomment@0.46.0': - dependencies: - comment-parser: 1.4.1 - esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.0.0 - - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-x64@0.21.5': - optional: true - - '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': - dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.6.2': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.5 - espree: 9.6.1 - globals: 13.21.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.56.0': {} - - '@humanwhocodes/config-array@0.11.13': - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.5 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.1': {} - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - dependencies: - eslint-scope: 5.1.1 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - '@pkgr/core@0.1.1': {} - - '@textlint/ast-node-types@12.6.1': {} - - '@textlint/markdown-to-ast@12.6.1': - dependencies: - '@textlint/ast-node-types': 12.6.1 - debug: 4.3.5 - mdast-util-gfm-autolink-literal: 0.1.3 - remark-footnotes: 3.0.0 - remark-frontmatter: 3.0.0 - remark-gfm: 1.0.0 - remark-parse: 9.0.0 - traverse: 0.6.9 - unified: 9.2.2 - transitivePeerDependencies: - - supports-color - - '@types/json-schema@7.0.12': {} - - '@types/json5@0.0.29': {} - - '@types/mdast@3.0.15': - dependencies: - '@types/unist': 2.0.10 - - '@types/node@20.14.13': - dependencies: - undici-types: 5.26.5 - - '@types/semver@7.5.7': {} - - '@types/unist@2.0.10': {} - - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.2.4 - natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 - eslint: 8.56.0 - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - - '@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - debug: 4.3.5 - eslint: 8.56.0 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@6.21.0': {} - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.7 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - eslint: 8.56.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - - '@ungap/structured-clone@1.2.0': {} - - acorn-jsx@5.3.2(acorn@8.10.0): - dependencies: - acorn: 8.10.0 - - acorn-jsx@5.3.2(acorn@8.12.1): - dependencies: - acorn: 8.12.1 - - acorn@8.10.0: {} - - acorn@8.12.1: {} - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - anchor-markdown-header@0.6.0: - dependencies: - emoji-regex: 10.1.0 - - ansi-regex@5.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - are-docs-informative@0.0.2: {} - - argparse@2.0.1: {} - - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - - array-includes@3.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - - array-union@2.1.0: {} - - array.prototype.findlastindex@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - - bail@1.0.5: {} - - balanced-match@1.0.2: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - - browserslist@4.23.2: - dependencies: - caniuse-lite: 1.0.30001644 - electron-to-chromium: 1.5.3 - node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.2) - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - - callsites@3.1.0: {} - - caniuse-lite@1.0.30001644: {} - - ccount@1.1.0: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - character-entities-legacy@1.1.4: {} - - character-entities@1.2.4: {} - - character-reference-invalid@1.1.4: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - comment-parser@1.4.1: {} - - concat-map@0.0.1: {} - - convert-source-map@2.0.0: {} - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-offset@1.0.0: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - debug@3.2.7: - dependencies: - ms: 2.1.2 - - debug@4.3.4: - dependencies: - ms: 2.1.2 - - debug@4.3.5: - dependencies: - ms: 2.1.2 - - deep-is@0.1.4: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - doctoc@2.2.1: - dependencies: - '@textlint/markdown-to-ast': 12.6.1 - anchor-markdown-header: 0.6.0 - htmlparser2: 7.2.0 - minimist: 1.2.8 - underscore: 1.13.7 - update-section: 0.3.3 - transitivePeerDependencies: - - supports-color - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - dom-serializer@1.4.1: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - - domelementtype@2.3.0: {} - - domhandler@4.3.1: - dependencies: - domelementtype: 2.3.0 - - domutils@2.8.0: - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - - electron-to-chromium@1.5.3: {} - - emoji-regex@10.1.0: {} - - entities@2.2.0: {} - - entities@3.0.1: {} - - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-errors@1.3.0: {} - - es-module-lexer@1.5.4: {} - - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - escalade@3.1.2: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@9.1.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-config-standard@16.0.3(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0))(eslint-plugin-node@11.1.0(eslint@8.56.0))(eslint-plugin-promise@5.2.0(eslint@8.56.0))(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0) - eslint-plugin-node: 11.1.0(eslint@8.56.0) - eslint-plugin-promise: 5.2.0(eslint@8.56.0) - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.15.0 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - - eslint-plugin-es@3.0.1(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 - - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) - hasown: 2.0.2 - is-core-module: 2.15.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jsdoc@48.10.1(eslint@8.56.0): - dependencies: - '@es-joy/jsdoccomment': 0.46.0 - are-docs-informative: 0.0.2 - comment-parser: 1.4.1 - debug: 4.3.5 - escape-string-regexp: 4.0.0 - eslint: 8.56.0 - espree: 10.1.0 - esquery: 1.6.0 - parse-imports: 2.1.1 - semver: 7.6.3 - spdx-expression-parse: 4.0.0 - synckit: 0.9.1 - transitivePeerDependencies: - - supports-color - - eslint-plugin-node@11.1.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-plugin-es: 3.0.1(eslint@8.56.0) - eslint-utils: 2.1.0 - ignore: 5.2.4 - minimatch: 3.1.2 - resolve: 1.22.8 - semver: 6.3.1 - - eslint-plugin-prefer-arrow@1.2.3(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@2.8.8): - dependencies: - eslint: 8.56.0 - prettier: 2.8.8 - prettier-linter-helpers: 1.0.0 - optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@8.56.0) - - eslint-plugin-promise@5.2.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-utils@2.1.0: - dependencies: - eslint-visitor-keys: 1.3.0 - - eslint-visitor-keys@1.3.0: {} - - eslint-visitor-keys@2.1.0: {} - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.0.0: {} - - eslint@8.56.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.6.2 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.5 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.21.0 - graphemer: 1.4.0 - ignore: 5.2.4 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@10.1.0: - dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.0.0 - - espree@9.6.1: - dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) - eslint-visitor-keys: 3.4.3 - - esquery@1.5.0: - dependencies: - estraverse: 5.3.0 - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - extend@3.0.2: {} - - fast-deep-equal@3.1.3: {} - - fast-diff@1.3.0: {} - - fast-glob@3.3.1: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.15.0: - dependencies: - reusify: 1.0.4 - - fault@1.0.4: - dependencies: - format: 0.2.2 - - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.0.4 - - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.0.4: - dependencies: - flatted: 3.2.2 - rimraf: 3.0.2 - - flatted@3.2.2: {} - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - - format@0.2.2: {} - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - - functions-have-names@1.2.3: {} - - gensync@1.0.0-beta.2: {} - - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - - get-tsconfig@4.7.5: - dependencies: - resolve-pkg-maps: 1.0.0 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@11.12.0: {} - - globals@13.21.0: - dependencies: - type-fest: 0.20.2 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - - graphemer@1.4.0: {} - - has-bigints@1.0.2: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.0.3 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - htmlparser2@7.2.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 3.0.1 - - ignore@5.2.4: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - - is-alphabetical@1.0.4: {} - - is-alphanumerical@1.0.4: - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-buffer@2.0.5: {} - - is-callable@1.2.7: {} - - is-core-module@2.15.0: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - - is-decimal@1.0.4: {} - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-hexadecimal@1.0.4: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-path-inside@3.0.3: {} - - is-plain-obj@2.1.0: {} - - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsdoc-type-pratt-parser@4.0.0: {} - - jsesc@2.5.2: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - - json5@2.2.3: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.merge@4.6.2: {} - - longest-streak@2.0.4: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - markdown-table@2.0.0: - dependencies: - repeat-string: 1.6.1 - - mdast-util-find-and-replace@1.1.1: - dependencies: - escape-string-regexp: 4.0.0 - unist-util-is: 4.1.0 - unist-util-visit-parents: 3.1.1 - - mdast-util-footnote@0.1.7: - dependencies: - mdast-util-to-markdown: 0.6.5 - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - mdast-util-from-markdown@0.8.5: - dependencies: - '@types/mdast': 3.0.15 - mdast-util-to-string: 2.0.0 - micromark: 2.11.4 - parse-entities: 2.0.0 - unist-util-stringify-position: 2.0.3 - transitivePeerDependencies: - - supports-color - - mdast-util-frontmatter@0.2.0: - dependencies: - micromark-extension-frontmatter: 0.2.2 - - mdast-util-gfm-autolink-literal@0.1.3: - dependencies: - ccount: 1.1.0 - mdast-util-find-and-replace: 1.1.1 - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-strikethrough@0.2.3: - dependencies: - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm-table@0.1.6: - dependencies: - markdown-table: 2.0.0 - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm-task-list-item@0.1.6: - dependencies: - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm@0.1.2: - dependencies: - mdast-util-gfm-autolink-literal: 0.1.3 - mdast-util-gfm-strikethrough: 0.2.3 - mdast-util-gfm-table: 0.1.6 - mdast-util-gfm-task-list-item: 0.1.6 - mdast-util-to-markdown: 0.6.5 - transitivePeerDependencies: - - supports-color - - mdast-util-to-markdown@0.6.5: - dependencies: - '@types/unist': 2.0.10 - longest-streak: 2.0.4 - mdast-util-to-string: 2.0.0 - parse-entities: 2.0.0 - repeat-string: 1.6.1 - zwitch: 1.0.5 - - mdast-util-to-string@2.0.0: {} - - merge2@1.4.1: {} - - micromark-extension-footnote@0.3.2: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-frontmatter@0.2.2: - dependencies: - fault: 1.0.4 - - micromark-extension-gfm-autolink-literal@0.5.7: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-strikethrough@0.6.5: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-table@0.4.3: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-tagfilter@0.3.0: {} - - micromark-extension-gfm-task-list-item@0.3.3: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm@0.3.3: - dependencies: - micromark: 2.11.4 - micromark-extension-gfm-autolink-literal: 0.5.7 - micromark-extension-gfm-strikethrough: 0.6.5 - micromark-extension-gfm-table: 0.4.3 - micromark-extension-gfm-tagfilter: 0.3.0 - micromark-extension-gfm-task-list-item: 0.3.3 - transitivePeerDependencies: - - supports-color - - micromark@2.11.4: - dependencies: - debug: 4.3.5 - parse-entities: 2.0.0 - transitivePeerDependencies: - - supports-color - - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - - minimist@1.2.8: {} - - ms@2.1.2: {} - - natural-compare@1.4.0: {} - - node-releases@2.0.18: {} - - object-inspect@1.13.2: {} - - object-keys@1.1.1: {} - - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - - object.values@1.2.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - optionator@0.9.3: - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-entities@2.0.0: - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - - parse-imports@2.1.1: - dependencies: - es-module-lexer: 1.5.4 - slashes: 3.0.12 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-type@4.0.0: {} - - picocolors@1.0.1: {} - - picomatch@2.3.1: {} - - possible-typed-array-names@1.0.0: {} - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - - prettier@2.8.8: {} - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - regexp.prototype.flags@1.5.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - - regexpp@3.2.0: {} - - remark-footnotes@3.0.0: - dependencies: - mdast-util-footnote: 0.1.7 - micromark-extension-footnote: 0.3.2 - transitivePeerDependencies: - - supports-color - - remark-frontmatter@3.0.0: - dependencies: - mdast-util-frontmatter: 0.2.0 - micromark-extension-frontmatter: 0.2.2 - - remark-gfm@1.0.0: - dependencies: - mdast-util-gfm: 0.1.2 - micromark-extension-gfm: 0.3.3 - transitivePeerDependencies: - - supports-color - - remark-parse@9.0.0: - dependencies: - mdast-util-from-markdown: 0.8.5 - transitivePeerDependencies: - - supports-color - - repeat-string@1.6.1: {} - - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.15.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - - semver@6.3.1: {} - - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 - - semver@7.6.3: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 - - slash@3.0.0: {} - - slashes@3.0.12: {} - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@4.0.0: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 - - spdx-license-ids@3.0.18: {} - - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@3.0.0: {} - - strip-json-comments@3.1.1: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - synckit@0.9.1: - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.6.3 - - text-table@0.2.0: {} - - to-fast-properties@2.0.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - traverse@0.6.9: - dependencies: - gopd: 1.0.1 - typedarray.prototype.slice: 1.0.3 - which-typed-array: 1.1.15 - - trough@1.0.5: {} - - ts-api-utils@1.0.1(typescript@5.5.4): - dependencies: - typescript: 5.5.4 - - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@2.6.3: {} - - tsx@4.16.2: - dependencies: - esbuild: 0.21.5 - get-tsconfig: 4.7.5 - optionalDependencies: - fsevents: 2.3.3 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.20.2: {} - - typed-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-byte-offset@1.0.2: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - - typedarray.prototype.slice@1.0.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - typed-array-buffer: 1.0.2 - typed-array-byte-offset: 1.0.2 - - typescript@5.5.4: {} - - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - - underscore@1.13.7: {} - - undici-types@5.26.5: {} - - unified@9.2.2: - dependencies: - '@types/unist': 2.0.10 - bail: 1.0.5 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 2.1.0 - trough: 1.0.5 - vfile: 4.2.1 - - unist-util-is@4.1.0: {} - - unist-util-stringify-position@2.0.3: - dependencies: - '@types/unist': 2.0.10 - - unist-util-visit-parents@3.1.1: - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 4.1.0 - - update-browserslist-db@1.1.0(browserslist@4.23.2): - dependencies: - browserslist: 4.23.2 - escalade: 3.1.2 - picocolors: 1.0.1 - - update-section@0.3.3: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - vfile-message@2.0.4: - dependencies: - '@types/unist': 2.0.10 - unist-util-stringify-position: 2.0.3 - - vfile@4.2.1: - dependencies: - '@types/unist': 2.0.10 - is-buffer: 2.0.5 - unist-util-stringify-position: 2.0.3 - vfile-message: 2.0.4 - - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wrappy@1.0.2: {} - - yallist@3.1.1: {} - - yallist@4.0.0: {} - - yocto-queue@0.1.0: {} - - zwitch@1.0.5: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 18ec407efca7..000000000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packages: - - 'packages/*' diff --git a/versions.json b/versions.json index da14eb148d56..82c0c4931cef 100644 --- a/versions.json +++ b/versions.json @@ -1,9 +1,13 @@ { + "go": "1.22.6", "abigen": "v1.10.25", - "foundry": "63fff3510408b552f11efb8196f48cfe6c1da664", - "geth": "v1.13.14", + "foundry": "626221f5ef44b4af950a08e09bd714650d9eb77d", + "geth": "v1.14.7", + "geth_release": "1.14.7-aa55f5ea", "eth2_testnet_genesis": "v0.10.0", "nvm": "v20.9.0", "slither": "0.10.2", - "kontrol": "0.1.316" + "kontrol": "0.1.316", + "just": "1.34.0", + "binary_signer": "1.0.4" }